本章分支结构的学习内容如下:
三、C语言中的分支与循环—if语句 (1)
三、C语言中的分支与循环—关系操作符 (2)
三、C语言中的分支与循环—条件操作符 与逻辑操作符(3)
三、C语言中的分支与循环—switch语句(4)分支结构 完
本章循环结构的学习内容如下:
三、C语言中的分支与循环—while循环 (5)
三、C语言中的分支与循环—for循环 (6)
三、C语言中的分支与循环—do-while循环 (7)
三、C语言中的分支与循环—break和continue语句(8)循环结构 完
1. switch基本语法
在C语言中,switch
语句是一种多分支选择结构,用于基于不同的条件执行不同的代码块。
switch (expression) {
case constant1:
// 代码块 1
break;
case constant2:
// 代码块 2
break;
...
default:
// 默认代码块
}
1)switch (expression)
这是 `switch` 语句的开始,其中 `expression` 是一个返回整数类型值的表达式(通常是 `int` 或 `char` 类型)。
2)case constantX:
这些是不同的情况标签。`constantX` 必须是一个整型常量表达式,用于与 `switch` 中的 `expression` 进行比较。如果 `expression` 的值与 `case` 标签的值匹配,则执行该 `case` 语句下的代码块。
3) break;
`break` 语句用于结束当前 `case` 的执行,并跳出整个 `switch` 结构。如果没有 `break`,程序会继续执行下一个 `case` 的代码(即使条件不匹配),这被称为“穿透”(fall-through)。
4) default:
这是可选的,默认情况下的代码块。如果 `expression` 的值与任何 `case` 标签都不匹配,将执行 `default` 下的代码。`default` 情况不需要 `break` 语句,因为它本身就是 `switch` 语句的最后一部分。
5) 代码练习1
int main()
{
int num = 3;
switch (num) {
case 1:
printf("Number is 1\n");
break;
case 2:
printf("Number is 2\n");
break;
case 3:
printf("Number is 3\n");
break;
default:
printf("Number is not 1, 2, or 3\n");
}
return 0;
}
- `case` 标签的值必须是唯一的。
- `switch` 语句中的 `expression` 必须是整数类型,如 `int`、`char`。
- 不要忘记在每个 `case` 之后使用 `break`,除非你有意想要实现穿透行为。
6)代码练习2,与if-else结构的区别
练习:输⼊任意⼀个整数值,计算除3之后的余数
if-else
//练习:输⼊任意⼀个整数值,计算除3之后的余数
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 3 == 0)
printf("%d整除3,余数为0\n", num);
else if (num % 3 == 1)
printf("%d整除3,余数为1\n", num);
else if (num % 3 == 2)
printf("%d整除3,余数为2\n", num);
return 0;
}
switch
特别注意
int main()
{
int num = 0;
scanf("%d", &num);
switch (num % 3) {
case 0 :
printf("%d整除3,余数为0\n", num);
break;
case 1 :
printf("%d整除3,余数为1\n", num);
break;
case 2 :
printf("%d整除3,余数为2\n", num);
break;
}
return 0;
}
7) `switch` 语句中的 `expression` 必须是整数类型,如 `int`、`char`。具体示例
字符是以ASCII码形式存储的,ASCII码是整数,所以字符属于整型家族
case后面必须是整型常量表达式,比如case 1: case 1+3: case'm': 等等,不能是case m:。
2. break 语句与穿透行为
1) 需要利用 'break' 实现分支功能的情况示例1
2) 需要利用 'break' 实现分支功能的情况示例2
//练习输⼊⼀个1~7的数字,打印对应的星期几
int main()
{
int day = 0;
scanf("%d", &day);
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("输入出错\n");
}
return 0;
}
3)刻意的穿透行为
如果需求发生变化,变为:
1. 输⼊1-5,输出的是“工作日”;
2. 输⼊6-7,输出“休息日”
int main()
{
int day = 0;
scanf("%d", &day);
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入出错\n");
}
return 0;
}
3.switch语句中的default
4.switch语句中的case和default的顺序问题
顺序不影响功能:case和 default
的顺序不会影响 switch
语句的功能。无论它们出现的顺序如何,只要满足匹配条件的 case
就会被执行。如果没有任何 case
匹配,且存在 default
标签,则执行 default
块。