我的程序不会取得输入数组元素的平均值

时间:2014-10-06 20:47:15

标签: c arrays average

我还是一个初学者,这个程序给我带来了一些麻烦。一切正常,直到它计算作为数组等级[]的元素的输入值的平均值。

输出是在每个学生的输入成绩旁边列出的学生编号1到5的表格。 我可以很好地显示学生编号和成绩,但程序似乎无法正确计算平均值。请帮帮忙?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void main()
{    
   float grade[5];
   int n;

   for(n=1; n<=5; n++){
      printf("Enter grade %d between 0 and 100: ",n);
      scanf("%f", &grade[n]);
   }

   printf("\nStudent\t\tGrade\n");

   for(n=1; n<=5; n++){
       printf("%d\t\t%.1f\n\n",n ,grade[n]);
   }
   printf("--------------------\n");

   float avg = (grade[0] + grade[1] + grade[2] + grade[3] + grade[4]) / 5;
   printf("Average Grade:\t%.1f", avg);
}

3 个答案:

答案 0 :(得分:3)

您的for循环不正确。具体而言,索引从0开始,例如而不是

for(n=1; n<=5; n++) {

使用

for(n = 0; n < 5; n++) {

平均值的计算是正确的。在此之前它只是错误的索引。

答案 1 :(得分:2)

数组索引从0开始,而不是C中的1。当你计算平均值时,你得到了这个权利,但是当你在循环中输入数据时却没有。 因此,当你有:

for(n=1; n<=5; n++){
    printf("Enter grade %d between 0 and 100: ",n);
    scanf("%f", &grade[n]);
}

你最终在数组末尾运行1。

相反,你应该在0开始循环:

for(n=0; n<5; n++){
    printf("Enter grade %d between 0 and 100: ",n);
    scanf("%f", &grade[n]);
}

第二个循环是相同的。如评论中所述,您必须考虑在第二个循环中打印学生编号时索引低一个:

printf("%d\t\t%.1f\n\n", n+1,grade[n]);

答案 2 :(得分:0)

您还可以将avg的计算放在第二循环中。

avg = 0;
for(n=0; n<5; n++){
    printf("%d\t\t%.1f\n\n",n ,grade[n]);
    avg += grade[n];
}