C程序中的浮点输出不正确
这是我的密码C程序中的浮点输出不正确,c,C,这是我的密码 #include <stdio.h> int main() { float percentage; int sp; int bp; percentage = (sp-bp)/bp*100; scanf("%d %d", &sp, &bp ); printf("%.2f%%", percentage); return 0; } 样本输出: 76.47% 但我的输出是: -100.00% 有人能帮我解决
#include <stdio.h>
int main() {
float percentage;
int sp;
int bp;
percentage = (sp-bp)/bp*100;
scanf("%d %d", &sp, &bp );
printf("%.2f%%", percentage);
return 0;
}
样本输出:
76.47%
但我的输出是:
-100.00%
有人能帮我解决这个问题吗?解释很快就会补充 代码
#include <stdio.h>
int main()
{
float percentage=0;
int sp=0;
int bp=0;
scanf("%d%d", &sp, &bp );
//printf("\n%d%d", bp,sp);
percentage = (sp-bp)/(float)bp*100;
printf("%.2f%%", percentage);
}
因为当我们在函数中声明一个变量时,它不是initiate,而是垃圾值。这可能会导致未定义的行为。请参阅
假设scanf()
无法正常工作,且整数sp
和bp
值保留默认值。如果我们不启动它们,垃圾值仍然存在
一次声明和定义并初始化为零。
将(float)
显式转换添加到除法
(sp-bp)/(float)bp*100;
在C语言中,一个整型数除以另一个整型数转换成整型数,小数部分丢失,因为它被截断了。
首先,在使用这些值之前,您应该真正阅读它们:
scanf("%d %d", &sp, &bp);
percentage = ...
第二,这:
percentage = (sp-bp)/bp*100;
执行整数除法,因此除法的其余部分将被完全丢弃,您将得到以下结果:
(150 - 85) / 85 == 0
0 * 100 == 0.
在执行操作之前,应将除法的一端强制转换为浮动:
percentage = (sp-bp)/(float)bp * 100;
正确代码:
#include <stdio.h>
int main() {
float percentage;
int sp;
int bp;
scanf("%d %d", &sp, &bp);
percentage = (sp-bp)/(float)bp * 100;
printf("%.2f%%", percentage);
return 0;
}
#包括
int main(){
浮动百分比;
int sp;
int-bp;
scanf(“%d%d”,&sp,&bp);
百分比=(标普bp)/(浮动)bp*100;
printf(“%.2f%%”,百分比);
返回0;
}
欢迎来到SO!为什么百分比=(sp bp)/bp*100在初始化值的scanf
调用上方的code>?程序自上而下运行,所以这是用一堆未初始化的变量进行算术运算。@ggorlen这就是问题之一。还有一个问题是对整数类型执行算术,并期望得到浮点类型的结果
percentage = (sp-bp)/(float)bp * 100;
#include <stdio.h>
int main() {
float percentage;
int sp;
int bp;
scanf("%d %d", &sp, &bp);
percentage = (sp-bp)/(float)bp * 100;
printf("%.2f%%", percentage);
return 0;
}