内容正文:
5.1 一维数组的定义和使用
一、教学目标
1.掌握一维数组的定义和引用。
2.掌握一维数组的初始化方法。
3.理解与一维数组有关的应用编程方法。
二、重点难点
1.重点:一维数组的定义和引用、初始化方法。
2.难点:与一维数组有关的应用编程方法。
三、教学时间
本任务教学,课内计划1课时。
4、 教学过程
教学过程
教学环节
教师活动
学生活动
设计意图
导入新课
任务场景
提问:保存一个班50位同学的一门功课的成绩,并且找出最高分和最低分,应如何实现?
解题思路:
定义50个变量,从键盘中输入值,然后再相互比较。处理起来很复杂,是否有更简便的方法?
思考、回答
学生带着问题学习,学生掌握知识点,培养学细致观察的能力、认真的学习态度
讲授新课
数据类型描述了变量能存放的数据集合以及程序能对变量进行的操作集合。到目前为止,用户看到的所有数据类型只能存放一个值,它们都是简单类型。随着用户程序功能的扩展,有时需要一个变量能存储多个值,这种变量的类型属于构造类型。例如,下标变量scores可以记录100个学生的考试分数。类似地,下标变量salaries 可以记录公司每个职员的薪水。
在C语言中,数组是一种构造类型,即它是由基本数据类型按照一定规则组成的新类型,数组中每个值的类型必须与数组的类型相同,使用数组名和下标来唯一确定数组中的元素。
一、一维数组的定义
1.一维数组的定义方式为:
类型说明符 数组名[常量表达式];
2.例如:
int a[10]; //数组名为a,有10个int型元素
double scores[ 50* 2 ]; //数组名为scores,有100个double型元素
3.定义数组时需要注意以下几个问题:
① 数组的命名规则和变量名相同,应遵循标识符命名规则。
②“常量表达式”表示数组元素的个数(即数组的长度),在定义数组时必须指定该值。
③引用元素时下标从0开始。
例如"int a [10];",a数组的10个元素分别是a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]。由于C语言不对下标做越界检查,因此虽然不存在元素a[10],但程序中若使用a[8]、a[9]。由于C语言不对下标做越界检查,因此虽然不存在元素a[10],但程序中若使用a[10],编译器并不会提示语法错误,这就需要用户在编程时注意这个细节,否则容易导致意外错误发生。
④“常量表达式”中可以包括基本常量和符号常量,但不能包含变量,即C语言不允许对数组的大小做动态定义,数组的大小不依赖于程序运行过程中变量的值。
例如,下面定义数组的方式是非法的。
int n;
scanf( "%d", &n);
int a[n];
⑤定义数组时, C语言分配足够的内存来存放所有元素,并且这些元素在内存中是连续存放的,数组名本身表示内存的首地址。例如定义数组“float scores[100];" ,每个元素都是float型,需要占用4个字节,因此需要分配100x4
个字节的内存。
由图5-1可以看出,数组的下标实际上相当于某个元素相对于数组首地址的偏移量。例如scores[3]的偏移量为3个单位(即3x4个字节)。了解这一点对数组的理解将会有很大的帮助。
二、一维数组元素的引用
数组定义之后即可使用。C语言规定只能逐个引用数组元素,而不能一次引用整个数组。
数组元素的表示形式为:
数组名[下标];
这里的“下标”可以是整型常量或整型表达式,例如a [0]a [2*3]、a[2+3]等。注意下标不要越界。
由于数组是多个数据元素的集合,在程序中经常需要对数组的部分或所有元素一起进行处理,因此一维数组经常和循环语句搭配使用。
例5.1 输入10个学生的成绩,先计算它们的总分,再输出它们的平均分。
#include <stdio.h>
main()
{ int i;
float scores[10], sum = 0;
printf("输入10个学生的成绩: ");
for( i=0; i< 10;i++ )
{
scanf( "%f", &scores[i]);
sum += scores[ i ];
}
printf( "平均分= %.2f", sum/10);
}
运行结果如图所示:
从这个例子可以看出,对于单个数组元素而言,在使用上与普通变量没有什么区别。
三、一维数组的初始化
数组的初始化实际上是对数组元素的初始化。C语言允许多种方式实现初始化。
①为全部元素赋值。例如: