【发布时间】:2015-10-05 02:13:37
【问题描述】:
我需要编写一个 C 程序,使用函数计算用户输入的成绩的平均值。输入的等级数未知,所以我必须使用标记值 -1。
这是我的代码,它编译得很好,但是它没有告诉我平均值,并且 for 循环没有调用该函数四次。我错过了什么?
#include <stdio.h>
float calculateAverage (int sumofGrades, int numberofGrades);
int main(void) {
int i;
int sumofGrades = 0;
int numberofGrades = 0;
int grade = 0;
float average;
for (i = 1; i <= 4; ++i) {
calculateAverage(sumofGrades, numberofGrades);
}
return 0;
}
float calculateAverage (int sumofGrades, int numberofGrades) {
float average;
int grade;
printf("Enter grades and -1 to stop: ");
scanf("%d", &grade);
while (grade <= 100 && grade != -1) {
numberofGrades++;
sumofGrades += grade;
average = sumofGrades / numberofGrades;
}
printf("The average is %.2f", average);
return average;
}
更新
感谢您的帮助!但我还不能做对。对于作业,我需要程序要求我输入 4 次未知的分数,并且每次计算平均值。
另外,为什么在我输入 -1 后它不停止并给出平均值?
#include <stdio.h>
float calculateAverage(int sumofGrades, int numberofGrades);
int main(void) {
int i;
int sumofGrades = 0;
int numberofGrades = 0;
for (i = 1; i <= 4; ++i) {
calculateAverage(sumofGrades, numberofGrades);
}
return 0;
}
float calculateAverage (int sumofGrades, int numberofGrades) {
float average;
int grade = 0;
while (grade != -1 && grade >= 0 && grade <= 100) {
printf("Enter grades and type -1 to stop: ");
scanf("%d", &grade);
if (grade != -1) {
numberofGrades++;
sumofGrades += grade;
}
}
average = sumofGrades / numberofGrades;
printf("The average is %.2f\n", average);
return average;
}
更新
我仍然有问题!我无法让程序要求我输入四次成绩并每次计算平均值!我试过了,我试过了,这太令人沮丧了!!我做错了什么??
【问题讨论】:
-
请注意,恶意用户可以输入 30 个 -100 的等级,您的程序不会反对。我怀疑得分的真实性。 (您应该比现在更仔细地检查分数是否有效。)在循环中计算平均值是没有意义的。你只知道最后的答案。不清楚为什么将数字零传递给函数;只要它们被正确初始化,它们作为局部变量(函数的局部变量,即不是
main())都会更好。 -
这一行:
for (i = 1; i <= 4; ++i) {虽然在这个特定的实例中这不是问题,但在循环中使用“i”时会给您带来很多问题,特别是如果使用“i”来索引成一个数组。建议养成编写这样一个 for 循环的习惯:for (i = 0; i < 4; ++i) { -
为了便于我们人类阅读,请始终缩进代码。
-
我的作业要求我专门使用那个 for 循环..
-
在调用系统函数:
scanf()和函数族时,一定要检查返回值(不是参数值)以保证操作成功。