1215787625 发表于 2023-10-25 20:24:36

为什么错了

#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;

}

isdkz 发表于 2023-10-25 20:25:01

问题出在代码的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语句来根据不同的条件进行判断,并正确地更新了变量的值。

六翻了 发表于 2023-10-26 10:05:08

看起来你的代码意图是找出三个数中的最大值、最小值和中间值,但是代码存在一些逻辑错误。

首先,你在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]
查看完整版本: 为什么错了