平均值呼叫未输出正确的平均值。有人可以帮助我弄清楚我在做什么错吗?
#include <stdio.h>
void main()
{
int num=0;
int counter=0;
int sum=0;
int i=0;
float avg=0;
printf("Numver of values to be entered: \n");
scanf("%d", &counter);
for (num=1;num<=counter;num++)
{
printf("Please enter value %d :",num);
scanf("%d",&i);
sum +=i;
}
avg=sum/num;//This portion isnt working and I cant figure out why
printf("The average is : %f\n",avg);
}
我得到的输出。
/ workspace $ gcc -o AvgFor AvgFor.c
/ workspace $ ./AvgFor
要输入的值的总数: 2 请输入值1:10 请输入值2:10 平均是:6.000000
我期望的是10 + 10 =20。然后20/2 = 10
答案 0 :(得分:2)
计算sum/num
时,两个参数的类型均为int
,因此将执行整数除法,这意味着任何小数部分都会被截断。这种情况发生在之前将结果分配给avg
。
您需要将至少一个参数强制转换为float
才能执行浮点除法:
avg = (float)sum/num;
答案 1 :(得分:1)
sum和num都是整数,因此即使您随后将其分配给浮点数,也将提供整数答案。
将sum更改为float或double,并允许使用十进制值。
答案 2 :(得分:1)
sum/num
是整数除法。使用目的地的类型。我更喜欢避免强制转换,因为它们可以在更新代码时意外截断信息。
avg = sum;
avg /= num;
// alternative
avg = 1.0*sum/num;
在这里很少用float
作为商,建议使用double
。
// float avg=0;
double avg=0;
关闭1,使用counter
。 @Chris
avg = sum;
avg /=counter;
在C中,对<
的迭代比<=
更为惯用。正确地完成上述划分,无论哪种方法都可以在这里工作。
// for (num=1;num<=counter;num++)
for (num=0; num<counter; num++)
printf("Please enter value %d :",num+1);