C语言的数组的构建与打印


C语言的数组的构建与打印

文章插图
 
在许多程序中,数组很重要 。数组可以作为一种存储多个相关项的便利方式 。
【C语言的数组的构建与打印】数组(array)是按顺序存储的一系列类型相同的值,如10个char类型的字符或15个int类型的值 。整个数组有一个数组名,通过整数下标访问数组中单独的项或元素(element) 。例如,以下声明:
float debs[20];声明debts是一个内含20个元素的数组,每个元素都可以存储float类型的值 。数组的第1个元素是debts[0],第2个元素是debts[1],以此类推,直到debts[19] 。注意,数组元素的编号从0开始,不是从1开始 。可以给每个元素赋float类型的值 。例如,可以这样写:
debts[5] = 32.54;debts[6] = 1.2e+21实际上,使用数组元素和使用同类型的变量一样 。例如,可以这样把值读入指定的元素中:
scanf("%f", &debts[4]); //这里要注意一个潜在的陷阱:考虑到影响执行的速度,C编译器不会检查数组的下标是否正确 。下面的代码,都不正确:
debts[20] = 88.32;// no such array elementdebts[33] = 828.12;// no such array element编译器不会查找这样的错误 。当运行程序时,这会导致数据被放置在已被其他数据占用的地方,可能会破坏程序的结果甚至导致程序异常中断 。
数组的类型可以是任意数据类型 。
int nannies[22];/* an array to hold 22 integers*/char actors[26];/* an array to hold 26 characters*/long big[500];/* an array to hold 500 long integers*/字符串字符串,可以把字符串存储在char类型的数组中(一般而言,char类型数组的所有元素都存储char类型的值) 。如果char类型的数组末尾包含一个表示字符串末尾的空字符,则该数组中的内容就构成了一个字符串 。
C语言的数组的构建与打印

文章插图
Character arrays and strings.
用于识别数组元素的数字被称为下标(subscript)、索引(indice)或偏移量(offset) 。下标必须是整数,而且要从0开始计数 。数组的元素被依次存储在内存中相邻的位置,如图6.7所示 。
C语言的数组的构建与打印

文章插图
The char and int arrays in memory
在for循环中使用数组程序中有许多地方要用到数组,程序清单6.19是一个较为简单的例子 。该程序读取10个高尔夫分数,稍后进行处理 。使用数组,就不用创建10个不同的变量来存储10个高尔夫分数 。而且,还可以用for循环来读取数据 。程序打印总分、平均分、差点(handicap,它是平均分与标准分的差值) 。
// scores_in.c -- uses loops for array processing#include <stdio.h>#define SIZE 10#define PAR 72int 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("%d", &score[index]);// read in the ten scoresprintf("The scores read in are as follows:n");for (index = 0; index < SIZE; index++)printf("%5d", score[index]); // verify inputprintf("n");for (index = 0; index < SIZE; index++)sum += score[index];// add them upaverage = (float) sum / SIZE;// time-honored methodprintf("Sum of scores = %d, average = %.2fn", sum, average);printf("That's a handicap of %.0f.n", average - PAR);return 0;}先看看程序清单6.19是否能正常工作,接下来再做一些解释 。下面是程序的输出:
Enter 10 golf scores:
99 95 109 105 100
96 98 93 99 97 98
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.
程序运行没问题,我们来仔细分析一下 。首先,注意程序示例虽然输入了11个数字,但是只读入了10个数字,因为循环只读了10个值 。由于scanf()会跳过空白字符,所以可以在一行输入10个数字,也可以每行只输入一个数字,或者像本例这样混合使用空格和换行符隔开每个数字(因为输入是缓冲的,只有当用户键入Enter键后数字才会被发送给程序) 。
然后,程序使用数组和循环处理数据,这比使用10个单独的scanf()语句和10个单独的printf()语句读取10个分数方便得多 。for循环提供了一个简单直接的方法来使用数组下标 。注意,int类型数组元素的用法与int类型变量的用法类似 。要读取int类型变量fue,应这样写:scanf("%d", &fue) 。要读取int类型的元素score[index],所以这样写scanf("%d", &score[index]) 。


推荐阅读