牛骨文教育服务平台(让学习变的简单)
博文笔记

C语言_二维数组

创建时间:2014-10-21 投稿人: 浏览次数:6030

二维数组的创建

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

      初始值如何写?可以写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("
");
        }

例一:将⼀个⼆维数组的行和列交换,存储到另外一个数组中去。

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

  

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

   // 方法一

    // 定义一个二维数组,
   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("
");
    }
    // 输出最大值, 行, 列
   printf("max = %d 行:%d列:%d
", 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
", 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("
");
    }

二.字符串数组

    定义字符串数组

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

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

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

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

    循环输出字符串数组

 

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

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

 printf("%c
", 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
", 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
", strings[i]);
    }








声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。