内容正文:
5.2 二维数组的定义和使用
一、教学目标
1.掌握二维数组的定义和引用
2.掌握二维数组的初始化方法
3.理解与二维数组有关的应用编程方法。
二、重点难点
1.重点:二维数组的定义和引用、初始化方法。
2.难点:与二维数组有关的应用编程方法。
三、教学时间
本任务教学,课内计划1课时。
4、 教学过程
教学过程
教学环节
教师活动
学生活动
设计意图
导入新课
在C语言中,数组的元素还可以是数组,这样就构成二维数组,称是“数组的数组”。照此办理,还可以构成三维,四维数组(称为多维数组)二维数组是多维数组中最简单,最常用的数组,它代表多维数组的基本特征。
思考、总结
充分调动学生的积极性,引入话题,为下一步学习做铺垫
讲授新课
当数组中的每个元素带有两个下标时,称这样的数组为二维数组,其中存放的是有规律地按行、列排列的同一类型数据。所以二维数组中的两个下标,一个是行下标,一个是列下标。
一、二维数组的定义
1.二维数组的定义方式:
格式: 类型说明符 数组名[常量表达式1][常量表达式2];
2.例如:
int a[10][5];float scores[5][3];
可以看出,二维数组和一维数组基本类似,只是多了一个下标。其中的“常量表达式”的规则和一维数组相同。常量表达式也可以预先定义一个名字。
3.例如:
#define M 3
#define N 5
int c[M][N];
定义了二维数组c,它是一个具有M行N列的二维数组,共有MxN个元素。相当于定义“int c[31][5];" ,这样做的好处是要改变行数或列数只要改变M或N所代表的值即可。
二维数组可以形象地看做是行与列组成的表格,如图5-4所示。其中每个方格代表一个元素,因此只需指定行标和列标即可引用二维数组元素,二维数组元素的引用方式为:
数组名[行标][列标]
注意:数组下标从0开始,因此行标范围是0~M-1 ,列标范围是0~N-1。
4. 二维数组的引用
原则:逐一引用
方法:数组名[下标1][下标2]
下标1从0到长度-1
下标2从0到长度-1
标识符[N1][N2]
Int a [4] [2]
A[0] [0]……a[3][1]共8个数据
(对本例,决不可能有元素a[4][2])
5.正因为二维数组有两个下标,所以在二维数组的应用中常结合双重循环使用,例如:
for(i=0;i< M;i++)
for(j=0;j<N;j++)
scanf( "%d", &c[i][j]);
C语言采用行优先的方式来存储二维数组,即先在内存中顺序存储第一行( 行标为0)的所有元素,再存放第二行的所有元素,以此类推。
从图5-4和二维数组的存储方式可以看出,二维数组实际上相当于多个一维数组的组合。例如:数组c可以看作由c[0]~c[2]这3个一维数组(每个一维数组长度是5)的组合,即图5-4中每一行就是一个一维数组。c[0]、c[1]、c[2]可以看做是这些一维数组的数组名。理解这些对数组的初始化及数组指针的使用将有更深的体会。
尽管二维数组是按行存储,但在实际应用中也可采用按列优先访问方式。
如下面这段程序:
for(i=0;i<N;i++)
for(j=0;j< M;j++)
scanf( "%d", &c[j][i]);
这段程序先输入第1列(列标为0)的所有元素,然后输入第2列,以此类推。
二、二维数组的初始化
与一维数组类似,二维数组的初始化也有多种方式。
①分行全部赋值。例如:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9, 10,11,12}};
采用这种方式比较直观,很容易看出各个元素的值。
②分行部分赋值。例如:
int a[3][4]={{1,2},{5},{9,10,11}};
它表示只为部分元素赋值,未赋值的元素为0。这种方式常用在数组中非0元素较少的情况。也可只为某几行赋值,例如:
int a[3][4]={{1,2},{9,10,11}};
它表示只为第1、2行赋值,第3行不赋值。若不给第2行赋值,则应写成如下形式:
int a[3][4]={{1,2},{},{9, 10,11}};
③按一维数组的形式赋值。例如:
int a[3][4]={1,2,3,4,5, 6,7, 8, 9,10, 11,12 };
也可只为部分元素赋值,例如: .
int a[3][4]={ 1,2,3,4,5,6,7,8};
采用一维数组的形式赋值虽然书写更方