• C语言基础 (6) 类型转换,数组与随机数


    复习

    1.隐式转换

    Double a

    Int b = 1

    A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换)

    2.强制类型转换 (变量)类型名

    Int a = 1

    // a只有在此语句执行时,才强制转换为double类型 其他地址还是int类型

    Printf(“%lf ”,(double)a)

    转换原则:占用内存字节数小(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。

    3.浮点型和整型打印的问题

    a)       不要直接通过%d 打印一个浮点型类型,得不到想要的结果,要想得到结果,强制类型转换

    Double a = 11.11

    Printf(“%d ”,(int)a)

    b)       不要通过%f或%lf 打印一个整型变量 得不到想要的结果 要想得到结果强制类型转换

    Int a = 10

    Printf(“%lf ”,(double)a)

    二、运算符和表达式

    1.相除得到小数问题

      a)两个整数相除,只是取整数,不会带小数

         int a = 1/2 // a=0

    要想得到小数的结果,分子分母至少有一个是小数

      Double a

      A = 1.0/2 //a = 0.5

      A = 1/(double)2

    2.前置++、后置++区别

    3、条件真假问题

     a)0就是假

     b)非0就是真,通常以1表示

    4、逻辑|| &&

    5、运算符优先级

      Int c = 0

      // &&优先级比 = 高

      

    三、程序流程结构

    C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

    03 一维数组的使用

    #include <stdio.h>

    #define SIZE 10

     

    int main(int argc, char *argv[])

    {

        //int a; //定义一个普通变量

        //1、

        //1、同一个{}内部,数组名不能和其他变量和数组名同名

        int a[10]; //err

     

        //2、定义数组时,n 最好是常量

        int n = 10;

        int b[n]; // 有些编译器会报错 如visual studio中就报错了

     

        //3、 使用数组时 下标可以是变量 可以是常量 也可以是表达式

        int c[SIZE];

     

        c[0] = 1; //通过常量操作

     

        int i = 1;

        c[i] = 2; //通过变量

     

        c[i+1] = 3; //通过表达式

     

        // 4、使用数组,最好别越界

        int d[10];

        // 下表只有0 ~ 9, d[10] 就是越界 有时候越界了 编译器不会马上出错

        d[10] = 11;

     

        return 0;

    }

     

    int main01(int argc, char *argv[])

    {

        int a = 0;

        int b = 1;

        int c = 2;

        int d = 3;

        int e = 4;

     

        //1、定义一个数组,数组内部有10个int类型的元素(变量)

        //2、定义数组和定义变量区别,名字后面加[],[]里面写元素个数

        //3、数组在内存中是连续存储的

        //4、通过下标访问数组元素,下表从0开始

        //5、有多少个[]就是多少维 这里是一维数组

        int array[10];

     

        array[0] = 0;

        array[1] = 1;

        array[2] = 2;

     

        return 0;

    }

    结论:

    1、  编译器不是我们想象中那么智能 有些错误不能立马呈现

    错误:

    1、  编译错误(语法出错)

    2、  运行时错误(运行时异常),最头疼 有些错误不能立马呈现

    04一维数组元素的使用

    04

    05 不初始化的局部数组为随机数

    {}内部的变量或数组,不初始化,它的值为随机数

    07 答疑

    gcc hello.c –o

    gcc –o hello hello.c –std=c99 (这两种写法都行

    -std=c99 制定了c语言标准

    允许for( 循环中声明变量

    例如for(int i =0

    08 数组名

     

    结果:

    09 求三个数最值

    int a = 10;

    int b = 20;

    int c = 30;

    int max;

    求最大值

    10 求数组的最值

    11 数组的翻转

    1234567

    a[0 与 a[6

    a[1 与 a[5

    a[2 与 a[4

    i<j

    i=0 j=6

    i++ j—

    while(i<j)

    a[i和a[j 交换

    i++ j—

    十二、冒泡排序

    冒泡法:

    从第一个元素开始,两两相比,把元素往上冒,第一次排序后最大的已经到了最后面

    for(I = 0 ;i<n-1;i++)

    {

      for(j=i;j<n-1;j++)

       {  if(a[j]>a[j+1]){

                     tmp = a[j

                     a[j = a[i

                     a[I = tmp

    }

       }

    }

      C语言:

    int main1()

    {

        // 冒泡法:把最大的冒出去

        int a[] = {1, 24, -3, 145, 42, 5, 18};

        int n = sizeof(a) / sizeof(a[0]);

        int tmp;

        for (int i = 0; i < n - 1; i++)

        {

            for (int j = i; j < n - 1; j++)

            {

                if (a[j] > a[j + 1])

                {

                    tmp = a[j];

                    a[j] = a[j + 1];

                    a[j + 1] = tmp;

                }

            }

        }

        for (int i = 0; i < n; i++)

        {

            printf("%d,", a[i]);

        }

    }

    // *冒泡法变种:把最小的留在下面

        int a[] = {1, 24, -3, 145, 42, 5, 18};

        int n = sizeof(a) / sizeof(a[0]);

        int tmp;

        for (int i = 0; i < n - 1; i++)

        {

            for (int j = i + 1; j < n; j++)

            {

                if (a[j] < a[i])

                {

                    tmp = a[j];

                    a[j] = a[i];

                    a[i] = tmp;

                }

            }

        }

        for (int i = 0; i < n; i++)

        {

            printf("%d,", a[i]);

        }

    }

    十四、二维数组定义使用

    #include <stdio.h>

     

    int main(int argc, char *argv[])

    {

        //1、有多少[] 就有多少维

        //2、内存中没有多维,都只有一维,多维数组是特殊的一维数组

        //3、定义了一个一维数组a[3],这个一维数组有3个元素,每个元素int[4]

        //4、a[0],a[1],a[2]就是第0、1、2个元素的数组名

        //5、二维数组,用户可以理解为m行n列,没有a[3][4]此元素(越界)

     

     

        int a[3][4];

     

        int i = 0;

        int j = 0;

        int num = 0;

        for(i=0;i<3;i++){

            for(j=0;j<4;j++){

                 a[i][j] = num;

                 num++;

            }

        }

     

        a[0][0] = 0;

        a[0][1] = 1;

     

     

        return 0;

    }

    十五 二维数组初始化

    #include <stdio.h>

     

    int main(int argc, char *argv[])

    {

        // 看方便,写不方面

        int a[3][4]{

            {0,1,2,3},

            {4,5,6,7},

            {8,9,10,11}

        };

     

        int a1[3][4] ={ 0,1,2,3,4,5,6,7,8,9,10,11 };

     

        // 如果定义时 同时初始化 第1个[]可以不写内容

     

        int a1[3][4] ={ 0,1,2,3,4,5,6,7,8,9,10,11 };

     

     

        // 如果第一个[]不写,必须初始化

        // int a3[][4]; //err

     

     

        int a3[3][4] = {0,1,2,3}; //没有初始化的元素赋值为0

     

        int a4[3][4] = {0}; //所有元素初始化为0

     

     

     

        return 0;

     

    }

     

    十六 二维数组名

    #include <stdio.h>

     

    int main(int argc, char *argv[])

    {

        int a[5][10];

     

        //1、数组名是常量,不能修改

        //a=10; //err

     

        //2、sizeof(数组名),测数组的总大小

        printf("sizeof(a)=%lu ", sizeof(a))

     

            //3、sizeof(a[0]) 测的是第0个元素的大小: int [10] = 4*10 = 40

            printf("sizeof(a) = %lu ", sizeof(a))

     

            //4、sizeof(a[0][0])测的是第0行第0列元素的大小,int = 4

            printf("sizeof(a[0][0])=%lu ", sizeof(a[0][0]);

     

            //5、求行数:总大小/每个元素的大小

            int n = sizeof(a) / sizeof(a[0])

            printf("n=%d ", n);

       

            //6、求列数

            n = sizeof(a[0])/sizeof(int)

            printf("n1=%d ",n)

     

            //7、行*列

            n = sizeof(a)/sizeof(a[0]) * sizeof (a[0])/sizeof(int)

       

    }

     

    十七、二维数组的练习

    十八、多维数组

    十九、字符数组和字符串的关系

    C语言中没有字符串,是用一维数组来模拟字符串的

    #include <stdio.h>

     

    int main(int argc, char *argv[])

    {

     

        //1、 C语言没有字符串类型,用字符数组模拟

        char a[10];

     

        //2、字符串一定是字符数组,字符数组就不一定是字符串

        //3、如果字符数组以字符''('等价于数字0')结尾,那么这

        //个字符数组就是字符串

        //

        

        char b = {'a','b','c'}; //字符数组

        char c[10] = {'a','b','c',''}; //字符串

        char c[10] = {'a','b','c',0}; //字符串

     

        return 0;

    }

     

    20、字符数组初始化

    #include <stdio.h>

     

    int main(int argc, char const *argv[])

    {

        char a1[] = { 'a', 'b', 'c' }; //字符数组

     

        // %s代表是字符串

        printf("a1=%s ", a1);

        // %s会从起始地址开始打印 直到遇到结束符

        // 所以这种情况是有可能出现乱码报错的

     

        char a2[] = { 'a', 'b', 'c', 0 }; // 字符串

        printf("a2=%s ", a2);

     

        char a3[] = { 'a', 'b', 'c', '' }; // 字符串

        printf("a3=%s ", a3);

     

        char a4[] = { 'a', '', 's', 2 };

        printf("a4=%s ", a4);

     

        return 0;

    }

    char a6[10] = {‘a’,’b’,’c’} //前三个字符赋值为a,b,c 后面自动为0 所以打印出来也是1bc

    // 1、常用的初始化,使用字符串初始化,在字符串结尾自动加数字0

    // 2、这个结束符,用户看不到(隐藏),但是是存在的

    char a7[10] =  “abc”

    char a8[] = “abc”

    printf(“sizeof(a8)=%lu”,sizeof(a8); //4 // 字符串自动隐藏一个结束符

    char a9[] = “abc”

    printf(“a9 = %s ”,a9) //打印出来是空的

    //后面最好别跟数字,有可能组成一个转义字符

    char a10[] = “12abc”

    printf(“a10 = %s ”,a10);

    查看一下12对应的ASCII

    man ascii

     

    八进制012 对应的是’ ’

    ‘12’就是’ ’

    21课堂答疑

    22.字符串的输入输出

    #include <stdio.h>

    int main (int argc,char *argv[])

    {

       char str[100];

       printf(“请输入字符串:”);

       scanf(“%s”,str);   // str本身就是地址 不用&取地址

       printf(“star = %s ”,str)

       return 0

    }

    23 随机数的产生

    // 先设定一个种子才能产生随机数

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

     

    int main(int argc, char *argv[])

    {

        // 随机数的产生

        // 先设置种子,种子设置一次即可

        // 如果srand()参数一样,随机数就一样

        // srand(100);

     

        // time(NULL)功能获取系统当前时间,由于时间会变,srand()也会改变

     

        srand((unsigned int)time(NULL));

     

        int i = 0;

        int num;

     

        for(i=0;i<10;i++)

        {

           num=rand(); // rand(产生随机数

           printf("num=%d ",num);

        }

        

        return 0;

    }

     

  • 相关阅读:
    shell 网络状态查询 ping curl telnet
    shell 命令 rz sz
    shell 命令之 jps
    Python 之 threading
    根据 MySQL 状态优化 ---- 4. 临时表
    根据 MySQL 状态优化 ---- 3. key_buffer_size
    根据 MySQL 状态优化 ---- 2. 连接数
    根据 MySQL 状态优化 ---- 1. 慢查询
    Linux 服务器的网络配置
    Linux 服务器的网络配置
  • 原文地址:https://www.cnblogs.com/eret9616/p/10206621.html
Copyright © 2020-2023  润新知