#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。
答案 0 :(得分:1)
尝试以下修复。
请注意40.0
和20.0
,而不是40
和20
。问题是你在进行整数除法。 40 / 100 == 0
,da
总是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/100
和hra = 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;
}