[简明C语言]分支和循环P_2:分支 - swtich语句
[简明C语言]分支和循环P_2:分支 - switch语句
- 前言
- swtich语句
- 语句项
- break语句
- 多个case值对应一个执行语句
- default子句
- 要求整型
- 练习一:嵌套switch语句
- 总结
前言
第二章:分支和循环
分支语句,也叫条件判断语句。
switch语句从字面上讲,可以称为开关语句,当然理解上不要以为就只有开和关,可以想象它是一个多路开关。它是一种多分支结构。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期七
用if…else if…else if的形式的表达太过复杂,所以要使用一种不一样的语法形式。这就是switch语句。
swtich语句
switch语句是一种流控制语句,用于多种选择判断。当表达式值等于所设置值的时候则执行后面的语句。可用break关键字跳出switch语句。
用一段伪代码来描述模块结构图:
switch(整型表达式)
{语句项;
}
语句项
而语句项是什么呢?
//是一些case语句:
//如下:
case 整型常量表达式;语句;
那么给定语句项,下面这段代码会输出什么呢?
#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);switch (day)//整型表达式{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");//没有break语句}return 0;
}
当输入值为1时,来看看运行结果:
可以发现当输入1的时候,打印出的结果却是全部的case。
这是因为在case1输出后,没有什么阻止它停下时,就会一直向后输出,直到输出所有case语句。
输入值改为2呢?
可以发现当输入2的时候,打印出了从星期二开始向后的所有case。
所以决定入口
的,是表达式和case后的值。
如果想要达到预期的分支效果,也就是输入什么,就输出对应的选项,那么应该怎么做呢?
break语句
在switch语句中,我们没法直接实现分支,搭配break
使用才能实现真正的分支:
#include <stdio.h>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;}return 0;
}
运行结果:
case决定入口,break决定出口。
每个case后加入了break语句后,当输入3
时,打印的结果为星期三
,达到了预期的效果。
但是,不是每一个case后面都需要break,上述例子中需要加入break只是需要符合逻辑!
这样就实现了真正的分支!
多个case值对应一个执行语句
如果想要输入1-5时输出工作日
,输入6-7时输出休息日
。
代码如下:
#include <stdio.h>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;}return 0;
}
当输入4的时候,运行结果为工作日:
可以看出,case后是否加break
并不是语法规定的,而是根据自身的需求来的。
注:最后一个case也要添加
break
!
【编程好习惯】
这样写可以避免在以前的一个case语句后面继续编写时,忘了添加break语句的情况。
如果一个没有规定的未知字符被传递给这条switch语句,会出现什么情况呢?
对上述例子输入9,运行结果:
可以看到当输入9时,程序没有任何输出。为了获得反馈,在此加入一个default子句
,以处理这种情况。
default子句
表达的值与所有的case标签的值都不匹配时,所有的语句都被跳过。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
可以在语句列表中增加一条default子句
。
switch语句是一个条件选择语句,首先会找到满足条件的case值做为执行后面的程序入口;若所有的case都不满足,则找default入口,若未找到则退出整个switch语句;所以default只是一个备用的入口,有没有都无所谓。
为了进行错误检查或逻辑检查,还是应该在switch语句中加入default子句
:
#include <stdio.h>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"));break;}return 0;
}
此时输入9,运行结果为:
此时打印出了“输入错误”,对检查到的错误给出了一个反馈。
注:
default子句
可以放在任何一个case标签可以出现的位置。
语句流会像执行一个case标签一样执行default子句
。
一般默认放在最后。
注:最好在每个switch语句中都放一条default子句!甚至可以在后边再加一个break!
【编程好习惯】
这样写可以给逻辑检查带来很多方便。
要求整型
1. swtich后要求输入一个整型表达式。
- 如果想放一个浮点型会怎样呢?
会报错!
表达式必须包含整型
!
2. case后要求输入一个整型常量表达式。
如果想放一个浮点型会怎样呢?
也会报错!
表达式必须为整型
表达式!如果想放一个变量会怎样呢?
还是会报错!
表达式必须含有常量值
!
注:字符型是整型的一种。
字符对应的整数由ASCII码值
规定。
练习一:嵌套switch语句
以下代码的运行结果是什么?
#include <stdio.h>int main()
{int n = 1;int m = 2;switch (n){case 1:m++;case 2:n++;case 3:switch (n)//switch允许嵌套使用{case 1:n++;case 2:m++;n++;break;}case 4:m++;break;default:break;}printf("m = %d, n = %d\n", m, n);return 0;
}
运行结果为:
m = 5,n = 3是怎么得到的呢?
观看注释:
#include <stdio.h>int main() {int n = 1;int m = 2;switch (n)//n的值是1,执行case1{case 1://从case1进入m++;//m = 3//没有break!!继续执行case2case 2:n++;//n = 2//没有break!!继续执行case3case 3://进入嵌套switch语句switch (n)//n的值是2,执行case2{case 1://case1不执行n++;case 2://从case2进入m++;//m = 4n++;//n = 3break;//此处的break跳出【嵌套的switch语句】!!}//跳出【嵌套的switch语句】后,继续执行case4case 4:m++;//m = 5break;//跳出【外部的switch语句】default:break;}printf("m = %d, n = %d\n", m, n);//m = 5, n = 3return 0; }
break
跳出的只是自己所在的switch语句!
总结
本文详细介绍了分支语句中的switch语句,对分支语句有一个更细致的了解。
[简明C语言]分支和循环P_2:分支 - swtich语句相关推荐
- Gox语言中的循环与分支-GX14
Gox语言中实现的循环与分支都是比较简单,也比较好理解的.唯一需要注意的是else if需要写作"elif",其他的基本与Go语言类似. 下面引自Qlang的Github页面, f ...
- ios入门攻略 07篇 C语言基础【循环结构之for语句,打印九九乘法表】
for循环 语法: for(表达式1;表达式2;表达式3){ 循环体; } 语义:1.先执行表达式1,跳转到2 2.判断表达式2的结果是否为真,如果为真,跳转到3,否则跳转到5 3.执行循环体,执行完 ...
- python常用操作符_Python3.4学习笔记之常用操作符,条件分支和循环用法示例
本文实例讲述了Python3.4常用操作符,条件分支和循环用法.分享给大家供大家参考,具体如下: #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1 ...
- Python学习笔记之常用操作符,条件分支和循环用法示例
本文实例讲述了Python常用操作符,条件分支和循环用法.分享给大家供大家参考,具体如下: #Pyhon常用操作符 ''' 想要学习Python?Python学习交流群:973783996满足你的需求 ...
- 循环数组函数c语言,C语言练习题2(分支结构循环结构数组函数2009-2012二级真题)..doc...
C语言练习题2(分支结构循环结构数组函数2009-2012二级真题). C语言练习题(二) 一 选择题 1.有以下程序 #include void main() { int a: canf(" ...
- 【C语言笔记初级篇】第二章:分支与循环
目录 (1)什么是语句 (2)分支语句 A:if语句 B:switch语句 (3)循环语句 A:while B:for循环 C:do while循环 (4)goto语句 A:goto语句说明 B:go ...
- 包括循环和分支的C语言程序,《C语言程序设计》分支和循环的C程序设计.ppt
<C语言程序设计>分支和循环的C程序设计.ppt 第三章 分支和循环的C程序设计 问题 一元二次方程根求解算法描述 3.1 程序的基本结构 ⒊循环结构Repetition ⒋复合语句 Co ...
- 快学 Go 语言 第 3 课 —— 分支与循环
程序 = 数据结构 + 算法 上面这个等式每一个初学编程的同学都从老师那里听说过.它并不是什么严格的数据公式,它只是对一般程序的简单认知.数据结构是内存数据关系的静态表示,算法是数据结构从一个状态变化 ...
- 初始C语言-分支与循环语句
一.语句 1. 什么是语句? C语句可分为以下五类: 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句 本章后面介绍的是控制语句. 2. 控制语句: 用于控制程序的执 ...
最新文章
- 如何居中一个浮动元素?
- 基于Debian9.3安装OpenVAS9.0(kali源)
- NUXT快速开始,选择Vuetify
- hls.js播放hls直播源
- Spring MVC的优势
- Mac 10.11系统下cocoaPods安装注意事项
- 语音编解码技术演进和应用选型
- 左神算法:环形单链表的约瑟夫问题(Java版)
- SAP CRM OData模型里的addressable为true的含义
- express 4.*升级后带来的影响
- 【正则表达式】正则表达式引发的惨案 回溯 超时 cpu 100
- 自定义标签的使用jsp实例_JSP自定义标签示例教程
- 秒变金庸风 | NLP文本风格迁移
- 【Unity】制作圆形进度条
- 路由器设置显示服务器拒绝访问,路由器设置服务器拒绝访问
- iOS集成EasyAR实现虚拟现实
- vs2017--MFC读写excel
- 医院招聘sass管理软件解决方案分析(2)
- oracle erp日志,错误,什么地方看日志
- 利用IPv6实现公网访问远程桌面
热门文章
- 金仓数据库 KingbaseES PL/SQL 过程语言参考手册(19. D PL/SQL保留字和关键字)
- 6502计算机联锁图纸上BA1,6502电气集中及计算机联锁系统造作使用问答
- sql查询本天,本周,本季度,本年,前一天,后一天,最后一天,本季度天数,本月天数
- mysql相关以及优化类面试总结
- 2019年全国马拉松报名时间指南
- SU(Seismic Unix)画图函数supsimage使用方法
- photoscan小结(1)——跑空三及导出POS
- 软件设计师笔记之数据流图
- JDBC连接ORACLE的三种URL格式
- 凝思后台6.0.80版本高危端口关闭方法