- 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 条评论
目前还没有评论...