Bootstrap

C语言的二维数组

第五天我们学了C语言中的二维数组和字符串数组。

1.二维数组的定义 : 类型修饰符数组名[包含几个小数组][每个小数组有多少个元素] = {初始值};

// 注意:一维数组可以省略元素个数,二维数组只能省略第一维--小数组的个数

2. 练习1. 将一个二维数组的行和列交换 , 存储到另外一个数组中去。

   int array[3][4] = {0};

    //第一重循环,遍历小数组

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

        // 第二重循环, 遍历小数组的元素

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

            // 给每个元素赋值,随机数范围0 ~ 49

            array[i][j] = arc4random() %50;

           // 输出每个元素

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

        }

        //在这相当于是小数组遍历完毕, 添加换行符

       printf("\n");

    }

   int dest[4][3] = {0};

    printf("行列交换后:\n");

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

       for (int j =0; j < 3; j++) {

            // 赋值过程需要注意,行列交换去赋值

            dest[i][j] = array[j][i];

           printf("%2d ", dest[i][j]);

        }

       // 美观

       printf("\n");

    }

练习2.有一个34列的二维数组,要求编程找出最大元素,并输出所在的行和列。

// 方法一:   

   int array[3][4] = {0};

    //定义变量保存最大值

   int max = 0;

    //定义两个变量保存位置

   int row = 0, col =0;

    //第一重循环,遍历小数组

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

        //第二重循环,遍历小数组的元素

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

            array[i][j] = arc4random() %50;

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

           if (max < array[i][j]) {

               // 赋值最大值

                max = array[i][j];

               // 赋值最大值的行和列

                row = i;

                col = j;

            }

        }

       printf("\n");

    }

   printf("最大值:%d\n", max);

   printf(":%d,:%d\n", row, col);

// 方法二:

    int array[3][4] = {0};

    //定义两个变量保存位置

   int maxRow = 0, maxCol =0;

    //第一重循环,遍历小数组

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

        //第二重循环,遍历小数组的元素

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

            array[i][j] =arc4random() % 50;

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

           if (array[i][j] > array[maxRow][maxCol]) {

               // 赋值最大值的行和列

                maxRow = i;

                maxCol = j;

            }

        }

       printf("\n");

    }

   printf("max = %d\n", array[maxRow][maxCol]);

    printf("maxRow = %d, maxCol = %d\n", maxRow, maxCol);

   printf("\n");

3.二维数组定义时,元素个数不足时,会自动补齐。

4. 字符型数组 : 字符型二维数组
5.练习: 创建一个字符串数组 ( 内容是你周围一圈人的姓名 ), 对字符串 ( 英⽂ ) 从小到大排序。

    char strings[4][50] = {"iOS", "Cocos2D-X","Android", "Unity3D"};

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

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

            //条件判断 strcmp的返回值大于0的时候是降序排列的,需要交换位置

           if (strcmp(strings[j], strings[j + 1]) > 0) {

               // 交换字符串

                // 字符串不能直接赋值,需要用字符串拷贝函数strcpy

               char temp[50] = {0};

                strcpy(temp, strings[j]);

                strcpy(strings[j], strings[j +1]);

                strcpy(strings[j +1], temp);

            }

        }

    }

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

        printf("%s\n", strings[i]);

    }

// 注意: 用到了字符型数组的冒泡排序
6.每个字符串长度不可以超过第二维长度 - 1
  每个字符串用数组名加一维下标表示
7.多维数组的定义:
for(int i = 0; i < 层数; i++) {
  for(int j = 0; j < 行数; j++) {
     for(int k = 0; k < 列数; k++) {
        a[i][j][k] = xxx;
     }
  }
}
// 注意:多维数组,多一个[常量表达式]就多一维度, 几维就对应几层循环

;