三、C语言中的分支与循环—switch语句(4)分支结构 完

本章分支结构的学习内容如下:

三、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

特别注意

1. case 和后边的数字之间必须有空格
2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个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 语句与穿透行为

switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。

1) 需要利用 'break' 实现分支功能的情况示例1

如果我们没有在上面练习题的代码写上break语句,看看结果如何
我们可以看到没有 `break`,程序会继续执行下一个 `case` 的代码(即使条件不匹配),这种现象被称为“穿透”。

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

在使用 switch 语句的时候,我们经常可能遇到⼀种情况,比如  switch 后的表达式中的值无法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入 default 子句。
在上面的代码中,我们已经了解到了default:的用法,比如当我们输入了除了1-7以外的数,我们可以打印显示输入出错。

4.switch语句中的case和default的顺序问题

顺序不影响功能:case和 default 的顺序不会影响 switch 语句的功能。无论它们出现的顺序如何,只要满足匹配条件的 case 就会被执行。如果没有任何 case 匹配,且存在 default 标签,则执行 default 块。

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林采采学编程+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值