为什么这段代码没有提供所需的输出

时间:2017-09-17 07:05:31

标签: c

#include <stdio.h>

//Compiler version gcc 6.3.0

int main() {

    float da,hra,s,gs;

    scanf("%f",&s);

    da=40/100*s; hra=20/100*s;

    gs=s+da+hra;

    printf("%f",gs);

    return 0; 
}

例如,如果我为s输入25000,则输出必须为40000但显示为25000.000000。

2 个答案:

答案 0 :(得分:1)

尝试以下修复。

请注意40.020.0,而不是4020。问题是你在进行整数除法。 40 / 100 == 0da总是0。使用40.0 / 100代替您为浮点除法和值0.4,这是您想要使计算正确的。 (同样适用于hra的计算。)

#include <stdio.h>

int main() {
    float da, hra, s, gs;

    scanf("%f", &s);

    da = 40.0 / 100 * s;
    hra = 20.0 / 100 * s;
    gs = s + da + hra;

    printf("%f", gs);

    return 0;
}

答案 1 :(得分:0)

在c中,当表达式中发生多个操作时,每个部分都以预定的顺序进行评估和解析,称为运算符优先级(优先级),但乘法和除法具有相同的优先级,因此如果两个运算符相同优先级出现在表达式中,运算符的 associativity 表示它们执行的顺序。这里的关联性是从左到右。 (你可以在这里阅读更多相关信息What is associativity of operators and why is it important?)。

因此,当从左到右进行评估时,40/100进行整数除法得到0,当用s加倍时, da 的结果也是0,并且与 hra 相同给出结果25000。 你所要做的就是写

da = s*40/100hra = s*20/100

整个 value将被视为浮点数,您的结果将是正确的。 如下所述,

#include<stdio.h>

//Compiler version gcc 6.3.0

int main() {

float da, hra, s, gs;

scanf("%f",&s);

da = s*40/100; 
hra = s*20/100;

gs=s+da+hra;
printf("s=%f, da=%f, hra=%f\n",s,da,hra);

printf("%f",gs);

return 0; 
}