C语言基础知识(二)——二维数组

二维数组本质

二维数组本质就是一维数组,只不过**形式是二维**,类似矩阵,使用二维数组表示会更加形象。

二维数组实例

    float rain[5][12];    //内含5个数组元素的数组,每个数组元素内含12个float类型的元素,形如5行12列的表格
形式如表1-1所示:
第一列 第二列 第三列 第四列 第五列 第六列 第七列 第八列 第九列 第十列 第十一列 第十二列
第一行 rain[0][0] rain[0][1] rain[0][2] rain[0][3] rain[0][4] rain[0][5] rain[0][6] rain[0][7] rain[0][8] rain[0][9] rain[0][10] rain[0][11]
第二行 rain[1][0] rain[1][1] rain[1][2] rain[1][3] rain[1][4] rain[1][5] rain[1][6] rain[1][7] rain[1][8] rain[1][9] rain[1][10] rain[1][11]
第三行 rain[2][0] rain[2][1] rain[2][2] rain[2][3] rain[2][4] rain[2][5] rain[2][6] rain[2][7] rain[2][8] rain[2][9] rain[2][10] rain[2][11]
第四行 rain[3][0] rain[3][1] rain[3][2] rain[3][3] rain[3][4] rain[3][5] rain[3][6] rain[3][7] rain[3][8] rain[3][9] rain[3][10] rain[3][11]
第五行 rain[4][0] rain[4][1] rain[4][2] rain[4][3] rain[4][4] rain[4][5] rain[4][6] rain[4][7] rain[4][8] rain[4][9] rain[4][10] rain[4][11]
注:表1-1中每个单元格代表一个元素

示例代码如下:
/***********************************
* @file    rain.c
* @author  bijiaqin
* @date    2019年12月1日
* @note    二维数组示例,计算每年降水量、平均降水量和五年中每月的平均降水量
* *********************************
*/
 
#include "stdio.h"
#include "stdint.h"

#define MONTHS       12
#define YEARS        5

int main(void)
{
     const float rain[YEARS][MONTHS] = {
            {4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6},
            {8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3},
            {9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4},
            {7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2},
            {7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2}
     };

     int year, month;
     float subtot, total;
     for(year = 0, total = 0; year < YEARS; year ++)
     {
         for(month = 0, subtot = 0; month < MONTHS; month ++)
         {
            subtot += rain[year][month];    /**< 每一年各月的降水量总和 */
         }
         printf("%5d %12.1f\n", 2010 + year, subtot);
         total += subtot;                   /*< 5年总降水量 */
     }
     printf("\n");
     printf("The yearly average is %.1f inches. \n\n", total / subtot);
     printf("Monthly avergaes: \n\n");
     printf(" Jan  Feb  Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n");
     for(month = 0; month < MONTHS; month ++)
     {
         for(year = 0; year < YEARS; year ++)
         {
             subtot += rain[year][month];       /**< 每年总降水量 */
         }
         printf("%4.1f", subtot / YEARS);
     }
     printf("\n");
    
    return 0;
}

处理二维数组常用方法

嵌套循环,如示例代码连续两个两层for循环用来计算总降水量和每个月的总降水量。

关于初始化

二维数组初始化通常习惯用**花括号套花括号**,中间用','隔开,如上面代码所示,当然也可以省略里面的花括号,只要保证元素个数正确、按行初始化即可,如:
const float rain[YEARS][MONTHS] = {
       4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6,
       8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3,
       9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4,
       7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2,
       7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2,
};
有嵌套花括号时,可按照一维数组的初始化规范,某行数组初始化元素不足时其它位为0,不影响当前行其它数组元素;某行数组初始化元素越界则会出错,但同样不会影响其它行数组的初始化。

二维数组延申——多维数组

如三维数组
int triArrays[2][3][4] = {
    {
            {2, [1] = 8, 4},        /**< 第四个元素位初始化,则默认为0,第二个元素使用下标进行初始化
            {1, 2, 3, 4},      
            {1, 2, 3, 4}
        },
        {
            {2, 3, 4, 5},
            {2, 3, 4, 5},
            {2, 3, 4, 5}
        }
};
多维数组处理方法:
二维数组采用两层嵌套循环,三层采用三层循环,以此类推。

猜你喜欢

转载自www.cnblogs.com/jiaqinbi/p/11967784.html
今日推荐