平均调用没有输出正确的平均值。有人能帮我找出我做错了什么吗?
#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 : %fn",avg);
}
我得到的输出。
/工作区$gcc-o AvgFor AvgFor.c
/工作区$/的平均值
要输入的值的数目:2.请输入值1:10请输入值2:10平均值为:6.000000
我期望的是10+10=20。然后20/2=10
计算sum/num
时,两个参数的类型都是int
,因此执行整数除法,这意味着任何小数部分都将被截断。这种情况发生在结果分配给avg
之前。
您需要向float
强制转换至少一个参数才能执行浮点除法:
avg = (float)sum/num;
sum和num都是整数,因此将提供一个整数答案,即使您随后将其分配给浮点值。
将sum更改为float或double,它允许使用十进制值。
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);