《第4章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章选择结构程序设计.ppt(38页珍藏版)》请在第壹文秘上搜索。
1、1第第 4 4章选择结构程序设计章选择结构程序设计 4.1 4.1 关系运算符与关系表达式关系运算符与关系表达式 4.2 4.2 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式 4.3 4.3 选择结构控制语句选择结构控制语句 4.4 4.4 条件去处符和条件表达表条件去处符和条件表达表 4.5 4.5 选择结构程序综合举例选择结构程序综合举例24.1 关系运算符与关系表达式关系运算也称为比较运算,也就是对两个运算数的大小关系关系运算也称为比较运算,也就是对两个运算数的大小关系进行比较,判定两个数值之间的关系是否符合关系运算符的进行比较,判定两个数值之间的关系是否符合关系运算符的要求的运算。关系
2、运算的结果只有真和假两种,由于要求的运算。关系运算的结果只有真和假两种,由于C C语言语言没有设置逻辑类型数据,因此使用整数没有设置逻辑类型数据,因此使用整数1 1表示真,整数表示真,整数0 0表示表示假,即如果关系表达式的运算结果只能是假,即如果关系表达式的运算结果只能是1 1或或0 0。运算符运算符作用作用运算数运算数结合性结合性优先级优先级 小于小于双目双目左结合左结合1010= 大于大于双目双目左结合左结合1010=大于等于大于等于双目双目左结合左结合1010=等于等于双目双目左结合左结合9 9!=!=不等于不等于双目双目左结合左结合9 93例如:例如:(1) (1) 比较整型变量比较
3、整型变量k k大于大于0 0,表达式为:,表达式为:k0k0(2) (2) 比较考试成绩比较考试成绩scorescore大于等于大于等于6060,表达式为:,表达式为:score=60score=60(3) (3) 比较整型变量比较整型变量k k模模2 2等于等于0 0,即判断,即判断k k是否是偶数:是否是偶数:k%2=0k%2=0(4) (4) 比较字符变量比较字符变量chch的值等于的值等于AA,表达式为:,表达式为:ch!=Ach!=A由于关系运算符经常与算术运算符和赋值运算符等组成复杂的由于关系运算符经常与算术运算符和赋值运算符等组成复杂的表达式,因此进行运算时,需要考虑它们之间的优
4、先级关系,表达式,因此进行运算时,需要考虑它们之间的优先级关系,关系运算符的优先级低于算术运算符,但是高于赋值运算符。关系运算符的优先级低于算术运算符,但是高于赋值运算符。例如:例如:(1) (1) 表达式表达式k%2=0k%2=0等价于等价于(k%2)=0(k%2)=0,是判断,是判断k%2k%2的结果是否与的结果是否与0 0相等,这是一个关系表达式。相等,这是一个关系表达式。(2) (2) 表达式表达式a=53a=53等价于等价于a=(53)a=(53),是把,是把5353的结果的结果1 1赋值给赋值给a a,这,这是一个赋值表达式。是一个赋值表达式。例例4-14-1:阅读程序:阅读程序
5、#include #include int main() int main() int k=3,score=75; int k=3,score=75; char ch = B; char ch = B; printf(k0 printf(k0的运算结果的运算结果: %dn,k0);: %dn,k0); printf(score=60 printf(score=60的运算结果的运算结果: %dn,score=60);: %dn,score=60); printf(k%2=0 printf(k%2=0的运算结果的运算结果: %dn,k%2=0);: %dn,k%2=0); printf(ch!=A
6、 printf(ch!=A的运算结果的运算结果: %dn,ch!=A);: %dn,ch!=A); return 0; return 0; k0k0的运算结果的运算结果: 1: 1score=60score=60的运算结果的运算结果: 1: 1k%2=0k%2=0的运算结果的运算结果: 0: 0chch!=A!=A的运算结果的运算结果: 1: 154.2 逻辑运算符与逻辑表达式有时程序中需要判断的条件比较复杂,是由多个简单条件组有时程序中需要判断的条件比较复杂,是由多个简单条件组成的复合条件。成的复合条件。C C语言使用逻辑运算符和逻辑表达式解决复杂条件的表示。语言使用逻辑运算符和逻辑表达式解
7、决复杂条件的表示。运算符运算符作用作用运算数运算数结合性结合性优先级优先级&逻辑与逻辑与双目双目左结合左结合5 5|逻辑或逻辑或双目双目左结合左结合4 4! !逻辑非逻辑非单目单目右结合右结合14146逻辑运算符连接运算数构成的式子称为逻辑表达式。与关系运逻辑运算符连接运算数构成的式子称为逻辑表达式。与关系运算相同,逻辑表达式的运算结果也只有真(算相同,逻辑表达式的运算结果也只有真(1 1)和假()和假(0 0)两种,)两种,但是逻辑表达式要求其运算数也必须是表示真和假的逻辑值。但是逻辑表达式要求其运算数也必须是表示真和假的逻辑值。C C语言中,判断运算数的真假时,任何非语言中,判断运算数的真
8、假时,任何非0 0数值被判定为真,只有数值被判定为真,只有0 0才被判定为假。才被判定为假。a ab b!a!aa&ba&ba|ba|b真真( (非非0)0)真真( (非非0)0)假假(0)(0)真真(1)(1)真真(1)(1)真真( (非非0)0)真真( (非非0)0)假假(0)(0)假假(0)(0)真真(1)(1)假假(0)(0)假假(0)(0)真真(1)(1)假假(0)(0)真真(1)(1)假假(0)(0)假假(0)(0)真真(1)(1)假假(0)(0)假假(0)(0)7例如:例如:(1) (1) 判断整型变量判断整型变量k k的值是否在的值是否在0,1000,100之间,表达式为:之间
9、,表达式为:k=0&k=0&k=A&c=A&c0&k%2=1k0&k%2=1(4) (4) 判断年份判断年份y y是否为闰年,表达式为:是否为闰年,表达式为:y%4=0&y%100!=0|y%400=0y%4=0&y%100!=0|y%400=0逻辑表达式计算过程中,为了提高程序运行效率,逻辑表达式计算过程中,为了提高程序运行效率,C C语言在逻辑运算语言在逻辑运算中使用了中使用了“短路运算短路运算”规则规则。即除了要考虑表达式中各个运算符的运。即除了要考虑表达式中各个运算符的运算规则、优先级和结合性外,还需要遵循以下两条规则:算规则、优先级和结合性外,还需要遵循以下两条规则:(1) (1)
10、逻辑表达式从左向右依次计算各个运算数的值。逻辑表达式从左向右依次计算各个运算数的值。(2) (2) 在上述从左向右计算过程中,任何时候只要能够确定最终逻辑表在上述从左向右计算过程中,任何时候只要能够确定最终逻辑表达式的值,则计算过程结束。达式的值,则计算过程结束。84.3 选择结构控制语句程序设计中选择结构程序对应的常见问题分为三种情况:程序设计中选择结构程序对应的常见问题分为三种情况:(1) (1) 决定某个操作做还是不做,称为单分支选择结构,对某决定某个操作做还是不做,称为单分支选择结构,对某个问题的处理经常是根据某个条件进行判断,如果条件成立,个问题的处理经常是根据某个条件进行判断,如果
11、条件成立,则执行特定的语句来处理问题,否则什么都不做。则执行特定的语句来处理问题,否则什么都不做。(2) (2) 决定在两个相关的操作中选择哪一个来做,称为双分支决定在两个相关的操作中选择哪一个来做,称为双分支选择结构,需要处理的两个操作往往和同一个条件相关,当选择结构,需要处理的两个操作往往和同一个条件相关,当条件成立时做一个操作,当条件不成立时做另外一个操作。条件成立时做一个操作,当条件不成立时做另外一个操作。(3) (3) 确定在多个相关的操作中选择哪一个来做,称为多分支确定在多个相关的操作中选择哪一个来做,称为多分支选择结构,该类问题相比前两种问题要复杂的多,它通常涉选择结构,该类问题
12、相比前两种问题要复杂的多,它通常涉及多个条件的组合运用,通常的做法是将多个条件合理安排,及多个条件的组合运用,通常的做法是将多个条件合理安排,把多分支结构处理成多个双分支的结构处理。把多分支结构处理成多个双分支的结构处理。C C语言提供语言提供ifif和和switchswitch两种选择结构控制语句,通过使用这两种选择结构控制语句,通过使用这两种语句或语句组合解决上述三种情况的选择结构程序设计。两种语句或语句组合解决上述三种情况的选择结构程序设计。语句语句真真假假表达式表达式1. if1. if语句的最简单形式:语句的最简单形式:说明:说明:1. 1. 条件表达式的值为条件表达式的值为1 1或
13、或0 0,必须用,必须用( )( )括住括住 2. 2. 若有多条语句(复合语句)时,用若有多条语句(复合语句)时,用 括住。括住。 3. (3. (条件表达式条件表达式) )后不要加;后不要加;if (if (条件表达式条件表达式) ) 语句;语句;if (if (条件表达式条件表达式) ) 语句;语句; 语句;语句; 例例4-24-2:从键盘输入一个整数,计算并输出其绝对值。:从键盘输入一个整数,计算并输出其绝对值。 #include #include int main() int main() int x; int x; printf(Input an integer: ); print
14、f(Input an integer: ); scanf(%d, &x); scanf(%d, &x); if(x0) if(x0) x=-x; / x=-x; /只有本句是只有本句是ifif结构的语句结构的语句 printf(|x|=%dn,x);printf(|x|=%dn,x); return 0; return 0; Input an integer: -10Input an integer: -10 |x|=10|x|=10Input an integer: 100Input an integer: 100 |x|=100|x|=100例例4-34-3:从键盘输入两个整数:从键盘输入
15、两个整数a a和和b b,要求程序按数值从大到小的,要求程序按数值从大到小的顺序输出这个整数。顺序输出这个整数。思路分析:求解本题有多种方法,这里使用交换变量值的思路,思路分析:求解本题有多种方法,这里使用交换变量值的思路,(1) (1) 输入整数输入整数a a和和b b的值。的值。(2) (2) 判断条件判断条件abab是否成立,如果成立,则交换变量是否成立,如果成立,则交换变量a a和和b b的值,的值,否则直接执行下一步。否则直接执行下一步。(3) (3) 按照先按照先a a后后b b的顺序输出两个变量的值。的顺序输出两个变量的值。 #include #include intint ma
16、in() main() intint a,b,ca,b,c; ; printfprintf(Input 2 integers(a b):);(Input 2 integers(a b):); scanfscanf(%(%d%dd%d,&,&a,&ba,&b);); if(ab) / if(ab) /由于交换操作需要三条语句完成,所以使用复合由于交换操作需要三条语句完成,所以使用复合语句语句 c=a; a=b; b=c; c=a; a=b; b=c; printfprintf(%(%d,%dd,%dn,n,a,ba,b);); return 0; return 0; Input 2 integers(a b):100 10Input 2 integers(a b):100 10 100,10100,10Input 2 integers(a b):10 100Input 2 integers(a b):10 100 100,10100,102.2.双分支双分支ifif语句语句if (if (表达式表达式) ) 语句语句1 1else else 语句语句2 2首先先判断表达式的值首先先判断表