• C
  • C 语言多分支选择结构`switch` 语句概述

  • @ 2025-3-24 12:05:28

1. switch 语句概述

在 C 语言中,switch 语句是一种多分支选择结构,用于根据一个表达式的值来选择执行不同的代码块。它提供了一种简洁、清晰的方式来处理多个可能的取值情况,避免了使用大量嵌套的 if - else if 语句,使代码更加易读和易维护。

2. 语法结构

switch (表达式) {
    case 常量表达式1:
        语句块1;
        break;
    case 常量表达式2:
        语句块2;
        break;
    // 可以有多个 case 分支
    case 常量表达式n:
        语句块n;
        break;
    default:
        语句块n + 1;
}
  • 表达式switch 后面括号内的表达式,其值必须是整型(如 intchar 等)。
  • 常量表达式case 后面跟随的常量表达式,它必须是整型常量或字符常量,并且每个 case 后面的常量表达式的值必须唯一。
  • 语句块:当 表达式 的值与某个 case 后面的 常量表达式 的值相等时,就会执行该 case 对应的语句块。
  • break 语句:用于跳出 switch 语句。如果没有 break 语句,程序会继续执行下一个 case 分支的语句,直到遇到 break 或者 switch 语句结束,这被称为“穿透”现象。
  • default 分支:是可选的。当 表达式 的值与所有 case 后面的 常量表达式 的值都不匹配时,会执行 default 后面的语句块。

3. 执行流程

  1. 计算 switch 后面 表达式 的值。
  2. 将该值依次与各个 case 后面的 常量表达式 的值进行比较。
  3. 如果找到匹配的 case,则执行该 case 后面的语句块,直到遇到 break 语句,然后跳出 switch 语句。
  4. 如果没有找到匹配的 case,且存在 default 分支,则执行 default 后面的语句块;如果没有 default 分支,则直接跳出 switch 语句。

4. 示例代码及详细解释

示例 1:根据输入的数字输出对应的星期几

#include <stdio.h>

int main() {
    int day;
    // 提示用户输入一个 1 - 7 之间的整数
    printf("请输入一个 1 - 7 之间的整数:");
    // 从标准输入读取用户输入的整数
    scanf("%d", &day);

    switch (day) {
        case 1:
            // 若输入为 1,输出星期一
            printf("星期一\n");
            break;
        case 2:
            // 若输入为 2,输出星期二
            printf("星期二\n");
            break;
        case 3:
            // 若输入为 3,输出星期三
            printf("星期三\n");
            break;
        case 4:
            // 若输入为 4,输出星期四
            printf("星期四\n");
            break;
        case 5:
            // 若输入为 5,输出星期五
            printf("星期五\n");
            break;
        case 6:
            // 若输入为 6,输出星期六
            printf("星期六\n");
            break;
        case 7:
            // 若输入为 7,输出星期日
            printf("星期日\n");
            break;
        default:
            // 若输入不在 1 - 7 之间,输出输入无效
            printf("输入无效,请输入 1 - 7 之间的整数。\n");
    }

    return 0;
}
  • 代码解释
    • #include <stdio.h>:引入标准输入输出库,以便使用 printfscanf 函数。
    • int day;:定义一个整型变量 day 用于存储用户输入的数字。
    • printf("请输入一个 1 - 7 之间的整数:");scanf("%d", &day);:提示用户输入一个 1 - 7 之间的整数,并将用户输入的值存储到 day 变量中。
    • switch (day):根据 day 的值进行分支选择。
    • 各个 case 分支根据 day 的不同取值输出对应的星期几,每个 case 分支最后都有 break 语句,防止出现穿透现象。
    • default 分支:当用户输入的值不在 1 - 7 之间时,输出错误提示信息。

示例 2:根据输入的字符判断是元音字母还是辅音字母

#include <stdio.h>

int main() {
    char ch;
    // 提示用户输入一个字母
    printf("请输入一个字母:");
    // 从标准输入读取用户输入的字符
    scanf(" %c", &ch);

    switch (ch) {
        case 'a':
        case 'A':
        case 'e':
        case 'E':
        case 'i':
        case 'I':
        case 'o':
        case 'O':
        case 'u':
        case 'U':
            // 若输入的是元音字母,输出是元音字母
            printf("%c 是元音字母。\n", ch);
            break;
        default:
            // 若输入的不是元音字母,输出是辅音字母
            printf("%c 是辅音字母。\n", ch);
    }

    return 0;
}
  • 代码解释
    • char ch;:定义一个字符型变量 ch 用于存储用户输入的字母。
    • scanf(" %c", &ch);:在 %c 前面加一个空格,是为了跳过输入缓冲区中的空白字符(如换行符),确保正确读取用户输入的字符。
    • 多个 case 分支共用一个语句块,利用了穿透现象。当输入的字符是元音字母时,会依次匹配到对应的 case 分支,由于没有 break 语句,会继续执行后面的语句块,最终输出该字符是元音字母。
    • default 分支:当输入的字符不是元音字母时,输出该字符是辅音字母。

5. 使用注意事项

  • break 语句的使用:如果需要在执行完一个 case 分支后跳出 switch 语句,一定要使用 break 语句。否则,程序会继续执行下一个 case 分支的语句,可能会导致意外的结果。
  • 常量表达式的唯一性:每个 case 后面的常量表达式的值必须唯一,否则会导致编译错误。
  • default 分支的位置default 分支可以放在 switch 语句的任何位置,但通常习惯放在最后。无论放在哪里,它的作用都是在没有匹配到任何 case 分支时执行。

通过 switch 语句,你可以更方便地处理多种不同的情况,使代码结构更加清晰。

0 条评论

目前还没有评论...