内容正文:
教案用纸
第 4 周 总第 12 次 学时:2
教学班级: 课程:C语言程序设计 授课教师:
课题: 4.1 数组概念的引入 4.2 一维数组 4.3 二维数组
教学方法:讲授、启发
教具:常规教具
教学目标:使同学们掌握一维、二维数组的定义、初始化、引用及输入输出
教学重点:数组的定义及输入输出
教学难点:数组在实际案例中的应用
主要教学内容:
4.1 数组概念的引入
4.2 一维数组
4.2.1 一维数组的定义
4.2.2 一维数据的元素引用
4.2.3 一维数组的赋值方法
4.3 二维数组
4.3.1 二维数组的定义
4.3.2 二维数据的元素引用
4.3.3 二维数组的存储
4.3.4 二维数据的赋值方法小结:
课后回顾:
教案用纸
四个一:
提问:break以及continue语句的区别
导入:在前面各章中,我们已经学习了C语言所提供的简单数据类型,使用这些数据类型可以描述并处理一些简单的问题。然而实际需要处理的数据常常不止一个,如果仍然用基本数据类型来进行处理,就很麻烦且容易出错。例如,处理学生学习成绩,这时就可以使用数组解决这个问题。
正文:
4.1 数组概念的引入
在日常生活中,常常会遇到求一组数据的平均值、最大值、最小值等问题。例如,若求20个数的平均值,可以使用下面程序段。
int x,sum,i;
for( i=0 , sum=0 ; i<20 ; i++ )
{
scanf("%d" , &x);
sum+=x;
}
求得的sum值为所有数的和,而sum/20的值就是平均值了,但如果想求这些数的最大值、最小值或是比平均值大的数,就无能为力了。因为键盘输入的20个数在求和之后并没有被保存起来。
要解决此问题,必须将这20个数存储起来,而如果设置20个不同名字的变量对于简单变量是困难,也不容易记忆。所以我们可以使用数组来实现存储这些数据的功能。
C语言提供了一种最简单的构造类型——数组。在这种数据类型中存储的是相同类型的数据。所谓数组,就是一组类型相同的变量,它使用一个数组名标识,每个数组元素都是通过数组名和元素的相对位置(下标)来引用的,数据元素在内存中占有连续的内存单元。数组可以是一维的,也可以是多维的。
数组有两个特点。
(1)其长度是确定的,在定义的同时确定了其大小,在程序中不允许随机变动。
(2)其元素必须是相同类型,不允许出现混合类型。
4.2 一维数组
4.2.1 一维数组的定义
一维数组用于存储一行或一列的数据。其定义格式如下:
(
类型符
数组名
[
常量表达式
]
;
)
其中类型符为数组元素的数据类型,可以是int型、float型、char型以及后面章节将要讲到的指针、结构体和共用体等各种复合数据类型。
数组名的定义符合C语言的标识符定义即可(即与普通变量名定义要求相同)。
中括号“[]”为数组定义的分界符号,中括号里面为一维数组的元素个数。常量表达式必须正整型,表示定义数组中的元素个数。
4.2.2 一维数据的元素引用
数组必须先定义后使用。C语言规定只能逐个引用数组元素,而不能一次引用整个数组。
一维数组元素的引用格式为:
(
数组名
[
下标表达式
]
)
例如:
int x [5];
x[0]=10;
其中的x[0]就是对数组x中第一个元素的引用,上面语句功能是数组元素x[0]赋值为10。
在引用数组元素时,应注意以下几个问题。
(1)“下标表达式”可以是整型常量、整型变量或整型表达式,其值均为非负整型数据。数组下标值从0开始,数组的元素最大下标值为元素个数-1。例如:
int x[5];
x[5]=10; /*错误,因为该数组最大元素为x[4]。但C语言不自动检查下标是否超范围,故必须在设计阶段从程序逻辑上保证下标不超范围。*/
(2)一个数组元素,相当于一个同类型的简单变量,可以对它进行赋值和参与各种运算。例如:
x[0]=x[1]+2; /*将数组第二个元素x[1]加上2,赋值给数组的第一个元素x[0]*/
(3)数值数组作为一个整体,不能参加数据运算,只能对单个的元素进行处理。例如:
int x[5],y[5];
x=y; /*错误,数组不能整体赋值给另一个数组*/
4.2.3 一维数组的赋值方法
1.在编译时赋初值—— 一维数组的初始化
一旦定义了数组,编译程序就为数组在内存中开辟了一段连续的存储单元,其首地址由数组名标识,数组的各个元素按顺序依次存放。最初,这些存储单元中没有确定的值,需对其进行初始化。
将数组元素的初值按顺序放在一对花括号内,初值类型必须与数组元素的类型一致,各初值之间用逗号分隔。初始化列表中的值依次从数组下标为0的元素开始赋值,不能跳过前面的元素而给后面的元素赋初值。
对一维数组元素的初始化可以用以下方法实现。
int x[10]={0,1,2,3,4,5,6,7,8,9}; /*所有元素全部赋初值*/
int x [10]={0,1,2,3,4}; /*部分元素赋初值*/
int x [10]={0,0,0,0,0,0,0,0,0,0}; /*数组中全部元素赋初值为0*/
int x [10]={0}; /*数组中全部元素赋初值为0也可以写成这种形式*/
int x [10]={0*10}; /*错误写法*/
int x [ ]={1,2,3,4,5}; /*全部数组元素赋初值时,可以不指定数组长度*/
C语言除了在定义数组变量时用初值列表为数组整体赋值之外,不能在其他情况下对数组变量做整体赋值。
2.在运行时赋初值
如果未在定义数组时进行初始化,也可以在程序中使用循环语句为数组元素赋初值。
(1)指定各元素逐一输入、输出。例如:
int x [10];
scanf("%d%d%d%d%d",& x[0],& x[1],& x[2],&x[3],&x[4]);
printf("%d%d%d%d%d
",x[0],x[1],x[2],x[3],x[4]);
(2)利用循环控制下标变化实现输入、输出。例如:
int x[10],i;
for(i=0;i<10;i++)
scanf("%d",&x[i]);
for(i=0;i<10;i++)
printf("%d",x[i]);
具体使用哪种方式为数组元素进行赋值,可以由程序员根据程序需要进行设计。
4.3 二维数组
4.3.1 二维数组的定义
当数组元素的下标有两个或两个以上时,称该数组为多维数组。下标为两个时,称为二维数组;下标为三个时,称为三维数组。多维数组中使用最多是二维数组,本节主要介绍二维数组。
二维数组主要用于存放矩阵形式的数据,如二维表格等。其定义格式如下:
(
类型符 数组名[常量表达式1] [常量表达式2];
)
其中常量表达式1是数组元素的行数,常量表达式2是数组元素的列数。与一维数组相比,二维数组的定义,除了增加了一个[常量表达式2]外,其他都一样。
例如:
int a[2][3]; /*定义了一个具有2行3列的二维整型数组a,共有6个元素*/
4.3.2 二维数据的元素引用
和一维数组元素的引用一样,二维数组元素也是通过数组名和下标来引用的,只是这里需要两个下标。
二维数组元素引用的格式为:
(
数组名
[
行下标表达式
] [
列下标表达式
]
)
例如:
int a[2][3]; /*定义了一个2行3列的二维数组*/
a[1][2]=5; /*将第2行第3个元素a[1][2]赋值为5*/
该数组a共有2×3=6个元素,分别为:
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
在引用二维数组元素时需注意以下几个问题。
(1)下标同一维数组一样,可以是整型常量或是整型表达式。行下标表达式的取值范围为0~行数-1,列下标表达式的取值范围为0~列数-1。例如一个3行4列的二维数组其行下标最大值为2,列下标最大值为3。
(2)对基本数据类型的变量所能进行的各种操作,也都适合于同类型的二维数组元素。
(3)要引用二维数组的全部元素,就要遍历二维数组,通常应使用二层嵌套的for循环:一般常把二维数组的行下标作为外循环的控制变量,把列下标作为内循环的控制变量。
4.3.4 二维数据的赋值方法
1.在编译时赋初值——二维数组的初始化
对二维数组元素的初始化可以用如下方法实现。
int a[2][3]={{1,2,3},{4,5,6}}; /*初值按行的顺序依次排列,每行都用花括号括起来*/
int a[2][3]={1,2,3,4,5,6}; /*不分行的初始化,为二维数组全部元素赋初值*/
int a[2][3]={1,2,3,4}; /*不分行的初始化,为二维数组前面部分元素赋初值,后面元素为默认值*/
int a[2][3]={{1,2},{4}}; /*按行为二维数组部分元素赋初值*/
int a[2][3]={1,2,3,4,5,6,7,8}; /*初值化元素个数超总元素个数,编译出错*/
int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; /*为全部元素初始化,可省略第一维的维数,第二维不能省略*/
int a[ ][4]={{1,3},{},{5,6,7},{8,9,10,11}}; /*省略第一维维数时,按分行赋初值,保留对应花括号*/
2.在运行时赋初值
与一维数组特性相同,在定义变量时除了可以对二维数组赋初值外,不能用C语句对二维数组作整体赋值,只能利用循环语句对数组元素逐一赋值。例如:
int x[2][3]],i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&x[i][j]);
即可对二维数组的每个元素按行进行赋值。
小结:
本节主要介绍了一维数组、二维数组的定义、初始化以及引用,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素。二维数组可被看作是一种特殊的一维数组,它的元素又是一个一维数组。
备 注
通过实例说明数组可以使问题简单化,强调数组的重要性。
重点:数组解释。
难点:通过举例说明数组中数据的存储方式,更加直观。
重点:二维数组是一维数组的特殊情况。
重点:二维数组的定义、使用及数组元素的引用与一维数组做比较讲解。
学科网(北京)股份有限公司
$$