C语言第5章选择结构的程序设计.ppt
高级语言程序设计高级语言程序设计(C语言)语言)第五章第五章 选择结构程序设计选择结构程序设计第五章第五章 选择结构程序设计选择结构程序设计5.1 if语句语句5.2 switch语句语句5.3 无条件转向语句无条件转向语句5.1 if语句语句1.简单的简单的if语句语句2.双分支双分支if语句语句3.多分支多分支if语句语句4.控制条件的表示控制条件的表示5.if语句的嵌套语句的嵌套1.简单的简单的if语句语句格式格式:if ()语句语句 功能功能:表达式表达式语句语句FT程序应用举例程序应用举例例例1 求给定整数的绝对值。求给定整数的绝对值。x x00|x|=-x x0设:设:x整数整数 yx的绝对值的绝对值流程图流程图:x0?y=xy=-xTF开始开始输出输出x,y结束结束输入输入x程序应用举例程序应用举例例例2 求求4个整数中的偶数之和。个整数中的偶数之和。设:设:a,b,c,d4个整数。个整数。s偶数之和,作为累加器使用,先要清偶数之和,作为累加器使用,先要清0。分析:分析:偶偶数数能能被被2整整除除,如如果果设设x为为整整数数,则则有有x%2=0,余余数为数为0。流程图流程图:a%2=0?s=0s=s+aTFs=s+bs=s+b开始开始输出输出a,b,c,d,s结束结束输入输入a,b,c,db%2=0?TFc%2=0?s=s+cTs=s+ds=s+dd%2=0?TFIIF程序应用举例程序应用举例例例3 已已知知a,b,c 3个个整整数数,将将3个个数数按按从从大大到到小小的的顺顺序序排排列输出。列输出。设:设:a,b,c 3个整数。个整数。流程图流程图:ab?a与与b交换交换TFa与与c交换交换开始开始输出输出a,b,c结束结束输入输入a,b,cac?TFbc?b与与c交换交换TF2.双分支双分支if语句语句if_else语句语句格式格式:if ()语句语句1 else 语句语句2 2.if_else语句语句功能功能:表达式表达式语句语句2 2TF语句语句1 13.多分支多分支if语句语句格式格式:if ()语句语句1 else if()语句语句2 else if()语句语句3 .else if()语句语句n-1 else 语句语句n3.多分支多分支语句语句功能功能:表达式表达式1 1语句语句2 2T TF F语句语句1 1表达式表达式2 2表达式表达式n-1n-1语句语句n n语句语句n-1n-1T TT TF FF F4.控制条件的表示控制条件的表示 控制条件通常用关系表达式或逻辑表控制条件通常用关系表达式或逻辑表达式构造。达式构造。在判断在判断时,表达式中的非时,表达式中的非0为为True,0为为False。而关系表达式或逻辑。而关系表达式或逻辑表达式的返回值为表达式的返回值为1或或0,1表示表示True,0表示表示False。4.控制条件的表示控制条件的表示在判断表达式时:在判断表达式时:非非0True0False而关系表达式或逻辑表达式的返回值:而关系表达式或逻辑表达式的返回值:1True0False5.If语句的嵌套语句的嵌套 在一个条件语句中包含有另一个条件语在一个条件语句中包含有另一个条件语句的结构,成为条件的嵌套。句的结构,成为条件的嵌套。条件嵌套应用举例条件嵌套应用举例例例1 求分段函数。(求分段函数。(P90)x+1 x0 y=x x=0 x-1 x0。条件嵌套应用举例条件嵌套应用举例 例例2 从从键键盘盘上上输输入入3个个数数,若若这这3个个数数能能构构成成三三角角形形的的三三边边长长,则则求求这这个个三三角角形形的的面面积积,否否则则打打印印响响应应的的错错误误信信息息,当当出出现现数数据据小小于于或或等等于于0时时,显显示示“数数据据无无效效!”;当当任任意意两两边边之之和和不不大大于于第第三三边边时时,显显示示“不不能能构构成成三三角角形形!”分析:三个数能构成三角形的充分必要条件是:分析:三个数能构成三角形的充分必要条件是:(1)三个数均大于)三个数均大于0。(2)任意两边之和大于第三边。)任意两边之和大于第三边。设:设:a,b,c三边长三边长 p中间变量,中间变量,p=(a+b+c)/2 s三角形面积三角形面积5.2 switch语句语句格式:格式:switch()case:语句:语句1 case:语句:语句2 case:语句:语句ndefault 语句语句n+1 5.2 switch语句语句功能:功能:首先计算首先计算的值,然后依次与的值,然后依次与(i=1,2,n)比较,若表达式的值与)比较,若表达式的值与相相等,则从等,则从处开始执行,这里就是执行的处开始执行,这里就是执行的入口,直到入口,直到switch语句结束。若所有的语句结束。若所有的(i=1,2,n)的值均不等于表达式的值,则从)的值均不等于表达式的值,则从default处处开始执行。开始执行。5.2 switch语句语句说明说明:(1)switch后后面面的的可可以以是是任任何何表表达达式式,取取其其整整数部分与数部分与进行比较。进行比较。(2)中中不不能能出出现现变变量量,且且类类型型必必须须是是整整型、字符型或枚举型,各型、字符型或枚举型,各互不相同。互不相同。(3)语语句句I可可以以是是一一条条语语句句或或多多条条语语句句,多多条条语语句句不不必必用用 将将它它们们括括起起来来。语语句句i处处也也可可以以没没有有语语句句,程程序序执行时会自动向下顺序执行。执行时会自动向下顺序执行。(4)default一一般般出出现现在在所所有有的的case之之后后,也也可可以以出出现现在在case之前或两个之前或两个case语句之间。语句之间。Default可以省略。可以省略。5.2 switch语句语句 例例1 用用switch语句设计程序,实现输出学生成绩和语句设计程序,实现输出学生成绩和等级的功能。等级的功能。分析:因为分数分析:因为分数x为为0100分,则分,则x/10的值为的值为0,1,2,3,4,5,6,7,8,9,10。5.2 switch语句语句分析结果:分析结果:第第一一行行输输出出正正确确,后后面面7行行输输出出是是多多余余的的,原原因因何何在在?原因:原因:根据根据switch语句的功能,在执行完一个语句的功能,在执行完一个case后面的语后面的语句句后后,流流程程控控制制转转移移到到下下一一个个case继继续续指指向向。“case”只是起语句标号的作用,并不是在该处进行只是起语句标号的作用,并不是在该处进行条件判断。在执行条件判断。在执行switch语句时,计算机根据语句时,计算机根据switch后后面面的值找到响应的入口标号,就从此标号开始的值找到响应的入口标号,就从此标号开始一直执行下去,不再判断。一直执行下去,不再判断。那么,如何终止那么,如何终止switch语句的执行呢?语句的执行呢?C语言中提供语言中提供的的break语句可以做到这一点。语句可以做到这一点。5.2 switch语句语句格式格式:break;功能功能:终止它所在的终止它所在的switch语句的执行。语句的执行。5.3 无条件转向语句无条件转向语句格式格式:goto;功能功能:无条件转向语句标号所标识的语句执行。无条件转向语句标号所标识的语句执行。5.3 无条件转向语句无条件转向语句说明:说明:1用标识符后面跟冒号表示。用标识符后面跟冒号表示。例如:例如:goto k;k:2goto语句与相应的语句与相应的必须在同一个函数中,必须在同一个函数中,不允许跨两个函数。不允许跨两个函数。5.3 无条件转向语句无条件转向语句 例例1 输入三角形输入三角形3边的边长并输出。若输入的边的边长并输出。若输入的3边长不边长不能满足构成三角形的条件,程序在显示提示信息后,利用能满足构成三角形的条件,程序在显示提示信息后,利用goto语句自动转到输入函数调用语句,要求用户重新输入语句自动转到输入函数调用语句,要求用户重新输入3边长的值,直到输入的边长的值,直到输入的3个边长满足构成三角形的条件为个边长满足构成三角形的条件为止。止。设:设:x,y,z三角形的三角形的3条边长条边长 5.3 无条件转向语句无条件转向语句 例例2 改进输出学生成绩和的等级的程序,使之当输入改进输出学生成绩和的等级的程序,使之当输入的成绩非法时,要求用户重新输入合法的成绩。的成绩非法时,要求用户重新输入合法的成绩。5.4 应用举例应用举例例例1 输入输入3个整数,求最小值。个整数,求最小值。设:设:a,b,c3个整数个整数 min最小值最小值 5.4 应用举例应用举例例例2 编写程序,判断某一年是否是闰年。编写程序,判断某一年是否是闰年。判断闰年的条件:判断闰年的条件:(1)能能被被4整整除除,但但不不能能被被100整整除除的的年年份份都都是是闰闰年年。如如1996,2004年等都是闰年。年等都是闰年。(2)能能被被100整整除除,又又能能被被400整整除除的的年年份份是是闰闰年年。如如1600,2000年都是闰年。年都是闰年。(3)不符合这两个条件的年份不是闰年。)不符合这两个条件的年份不是闰年。设:设:yezr年份年份 leap表示是否闰年,如果是,则表示是否闰年,如果是,则leap=1,否则,否则leap=0。流程图流程图:year被4整除?leap=1TFleap=0开始输出“闰年”结束输入yearyear被100整除?TFyear被400整除?TleapTFFleap=0输出“非闰年”leap=15.4 应用举例应用举例例例3 求一元二次方程求一元二次方程ax2+bx+c=0的根。(的根。(P99)分析:对于求一元二次方程分析:对于求一元二次方程ax2+bx+c=0,(1)若若a=0,则则原原方方程程变变为为一一元元一一次次方方程程bx+c=0,则则,当当b不等于不等于0时,时,x=-c/b。(2)若)若a0,则方程有,则方程有2个根(实根或复根)个根(实根或复根)若若b2-4ac0,则方程有两个实根:,则方程有两个实根:x1,2=(-bb2-4ac)/(2a)若若b2-4ac0,则方程有两个复根:,则方程有两个复根:x1,2=-b/(2a)i|b2-4ac|/(2a)流程图流程图:a%2=0?s=0s=s+aTFs=s+bs=s+b开始开始输出输出a,b,c,d,s结束结束输入输入a,b,c,db%2=0?TFc%2=0?s=s+cTs=s+ds=s+dd%2=0?TFIIF