《6选择结构程序设计》由会员分享,可在线阅读,更多相关《6选择结构程序设计(33页珍藏版)》请在金锄头文库上搜索。
1、6选择结构程序设计选择结构程序设计选择结构的选择结构的N-S流程图如图流程图如图6.1所示。所示。图6.1选择结构的N-S流程图P为选择的条件,对于执行为选择的条件,对于执行A还是还是B要根要根据条件据条件P的判断结果来决定,如果条件的判断结果来决定,如果条件P的结的结果为真则执行果为真则执行A,如果条件,如果条件P的结果为假则执的结果为假则执行行B。这里条件。这里条件P的结果就成为执行的结果就成为执行A还是还是B的关键所在。的关键所在。P是一个判断的条件,其结果是一个判断的条件,其结果为真或者假,将其称为为真或者假,将其称为“逻辑量逻辑量”。C语言中语言中没有提供逻辑型变量,可以使用整型数据
2、去没有提供逻辑型变量,可以使用整型数据去描述描述1表示真,表示真,0表示假。在表示假。在C语言中任意确语言中任意确定的值都可作为逻辑量处理,当作为逻辑量定的值都可作为逻辑量处理,当作为逻辑量处理时,如果该值为非处理时,如果该值为非0,则表示真(,则表示真(1),),如果该值为如果该值为0,则表示假(,则表示假(0)。下面讲述条)。下面讲述条件件P的逻辑量表示方法。的逻辑量表示方法。6.1 6.1 逻辑量的表示方法逻辑量的表示方法6.2 if6.2 if语句语句6.3 switch6.3 switch语句语句6.4 6.4 选择结构程序设计举例选择结构程序设计举例6.1 6.1 逻辑量的表示方法
3、逻辑量的表示方法C语语言言中中逻逻辑辑量量是是用用整整型型数数据据来来表表示示的的,用用来来表表示示真真或或成成立立,用用来来表表示示假假或或不不成成立立。逻逻辑辑量量的的表表示示是是非非常常灵灵活活的的,具体表示方法有以下几种方式。具体表示方法有以下几种方式。6.1.1关系表达式1关系运算符关系运算符关关系系运运算算是是一一种种比比较较运运算算符符两两侧侧运运算算对对象象大大小小的的运运算算,完完成成两两个个运运算算对对象象比比较较,运运算算结结果果为为成立与不成立,用成立与不成立,用1和和0表示。表示。关系运算符有以下关系运算符有以下6种:种:,=,b,3+7!=10,aaa+(b=a+)
4、都是合法的都是合法的C语言关系表达式。语言关系表达式。关关系系表表达达式式的的求求解解遵遵循循表表达达式式求求解解规规则则,关关系系运运算算的的结结果果只只有有两两种种可可能能,要要么么关关系系成成立立为为真真(1),要么关系不成立为假(),要么关系不成立为假(0)。)。例如有整型变量例如有整型变量a,b,且,且a 3,b 5,求解表达式:求解表达式:a ba算术运算符算术运算符“ ”的优先级高于关系运算符的优先级高于关系运算符“”,因此先计算,因此先计算a b的值为的值为8,之后运算,之后运算8a,而,而a参加运算时需转换为整型数参加运算时需转换为整型数97运算,实运算,实际运算的是际运算的
5、是897,判断后其结果为不成立,表,判断后其结果为不成立,表达式的运算结果为达式的运算结果为0。 若有关系表达式若有关系表达式0x10,则其运算结果为,则其运算结果为逻辑量逻辑量1。表达式中两个。表达式中两个运算的优先级相同,运算的优先级相同,于是首先运算于是首先运算0x,x的值无论是多少,运算结的值无论是多少,运算结果只能是果只能是1或者或者0;然后要么运算;然后要么运算110,要么运,要么运算算0n)elseprintf(Themaxis%dn,n);图6.7例6.2的流程图使用使用if语句要注意以下几点。语句要注意以下几点。(1)if语句是一条语句。语句是一条语句。(2)逻逻辑辑量量是是
6、if语语句句选选择择判判断断的的条条件件,C语语言言中中任任意确定的值都可以作为逻辑量处理。意确定的值都可以作为逻辑量处理。(3)逻逻辑辑量量为为1和和为为0的的分分支支都都只只能能是是单单条条语语句句,如如果果要要执执行行多多个个操操作作的的话话,应应该该将将多多个个操操作作复复合合为为单条语句才能出现在单条语句才能出现在if的分支结构中。的分支结构中。(4)分支中出现的语句)分支中出现的语句1是复合语句的时候,是复合语句的时候,后后不应该有不应该有“;”。(5 5)语句中语句)语句中语句1 1是条件语句中必不可少的部分。是条件语句中必不可少的部分。(6 6)正确理解)正确理解ifif语句和
7、语句和N-SN-S选择结构流程图的对应选择结构流程图的对应关系。关系。嵌嵌套套主主要要用用于于处处理理多多条条件件的的题题目目。设设计计嵌嵌套套选选择择结结构构时时,应应清清晰晰描描述述各各条条件件之之间间的的约束关系。嵌套的约束关系。嵌套的if语句可以简单描述如下:语句可以简单描述如下:嵌嵌入入的的if语语句句是是在在当当外外围围的的if语语句句的的条条件件p1的的逻逻辑辑量量值值为为1时时才才可可以以执执行行,即即其其作作为为外外围围if语语句句的的条条件件成成立立时时的的执执行行语语句句,嵌嵌入入在在外外围围if内内。当当然然语语句句1、语语句句2、语语句句3也也可可以以是是if语语句句
8、,具具体体的的嵌嵌套套形形式式和和具具体体题题目目中中的的多多条条件件是是密密切切相相关关的的,if语语句句的的嵌嵌套套形形式式应应建建立立在对具体问题的分析上。在对具体问题的分析上。6.2.2 if语句的嵌套及多条件结构的实现语句的嵌套及多条件结构的实现例例6.4 求函数中求函数中x为任意值时为任意值时y 的值。的值。 由于由于if选择结构仅有两个分支,而此分段选择结构仅有两个分支,而此分段函数函数x的定义域为三分支,因此当确定的定义域为三分支,因此当确定x的关的关系表达式时,其中必然有一个分支包含另外系表达式时,其中必然有一个分支包含另外两部分定义域,需在此基础上作进一步的条两部分定义域,
9、需在此基础上作进一步的条件判断。件判断。根据流程图得到如下程序:根据流程图得到如下程序:main()main()floatx,y;floatx,y;scanf(%f,&x);scanf(%f,&x);if(x0)y=1/x;if(x0)y=1/x;elseif(x=0)y=0;elseif(xb)?a:b的求解过程如下:此表达式右边为一条件表达式,的求解过程如下:此表达式右边为一条件表达式,由于条件运算符的优先级高于赋值运算符,应先由于条件运算符的优先级高于赋值运算符,应先计算条件表达式的值,再通过赋值运算符把得到计算条件表达式的值,再通过赋值运算符把得到的值赋给的值赋给max。在条件表达式中
10、,首先计算表达。在条件表达式中,首先计算表达式式ab的逻辑量值,根据题意,的逻辑量值,根据题意,ab表达式的逻辑表达式的逻辑量值为量值为1,则,则a为条件表达式的结果,为为条件表达式的结果,为5,那么条,那么条件表达式的值为件表达式的值为5,可得,可得max的值为的值为5。6.3 switch6.3 switch语句语句如如果果题题目目中中的的多多条条件件是是有有规规律律的的,则则可可以以采采用用switch语语句句来实现。来实现。switch语句称为分支语句,又称为开关语句。语句称为分支语句,又称为开关语句。switch的具体形式如下:的具体形式如下:switch(表达式表达式)case整型
11、常量表达式整型常量表达式1:语句组:语句组1breakcase整型常量表达式整型常量表达式2:语句组:语句组2breakcase整型常量表达式整型常量表达式n:语句组:语句组nbreakdefault:语句组:语句组n+1switch,case,default和和break都都是是构构成成多多分分支支语语句句的的关关键字。键字。表示表示break可有可无。可有可无。其中表达式是任意类型的表达式,但运算其中表达式是任意类型的表达式,但运算结果会自动转换为整型。整型常量表达式只结果会自动转换为整型。整型常量表达式只能由整型常量构成。能由整型常量构成。break语句的作用是结束语句的作用是结束swi
12、tch语句,执行语句,执行switch的后续语句。语句组的后续语句。语句组可以是单条语句,也可以是多条语句,多条可以是单条语句,也可以是多条语句,多条语句无需用复合语句去表示。而在语句无需用复合语句去表示。而在ifelse结结构中的语句构中的语句1和语句和语句2只能是单条语句。只能是单条语句。switch语句中的一对花括号是必须书写语句中的一对花括号是必须书写的,是的,是switch语句构成的必要部分。语句构成的必要部分。switch语句的具体执行过程为:根据语句的具体执行过程为:根据switch表表达式的值,寻找达式的值,寻找switch语句的执行入口。自上而下语句的执行入口。自上而下和和c
13、ase后的整型常量表达式的值进行比较,如果相后的整型常量表达式的值进行比较,如果相等则执行其后的语句组,假定入口是整型常量表等则执行其后的语句组,假定入口是整型常量表达式达式2,那么该语句执行语句组,那么该语句执行语句组2,当语句组,当语句组2执行执行完毕后,若有完毕后,若有break语句,则中断语句,则中断switch语句的执语句的执行,否则继续执行语句组行,否则继续执行语句组3;如果没有和表达式的;如果没有和表达式的值相匹配的整型常量表达式,则执行值相匹配的整型常量表达式,则执行default后的后的语句组。语句组。case后的整型常量表达式的值实际上就是后的整型常量表达式的值实际上就是s
14、witch后括号内的表达式的各种可能的取值。如果后括号内的表达式的各种可能的取值。如果能穷尽表达式各种可能的取值,则语句中可省去能穷尽表达式各种可能的取值,则语句中可省去default分支;否则最好不要省略分支;否则最好不要省略default,因为,因为default表示的是表示的是switch语句在没有找到匹配入口时语句在没有找到匹配入口时的语句执行入口。的语句执行入口。例例6.6 输入一同学的成绩,判断其成绩等级。输入一同学的成绩,判断其成绩等级。等级范围为:等级范围为:90以上以上等级为等级为A8980等级为等级为B7970等级为等级为C6960等级为等级为D60以下以下等级为等级为E假
15、假定定成成绩绩为为score,可可以以得得到到表表达达式式(int)(score/10)。当当表表达达式式的的值值为为10和和9时时,对对应应于于90分分以以上上的的条条件件分分支支,为为8时时对对应应于于8980分分段段的的条条件件分分支支,以以下下的的取取值值和和对对应应的的分分支支可可以以依依次次类推。类推。60分以下可用分以下可用switch中中default分支来描述。程序如下:分支来描述。程序如下:main()floatscore;scanf(%f,&score);switch(score/10)case10:case9:printf(YourscoreisAn);break;ca
16、se8:printf(YourscoreisBn);break;case7:printf(YourscoreisCn);break;case6:printf(YourscoreisDn);break;default:printf(YourscoreisEn);score/10中中score得到的结果为浮点型,得到的结果为浮点型,系统会自动转换为整型。常量表达式为系统会自动转换为整型。常量表达式为10的分支,由于与的分支,由于与9的分支均为的分支均为A级,利用级,利用switch的特点可以不写值为的特点可以不写值为10的分支对应的的分支对应的语句。语句。使用使用switch语句应注意以下几点。语
17、句应注意以下几点。(1)switch语句中表达式可为任意类型,但运算结语句中表达式可为任意类型,但运算结果为整型。果为整型。case后的表达式必须是整型常量表达式。后的表达式必须是整型常量表达式。(2)每个)每个case后的常量表达式的值不能相同,否则会后的常量表达式的值不能相同,否则会自相矛盾,无法判断。自相矛盾,无法判断。(3)case及及default的顺序对运行结果不产生影响。的顺序对运行结果不产生影响。(4)若无)若无break语句进行语句进行switch语句的强制跳出,则语句的强制跳出,则从该处顺序执行其余语句,直至跳出或执行结束。从该处顺序执行其余语句,直至跳出或执行结束。(5)
18、case和其后的整型常量表达式中间应有空格和其后的整型常量表达式中间应有空格6.4 6.4 选择结构程序设计举例选择结构程序设计举例例例6.10 批批发发钢钢材材,每每吨吨批批发发金金额额为为1000元元,计计算算批批发发金金额,批发折扣如表额,批发折扣如表6-3所示。所示。表6-3 例6.10折扣表 表6-4 例6.10折扣规律表1批发量(吨)折扣金额(%)批发量(吨)t/50相除结果(取整)5005001005100125082502、3、4500105005、6、7、8、950015500其他main()floatt,d,m;scanf(%f,&t)if(t50)d=0;elseif(t
19、100)d=5./100;elseif(t250)d=8./100;elseif(t500)d=10./100;elsed=15./100m=t*1000*(1-d);printf(%.0fx9dn,m);/*x9d是字符¥的是字符¥的ASCII码码*/main()floatt,d,m;scanf(%f,&t);switch(t/50)case0:d=0;break;case1:d=0.01;break;case2:case3:case4:d=0.08;break;case5:case6:case7:case8:case9:d=0.1;break;default:d=0.15;m=t*1000*(1-d);printf(%.0fx9dn,m);