数组用于存储多个相同数据类型的数据的有序队列

    

    数组定义的格式

    数据类型数组名[元素个数] = {元素1, 元素2, 元素3,...}

    /*

    整型数组

    int a[5] = {1, 2, 3, 4, 5};

    

    浮点型数组

    float b[3] = {1.5, 3.5, 4.7};

    

    定义数组常见的问题

    1.数组越界

    int c[3] = {1, 2, 3, 4};

    2.定义数组时数组的元素的个数省略元素的个数由赋值的个数决定

    int d[] = {1, 2, 3, 4};

    int e[] = {1};

    int f[] = {};//空数组无意义

    3.定义数组时没有赋值默认为0

    int g[3] = {1,2};

    int h[3] = {1};

    int i[3] = {0};

 

    //sizeof: 用于计算数据类型表达式返回值所占的字节数

    //sizeof(表达式类型);

    

    计算数据类型所占的字节数

    sizeof返回的结果类型是 unsigned long

    printf("int: %lu\n",sizeof(int));

    printf("short: %lu\n",sizeof(short));

    printf("long: %lu\n",sizeof(long));

    printf("float: %lu\n",sizeof(float));

    printf("double: %lu\n",sizeof(double));

    printf("char: %lu\n",sizeof(char));

    

    计算变量所占的字节数

    int j = 10;

    printf("j: %lu\n",sizeof(j));

    

    //计算数组所占的字节数

    //数组所占字节数 = 元素所占字节数 * 元素个数

    int k[5] = {1, 2, 3};

    printf("k: %lu",sizeof(k));

    */

    /*

    数组的使用

    数组是一个整体不能直接参与运算

    int a1[3] = {1, 2, 3};

    int a2[3] = {3, 2, 1};

    //a2 = a1;//error

    

    访问数组元素

    因为数组是有序的可以通过元素在数组中的位置(下标), 访问数组元素

    小标从0开始

    

    格式数组名[下标]

    int array[5] = {10, 11, 12, 13 , 14};

    printf("%d\n", array[1]);

  下标范围: [0, 元素个数 - 1]

   //printf("%d\n", array[5]);//越界

    

    打印数组的每一个元素

   遍历数组依次访问数组的每一个元素

    for (int i = 0; i <= 4; i++) {

        printf("array[%d] = %d\n", i, array[i]);

 

    }

   修改数组的某个元素

    array[2] = 20;

    

    定义数组访问数组的元素的区别

    1.定义数组必须有数据类型数组名[元素个数]; 访问数组元素没有数据类型数组名[下标]

    2.定义数组时元素个数可以省略;访问数组元素时下标不能省略

    */

    

    /*

     定义一个具有20个元素的整型数组,每个元素的取值范围是

    30-70之间,求数组元素的和。

    int i = 0, sum = 0, a[20] = {0};

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

        a[i] = arc4random() % 41 + 30;//随机数(41=(70-30)+1)

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

        sum += a[i];

    }

    printf("\n");

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

    */

    

    /*

    复制一个数组,即两个数组容量一样,把其中一个数组中的

    元素复制到另外一个数组中。

    int i = 0, a[20] = {0}, b[20] = {0};

    printf("\n数组a:\n");

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

        a[i] = arc4random() % 41 + 30;//随机数(41=(70-30)+1)

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

    }

    printf("\n数组b:\n");

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

        b[i] = a[i];

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

    }

   */

    

    /*

     //生成2个数组,每个数组都有10个元素,元素取值范围20-40 之间,数组对应元素相加,放到另外一个数组中。

     int i = 0, a[10], b[10], c[10];

     printf("数组a:");

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

         a[i] = arc4random() % 21 + 20;

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

     }

    printf("\n数组b:");

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

        b[i] = arc4random() % 21 + 20;

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

    }

    printf("\n数组c:");

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

        c[i] = a[i] + b[i];

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

     }

     */

 

    数组排序对数组中的数据按照从小到大(从大到小)的方法排列

    比较常用的排序方法冒泡排序选择排序希尔排序等等

    

    冒泡排序相邻两个数比较如果不符合条件就交换两个元素每一趟比较结果就能确定一个数的位置直到数组的元素都是有序就结束

    

    冒泡排序比较的趟数 = 数组元素个数 - 1

   /*

    int a[5] = {10, 2, 8, 9, 4};

    

    冒泡排序的代码实现

    //外层循环控制比较的趟数

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

        //内层循环控制比较的次数

        for (int j = 0; j < 5 - 1 - i; j++) {

            //比较相邻两个元素比较条件决定最终结果

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

                int temp = a[j];

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

                a[j + 1] = temp;

            }

        }

    }

    

     for (int i = 0; i < 5; i++) {

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

     }

 

    

  交换两个变量的值

    int a1 = 10;

    int a2 = 20;

    

   借助使用第三个变量,变量的数据类型由前两个变量决定

    int temp;

    temp = a1;

    temp存放谁的值就先修改谁

    a1 = a2;

    a2 = temp;

    */

    

    /*

   随机产生10[20, 40],并对10个数从小到大排序

    1.创建10个元素的数组

    2.随机为每个元素赋值

    3.遍历数组并打印数组

    4.对数组使用冒泡排序

    5.输出最终结果

    

    int array[10] = {0};

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

        array[i] = arc4random() % 21 + 20;

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

    }

 

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

        for (int j = 0; j < 10 - 1 - i; j++) {

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

                int temp = array[j];

                array[j] = array[j + 1];

                array[j + 1] = temp;

            }

        }

    }

    printf("\n排序结果:\n");

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

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

    }

    */

    

    /*

    字符数组

    char string[6] = {'i', 'P', 'h', 'o', 'n','e'};

    字符数组又叫字符串

    char string1[6] = "iphone";

   这两种写法是完全等价的

    

    整型数组没有赋值默认为0

    int a[5] ={1, 2, 3};

   字符数组没有赋值默认为'\0'

    char s[5] = {'i'};

    

    字符数组的使用

    printf("%c\n", string[3]);//访问数组元素

    string1[1] = 'B';//数组元素的修改

    

   打印字符数组的每一个元素

    for (int i = 0; i < 6; i++) {

        printf("%c", string[i]);

    }

    printf("\n");

   %s打印字符数组遇到'\0'就结束

    printf("%s\n", string);

    

    string[4] = '\0';

    printf("%s", string);

    */

    

 

    定义一个安全的字符串(字符数组)的做法保证最后一个元素是'\0'

    char str1[] =  {'1', 'i', 'P', 'h', 'o', 'n','e', '\0'};

    char str2[] = "2iPhone";//""最后有一个'\0',8个元素

    char str3[8] = {'3', 'i', 'P', 'h', 'o', 'n','e', '\0'};

    char str4[8] = "4iPhone";//'\0'申请不到空间

    

    元素个数

    //str1: 7, 不是安全字符串

    //str2: 8, 是安全字符串

    //str3: 7, 不是安全字符串

    //str4: 7, 不是安全字符串

    printf("%s\n", str1);

    printf("%s\n", str2);

    printf("%s\n", str3);

    printf("%s\n", str4);

    */

     

    字符数组(字符串)的常用函数

    

    /*

    strlen(字符串)

    计算字符串长度

    遇到一个'\0'就结束, '\0'不计入长度

    char string[10] = "I love U";

    unsigned long length = strlen(string);

    printf("%lu ", length);

    */

    

 

  strcpy(字符串1, 字符串2)

  字符串拷贝

  把字符串2中的每一个字符拷贝到字符串1直到字符串2遇到'\0'结束

  字符串1要足够的大防止越界

    char str1[10] = "I miss";

    char str2[10] = "you";

    strcpy(str1, str2);

    printf("%s\n", str1);

    printf("%s\n", str2);

   */

strcat(字符串1, 字符串2)

字符串的拼接

从字符串1的第一个'\0'开始把字符串2的每一个元素拼接到字符串1直到字符串2遇到'\0'结束

    char str1[10] = "I love ";

    char str2[10] = "you";

    strcat(str1, str2);

    printf("%s\n", str1);

    printf("%s\n", str2);

   */

    

strcmp(字符串1, 字符串2)

字符串比较

字符串1中每一个元素对应位置上的字符串2的元素ACSII值相减如果为0, 就继续比较如果不为0, 就停止比较返回差值当对应的元素都为'\0'比较结束返回结果0

    char str1[10] = "ABC";

    char str2[10] = "AAF";

    int result = strcmp(str1, str2);

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