在条件语句的两种结构中,if结构给了程序一种选择,让程序决定是否执行特定的语句或语句块,这是一种单分支结构;if-else结构则给了程序两种选择,让程序决定执行哪一条语句或语句块,这是一种双分支结构。
但是现实中,人们经常会面临多种选择。比如,一个学生信息管理系统的开始界面要设计一个屏幕菜单,有以下5个选项:
①查找学生;②添加学生;③删除学生;④修改学生信息;⑤浏览学生信息。
这就给出了五个分支,程序要根据用户的选择决定进入哪个分支,执行相应的语句。虽然可以使用if-else语句嵌套,但是分支过多时容易发生混乱,可能出现if与else配对错误。所以C++中提供了一种多分支结构语句:switch语句(也叫开关语句)。
1.sw itch语句的格式
switch语句的格式如下:
switch语句的功能是根据条件表达式的取值从众多分支中选择一个作为执行入口。
这个格式中:
(1)表达式用做判断进入哪个分支的条件,取值类型可以是整型、字符型、布尔型或枚举型。
(2)常量表达式1、常量表达式2、……、常量表达式n,是取值类型与表达式相同的常量,是进入各分支的入口。各个常量表达式的值必须不同,否则会出现错误。
(3)语句序列1、语句序列2、……、语句序列n,是进入各分支要执行的语句,可以是一条语句,也可以是多条语句,但不需要使用“{}”。
(4)break语句的功能是终止当前switch语句,接着执行switch后面的语句。
(5)语句中case标号可以使用一次或多次,default只能使用一次或不用。各分支出现的次序可以是任意的,但通常把default放在最后。每个语句标号由保留字case和后面的常量表达式及冒号组成。
2.sw itch语句的执行过程
switch语句的执行过程可以分三步。
第一步:查找进入分支的执行入口。
(1)计算<表达式>的值,假定为M。
(2)依次计算常量表达式的值,假定它们的值依次为M1、M2、…。
(3)将M依次与M1、M2、…进行比较,当遇到某个与M相等的值时,进入这个分支。
第二步:执行这个分支的语句序列,遇到break语句或关括号“}”,switch语句执行结束。
第三步:当M与所有常量表达式的值M1、M2、…都不相等时,若有default分支,则进入执行该分支的语句序列,否则跳出switch语句,继续执行switch语句后面的语句。
例4-10 输入一个1~7的数,表示星期几,对应输出英文名称。
程序清单:
3.使用sw itch语句应该注意的问题
(1)每个case分支都只是switch语句的执行入口,执行完一个分支后,如果没有break语句,还将继续执行其后的所有分支语句序列。比如,例4-10的程序中若各分支语句序列之后没有break语句:
就会出现下面的运行结果:
也就是说,程序执行到switch语句时,从“case 6:”这个入口进入分支语句,执行完“case 6:”后面的语句之后,由于没有break语句,不能及时退出switch结构,所以继续执行后面的各分支语句。这不是我们想要的,所以在switch结构中,各分支语句序列之后必须有break语句。但最后的default分支例外。
(2)多个case可以共用相同的语句序列。
例4-11 今年是2019年,输入一个1~12的数字,表示月份,输出这个月有多少天。
思路分析:
以月份为判断条件。在一年当中,1月份、3月份、5月份、7月份、8月份、10月份、12月份都是31天,所以这些值的case应该执行相同的语句;4月份、6月份、9月份、11月份都是30天,这些值的case也都执行相同的语句。
程序清单:
四、sw itch语句应用举例
例4-12 输入百分制成绩,判定等级。规定:80分以上(含80分)为A等,70分到80分之间(含70分)是B等,60分到70分之间(含60分)是C等,60分以下是D等。
思路分析:
可以用成绩除以10。当商为8、9、10时,说明成绩大于或等于80,为A等;当商为7时,说明成绩在70到80之间,为B等;当商为6时,说明成绩在60到70之间,为C等;其他值则说明60分以下,为D等。(www.xing528.com)
程序清单:
一、选择题
1.设a和b均为bool型,则“a&&b”的值为true的条件是__________,“a||b”的值为true的条件是__________
A.a和b的值均为true B.a和b的值有一个为true
C.a和b的值均为false D.a和b的值有一个为false
2.逻辑表达式!(x>5&&x<10)与________表达式的值相等。
A.x<5&&x>10 B.x<=5&&x>=10
C.x x<5||x>10 D.x<=5||x>=10
3.C++中,布尔值true等价于________。
A.大于零的数 B.大于零的整数
C.非零的数 D.非零的整数
4.当“int a=5,b=2;”时,表达式a==b的值为________。
A.2 B.1
C.0 D.5
5.若x=0,y=3,z=3,以下表达式的值为0的是________。
A.!x B.x<y?1:0
C.x/2&&y==z D.y==x||z/3
6.若有“int x=10,y=20,z=30;”,以下语句执行后,x、y、z的值是( )
A.x=10,y=20,z=30 B.x=20,y=30,z=30
C.x=20,y=30,z=10 D.x=20,y=30,z=20
二、阅读程序写结果
输入:283 102 23 320 输出:________
4.2015普及组C++三.1
三、程序填空
1.有分段函数如下:输入x,计算y的值,输出y。
当x>0时,y=2x+3
当x=0时,y=0
当x<0时,y=(x+7)/2
2.投票表决器:--输入Y、y,打印agree;--输入N、n,打印disagree;--输入其他,打印lose。
四、编写程序
1.输入一个整数,判断是否能被3整除,如果能整除,则输出“Yes!”。
2.乘坐飞机时,如果乘客行李小于等于20公斤,按每公斤1.68元收费;如果大于20公斤,按每公斤1.98元收费,编程计算收费。
3.最宜人的室内温度是:冬天温度为18℃~25℃,夏天温度为23℃~28℃。在装有空调的室内,室温为19℃~24℃时人会感到最舒适。编程判断温度是否宜人。
输入仅一行,包括两个内容:一个字符表示冬天、夏天或空调室。W表示冬天,s表示夏天,a表示空调室;一个整数,表示温度。
输出一个单词:Yes表示温度宜人,No表示不是最宜人的温度。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。