使用C进行编程,以查找用户定义的带有for循环的平均值

时间:2018-11-02 15:38:04

标签: c

平均值呼叫未输出正确的平均值。有人可以帮助我弄清楚我在做什么错吗?

#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

3 个答案:

答案 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);