C++疑问
【问题描述】求实数的绝对值。
【输入形式】输入数据包含一个实数。
【输出形式】对于输入数据,输出它的绝对值,结果保留两位小数。
【样例输入】123
【样例输出】123.00
有两个正确输出,分别是23.00和345.12
# include
int main()
{
float a;
float b;
scanf("%f",&a);
if (a>0) printf("%.2f",a);
else
b=0;
b=-a;
printf("%.2f",b);
return 0;
}
错误输出①:
234.00-234.00
期望输出:
234.00
错误输出②:
12343457792.00-12343457792.00
期望输出:
12343457678.99
为啥错了?
参考GPT和自己的思路:
你的代码有两个问题:
if (a > 0) {
printf("%.2f", a);
}
if (a > 0) {
printf("%.2f", a);
} else {
float b = -a;
printf("%.2f", b);
}
这样就能正确输出题目要求的绝对值了。参考GPT和自己的思路:
这个问题的错误在于在else语句下只给b赋了初始值0,而没有加上大括号来限定语句执行的范围。因此,当a小于等于0时,只有b=0这一句代码被执行,然后程序继续往下执行,b的值被赋为-a,导致最终输出的结果是负数。修复方法是在else语句下加上大括号来限定执行的语句范围。以下是修复后的代码:
#include <stdio.h>
int main() {
float a, b;
scanf("%f", &a);
if (a >= 0) {
printf("%.2f", a);
} else {
b = -a;
printf("%.2f", b);
}
return 0;
}
这样的话,当a小于等于0时,else后面的所有语句都会被执行,保证b的值正确。