用C语言编程,用for循环查找用户定义的平均值



平均调用没有输出正确的平均值。有人能帮我找出我做错了什么吗?

#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);

最新更新