当前位置:网站首页>【C语言】细品分支结构——switch语句
【C语言】细品分支结构——switch语句
2022-08-02 13:04:00 【凡人编程传】
作者:凡人编程传
系列: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,那么周一,二…全部打印了呢?
这就要引出另一个知识点了。
- case关键字的作用:像“”case 1“这样用来表示程序跳转的标识成为标签”,它用于和switch括号中的表达式值对应,表达式的值会寻找与它值相同的标签,从而执行标签(case)后的语句,像上例中输入a的值为1,则对应了case 1这个标签。此外C语言语法规定同一个switch语句中不可以出现两个相同的“标签”。如下图:

那么case知道是如何对应的了,也是对应case 1:,然后执行他后面的语句printf(“周一\n”);啊,别急还有一点没讲。
- 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语句也不是很不容易理解,只要把每一个知识点搞懂,结合理论知识去多多实践,调试看过程,就能用得游刃有余。若有错或还有问题请在评论区留言,感谢您的阅读。好了,分支结构章节完整结束,期待下一章的循环结构吧!
边栏推荐
- Automatically generate code generator recommendation-code-gen
- How to implement waterfall flow layout (what is waterfall flow layout)
- 【C语言】虐打循环练习题(2)
- Intouch Historian历史曲线配置导入导出
- 如何关闭开启硬件加速[通俗易懂]
- RestTemplate 使用:设置请求头、请求体
- 【C语言】手把手带你写游戏 —— 猜数字
- 移动端适配,华为浏览器底色无法正常显示
- First acquaintance of scrapy framework 1
- 新特性解读 | MySQL 8.0 GIPK 不可见主键
猜你喜欢

路由-嵌套路由

SQL Server 2014 installation tutorial (nanny-level graphic tutorial)

【C语言】函数哪些事儿,你真的get到了吗?(1)

图文短视频自媒体怎么创作?如何让点击量达到10W?

基于 WeihanLi.Npoi 实现excel导入时纯汉字的日期转换

SQL Server database generation and execution of SQL scripts

FreeRTOS--优先级实验

Win11怎么修改关机界面颜色?Win11修改关机界面颜色的方法

Closures in JS

为什么IDEA连接mysql Unable to resolve table 编译报错但是可以运行
随机推荐
国产 GPU 创业潮 喧嚣下的资本游戏
To eliminate air bubbles to save the mushroom h5 small game source code
图文短视频自媒体怎么创作?如何让点击量达到10W?
图论之Prim,最小生成树该怎么解?
js true 3d histogram plugin
ThinkPHP 5.1反序列化分析和poc
js cool dashboard plugin
Taurus.MVC V3.0.3 microservice open source framework released: Make the evolution of .NET architecture easier in large concurrency.
【C语言】手把手带你写游戏 —— 猜数字
【C语言】虐打循环练习题(2)
scrapy框架初识1
js数组递归使用
RISC-V 指令格式和6种基本整数指令
新特性解读 | MySQL 8.0 GIPK 不可见主键
RestTemplate 使用:设置请求头、请求体
[b01lers2020]Welcome to Earth-1
Cannot determine loading status from target frame detached when selenium chrome driver is running
Openlayers Quick Start Tutorial
【C语言】明解数组(1)
最小割和对偶图(未完成)