【C语言】细品分支结构——switch语句

©作者:凡人编程传
©系列:C语言初阶(适合小白入门)
©说明:以凡人之笔墨,书写未来之大梦

在这里插入图片描述

这一期我们介绍分支结构的最后一个语句,switch语句,希望你能在文章中有所收获,话不多说,直接开干。

什么是swtich语句

switch语句是C预言中的多分支语句,当问题中需要进行多次分支时,那么使用if-else语句未免显得太过复杂,那么这种情况下就可以考虑使用switch语句.

switch语句的基本结构

switch(整形表达式)
{
case 整形常量表达式:
语句;
}

注意:
字符型也可以作为switch括号中的表达式,以及case后面的整形常量表达式,原因是因作为字符型原本使用ASCII码来表示,如字符a的ASCII码值就是97.

switch语句的简单使用

实例1

#include<stdio.h>
int main()
{
	int a;
	scanf("%d",&a);		//若输入1,结果是什么?
	switch(a)
	{
		case 1:
			printf("周一\n");
		case 2:
			printf("周二\n");
		case 3:
			printf("周三\n");
		case 4:
			printf("周四\n");
		case 5:
			printf("周五\n");
		case 6:
			printf("周六\n");
		case 7:
			printf("周日\n");		
	}
}``

运行结果如下:
在这里插入图片描述

问题来了,为什么输入了1,那么周一,二…全部打印了呢?

这就要引出另一个知识点了。

  1. case关键字的作用:像“”case 1“这样用来表示程序跳转的标识成为标签”,它用于和switch括号中的表达式值对应,表达式的值会寻找与它值相同的标签,从而执行标签(case)后的语句,像上例中输入a的值为1,则对应了case 1这个标签。此外C语言语法规定同一个switch语句中不可以出现两个相同的“标签”。如下图:
    在这里插入图片描述

那么case知道是如何对应的了,也是对应case 1:,然后执行他后面的语句printf(“周一\n”);啊,别急还有一点没讲。

  1. break语句的作用:break语句用于结束整个switch语句,若switch语句中没有break语句(例如实例1)就会一直执行到switch语句中的最后一个语句才结束,这也是为什么输入1后还执行了printf(“周二\n”);等原本不属于case 1:控制的输出语句。那么我们不妨为实例1加上break语句:
#include<stdio.h>
int main()
{
	int a;
	scanf("%d",&a);		//若输入1,结果是什么?
	switch(a)
	{
		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;
	}
}``

运行结果:
在这里插入图片描述
可见加上break语句后,程序乖乖仔执行完printf(“周一\n”);后跳出了整个switch语句。

3 default语句的作用:在分支中总有会有没有列举到的情况,这时候超出case语句控制的全部由default语句控制,如case语句只列举1-10,你输入11,这时候程序是没有对你回应超出输入范围的,这时候需要default语句来回应用户一个答复。如:

#include<stdio.h>
int main()
{
	int a;
	scanf("%d",&a);		
	switch(a)
	{
		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:
7			printf("超出范围,请输入1-7之间的数\n");
			break;
	}
}``

运行结果:
在这里插入图片描述

实例2(switch嵌套)

上代码:

#include<stdio.h>
int main()
{
	int a = 1, b = 2;
	switch (a)
	{
	case 1:b++;
	case 2:a++;
	case 3:
		switch (a)
		{
		case 1:
			a++;
		case 2:
			b++; a++;
			break;
		}
	case 4:
		b++;
		break;
	default:
		break;
	}
	printf("b = %d, a = %d \n", b, a);
	return 0;
}
```c

运行结果
在这里插入图片描述

分析:首先a的值为1对应case 1,执行后面的语句,由于没有遇到break语句接着执行到case 3时候,a在case 2 中自增到了2所以执行嵌套switch语句中的case 2,执行完后分别 b=4,a=3.接着遇到了嵌套switch语句中有break语句(注意:break语句只能跳出自己所在的switch语句,而这个break语句只是结束了内嵌switch语句,外层的switch语句还没结束)
接着执行外层的case 4:b又自增,后面遇到break语句,外层switch语句结束。

综上,最后b=5,a=3.

总结

switch语句也不是很不容易理解,只要把每一个知识点搞懂,结合理论知识去多多实践,调试看过程,就能用得游刃有余。若有错或还有问题请在评论区留言,感谢您的阅读。好了,分支结构章节完整结束,期待下一章的循环结构吧!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值