我还是一个初学者,这个程序给我带来了一些麻烦。一切正常,直到它计算作为数组等级[]的元素的输入值的平均值。
输出是在每个学生的输入成绩旁边列出的学生编号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);
}
答案 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];
}