- 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
后面括号内的表达式,其值必须是整型(如int
、char
等)。 - 常量表达式:
case
后面跟随的常量表达式,它必须是整型常量或字符常量,并且每个case
后面的常量表达式的值必须唯一。 - 语句块:当
表达式
的值与某个case
后面的常量表达式
的值相等时,就会执行该case
对应的语句块。 break
语句:用于跳出switch
语句。如果没有break
语句,程序会继续执行下一个case
分支的语句,直到遇到break
或者switch
语句结束,这被称为“穿透”现象。default
分支:是可选的。当表达式
的值与所有case
后面的常量表达式
的值都不匹配时,会执行default
后面的语句块。
3. 执行流程
- 计算
switch
后面表达式
的值。 - 将该值依次与各个
case
后面的常量表达式
的值进行比较。 - 如果找到匹配的
case
,则执行该case
后面的语句块,直到遇到break
语句,然后跳出switch
语句。 - 如果没有找到匹配的
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>
:引入标准输入输出库,以便使用printf
和scanf
函数。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 条评论
目前还没有评论...