#include<stdio.h>
main()
{
int m1, m2, m3, m4, m5, per;
printf("Enter marks in five subjects");
scanf("%d %d %d %d %d", &m1, &m2, &m3, &m4, &m5);
per=(m1+m2+m3+m4+m5)/500*100;
if(per>=60)
printf("First division");
else if(per>=50)
printf("Second division");
else if(per>=40)
printf("Third division");
else
printf("Fail");
}
在五个科目100,100,10,50,60中输入标记 给这个输入printf显示失败。但它将是甲级联赛。 这个程序有什么问题?
答案 0 :(得分:3)
您正在执行整数除法
per=(m1+m2+m3+m4+m5)/500*100;
将其更改为
per = ((float)(m1 + m2 + m3 + m4 + m5)) / 500 * 100;
并且由于每个mn
的最大值为100
所以其总和的最大值为500
,如果它小于500
整数除法收益总是0
。
答案 1 :(得分:1)
Iharob是对的 - 问题在于进行整数除法(即int_operator / int_operator),并且只有在乘法工作之后才会有效。
Iharob解决方案的修改也可以是:
per = (m1 + m2 + m3 + m4 + m5) / 500.0 * 100; // now 500.0 is of double type
但是将float(或double)值赋给整数变量并不总是好主意,因为int的范围较小。因此,优化表达式会更好,例如:
per=(m1+m2+m3+m4+m5)/5;
此外,您可以将per
的类型更改为float(或double),或者从结果中确定您想要的内容(舍入/分隔整数部分来自余数/只是整数部分)