首页 > 编程笔记 > C语言笔记 阅读:48

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],则二维数组索引的取值范围如下:
例如,定义一个 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 <stdio.h>
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

相关文章