6·11 数组简介
数组(array) 是按 顺序 存储的一系列 类型相同 的值。
整个数组有一个 数组名 ,通过 整数下标 (subscript)访问数组中单独的项或元素 (element)
例如 float debts[20];
,声明 debts 是一个内含 20 个元素的数组,每个元素都可以存储 float 类型的值
要注意的是,第一个元素是 debts[ 0 ] ,第二个才是 debts[ 1 ] ,直至 debts[ 19 ] 。
可以给每个元素赋值:
debts[ 5 ] = 23.3;
debts[ 10 ] = 2.33e7;
也可以通过函数赋值:
scanf_s("%f", &debts[ 4 ]);
但此处要注意:
- 程序不会检查下标是否正确
- 每个 int 为 2 字节
- 每个 char 为 1 字节
6·11·1 可以使用循环来为数组赋值:
示例:
//使用 for循环 处理数据
#include <stdio.h>
#define SIZE 10
#define PAR 72.0 //标准分
int main(void) {
int index, score[SIZE];
int sum = 0;
float average;
printf("Enter %d golf scores:\n", SIZE); //高尔夫分数统计
for (index = 0; index < SIZE; index++)
scanf_s("%d", &score[index]); //输入 SIZE 个分数
printf("The scores read in are as follows:\n");
for (index = 0; index < SIZE; index++)
printf("%5d", score[index]); //验证输入,这是一个很好的编程习惯
printf("\n");
for (index = 0; index < SIZE; index++)
sum += score[index];
average = (float)sum / SIZE; //使用 (float)把 sum 由 int 转化为 float
printf("| Sum of scores= %d |\n", sum);
printf("| Average = %.2f |\n", average);
printf("| That's a handicap of %.0lf. |\n", average - PAR); //差分:平均分与标准分的差值
return 0;
}
结果:
Enter 10 golf scores:
99
95
109
105
100
96
98
93
99
97
The scores read in are as follows:
99 95 109 105 100 96 98 93 99 97
| Sum of scores= 991 |
| Average = 99.10 |
| That's a handicap of 27. |
以下是注意事项:
-
使用
#define
定义明示常量(符号常量)来给定指定数组的大小,并且程序中的数组大小都使用这个符号常量来代替具体数字,这样利于后期程序的优化和修改。 -
使用循环的方式可以较轻松地处理一个大小为 SIZE 的数组:
for (index = 0; index < SIZE; index++)
设置正确的 数组边界 很重要,第一个元素的 下标 为 0 ,则循环开始时就把 index 设置为 0 ,最后一个元素的下标为 SIZE - 1 ,通过测试条件 index < SIZE 来控制最后一个元素的下标正确。
-
程序能重复显示刚输入的数据
-
调整程序时注意遵循 模块化(modularity)的原则。也即:要把程序划分为若干的 独立的单元 ,每个单元执行一个任务。可以把每一个执行任务的单元放进函数中,提高程序的模块化。
参考书籍
《C Primer Plus》