🎊 C语言二维数组的定义和使用(新手必看)

C语言二维数组的定义和使用(新手必看)

读者应该掌握了 C 语言一维数组的用法,一维数组的索引只有一个,如果索引是两个呢?

在 C语言中,将索引是两个的数组称为二维数组,比如说 Array[m][n] 表示有 m 行 n 列的二维数组。

例如,下图所示的书柜索引示意图就是一个图形化的二维数组,它包含了每个书柜所在行、列的位置信息。

图 1 书柜索引示意图

二维数组的定义

二维数组的根本意义就是“一维数组的数组”,二维数组的第 1 维就是数据的起始地址,第 2 维就是某个数据中的某个值。

例如,在图 1 中找到 4104 的位置,此时需要定义二维数组 iArray[3][3],先找第 1 维的第 4 行,再找第 2 维的第 4 列,就可以准确找到位置。

二维数组的声明与一维数组的类似,一般形式如下:

数据类型 数组名[常量表达式1][常量表达式2];

其中,常量表达式 1 被称为行索引,常量表达式 2 被称为列索引。

如果有二维数组 array[n][m],则二维数组索引的取值范围如下:

行索引的取值范围为 0~n-1;

列索引的取值范围为 0~m-1;

二维数组索引最大的元素是 array[n-1][m-1]。

例如,定义一个 3 行 5 列的整型数组,代码如下:

int array[3][5];

这一行代码说明定义了一个 3 行 5 列的数组,数组名为 array,其索引为整型。该数组的索引共有 3×5 个,即:

array[0][0]、array[0][1]、array[0][2]、array[0][3]、array[0][4]

array[1][0]、array[1][1]、array[1][2]、array[1][3]、array[1][4]

array[2][0]、array[2][1]、array[2][2]、array[2][3]、 array[2][4]

在 C语言中,二维数组是按行排列的,即按行顺序存放,先存放 array[0] 行,再存放 array[1]行。每行中的元素也是依次存放的。

二维数组的初始化

二维数组的初始化同样也是为二维数组各元素赋予初值,例如:

int array[2][2]={{5,2},{5,4}};

上述代码表示的二维数组形式如下:

5 2

5 4

对于各个元素值来说,array[0][0] 的值是 5、array[0][1] 的值是 2、array[1][0] 的值是 5、array[1][1] 的值是 4。

在 C语言中,对二维数组的初始化可以用以下几种方法实现。

1) 可以将所有数据写在一个花括号内,按照数组元素排列顺序对元素赋值,例如:

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

上述代码表示的二维数组形式如下:

1 2

3 4

对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[1][0] 的值是 3、array[1][1] 的值是 4。

2) 在为所有元素赋初值时,可以省略行索引(不能省略列索引),例如:

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

系统会根据数据的个数进行分配,这里共有 6 个数据,而数组每行分为 3 列,当然可以确定数组为 2 行。

上述代码表示的二维数组形式如下:

1 2 3

4 5 6

对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[0][2] 的值是 3、array[1][0] 的值是 4、array[1][1] 的值是 5、array[1][2] 的值是 6。

3) 也可以通过分行给数组元素赋值,例如:

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

上述代码表示的二维数组形式如下:

1 2 3

4 5 6

对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[0][2] 的值是 3、array[1][0] 的值是 4、array[1][1] 的值是 5、array[1][2] 的值是 6。

4) 在分行赋值时,只对部分元素赋值,未被赋值的元素系统默认设置值为 0,例如:

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

上述代码表示的二维数组形式如下:

1 2 0

4 5 0

对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[0][2] 的值是 0、array[1][0] 的值是 4、array[1][1] 的值是 5、array[1][2] 的值是 0。

5) 直接对数组元素赋值,例如:

int array[2][2];

array[0][0] = 1;

array[0][1] = 2;

array[1][0] = 1;

array[1][1] = 2;

上述代码表示的二维数组形式如下:

1 2

1 2

对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[1][0] 的值是 1、array[1][1] 的值是 2;

二维数组的使用

二维数组元素使用的一般形式如下:

数组名[索引][索引];

二维数组的下标可以是整型常量或整型表达式。

例如:

int array[2][2]={{5,2},{5,4}}; //定义二维数组

array[1][1]; //引用二维数组元素

上述代码的第 2 行表示的是对 array 数组中第 2 行的第 2 个元素进行引用。

这段代码表示的二维数组形式如下:

5 2

5 4

注意,不管是行下标还是列下标,都是从 0 开始的。这里要注意索引越界的问题,例如:

int array[3][5];

… /*对数组元素赋值*/

array[3][5]=19; /*错误的引用!*/

这段代码的表示方法是错误的。标识符 array 为 3 行 5 列的数组,它的行索引的最大值为 2、列索引的最大值为 4,所以 array[3][5] 超出了数组的范围,索引越界。

【实例】用二维数组求下表中各科的平均成绩。

学生

科目

宋小美

张大宝

高心心

彭果

邓丽

数学

93

87

90

76

70

语文

90

76

60

80

81

英语

70

88

72

77

96

具体代码如下:

#include

int main()

{

int i, j, s = 0, average, course[3], array[3][5]; //定义变量和二维数组

printf("请输入成绩:\n");

for (i = 0; i < 3; i++) //遍历二维数组行

{

for (j = 0; j < 5; j++) //遍历二维数组列

{

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

scanf("%d", &array[i][j]); //输出成绩

s = s + array[i][j]; //计算成绩

}

course[i] = s / 5; //求每科的平均成绩

s = 0; //重新赋值

}

printf("数学的平均成绩(取整数)是:%d\n语文的平均成绩(取整数)是:%d\n英语的平均成绩(取整数)是:%d\n", course[0], course[1], course[2]);

return 0;

}

运行结果为:

请输入成绩:

array[0][0]=93

array[0][1]=95

array[0][2]=90

array[0][3]=91

array[0][4]=98

array[1][0]=80

array[1][1]=81

array[1][2]=93

array[1][3]=84

array[1][4]=85

array[2][0]=87

array[2][1]=80

array[2][2]=90

array[2][3]=78

array[2][4]=79

数学的平均成绩(取整数)是:93

语文的平均成绩(取整数)是:84

英语的平均成绩(取整数)是:82

🎁 相关推荐

那些年,我们一起追过的网游(二)——赤壁篇
梦幻西游7月15日维护解读:5000亿经验奖励超级兽诀,一天1亿也要刷13年
Windows 10快速隐藏WiFi连接,一招轻松解决隐私顾虑!