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

如何用switch语句编写C程序求三个数最大值?现有程序故障求解

问题分析与解决方案

首先,你的程序存在几处语法和逻辑错误,直接导致无法正常运行:

1. 基础语法错误

  • printf 字符串中的换行需用转义字符 \n,你直接换行的写法会触发编译错误。
  • scanf 调用时未给变量添加取地址符 &,scanf 需要变量的内存地址才能将输入值写入变量,缺失 & 会引发未定义行为(程序崩溃或输出乱码)。

2. Switch 结构逻辑完全错误

你嵌套的 switch 不符合语法规则:case 和 default 必须直接归属对应的 switch 代码块,写在 break 之后的代码永远不会被执行。同时你的分支逻辑没有覆盖所有可能的大小关系,比如当 num1 不大于 num2 时,外层 switch 没有对应的 case 0 分支,程序无法进入有效逻辑。


能不能用 Switch 实现求三个数最大值?

理论上可以,但非常不推荐——switch 是为离散固定值的分支场景设计的,而比较大小的逻辑用 if-else 会更直观、可读性更强。如果一定要用 switch,需要通过组合比较结果的逻辑值来覆盖所有可能的情况。

坚持用 Switch 的正确实现

#include <stdio.h>

int main()
{
    int num1, num2, num3;
    printf("Enter three integers to find maximum: \n");
    // 添加取地址符&,让scanf能正确写入变量
    scanf("%d%d%d", &num1, &num2, &num3);
    
    // 将三次比较的结果组合成整数,作为switch的分支判断依据
    switch ((num1 > num2) * 4 + (num1 > num3) * 2 + (num2 > num3) * 1)
    {
        case 7:
        case 6:
            printf("%d is maximum\n", num1);
            break;
        case 4:
            printf("%d is maximum\n", num3);
            break;
        case 3:
        case 1:
            printf("%d is maximum\n", num2);
            break;
        case 0:
            printf("%d is maximum\n", num3);
            break;
    }
    return 0;
}

更推荐的简洁实现(if-else)

#include <stdio.h>

int main()
{
    int num1, num2, num3, max;
    printf("Enter three integers to find maximum: \n");
    scanf("%d%d%d", &num1, &num2, &num3);
    
    if (num1 >= num2 && num1 >= num3) {
        max = num1;
    } else if (num2 >= num1 && num2 >= num3) {
        max = num2;
    } else {
        max = num3;
    }
    printf("%d is maximum\n", max);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:46