《C语言程序设计》课程教案表
授课题目 第四章 数组(1)——一维数组 课时安排 授课时间 2 教学目的和要求 1.掌握:一维数组的定义和使用方法; 2.熟悉:数组的概念 教学内容 1.基本内容:(1)数组的概念(2)一维数组 2.重点:一维数组 讲课进程和时间分配 无符号整型 1、导入(10分钟) 板书: 整型 长整型 整型、短整型 基本类型 字符型 单精度 实型 双精度 枚举型 数组 数据类型 构造类型 结构体 共用体 指针类型 空类型 从本次课开始我们将学习 数组 2、数组的概念(25分钟) 例如:输入100名学生的成绩,要求输出高于平均分的那些成绩。平均分可以在读入数据的同时,用边累加成绩边统计数据个数的方法最后求出,但只有读入最后一个学生的分数之后才能求出平均分,因此,必须把100个学生的分数全部保留下来,然后逐个与平均分比较,才能把高于平均分的成绩打印出来。为了保存学生的成绩,就需要有100个变量(假定为a1、a2、…、a100)来存放,且用变量与平均分average一一比较如下: if(a1>average)printf(“%f\\n”,al); if(a2>average)printf(“%f\\n”,a2); …… if(a100>average)printf(“%f\\n”,a100);这样的程序是无法让人接受的。 解决上述问题方法:(1)在C语言中,我们可以定义一个名叫a的变量,它不代表一个单一的成绩值,而是代表整个成绩组。使用数组元素a[1]、a[2]、…、a[100]来代替a1、…、a2、…、a100,则程序就会简单得多,只需要用一个for循环就能完成100次比较: for(i=1;i<=100;i++) if(a[i]>average) printf(“%f\\n”,a[i]); (2)在这里,a代表数组名,a[i]代表a数组中的一个元素,i是数组元素的下标,当i的值为1时,a[i]代表a[1];当i的值为2时,a[i]代表a[2]。在循环中当i从1变化到100时,a[i]也就逐个代表a[1]到a[100]。 (3)同样a[5]表示在a的数组里的第五号元素。 归纳:(1)数组 具有相同数据类型的数据的有序的集合。 ----- 构造类型 作用:1)保存大量同类型的相关数据。如矩阵运算,表格数据等 2) 便于引用和操作 (2)数组元素:数组中的元素(变量)。数组中的每一个数组元素具有相同的名称,不同下标的元素,可以作为单个变量使用,所以也称为下标变量。在定义一个数组后,在内存中使用一片连续的空间依次存放数组的各个元素。 (3)数组的下标:是数组元素的位置的一个索引或指示。 (4)数组的维数:数组元素下标的个数。根据数组的维数可以将数组分为一维、二维、三维、多维数组。 例如:int a[10]; 定义了一个一维数组a,该数组由10个数组元素构成的,其中每一个数组元素都属于整型数据类型。 数组a的各个数据元素依次是a[0],a[1],a[2]…a[9](注意:下标从0-9)。 每个数据元素都可以作为单个变量使用(如赋值,参与运算,作为函数调用的参数等)。 例如:float b[3][3]; 定义了一个二维数组b,该数组由9个元素构成,其中每一个数组元素都属于浮点(实数)数据类型。 数组b的各个数据元素依次是:b[0][0],b[0][1],b[0][2],b[1][0],b[1][1],b[1][2],b[2][0],b[2][1],b[2][2](注意:下标从0-2)。 每个数组元素也都可以作为单个变量使用。 3、一维数组(45分钟) (1)一维数组的定义(先定义后使用) 格式:类型说明 数组名[常量表达式] 例如: int grades[10]; /*定义了一个数组grades,元素个数为10,数组元素类型为整型。*/ 说明:1)数组的类型就是数组各个元素的类型,对于一个数组,所有元素的数据类型都是相同的。 2)数组名取名规则与变量名相同,遵守标识符命名规则。 3)数组名后是用方括弧括起来的常量、常量表达式或符号常量,不能是变量。 4)所有数组元素共用一个名字,用下标来区别每个不同元素。下标从0开始,按照下标顺序依次连续存放。如:a[0],a[1]a[2],…。 5)常量表达式表示元素个数,即数组的长度。如:int a[10];中10表示a数组有10个元素。 例如:以下定义是合法的。 int a[10]; 或: # define N 10 int a[N]; 6)C编译程序为数组分配了一片连续的存储单元。为了区分不同的单元,系统的内存是以字节(Byte)为单位进行编号,这些编号称为地址。 7)C语言还规定,数组名是数组的首地址。即a=&a[0] 1、下列一维数组说明中,不正确的是[ ]。 ? A、int n; scanf(“%d”,&n); float b[n]; ? B、float a[ ]={5,4,8,7,2}; ? C、#define S 10 int a[S+5]; ? D、float a[5+3],b[2*4]; (2)一维数组的初始化 1)初始化 格式: 类型说明符 数组名[下标]={常量列表}; 说明:常量列表可以是数值、字符常量或字符串,数组元素的初值必须依次放在一对花括号内。 (1)给数组a所有元素赋初值。 例如:int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始化之后,数组各个元素值为: a[0]=0,a[1]=1,a[2]=2,a[3]=3, a[4]=4,a[5]=5,a[6]=6,a[7]=7, a[8]=8,a[9]=9 2)给部分元素赋初值。 例如:int a[10]={0,1,2,3,4}; 初始化之后: a[0]=0,a[1]=1,a[2]=2, a[3]=3,a[4]=4,其余元 素自动赋0值。 3)设置一个数组中全部元素值为0。 例如:int a[10]={0,0,0,0,0,0,0,0,0,0}; 或int a[10];系统会对所有数组元素自动赋0值。 4)在对全部数组元素赋初值时,可以不指定数组长度。 例如:int a[5]={1,2,3,4,5}; 或 int a[ ]={1,2,3,4,5}; 若定义数组长度大于元素赋初值的个数时,不能省略数组长度的定义,而必须写成: int a[10]={1,2,3,4,5}; 若定义数组长度小于元素赋初值的个数时,语法错误不能执行。 练习:下列一维数组初始化语句中,正确的是[ ]。 A、int a[8]={ }; B、int a[9]={0,7,0,4,8}; C、int a[5]={0,2,0,3,7,9}; D、int a[7]=7*{6}; 练习:下列一维数组初始化语句中,正确且与语句float a[ ]={0,3,8,0,9};等价的是[ ]。 A、float a[6]={0,3,8,0,9}; B、float a[6]={0,3,8,0,9,0}; C、float a[7]={0,3,8,0,9,0}; D、float a[5]={0,3,8,0,9}; (3)一维数组元素的引用 C语言规定,数组必须先定义后使用;而且只能逐个引用数组元素,不能一次引用整个数组。 格式:数组名[下标] 说明:下标可以是整型常量或整型表达式。例如:a[1],a[2*2]。 若要对一维数组的连续多个元素引用或操作,可用一重循环实现。 说明:引用数组元素时,下标可以是整型常数、已经赋值的整型变量或整型表达式。 数组元素本身可以看作是同一个类型的单个变量,因此对变量可以进行的操作同样也适用于数组元素。也就是数组元素可以在任何相同类型变量可以使用的位置引用。 引用数组元素时,下标不能越界。否则结果难以预料(覆盖程序区-程序飞出,覆盖数据区-数据覆盖破坏,操作系统被破坏,系统崩溃)。 练习:要将0、9、16、21、24存入数组a中,下列程序段中不正确的是[ ]。 ? A、int a[5]; a={0,9,16,21,24}; ? B、int a[5]; a[0]=0; a[1]=9; a[2]=16; a[3]=21; a[4]=24; ? C、int a[5]={0,9,16,21,24}; ? D、int i,a[5]; for(i=0;i<5;i++) a[i]=i*(10-i); (4)一维数组应用举例 【例6.1】随机输入10个数并输出。 程序代码: main() { int a[10],i; printf(“input 10 numbers:\\n”); for(i=0;i<10;i++) /*运用一重循环连续给数组元素赋值*/ scanf(“%d”,&a[i]); printf(“\\n”); for(i=0;i<10;i++) printf(“%d,”,a[i]); /*输出数组中的10个元素*/ } 【例6.2】建立一个数组,数组元素a[0]到a[9]的值为0~9,然后按逆序输出。 程序代码: main() { int i,a[10]; for(i=0;i<=9;i++) a[i]=i; /*给数组a的10个元素,用循环变量i的 值分别赋值*/ for(i=9;i>=0;i--) printf(“M”,a[i]); } 运行结果为: 9 8 7 6 5 4 3 2 1 0 【例6.3】求已知数组各元素的平均值。 程序代码 :#include