我正在使用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);
}
答案 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”的说明符更正确。但是,这对此没有影响 输出
我希望它有所帮助!祝你有美好的一天!