我需要编写一个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;
}
我还有问题!我无法让程序让我四次输入成绩并每次计算平均值!我试过,我试过,这太令人沮丧!我做错了什么?
答案 0 :(得分:1)
输入一个有效成绩后,您的代码不会尝试阅读其他成绩:
printf("Enter grades and -1 to stop: ");
scanf("%d", &grade);
while (grade <= 100 && grade != -1) {
numberofGrades++;
sumofGrades += grade;
average = sumofGrades / numberofGrades;
}
如果等级有效,则进入无限循环。它还计算每个周期的平均等级,这是不必要的。一次,在循环之后就足够了。
也许你应该使用:
printf("Enter grades and -1 to stop: ");
while (scanf("%d", &grade) == 1 && grade <= 100 && grade >= 0)
{
numberofGrades++;
sumofGrades += grade;
}
if (numberofGrades == 0)
{
fprintf(stderr, "Error: zero valid grades entered\n");
average = 0.0;
}
else
{
average = sumofGrades / numberofGrades;
printf("The average is %.2f", average);
}
return average;
请注意,这会在使用成绩之前检查输入是否成功。
您也确实不需要将变量传递给函数。你最好让函数不接受任何参数,并将参数作为常规局部变量正确初始化为零。
您的主程序应该捕获返回的平均值,而不是忽略它。或者也许函数不应该返回平均值。
答案 1 :(得分:0)
首先,您将循环计算您的calculateAverage功能4次。你是故意这样做的吗?我想你应该只做一次。
其次,在你的while循环中
while (grade <= 100 && grade != -1) {
numberofGrades++;
sumofGrades += grade;
average = sumofGrades / numberofGrades;
}
你无限循环。如果输入的值不是-1,这将永远循环。这应该改为if语句。
if (grade <= 100 && grade != -1)
但是有一种更好的方式来编写这段代码(如果我猜你真正想要它做什么)
#include <stdio.h>
float calculateAverage (int sum, int size);
int main(void)
{
int input;
int sum = 0;
int count = 0;
while (input != -1 && input >= 0 && input <= 100)
{
printf ("Enter a Grade: ");
scanf ("%d", &input);
if (input != -1)
{
sum += input;
count++;
}
}
float average = calculateAverage(sum, count);
return 0;
}
float calculateAverage (int sum, int count) {
// Do your average math here....
}
答案 2 :(得分:0)
给定已发布的代码,子函数无法更新main()函数中的变量。
建议传递指向变量的指针并修改子函数以期望(并正确处理)这些指针