You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用if语句实现三个整数升序排序出错,求解决方法

解决三个整数升序排序的问题

嘿,我来帮你排查这个排序异常的问题~

问题根源

你的代码里用了链式的else if判断,这是导致排序失败的关键!else if的逻辑是:只要前面的某个条件成立,后面的所有判断都会被直接跳过,不会执行。

拿你输入的8、6、3举例:

  1. 第一个条件a > b(8>6)成立,交换后a=6,b=8,c=3;
  2. 因为第一个if已经执行了,后面的else if (b > c)和else if (c > a)都不会被触发,所以c=3根本没机会被交换到正确的位置,最终输出6、8、3。

修正方案:用独立的if做完整两两比较

要给三个数正确升序排序,需要确保每一对数都被比较到,而且每一步的判断都是独立的,不受前面结果的影响。我们可以分三步来保证顺序:

  1. 先确保a是三个数里最小的;
  2. 再确保b是剩下两个数里较小的;
  3. 最后c自然就是最大的。

修正后的代码如下:

#include <stdio.h>
int main() {
    int a, b, c, temp;
    scanf("%d %d %d", &a, &b, &c);
    
    // 确保a <= b
    if (a > b) {
        temp = a;
        a = b;
        b = temp;
    }
    // 确保a <= c(此时a可能还是比c大,比如交换b后)
    if (a > c) {
        temp = a;
        a = c;
        c = temp;
    }
    // 确保b <= c(经过前两步后,b可能还是比c大)
    if (b > c) {
        temp = b;
        b = c;
        c = temp;
    }
    
    printf("%d %d %d", a, b, c);
    return 0;
}

测试验证

用输入8、6、3测试:

  1. 第一步交换a和b,得到6、8、3;
  2. 第二步比较a=6和c=3,交换后得到3、8、6;
  3. 第三步比较b=8和c=6,交换后得到3、6、8;
    最终输出正确的升序结果。

内容的提问来源于stack exchange,提问作者Maryam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:11:43