C++语言程序设计

在前面的例子中，数组元素象普通变量一样使用。由于数组元素排列的规律性，实际中，我们常用循环的办法来操作。
下面的例子可以求一组学生的平均成绩：

| 例6-2

#define num 5 //预定义num的值为5
#include <stdio.h>
void main(void)
{
int grade[num],i,total;
float average;
total = 0;
printf("Please input %d score\n",num);
for(i = 0;i <num;i ++)
{
printf("grade[%d] = ",i);
scanf("%d",&grade[i]);
total = total + grade[i];
}
average = (float)total/num;
printf("average = %0.2f\n",average);
}

这一段程序的运行结果为：
please input 5 scores
grade[0] = 90
grade[1] = 65
grade[2] = 97
grade[3] = 57
grade[4] = 78
average = 77.40
可以看到：这个程序从键盘上接收5个成绩，求平均成绩，for循环控制变量i从0变化到4，printf语句每次显示出要接收的下标变量grade[0]～grade[4]，scanf接收相应的值，再把它们加到total中。
要注意，在这里scanf不能一次接收整个数组的值，如写成：
scanf("%d",&grade);
是错误的，要想对数组中所有元素赋值，就要通过循环。
引入数组后，许多需要循环处理的问题就变得更方便解决了，下面再来看一下求菲波那契数列的问题，我们使用数组来解决。

| 例6-3

#include <stdio.h>
void main(void)
{
const int NUM = 20;
const int COL = 5;
int f[NUM + 1],i;
f[1] = 0;
f[2] = 1;
for(i = 3; i<= NUM;i ++)
f[i] = f[i - 2] + f[i - 1];
for(i = 1;i <= NUM;i ++)
{
printf("%10d",f[i]);
if(i % COL == 0)
printf("\n");
}
}

运行结果为：
0 1 1 2 3
5 8 13 21 34
55 89 144 233 377
610 987 1597 2584 4181
程序用fn-2和fn-1求fn，写成
f[n] = f[n - 2] + f[n - 1];
显得非常自然，容易书写，也容易阅读理解。
程序中定义数组元素个数为NUM + 1（21个），使用时没有用f[0]，而只用了f[1]~f[20]，这样和数学公式表达相一致，处理也更方便。
有了数组，许多问题的处理变得容易起来，但C++的数组也有一个令人很头疼的地方，就是它不作数组下标是否越界的判断，如上例中的第二个for语句写成：
for(i = 1;i <= NUM+1;i ++)
循环体中的f[i]在最后一次将是f[21]，而f的下标范围为0～20，f[21]已经不是数组f的元素了。