C语言_二维数组

来源:互联网 发布:淘宝直通车助手软件 编辑:程序博客网 时间:2024/05/01 02:37

二维数组

二维数组的创建

      类型修饰符数组名[包含几个小数组][每个小数组有多少个元素] = {初始值};

      初始值如何写?可以写n个一维数组的初始值

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


      一维数组可以省略元素个数,二维数组只能省略第一维

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

      第二种初始值写法

       int array[3][4] = {1,2, 3, 4, 5, 6,7, 8, 9, 10, 11,12};       printf("%d",array[1][2]);

 定义一个二维数组循环赋值 

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 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];   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");    }

  

例二:有⼀个34列的⼆维数组,要求编程找出最大元素,并输出所在的行和列。

   //方法一

    // 定义一个二维数组,   int array[3][4] = {0};    //定义三个整型变量, 分别存储最大值,行, 列   int max = 0 ,row =0, col = 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]);            // 判断当前元素大于max           if (array[i][j] > max) {                // 如果当前元素大于max, 存储当前元素的值, 和所在的行和列                max = array[i][j];                row = i;                col = j;            }        }        //在这相当于是小数组遍历完毕, 添加换行符       printf("\n");    }    // 输出最大值, 行, 列   printf("max = %d 行:%d列:%d\n", max, row, col);


   //方法二

    //定义两个整型变量, 记录最大值的位置   int maxRow = 0, maxCol =0;   for (int i =0; i < 3; i++) {       for (int j =0; j < 4; j++) {           if (array[i][j] > array[maxRow][maxCol]) {                maxRow = i;                maxCol = j;            }        }    }   printf("max = %d row = %d col = %d\n", array[maxRow][maxCol], maxRow, maxCol);


   测试元素补齐,不足的用 0补齐

   int array[][3] ={{1,2},{8, 9}};   for (int i =0; i < 2; i++) {       for (int j =0; j < 3; j++) {           printf("%d ", array[i][j]);        }       printf("\n");    }


二.字符串数组

    定义字符串数组

    char strings[几个字符串][每个字符串的空间大小] = {初始值列表};    

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


    strings[0] 就是第一个数组的首地址

    可以理解为恒等于&strings[0][0]

    循环输出字符串数组

 

  printf("%s\n", &strings[0][0]);   for (int i =0; i < 4; i++) {       printf("%s\n", strings[i]);    }

   如果输出单个字符,需要用%c  

 printf("%c\n", strings[2][2]);

  

  例一:创建⼀个字符串数组(内容是你周围⼀圈⼈的姓名),输出最⻓字符串的⻓度。

   

 char strings[4][50] = {"iOS", "Cocos2D-X","Android", "Unity3D"};    //定义一个变量来存储最长的长度   int maxlength = 0;    // 遍历字符串数组   for (int i =0; i < 4; i++) {       // 进行判断       if (strlen(strings[maxlength]) <strlen(strings[i])) {            maxlength = i;        }    }    // 输出   printf("最长字符%s长度是%d\n", strings[maxlength], maxlength);

    

  例二:创建⼀个字符串数组(内容是你周围一圈⼈的姓名),对字符串 (英⽂)从小到大排序。     

    

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]);    }








0 0