《第5章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章选择结构程序设计.ppt(39页珍藏版)》请在三一办公上搜索。
1、第五章 选择结构程序设计,本章内容:1.关系运算符和关系表达式2.逻辑运算符和逻辑表达式3.if语句的使用4.条件运算符和条件表达式5.switch语句的使用6.程序举例,选择结构-根据某些条件决定执行或不执行某组操作,关系运算符和表达式,1.关系运算符及优先次序 比较两个量的运算符称为关系运算符。在语言中有以下关系运算符:大于=大于或等于=等于!=不等于 关系运算符的优先级别:(1)、=、=优先级相等,=、!=优先级相等,前者高于后者。(2)关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。,关系表达式的一般形式为:表达式1 关系运算符 表达式2 例如:a+bc-d
2、x3/2 a+10的值为“真”,即为1。(a=3)(b=5)由于35不成立,其值为0。关系表达式是表达式,因此也允许出现嵌套的情况。如:a(bc),a!=(c=d)等。,2.关系表达式,1.逻辑运算符 语言中提供了三种逻辑运算符!非运算&与运算|或运算 运算符&、运算符|均为双目运算符,具有左结合性。非运算符!为单目运算符,具有右结合性。1)逻辑运算符优先级如下:(1)!高于&高于|(2)&,|低于关系运算符,!高于算术运算符(*,/),逻辑运算符和表达式,按照运算符的优先顺序可以得出:ab&cd 等价于(ab)&(cd)!b=c|dc&x+yc)&(x+y)b),逻辑运算符,2)逻辑运算的值
3、:逻辑运算的值也为“真”和“假”两种,用“1”和“0”来表示。反过来在判断一个量是为“真”还是为“假”时,以“0”的数值代表“假”,以非“0”的数值代表“真”。,(1)与运算&参与运算的两个量都为真时(非0),结果才为真(值为1),否则为假(值为0)。例如:50&42,由于50为真,42也为真,其结果也为“真”,表达式的值为1。,3)逻辑运算的规则:,(2)或运算|参与运算的两个量只要有一个为真(非0),结果就为真(值为1)。两个量都为假(值为0)时,结果为假(值为0)。例如:50|58,结果也就为真(值为1)。,(3)非运算!参与运算量为真(非0)时,结果为假(值为0);参与运算量为假(值为
4、0)时,结果为真(值为1)。例如:!(50)的结果为假,即为0。,2.逻辑表达式 逻辑表达式的一般形式为:表达式&表达式 表达式|表达式!表达式 逻辑表达式的值:各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。,3)逻辑运算的规则:,main()char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;printf(%d,%dn,!x*!y,!x);printf(%d,%dn,x|i,分析下段程序的输出结果,0,01,00,1,在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,只有在必须执行下一个逻辑运算符才能求出表达式的值时,才执行下一个运算符
5、。(1)表达式1&表达式2&a+b0&b+(a=1,b=-2)如果:表达式1的值是0,无论表达式2的值是什么,整个表达式的值都为0,因此表达式2就不计算了。(2)表达式1|表达式2|a+b0|b+(a=1,b=2)如果:表达式1的值是1,无论表达式2的值是什么,整个表达式的值都为1,因此表达式2就不计算了。,说 明:,(3)若a1,b2,c3,d=4,m和n原值为1(m=ab)&(n=cd)则m0,而n仍保持原值(4)c&d 逻辑运算符两侧,可以是任意类型的数据类型,说 明:,1.if语句有三种基本形式 1)第一种形式,基本形式:if(表达式)语句;如果表达式的值为真,则执行其后语句,否则不执
6、行该语句。,if 语句,void main()int a,b,max;scanf(%d,%d,if(表达式)语句1;else 语句2;如果表达式的值为真,则执行语句1,否则执行语句2。,void main()int a,b;scanf(%d,%d,例:,2)第二种形式,if-else形式,前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式m)语句m;else 语句n;,3)第三种形式,if-else-if形式,void main()int result;
7、printf(input your result:);scanf(“%d”,例 如:,在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。,注 意:,例如:if(a=5)语句;if(b)语句;只要表达式的值为非0,即为“真”。但是在 if(a=5);中表达式的值永远为非0,所以其后的语句总是要执行的,但在语法上是合法的。,又如,问下面程序段的输出结果?:int b,a=10;scanf(%d,注 意:,(2)在if 语句中,条件判断表达式必须用括号括起来,即使是一个变量的最简单表达式,也要用括号括
8、起来;在语句之后必须加分号。,(3)在if 语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。,注意:,例如:交换两个变量 if(ab)t=a;a=b;b=t;,当if语句中包含if语句时,则构成了if 语句嵌套的情形。其一般形式可表示如下:,if(表达式1)if(表达式2)语句1;else 语句2;,2.if 语句的嵌套,if(表达式1)if(表达式2)语句;,在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。,if(x=1)if(x
9、5)x+;else x-;其中的else究竟是与哪一个if配对呢?,语言规定,else 总是与它前面最近的if配对,例 如:,例:,如果要使else与第一个if配对,则可加括号 来实现。,例5.3 Pg.95,main()int x,y;scanf(%d,条件运算符为?:三目运算符,即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为:表达式1?表达式2:表达式3 其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。,条件运算符和条件表达式,条件表达式通常用于赋值语句之中。例如条件语句:if(ab)max=a;else m
10、ax=b;可用条件表达式写为 max=(ab)?a:b;执行该语句的语义是:如ab为真,则把a 赋予max,否则把b 赋予max。,条件运算符和条件表达式,条件运算符的运算优先级 低于关系运算符和算术运算符,高于赋值符。因此 max=(ab)?a:b可以去掉括号而写为 max=ab?a:b 条件运算符?:是一对运算符,不能分开单独使用。条件运算符的结合方向是自右至左。例如:ab?a:cd?c:d 应理解为 ab?a:(cd?c:d)条件表达式常常用在只执行单个的赋值语句时,不但使程序简洁,也提高了运行效率。,注意以下几点:,例.输入一个字符,若为大写字母,是则转换成小写,否则不转换,main(
11、)char ch;scanf(%c,1.switch语句使用的一般形式为:,switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n+1;,switch语句,先计算表达式的值,并逐个与其后的常量表达式值相比较;当表达式的值与某个常量表达式的值相等时,即执行其后的语句;然后不再进行判断,继续执行后面所有case后的语句;如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。,语句的执行过程:,void main()char grade;printf(input your mark:);
12、scanf(%c,程序运行时输入 A,其输出结果是什么?,例 如,在switch语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,将继续执行所有后面case语句的情况。为了避免上述情况,语言还提供了一种break语句,专用于跳出switch语句。break 语句使用形式为:break;在每一case语句之后增加break 语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。,说 明,switch(表达式)case 常量表达式1:语句1;break;case 常量表达式2
13、:语句2;break;case 常量表达式n:语句n;break;default:语句n+1;,使用switch语句的通常形式为:,void main()char grade;printf(input your mark:);scanf(%c,例题修改如下:,1.在case后的各常量表达式的值不能相同,否则会出现错误。2.在case后,允许有多个语句,可以不用 括起来。3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。4.default子句可以省略不用。5.若判断的是一个区间,要将区间转换成单个值,见例5.7。,注意以下几点:,s250km 没有折扣250=s500
14、 2%折扣500=s1000 5%折扣1000=s2000 8%折扣2000=s3000 10%折扣3000=s 15%折扣,将区间转换成常量if(s=3000)c=12else c=s/250,switch(c)case 0:d=0;break;case 1:d=2;break;case 2:case 3:d=5;break;case 7:d=8;break;case 11:d=10;break;case 12:d=15;break;,例5.7 计算运输公司的运费,s为路程,例,判断某一年是否闰年,void main()int year,leap;scanf(“%d”,闰 年:能被4整除,但
15、不能被100整除能被4整除,又能被400整除,if(year%4!=0)leap=0;else if(year%100!=0)leap=1;else if(year%400!=0)leap=0;else leap=1;,if(year%4=0,if(year%4=0)if(year%100=0)if(year%400=0)leap=1;else leap=0;else leap=1;else leap=0;,判断闰年的不同实现方式,void main()float a,b,s;char c;printf(input expression:a+(-,*,/)b n);scanf(%f%c%f,计 算 器 程 序,用户输入运算数和四则运算符,输出计算结果,1.关系表达式和逻辑表达式是两种重要的表达式,主要用于条件执行的判断。2.语言提供了多种形式的条件语句以构成分支结构。(1)if语句主要用于单向选择。(2)if-else语句主要用于双向选择。(3)if-else-if语句和switch语句用于多向选择。这几种形式的条件语句一般来说可以互相替代。,本章小结,课本Pg.104 5.3 5.5 5.6,作 业,
链接地址:https://www.31ppt.com/p-5638814.html