【发布时间】:2019-10-14 02:16:14
【问题描述】:
我目前正在尝试为课堂作业创建一个 C 程序,该程序取任意数量的测试分数的平均值。但是,我遇到了一些问题。
我的教授提供了一个大纲来帮助入门。我也只能在指定的地方添加代码,所以没有额外的变量等。
这是我目前所拥有的:
#include <stdio.h>
void calculateAverage()
{
int grade, count, sum;
double average;
/* add code to input grades, calculate average, and print it */
/* --> between here */
printf("Enter the amount of test scores.\n");
scanf("%d", &count);
grade = 0;
sum = 0;
while (grade != -1 && grade <= 100 && grade >= 0)
{
printf("Enter the grade. Enter -1 when you are done entering grades.\n");
scanf("%d", &grade);
if (grade != -1 && grade <= 100 && grade >= 0)
{
sum = sum + grade;
}
else
{
average = (sum / count);
printf("average is %.2lf \n", &average);
}
}
/* --> and here */
}
int main(void)
{
while (1)
calculateAverage();
return 0;
}
所以我遇到的问题是,到目前为止,平均值将始终计算为 0。究竟为什么会发生这种情况,我将如何解决它以便给我正确的平均值?
更新 所以我尝试将平均值加倍,以避免类型不匹配,这确实消除了我的编译器警告,但所有输入值的平均值仍然为 0。
#include <stdio.h>
void calculateAverage()
{
int grade, count, sum;
double average;
/* add code to input grades, calculate average, and print it */
/* --> between here */
printf("Enter the amount of test scores.\n");
scanf("%d", &count);
grade = 0;
sum = 0;
while (grade != -1 && grade <= 100 && grade >= 0)
{
printf("Enter the grade. Enter -1 when you are done entering grades.\n");
scanf("%d", &grade);
if (grade != -1 && grade <= 100 && grade >= 0)
{
sum = sum + grade;
}
else
{
average = (double)(sum / count);
printf("average is %.2f \n", &average);
}
}
/* --> and here */
}
int main(void)
{
while (1)
calculateAverage();
return 0;
}
【问题讨论】:
-
在这个程序中没有任何东西可以阻止用户说他们将输入 3 个等级,然后实际输入 1000000。为什么不随手计算呢?此外,无需明确测试
-1,因为这已经超出了您的 0-100 范围测试。除非你想用它做一些特别的事情。 -
打开编译器警告(
-Wall -Wextra,如果使用 gcc 或 clang)。你应该得到一份关于你使用 printf 的信息。 -
我使用 -1 是因为我的教授希望我们用它来终止每组成绩。
-
平均值应该只打印一次。