我的任务是:
- 输入类(class)中的学生人数,然后
- 输入他们的成绩列表,然后计算每个学生的平均值。
我编写了以下程序:
int main()
{
int s, i, grade, total, gradenum, finalgrade;
printf("How many students?\n");
scanf("%d", &s);
i = 0;
do
{
printf("Enter grade. Enter x when done.");
scanf("%d", grade);
total = 0;
if (grade != 'x')
{
total = total + grade;
gradenum++;
}
else
{
finalgrade = total / gradenum;
printf("The final grade is %d", finalgrade);
i++;
}
}
while (i <= s);
return 0;
}
这个想法是通过用户输入获取学生数量,然后 do 循环应该只重复该次数。
但是当我编译程序时,我收到一条警告消息,指出未使用“total”(据我所知,它正在被使用!)。然后当我尝试运行该程序时,我陷入了无限循环。
我做错了什么?
这门课是 C 语言简介,我们还没有介绍 cout、数组或类似的内容,所以我认为我不应该在这个作业中使用它们。仅循环(do、for、if/else)。
最佳答案
您遇到了几个问题:
您使用
gradenum
未初始化,并且出于同样的原因,您不会为每次迭代重置它,因此您的平均计算将会出错。您初始化
i
与0
,但继续直到i <= s
,例如,对于 3 个学生,您实际上循环了 4 次。您缺少收集学生个人成绩的循环。
scanf("%d", grade)
应该是scanf("%d", &grade)
.您将整数与字符混合在一起,最简单的解决方案是输入类似
-1
的内容退出,而不是'x'
.
这是修改后的版本:
#include <stdio.h>
int main()
{
int s, i, grade, total, gradenum, finalgrade;
printf("How many students?\n");
scanf("%d", &s);
i = 1;
do
{
printf("Enter grades for student %d\n", i);
gradenum = 0;
grade = 0;
total = 0;
while ( grade != -1 ) {
printf("Enter grade. Enter -1 when done.\n");
scanf("%d", &grade);
if (grade != -1)
{
total = total + grade;
gradenum++;
}
else
{
finalgrade = total / gradenum;
printf("The final grade is %d\n", finalgrade);
i++;
}
}
}
while (i <= s);
return 0;
}
输出:
paul@MacBook:~/Documents/src/scratch$ ./grades
How many students?
3
Enter grades for student 1
Enter grade. Enter -1 when done.
77
Enter grade. Enter -1 when done.
68
Enter grade. Enter -1 when done.
71
Enter grade. Enter -1 when done.
-1
The final grade is 72
Enter grades for student 2
Enter grade. Enter -1 when done.
55
Enter grade. Enter -1 when done.
58
Enter grade. Enter -1 when done.
70
Enter grade. Enter -1 when done.
-1
The final grade is 61
Enter grades for student 3
Enter grade. Enter -1 when done.
22
Enter grade. Enter -1 when done.
25
Enter grade. Enter -1 when done.
30
Enter grade. Enter -1 when done.
-1
The final grade is 25
paul@MacBook:~/Documents/src/scratch$
这看起来像你想要的。
关于计算平均成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21298509/