首页 理论教育 C语言程序设计中的switch语句使用及示例

C语言程序设计中的switch语句使用及示例

时间:2023-11-23 理论教育 版权反馈
【摘要】:switch、case、break和default都是关键字。switch的语句体必须用“{}”括起来。也就是说break语句的功能是终止switch语句的执行。图3-5switch语句流程图下面给出示例程序。用switch语句处理多分支问题时,首先要确定switch后的表达式。一定要有break语句,使流程及时跳出switch结构,否则会出错。按照分支数的不同分为单分支选择结构、双分支选择结构和多分支选择结构,C语言提供了if语句和switch语句实现这些分支结构。if语句和switch语句,用于多向选择。

C语言程序设计中的switch语句使用及示例

switch语句是多分支选择语句,用来实现多分支选择结构。例如,学生成绩等级分类(等级A:90分以上;B:80≤score<90;C:70≤score<80,D:60≤score<70;E:score<60),设计一个简单的计算器等。虽然这些都可以用嵌套的if语句来实现,但如果分支较多,则嵌套的if语句层数多,程序长,可读性差,容易出错,若使用switch语句则相对清晰简单。

switch语句格式为:

格式说明:

(1)switch语句的执行过程:首先计算switch后圆括号内的表达式的值,然后用该值逐个与case后的常量表达式进行比较。当找到相匹配的值时,就执行其后的语句。如果所有case后面的常量表达式的值都不匹配时,则执行default后的语句。

(2)switch、case、break和default都是关键字。switch的语句体必须用“{}”括起来。表达式的值可以是整型字符型或枚举型数据,要用小括号括起来且后面没有分号。

(3)case与常量表达式之间必须用空格隔开。每个case后面常量表达式的值必须互不相同,否则就会出现互相矛盾的现象,即对于表达式的同一个值,却有两种或多种不同的处理语句。

(4)break语句是可选项,可根据具体情况选择使用或不使用break语句。在执行匹配case后的语句时,如果没有break语句,程序将接着执行后面,“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。如果有break语句,则不再执行后面的case里的语句,而是立即跳出switch语句,去执行switch的后续语句。也就是说break语句的功能是终止switch语句的执行。图3-5所示的是有break语句的情况。

(5)当case后包含多个语句时,可以不用花括号括起来,系统会自动识别并顺序执行所有语句。

(6)各个case出现的次序不影响执行结果,可以交换顺序。多个case可以共用一组执行语句。例如下列语句中,当表达式值取10和9时都执行同一组语句。

case 10:

case 9:printf("A");break;

图3-5 switch语句流程图

下面给出示例程序。

【例3-14】程序li3_2_1。

【程序说明】

(1)用switch语句处理多分支问题时,首先要确定switch后的表达式。考虑到成绩的分布特点,表达式确定为score/10。

90≤score≤100时,score/10的取值分别10、9

80≤score<90时,score/10的取值分别8

70≤score<80时,score/10的取值分别7

60≤score<70时,score/10的取值分别6

score<60时,score/10的取值均小于6

(2)根据表达式score/10的各种取值情况,确定case后常量表达式的值为6、7、8、9、10,score/10小于6时执行default后的操作。

(3)一定要有break语句,使流程及时跳出switch结构,否则会出错。假如程序中所有的break语句都去掉,当输入score的值为90时,输出结果为如下所示,很显然不符合要求。

输入成绩0~100的整数:90

【例3-15】程序li3_2_2。

【例3-16】程序li3_2_3。

【程序说明】

(1)语句scanf("%lf %c %lf",&s1,&op,&s2);中,格式控制符之间设有空格,在执行时数值和运算符之间可以有任意个空格,但如果第一个%lf和%c之间没有空格,则在执行时不能用空格进行分隔,否则会将空格赋给变量op。

(2)在除法运算中,要判断分母是否为0。因为s2是浮点数,浮点数的存储具有近似性,如0.2,可能存储为0.1999999,所以,浮点数不能用“==”或“!=”来判断是否相等,而是要用两个浮点数的差的绝对值是否足够小来判断。所以,判断s2是否为0可以用语句(fabs(s2)>1e-10)来进行,1e-10是一个非常小的浮点常数,表示1-10,接近于零。

项目小结

本项目主要讲了C语言程序设计3种基本结构中的选择结构。重点讲述了if语句和switch语句。

选择结构又称为分支结构,其特点是根据条件来判断哪些语句被执行。如图3-1所示,虚线框内是一个简单的选择结构,先计算条件表达式的值,根据其值分成两个分支。如果为真,则执行程序段A,如果为假,则执行程序段B,所以A程序段和B程序段是有选择的进行执行,不可能两个模块都执行。选择结构主要用于解决不同条件选择不同操作的多分支类的问题,在大多数程序设计中都会用到。选择结构是结构化设计三种基本结构之一,同样只有一个入口(a点)和一个出口(b点)。

按照分支数的不同分为单分支选择结构、双分支选择结构和多分支选择结构,C语言提供了if语句和switch语句实现这些分支结构。if语句,主要用于单向选择;if…else语句,主要用于双向选择;if…else…if语句和switch语句,用于多向选择。

课后习题

一、单项选择题

1.if后面的逻辑表达式之值(  )。

A.只能是0或1B.只能是正整数或负整数

C.只能是整型或字符型数据D.可以是任何类型的数据

2.为了避免嵌套的i f…else语句的二义性,C语言规定else总是与(  )组成配对关系。

A.缩排位置相同的i fB.在其之前未配对的i f

C.在其之前最近的未配对的i fD.同一行上的i f

3.选择出合法的if语句(设int x,a,b,c;)(  )。(www.xing528.com)

A.if(a=b)x++;B.if(a=<b)x++;

C.if(a<>b)x++;D.if(a=>b)x++;

4.以下不正确的if语句是(  )。

A.if(x>y);

B.if(x=y)&&(x!=0)x+=y;

C.if(x!=y)scanf("%d",&x);else scanf("%d",&y);

D.if(x<y){x++;y--;}

5.若定义float x;int a,b;,则正确的switch语句是(  )。

A.switch(x)

B.switch(x)

C.switch(a+b)

D.switch(a+b)

6.执行下列程序,输入为1的运行结果是________,输入为3的运行结果是________。

①A.1 B.2 C.2 3 4 5 D.1 2 3 4

②A.3 B.4 C.3 4 D.4 5

7.执行下列程序,输入为1的运行结果是_________,输入为3的运行结果是_________。

①A.1 B.2 C.2 3 4 5 D.1 2 3 4

②A.3 B.4 C.3 4 D.4 5

8.以下程序的运行结果是(  )。

A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2

二、填空题

1.有定义int x;则“x是偶数”的表达式是_________。

2.有定义int a,b;则“a是b的整数倍”的表达式是________。

3.有定义int a,b,c;它们表示三个边长,则能够构成一个直角三角形的条件是_________。

4.有定义int a,b,c;它们表示三个边长,则能够构成一个三角形的条件是_________。

5.以下程序的运行结果是_________。

6.以下程序的运行结果是________。

7.以下程序的运行结果是________。

8.以下程序的运行结果是_________。

三、编程题

1.假设今天是星期日,编写一个程序,求123456天后是星期几。

2.报数游戏。A、B、C、D、E、F、G、H共8人站成一排,按下图所示的方法从1开始报数。问谁先报到123456。

ABCDEFGH

1→ 2→3→4→5→6→7→8

14←13←12←11←10←9

15→16→17→18→19→20→21→22

28←27←26←25←24←23

29→30→…

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈