C Primer Plus 第6章 C控制语句:循环 6.11 数组

原创
2016/06/02 06:40
阅读数 104

float debts[20];

声明debts是一个具有20个元素的数组,其中每一个元素都是一个float类型的值。这个数组的每一个元素称为debts[0],第二个元素称为debts[1],这样直到debts[9]。注意元素编号是从0而不是从1开始的。每个元素都可以被赋予一个float类型的值。如:

debts[0]=32.54; debts[1]=1.2e+21;

实际上您可以像使用相同类型的变量那样使用一个数组元素。例如,您可以把一个值读入一个特定的元素:scanf("%f",&debts[4]);为第5个元素读入一个值。

一个潜在的易犯的错误是:出于执行速度的考虑,C并不检查您是否使用了正确的下标。例如,以下都是错误的代码:debts[20]=88.32; //没有这个数组元素;

但是编译器不会发现这样的错误。当程序运行时,这些语句把数据放在可能由其他数据使用的位置上,因而可能破坏程序的结果甚至使程序崩溃。

数组可以是任意数据类型的数组

例如,我们先前提到过的字符串就是一个特别的例子,它被存储在一个字符数组中。一般说来,字符数组就是元素都被赋于字符值的数组。如果字符数组包含了空字符\0,那么字符数组的内容就构成了一个字符串,其中空字符标志着字符串的结尾。

用于标识数组元素的数字称为下标、索引、或偏移量。必须是整数。从0开始。数组中的元素在内存中是顺序存储的。

在for循环中使用数组

程序清单 6.19 scores_in.c

//scores_in.c -- 使用循环进行数组处理
#include <stdio.h>
#define SIZE 10
#define PAR 72
int main (void)
{
    int index,scores[SIZE];
    int sum=0;
    float arerage;
 
    printf("Enter %d golf scores: \n",SIZE);
    for (index=0;index<SIZE;index++)
        scanf("%d",&scores[index]);
    printf("The scores read in are follows: \n")
    for (index=0;index<SIZE;index++)
        printf("%5d",scores[index]);
    printf("\n");
    for(index=0;index<SIZE;index++)
        sun+=scores[index];
    average=(float)sum/SIZE;
    printf("Sum of scores = %d,average = %.2f \n",sum,average);
    printf("That's a hanicap of %.0f.\n",average-PAR);
    return 0;
}
/*下面是输出:
Enter 10 scores:
Enter 10 golf scores:
102 98 112 108 105 103 
99 101 96 102 100 
The scores read in are as follows:
102 98 112 108 105 103 99 101 96 102  
Sum of scores = 1026,average=102.60
That's a handicap of 31
*/   

我们来看一些细节。首先,注意到尽管这个例子显示您输入了11个数,但是只有10个被读入了,因为读取循环只读入10个值。因为scanf()跳过空白字符,所以您可以一行之内 输入 所有的10个数,也可以在每一行只输入一个数,或者您也可以像这个例子一样混合 使用新行与空格 来分隔输入。

其次,使用数组和循环要比使用10个单独的xcanf()语句和10个单独的printf()语句来读入并验证这10个分数更方便。

这个例子说明了一些风格的问题。首先,使用#define指令创建一个指定数组 大小 的明显常量(SIZE)是一个好主意,您可以在定义数组和设置循环限制时使用这个常量 。如果您以后需要 把程序扩展为处理20个分数,简单地把SIZE重新定义为20就可以了。

其次,下面的代码可以很方便地处理一个大小 为SIZE的数组:

for(index=0;index<SIZE;index++)

获取正确的数组边界是很重要的。使用判断条件index<SIZE可使最后一个index的值为SIZE-1。

第三,一个好的编程习惯是使程序重复输出或“回显”刚刚读入的值。这有助于确保程序处理了您所期望的值。

最后,程序使用了三个独立的for循环,当然也可以合并操作。但您应该根据模块化的原则进行调整。这个术语所蕴含的思想是程序应该被分为一些单独的单元,每个单元执行一个任务,这会使程序更易读。可以使程序更易升级或修改。

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部