C程序没有给出正确的输出

时间:2015-01-26 13:26:19

标签: c

#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显示失败。但它将是甲级联赛。 这个程序有什么问题?

2 个答案:

答案 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),或者从结果中确定您想要的内容(舍入/分隔整数部分来自余数/只是整数部分)