【C语言初阶】分支语句 —— switch语句

【C语言初阶】分支语句 —— switch语句

3 switch 语句

switch 语句是一种多分支选择语句

当遇到如下例子时:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

如果继续使用 if 语句实现上述内容,会变得复杂繁琐,而此时就可以使用 switch 语句进行代替。


3.1 switch - 流程图

switch语句


3.2 switch 语句的语法

switch(expression)
{
    case constant-expression :
       statement(s);
       break; /* 可选择的 */
    case constant-expression :
       statement(s);
       break; /* 可选择的 */
    
  	/* 可以有任意数量的 case 语句 */
    ...

    default : /* 可选择的 */
       statement(s);
       break; /* 可选择的 */
}

解释说明

1 switch(expression)

  switch 语句中的 expression 表达式必须是一个整型表达式

2 case constant-expression : :这样用来表示程序跳转的标识称为标签(label)

  在一个 switch 中可以有任意数量的 case 语句每个 case 后跟一个要比较的值和一个冒号

  标签的值必须是整型常量(整型常量表达式),不可以是变量。

  不允许多个标签同为一个值

  当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。

3 break;

  执行 break 语句之后,程序会跳出将它围起来的 switch 语句

4 default :

  当控制表达式的判断结果与任何一个 case 都不一致的时候,程序就会跳转到 default : 继续执行。

5 在最后一个 case 的末尾也加上 break 语句的话,就可以灵活对 case 的增加或删除了。

6 switch 语句中的 case 标签可以根据具体实现要求任意顺序书写,当然不同的标签顺序会影响程序的执行结果。

简要总结

//switch语句中的表达式必须是一个整型表达式。
//case语句是分支入口,switch中可以由任意数量的case分支。
//不同case分支后的整型常量表达式的值不能相同。
//break语句用来跳出一层switch语句,根据实际需求添加。

//当switch表达式的值不满足任意case分支时,程序会跳转到default子句执行;若此时也无default子句,则跳过	switch语句继续执行后续其他语句。
//switch语句中的case分支与default子句位置可以是任意的,不同的分支顺序会影响程序的执行结果,根据实际需求书写。


3.3 switch 中的 break 语句

当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行,继续执行后续语句。

3.3.1 示例1

输入一个数字,打印对应的星期。

代码示例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	//输入一个数字,打印对应的星期

	int day = 0;
	printf("星期几?(1~7):>");
	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");
			break;
	}

	return 0;
}

解释说明:

1 输入 day 的值后,遇到 switch 语句,判断表达式 day 的结果,根据结果在 case 分支中寻找相同的值

  找到后,就跳转到对应的 case 分支,按照书写顺序执行后面的语句,如果遇到 break 语句就跳出 switch 语句。

  如果没找到相同的值。就跳转到 default 子句,继续执行。


3.3.2 示例2

判断今天是工作日还是休息日。

代码示例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	//判断今天是工作日还是休息日

	int day = 0;
	scanf("%d", &day);

	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	default:
		printf("输入错误,请重新输入!\n");
		break;
	}

	return 0;
}

解释说明:

1 case 1: 、case 2: 、case 3: 、case 4: 、case 5: case 6: 、case 7: 不同的分支实现相同的效果

2 当表达式的结果与 case 分支匹配成功后,case 会顺序执行后续语句,直到遇到 break 语句跳出 switch 为止。

3 break 语句的作用是把语句列表划分为不同的分支


3.4 default 子句

如果表达式的值与所有的 case 标签的值都不匹配,就会跳过所有语句,继续执行 switch 后的其他语句。

如果不想忽略不匹配所有标签的表达式的值时,可以添加 default 子句

3.4.1 注意要点
  • default 可以写在任意一个 case 标签可以出现的位置。也就是说 default 的书写位置任意

  • 每个 switch 语句中只能出现一条 default 子句

  • 可以在每个 switch 语句中都添加一条 default 子句,并在其后再加上一条 break 语句。


3.4.2 switch 语句的练习

switch 的嵌套

代码示例

#include<stdio.h>

int main()
{
	//switch练习题

	int n = 1;
	int m = 2;

	switch (n)
	{
	case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)//17行,switch允许嵌套使用
		{
		case 1:
			n++;
		case 2:
			m++;
			n++;
			break;//24行
		}
	case 4:
		m++;
		break;
	default:
		break;
	}

	printf("m = %d,n = %d\n", m, n);//5 3

	return 0;
}

解释说明:

1 switch 语句中可以嵌套 switch 语句。见第17行。

2 break 语句只能跳出一层 switch 语句。见第24行。

3 case 分支中如果没有遇到 break 语句,就会继续执行后续语句


总结:

  本节介绍了分支语句中的switch 语句;给出了 switch 语句的使用规则、以及breakswitch 语句中的作用;同时又讲解了 switchdefault 子句的用法。


感谢您的阅读!如有任何错误,欢迎您的批评指正!

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值