float variable-c中的错误

时间:2013-12-28 13:44:37

标签: c variables floating-point

朋友我是一名计算机科学专业的学生,​​我的讲师给了我一个编写程序的任务,将20个数字输入到数组中并计算标记的总数和平均值。所以我写了上面的代码作为答案。现在我检查输入的答案平均有一个小错误。如果正确的平均值是48.59,程序给出平均值为48.00.i试图解决问题,我无法做到这一点。有人帮我吗?

我正在使用CODEBLOCK来编写程序。

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int grades[20];
   int a,b,c,d,tot=0,high=0;
   float avg=0;
   for(a=0;a<20;a++)
    {
        printf("Input the Mark : ");
        scanf("%d",&d);

        if(d>=0&&d<=100)
            grades[a]=d;
        else
    {
            printf("OUT OF RANGE.PLEASE INPUT A VALID NUMBER.\n");
            a--;
    }
}
for(b=0;b<20;b++)
{
    tot=tot+grades[b];
}

avg=tot/20;

high=grades[0];
for(c=0;c<20;c++)
{
    if(high<grades[c])
        high=grades[c];
}
printf("The Total Value is : %d\nThe Average is : %.02f\nHighest Value is : %d",tot,avg,high);

}

2 个答案:

答案 0 :(得分:7)

以下使用整数除法(即使将结果存储在浮点变量中):

avg=tot/20;

要强制进行浮点除法,请使用:

avg=tot/20.0;

答案 1 :(得分:1)

avg=tot/20;

这里的问题是tot和20是整数。 tot / 20的算术除法 产生另一个整数,而不是浮点数。结果将提升为 浮点在被赋值给浮点变量avg之前,但是小数部分 由于整数除法,因此不存在。

解决方案非常简单。

avg = tot/20.0

通过向除数添加小数,即将20更改为20.0,除法为 提升为浮点除法,而不是整数除法,因为其中之一 操作数是一个浮点数(20.0)。

或者,您可以将其中一个整数转换为浮点。

avg = (float)tot/20

这样做是将整数tot转换为之前的浮点数 分裂发生,具有与向对方附加小数部分相同的效果 操作数。

此外,在此浮点值“%。02f”的printf格式说明符中,前导零 没必要。 “%。2f”的说明符更正确。但是,这对此没有影响 输出

我希望它有所帮助!祝你有美好的一天!