为什么错了
#include<stdio.h>int main()
{
int a, b, c;
scanf("%d %d %d",&a,&b,&c);
int max,min,med;
max = (a > b) ? a : b;
med = (a > b) ? b : a;
if (max > c && med >c)
max = max;
med = med;
min = c;
else if (max > c && med < c)
max = max;
min = med;
med = c;
else if (max < c && med <c)
med = max;
min = med;
max = c;
printf("%d%d%d",min,med,max);
return 0;
} 问题出在代码的if-else语句块中。在C语言中,每个if语句只能对应一个else语句,而你的代码中却有多个else if语句。
正确的写法应该是使用嵌套的if-else语句来实现多个条件的判断。以下是修正后的代码:
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int max, min, med;
max = (a > b) ? a : b;
med = (a > b) ? b : a;
if (max > c && med > c) {
min = c;
} else if (max > c && med < c) {
min = med;
med = c;
} else if (max < c && med < c) {
med = max;
min = med;
max = c;
}
printf("%d%d%d", min, med, max);
return 0;
}
修正后的代码中,使用了嵌套的if-else语句来根据不同的条件进行判断,并正确地更新了变量的值。 看起来你的代码意图是找出三个数中的最大值、最小值和中间值,但是代码存在一些逻辑错误。
首先,你在if-else语句中没有正确地比较a、b和c的值,导致最大值、最小值和中间值的赋值出现错误。
其次,你的代码没有处理所有可能的情况,例如当c是最大值时的情况。
最后,你的代码在最后的printf语句中打印了最小值、中间值和最大值,但是它们被打印成了三个数字,应该用空格或者其它分隔符隔开。
以下是修改后的代码:
#include<stdio.h>
int main()
{
int a, b, c;
scanf("%d %d %d",&a,&b,&c);
int max,min,med;
// 比较a、b的大小,找出最大值
max = (a > b) ? a : b;
// 比较a、b的大小,找出最小值
min = (a < b) ? a : b;
// 如果c既不是最大值也不是最小值,那么它就是中间值
if (c <= max && c >= min) {
med = c;
} else { // 如果c是最大值或者最小值,那么中间值就是a或b中不是最大值也不是最小值的数
med = (max == a) ? b : a;
}
printf("%d %d %d",min,med,max); // 打印最小值、中间值和最大值,用空格隔开
return 0;
}
这个修改后的代码可以正确地找出三个数中的最大值、最小值和中间值。
页:
[1]