1第4章C语言程序设计的选择结构2第4章C语言程序设计的选择结构4.1什么是选择结构4.2if实现的选择结构4.3if–else实现的选择结构4.4多重if实现的选择结构4.5if嵌套实现的选择结构4.6switch实现的选择结构设计4.7switch与多重if的异同4.8选择结构程序设计实例4.9小结34.1什么是选择结构选择结构表示程序的处理步骤出现了分支,它需要根据某一特定条件选择其中的一个分支执行。主要分为以下两种情况:(1)程序的实现需要在两种选择分支中选其一。(2)程序的实现需要在多种选择分支中选其一。44.2if实现的选择结构4.2.1if是什么4.2.2if结构的使用实例54.2.1if是什么在C语言中,使用if语句实现了下面的情况:如果满足给定条件时,执行特定组合语句;如果不满足给定条件时,跳过组合语句继续执行操作。假真表达式语句序列64.2.2if结构的使用实例【例4-1】使用if语句输出两个整数中的较大值。【例4-2】使用3个if语句实现按照从小到大的顺序输出3个数。74.3if–else实现的选择结构4.3.1if–else是什么4.3.2if–else结构的使用实例84.3.1if–else是什么在C语言中,使用if-else语句实现了下面的情况:如果满足if给定条件时,执行特定代码段,否则,执行else后面的代码段。if和else后面的代码段是互斥的,只能执行其中一个。真假表达式语句序列语句序列94.3.2if–else结构的使用实例【例4-3】使用一个if-else结构按照从小到大顺序输出两个整数值。【例4-4】使用if-else结构和逻辑表达式来实现判断某一年是否为闰年。104.4多重if实现的选择结构4.4.1什么是多重if4.4.2多重if结构的使用实例114.4.1什么是多重ifC语言提供if-elseif语句对实现多种选择逻辑特别方便,它不属于“二选一”的情况。if-elseif语句这种形式为处理多重的、互斥的选择提供了最直接、最自然的方法。真假真假真假表达式-1语句序列语句序列表达式-2表达式-n语句序列语句序列124.4.2多重if结构的使用实例【例4-5】使用多重if结构判断月份属于哪一个季度。134.5if嵌套实现的选择结构4.5.1什么是if嵌套结构4.5.2else该和哪个if匹配4.5.3if嵌套结构的使用实例144.5.1什么是if嵌套结构在if语句中又包含一个或者多个if语句称为if语句的嵌套。嵌套的if语句可以是上面几节学习的if语句结构。if(表达式-1){if(表达式-2){可执行语句序列}}154.5.2else该和哪个if匹配在if嵌套结构中,应该注意if与else的配对关系。else总是与它上面最近的if配对。例如:if()if()else()if()else164.5.3if嵌套结构的使用实例【例4-6】使用if嵌套结构实现了输出3个整数的最大值。174.6switch实现的选择结构设计4.6.1什么是switch4.6.2使用switch应注意什么4.6.3switch是如何执行的4.6.4switch结构的使用实例184.6.1什么是switchC语言提供了switch语句,作为一种“在一组互斥的条件种做选择”的替代方法,使程序变得简洁。switch语句的一般格式为:switch(表达式){case常量表达式-1:可执行语句序列-1break;case常量表示-2:可执行语句序列-2break;...case常量表示-n:可执行语句序列-nbreak;default:可执行语句序列-n+1}194.6.2使用switch应注意什么使用switch语句要注意以下几个方面:(1)表达式必须是“()”括起来,不能为空;(2)switch语句中的变量以及case后的常量表达式都必须是整型或字符型。实型和字符串都是不允许的;(3)switch语句中的所有case后的常量表达式的值必须都互不相同;(4)每个case和default后可以有多个语句组成,并且可以包括条件分支语句和循环语句;(5)标号后的“:”不能省略,语句后的“;”分号也不能省略;(6)由于在执行一个case语句之后,控制将自动转移到语句后的下一个语句。因此在多种选择分支中只选其一的情况下,一个case结束,下一个case开始之前,用一个break语句退出switch语句。204.6.3switch是如何执行的switch表达式顺序与每一个case标签相关的值作比较,直到某个匹配成功或全部标签比较完毕。假假真真真假语句序列switch表达式==表达式-1switch表达式==表达式-2switch表达式==表达式-nbreak;语句序列break;语句序列break;语句序列214.6.4switch结构的使用实例【例4-7】将学生考试成绩划分成A-F个等级,通过它来说明switch语句的用法,并介绍多个case执行相同的语句组合的情况。【例4-8】统计一行字符中元音字母的个数,通过它进一步了解switch结构的用法。224.7switch与多重if的异同switch与多重if的异同:switch和多重if都可以实现多分支的选择,但是它们在执行方式和执行效率等方面都存在着区别:多重if结构用来实现两路、3路分支比较方便,而switch结构实现3路以上分支比较方便。对于【例4-7】中使用switch语句实现成绩等级划分的例子,也可以用多重if来实现,如【例4-9】所示。在使用switch结构时,应注意分支条件要求是整型表达式,而且case语句后面必须是常量表达式。而if语句后面是关系表达式或者逻辑表达式,值为true或者false。有些问题只能使用多重if结构来实现,例如要判断一个值是否处在某个区间的情况。【例4-9】通过多重if实现了和【例4-7】同样的功能。【例4-10】根据键盘输入的字符判别它的类别。234.8选择结构程序设计实例【例4-11】判断某一天是这一年的第几天。【例4-12】企业发放的奖金根据利润提成,当利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到50万之间时,高于40万元的部分,可提成3%;50万到100万之间时,高于50万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成。从键盘输入当月利润i,求应发放奖金总数。【例4-13】实现一个运算器程序。244.9小结选择结构是C语言程序设计中一种非常普遍且非常重要的编程结构,主要包括if结构和switch结构,if结构还被扩展为多重if结构和嵌套if结构。本章主要讲述了这几种选择结构的语法和用例,并对if结构和switch结构进行了对比。if结构主要实现两种分支选其一的情形,switch结构主要实现多种分支选其一的情形。虽然多重if结构也可以达到switch结构实现的效果,但是在分支选择比较多的情况下,多重if结构没有switch结构简单清晰,执行效率高。