为什么我在C中得到了错误的平均值?
我是新手,有点麻烦。我试图找到用户输入的分数的平均值,但我意识到,如果你在任何分数中使用小数点,它的计算就像它们是整数一样为什么我在C中得到了错误的平均值?,c,C,我是新手,有点麻烦。我试图找到用户输入的分数的平均值,但我意识到,如果你在任何分数中使用小数点,它的计算就像它们是整数一样 #include <stdio.h> int main(void) { unsigned int counter; float grade; int total; float average; int number; total = 0; counter = 1; printf
#include <stdio.h>
int main(void)
{
unsigned int counter;
float grade;
int total;
float average;
int number;
total = 0;
counter = 1;
printf("Number of scores to enter:\t");
scanf("%d", &number);
printf("\n");
while (counter <= number) {
printf("%s%d%s", "Enter the score for Lab ", counter, ":\t");
scanf("%f", &grade);
total = total + grade;
counter = counter + 1;
}
printf("\n");
average = (float) total / number;
printf("Average lab score: %.1f\n", average);
if (grade>=90) {
puts("Letter grade: A");
}
else if (grade>=80) {
puts("Letter grade: B");
}
else if (grade>=70) {
puts("Letter grade: C");
}
else if (grade>=60) {
puts("Letter grade: D");
}
else {
puts("Letter grade: F");
}
return 0;
}
#包括
内部主(空)
{
无符号整数计数器;
浮子等级;
整数合计;
浮动平均;
整数;
总数=0;
计数器=1;
printf(“要输入的分数:\t”);
scanf(“%d”和编号);
printf(“\n”);
而(计数器=90){
看跌期权(“字母等级:A”);
}
否则,如果(等级>=80){
看跌期权(“字母等级:B”);
}
否则,如果(等级>=70){
看跌期权(“字母等级:C”);
}
否则,如果(等级>=60){
看跌期权(“字母等级:D”);
}
否则{
看跌期权(“字母等级:F”);
}
返回0;
}
您正在捕获scanf(“%f”、&grade)代码>作为浮点数,然后计算<代码>总数=总数+等级代码>
您已经定义了int-total代码>。您需要将其定义为float total代码>
您正在将一个浮点变量移动到一个整数中,该整数将截断您以前输入的小数。无需预先询问将输入多少数据点。事实上,这是一种反模式。只需做如下操作:
#include <stdio.h>
int
main(void)
{
unsigned int count = 0;
float grade;
float total = 0.0;
float average;
while( scanf("%f", &grade) == 1 ) {
total += grade;
count += 1;
}
average = total / (float) count;
printf("Average lab score: %.1f\n", average);
fputs("Letter grade: ", stdout);
putchar( average >= 90.0 ? 'A' : average >= 80.0 ? 'B' :
average >= 70.0 ? 'C' : average >= 60.0 ? 'D' : 'F');
putchar('\n');
return average >= 60.0;
}
$ echo 78.2 96.5 80 | ./a.out
Average lab score: 84.9
Letter grade: B
#include <stdio.h>
int
main(void)
{
unsigned int count = 0;
float grade;
float total = 0.0;
float average;
while( scanf("%f", &grade) == 1 ) {
total += grade;
count += 1;
}
average = total / (float) count;
int s = 'A' + (99 - (int)average) / 10;
printf("Average lab score: %.1f\n", average);
printf("Letter grade: %c\n", s > 'D' ? 'F' : s);
return average >= 60.0;
}
total
是一个int
,因此您的浮点值在制表过程中会四舍五入。需要执行(float)total
提示有问题。您正在将分数累积到变量total
,该变量的类型为int
。每次分配给该变量时,都会删除任何小数部分。total
不是四舍五入,而是截断。不完全一样。但仍然不是你想要的。你转换成字母等级的部分使用的是输入的最后一个等级,而不是平均值。如果
s
s中的等级
是最后一个实验的分数。