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

C语言程序优化:实现任意输入顺序的三数大小排序输出

解决C语言三数排序问题(不受输入顺序影响)

你的代码存在几个关键问题,导致只能处理特定顺序的输入:

  • 变量初始化不合理:highestNumber、middleNumber、lowestNumber初始为0,若输入全负数会完全失效
  • 条件判断逻辑有漏洞:首次输入时middleNumber和lowestNumber都是0,后续判断无法正确赋值
  • 变量名拼写错误:printf里的highiestNumber是笔误,应为highestNumber

下面提供两种可靠的修改方案:

方案1:数组存储后排序(简单直观)

把输入的三个数存入数组,通过简单排序后输出,逻辑清晰不易出错:

#include <stdio.h>

int main() {
    int nums[3];
    
    // 输入三个数(提示改为1、2、3,更符合用户习惯)
    for (int i = 0; i < 3; i++) {
        printf("Type the %d number: ", i + 1);
        scanf("%d", &nums[i]);
    }
    
    // 针对三个数的简化冒泡排序
    int temp;
    if (nums[0] > nums[1]) {
        temp = nums[0];
        nums[0] = nums[1];
        nums[1] = temp;
    }
    if (nums[0] > nums[2]) {
        temp = nums[0];
        nums[0] = nums[2];
        nums[2] = temp;
    }
    if (nums[1] > nums[2]) {
        temp = nums[1];
        nums[1] = nums[2];
        nums[2] = temp;
    }
    
    // 输出排序后的结果
    printf("The highest number is: %d, the middle number is: %d and the lowest number is %d.\n", nums[2], nums[1], nums[0]);
    
    return 0;
}

方案2:动态维护三个值(无需数组)

每次输入后直接更新最大值、中间值、最小值,无需额外数组存储:

#include <stdio.h>

int main() {
    int num, highest, middle, lowest;
    
    // 输入第一个数,初始化三个变量
    printf("Type the 1st number: ");
    scanf("%d", &num);
    highest = middle = lowest = num;
    
    // 处理第二个数
    printf("Type the 2nd number: ");
    scanf("%d", &num);
    if (num > highest) {
        lowest = middle;
        middle = highest;
        highest = num;
    } else if (num < lowest) {
        highest = middle;
        middle = lowest;
        lowest = num;
    } else {
        middle = num;
    }
    
    // 处理第三个数
    printf("Type the 3rd number: ");
    scanf("%d", &num);
    if (num > highest) {
        lowest = middle;
        middle = highest;
        highest = num;
    } else if (num < lowest) {
        highest = middle;
        middle = lowest;
        lowest = num;
    } else {
        if (num > middle) {
            lowest = middle;
            middle = num;
        } else if (num < middle) {
            highest = middle;
            middle = num;
        }
    }
    
    printf("The highest number is: %d, the middle number is: %d and the lowest number is %d.\n", highest, middle, lowest);
    
    return 0;
}

两种方案都能处理任意输入顺序的三个不同数字,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:03:38