内容正文:
课 题
6.2 二维数组
教 学
目 的
1掌握二维数组的定义和引用
教 材
分 析
教学重点
二维数组的定义、引用、初始化
教学难点
数组的存储形式,数组的首地址
课时安排
2
教学方法
讲授与演示法相结合例举法、讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
第一课时
一、复习引入
一维数组他定义,是一行同类型的变量存储空间,那若是几行同类型的变量来存量数据将如何实现?
二、新授
1、二维数组的定义
类型说明符 数组名[常量表达式1][常量表达式2];
如:int number[5][4]; 数组的存储结构:以行为主序的连续空间
定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。如下:
float a[3][4],b[5][10];
不能写成 float a[3,4],b[5,10];
注意:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。
例如:可以把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组
2、二维数组在内存中的存放
二维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素……下图表示对a[3][4]数组存放的顺序
3、二维数组的引用: 二维数组元素的表示形式为:数组名[下标][下标]
例如: a[2][3]
下标可以是整型表达式,如 a[2-1][2*2-1]
不要写成 a[2,3],a[2-1,2*2-1]形式
在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。
常出现的错误有:
int a[3][4]; /* 定义a为3×4的数组 */
┆
a[3][4]=3;
练习:1、以下对二维数组a的正确说明是 参考答案:C 。
A)int a[3][]; B)float a(3,4);
C)double a[1][4]; D)float a(3)(4);
2、若有说明:int a[3][4];则对a数组元素的正确引用是 参考答案:C
A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)
第二课时
1、复习第一课时内容并拓展思考:
有了二维数组的基础,那么多维数组如何定义呢?
定义三维数组: float a[2][3][4];
注意:多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快
2、二维数组的初始化
1. 分行给二维数组赋初值:如
static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2. 可以将所有数据写在一个花括号内,按数组排列的顺序对元素赋初值;如: static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3. 如果花括号内的初值个数少于每行中的数组元素个数,则每行中后面的元素自动赋初值0;也允许代表给每行元素赋初值的花括号的数目少于数组的行数,这时,后面各行的元素也自动赋0值。
4.C语言规定,可以用初始化的方法来隐含定义二维数组第一维的大小,即可以省略数组定义中第一个方括号中的表达式,但不能省略第二个方括号中的表达式。如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价于static int [ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
在定义时也可以只对部分元素赋初值而省略第一维长度,但应分行赋初值。
如: static int a[ ][4]={{0,0,3},{0},{0,10}};
3、二维数组的输入与输出
用二重循环,以a[m][n]为例
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{……}
4、实例讲解:将一个二维数组行和列元素互换,存到另一个二维数组中。
#include <stdio.h>
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf(″array a:\n″);
for (i=0;i<=1;i++)
{ for (j=0;j<=2;j++)
{ printf(″%5d″,a[i][j]); b[j][i]=a[i][j]; }
printf(″\n″);
}
printf(″array b:\n″);
for (i=0;i<=2;i++)
{ for(j=0;j<=1;j++)
printf("%5d″,b[i][j]); printf(″\n″); }
} /*程序结束*/
5、思考练习:有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 (要求先作流程图再写程代码,并上机调试)
#include <stdio.h>
void main()
{
int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},
{-10,10,-5,2}};
max=a[0][0];
for (i=0;i<=2;i++)
for (j=0;j<=3;j++)
if (a[i][j]>max)
{ max=a[i][j];
row=i;
colum=j;
}
printf(″max=%d,row=%d,colum=%d\n″,
max,row,colum);
} /*程序结束*/
三、课堂小结
1、 二维数组的定义、引用及初始化、二维数组的存储形式
四、布置作业
上机练习:上机训练题+例题 汇编练习:(P77)17-28
备注
上机练习,另练习与讲解各一课时
学科网(北京)股份有限公司
$$