第四章选择结构程序设计优秀PPT.ppt
第四章选择结构程序设计第一页,本课件共有34页 顺序结构顺序结构语句语句1语句语句2条件条件语句语句1语句语句2YN 选择结构选择结构选择结构选择结构-根据某些条件决定执行或不执行某组操作根据某些条件决定执行或不执行某组操作 第二页,本课件共有34页关系运算符和表达式关系运算符和表达式1.1.关系运算符及优先次序关系运算符及优先次序 比较两个量的运算符称为关系运算符。比较两个量的运算符称为关系运算符。在语言中有以下关系运算符:在语言中有以下关系运算符:小于小于 =大于大于 =大于或等于大于或等于 =等于等于 !=!=不等于不等于 关系运算符的优先级别:关系运算符的优先级别:(1)(1)、=、=c-d x3/2 a+10的值为的值为“真真”,即为,即为1。(a=3)(b=5)由于由于35不成立,其值为不成立,其值为0。关系表达式是表达式,因此也允许出现嵌套的情况。关系表达式是表达式,因此也允许出现嵌套的情况。如:如:a(bc),a!=(c=d)等。等。2.2.关系表达式关系表达式第四页,本课件共有34页1.1.逻辑运算符逻辑运算符 语言中提供了三种逻辑运算符语言中提供了三种逻辑运算符 !非运算非运算&与运算与运算|或运算或运算 运算符运算符&、运算符、运算符|均为双目运算符,具有左结合性。均为双目运算符,具有左结合性。非运算符非运算符!为单目运算符,具有右结合性。为单目运算符,具有右结合性。1)逻辑运算符优先级如下:逻辑运算符优先级如下:(1)!高于高于&高于高于|(2)&,|低于关系运算符,!高于算术运算符低于关系运算符,!高于算术运算符(*,/)逻辑运算符和表达式逻辑运算符和表达式第五页,本课件共有34页按照运算符的优先顺序可以得出:按照运算符的优先顺序可以得出:ab&cd 等价于等价于 (ab)&(cd)!b=c|da 等价于等价于 (!b)=c)|(dc&x+yc)&(x+y)0&42,由由于于50为为真真,42也也为为真真,其其结结果果也也为为“真真”,表达式的值为,表达式的值为1。3)逻辑运算的规则:)逻辑运算的规则:(2)或运算)或运算|参与运算的两个量只要有一个为真参与运算的两个量只要有一个为真(非非0),结果就为真,结果就为真(值为值为1)。两个量都为假(值为两个量都为假(值为0)时,结果为假(值为)时,结果为假(值为0)。)。例如:例如:50|58,结果也就为真(值为结果也就为真(值为1)。)。第七页,本课件共有34页(3)非运算)非运算!参参与与运运算算量量为为真真(非非0)时时,结结果果为为假假(值值为为0);参参与与运运算算量量为假(值为为假(值为0)时,结果为真(值为)时,结果为真(值为1)。)。例如:例如:!(50)的结果为假,即为的结果为假,即为0。2.2.逻辑表达式逻辑表达式 逻辑表达式的一般形式为:逻辑表达式的一般形式为:表达式表达式&表达式表达式 表达式表达式|表达式表达式 !表达式!表达式 逻逻辑辑表表达达式式的的值值:各各种种逻逻辑辑运运算算的的最最后后值值,以以“1”和和“0”分分别代表别代表“真真”和和“假假”。3)逻辑运算的规则:)逻辑运算的规则:第八页,本课件共有34页 在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,只有在必须执行下一个逻辑运算符才能求出表达式的值时,才只有在必须执行下一个逻辑运算符才能求出表达式的值时,才执行下一个运算符。执行下一个运算符。(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就不计算了就不计算了。说说 明明:第九页,本课件共有34页(3)若)若a1,b2,c3,d=4,m和和n原值为原值为1 (m=ab)&(n=cd)则则m0,而而n仍保持原值仍保持原值 说说 明明:第十页,本课件共有34页1.if1.if语句有三种基本形式语句有三种基本形式 1)第一种形式,基本形式)第一种形式,基本形式:if(表达式表达式)语句;语句;如果表达式的值为真,则执行其后语句,否则不执行该语句。如果表达式的值为真,则执行其后语句,否则不执行该语句。语句语句表达式表达式非非00if if 语句语句void main()int a,b,max;scanf(%d,%d,&a,&b);max=a;if(maxb)printf(max=%dn,a);else printf(max=%dn,b);例:例:语句1表达式非00语句22)第二种形式,第二种形式,if-else形式形式第十二页,本课件共有34页前二种形式的前二种形式的if语句一般都用于两个分支的情况。语句一般都用于两个分支的情况。当有多个分支选择时,可采用当有多个分支选择时,可采用if-else-if语句,其一般形式为:语句,其一般形式为:if(表达式表达式1)语句语句1;else if(表达式表达式2)语句语句2;else if(表达式表达式m)语句语句m;else 语句语句n;语句n语句1表达式1非00语句2非00表达式2表达式m非00语句mifelse if 结构的执行过程结构的执行过程3)第三种形式,第三种形式,if-else-if形式形式第十三页,本课件共有34页void main()int result;printf(input your result:);scanf(“%d”,&result);if(result=90)printf(“your result is wounderful!n);else if(result=80)printf(your result is good!n);else if(result=70)printf(your result is normal!n);else if(result=60)printf(your result is passed!n);else printf(“youll take a another test!n);例例 如:如:第十四页,本课件共有34页(1)在在三三种种形形式式的的if语语句句中中,在在if关关键键字字之之后后均均为为表表达达式式。该该表表达达式式通通常常是是逻逻辑辑表表达达式式或或关关系系表表达达式式,但但也也可可以以是是其其它它表表达达式式,如如赋赋值值表表达达式式等等,甚甚至至也也可可以以是是一个一个变量变量。注注 意意:例如:例如:if(a=5)语句;语句;if(b)语句;语句;只要表达式的值为非只要表达式的值为非0,即为,即为“真真”。但是在但是在 if(a=5);中表达式的值永远为非;中表达式的值永远为非0,所以,所以其后的语句总是要执行的,但在语法上是合法的。其后的语句总是要执行的,但在语法上是合法的。第十五页,本课件共有34页又如,问下面程序段的输出结果?又如,问下面程序段的输出结果?:int b,a=10;scanf(%d,&b);if (a=b)printf(a=b%dn,a);else printf(a!=b%d,%dn,a,b);注注 意意:(2)在在if 语句中,条件判断语句中,条件判断表达式必须用括号括起来表达式必须用括号括起来,即使是一个变量的最简单表达式,也要用括号括起来;即使是一个变量的最简单表达式,也要用括号括起来;在语句之后必须加分号在语句之后必须加分号。第十六页,本课件共有34页(3)在在if 语语句句的的三三种种形形式式中中,所所有有的的语语句句应应为为单单个个语语句句,如如果果要要想想在在满满足足条条件件时时执执行行一一组组(多多个个)语语句句,则则必必须须把把这这一组语句用一组语句用 括起来组成一个复合语句括起来组成一个复合语句。注意注意:例如:交换两个变量例如:交换两个变量 if(ab)t=a;a=b;b=t;第十七页,本课件共有34页当当if语句中包含语句中包含if语句时,则构成了语句时,则构成了if 语句嵌套的情形。语句嵌套的情形。其一般形式可表示如下:其一般形式可表示如下:if (表达式表达式1)if(表达式表达式2)语句语句1;else 语句语句2;2.if 2.if 语句的嵌套语句的嵌套 if(表达式表达式1)if(表达式表达式2)语句;语句;在嵌套内的在嵌套内的if语句可能又是语句可能又是if-else型的,这将会出型的,这将会出现多个现多个if和多个和多个else重叠的情况,这时要特别注意重叠的情况,这时要特别注意if和和else的配对问题。的配对问题。第十八页,本课件共有34页 if(x=1)if(x5)x+;else x-;其中的其中的else究竟是与哪一个究竟是与哪一个if配对呢配对呢?应该理解为:应该理解为:还是应理解为:还是应理解为:if(x=1)if(x=1)if(x5)if(x5)x+;x+;else elsex-;x-;语言规定,语言规定,else 总是总是与它前面最近的与它前面最近的if配对配对例例 如:如:第十九页,本课件共有34页例:例:void main()int a,b;printf(please input a,b:);scanf(%d,%d,&a,&b);if(a!=b)if(ab)printf(abn);else printf(a=1)if(x5)x+;else x-;如果要使如果要使else与第一个与第一个if配对,则可加括号配对,则可加括号 来实现。来实现。第二十页,本课件共有34页例例5.3 -1 (x0)main()int x,y;scanf(%d,&x)if(x=0)if(x0)y=1;else y=0;else y=-1;程序程序1 y=0;if(x!=0)if(x0)y=1;else y=-1;程序程序2 y=-1;if(x=0)if (x0)y=1;else y=0;程序程序3第二十一页,本课件共有34页 条件运算符为条件运算符为?:三目运算符,即有三个参与运算的量。三目运算符,即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为:由条件运算符组成条件表达式的一般形式为:表达式表达式1?表达式表达式2 :表达式表达式3 其其求求值值规规则则为为:如如果果表表达达式式1的的值值为为真真,则则以以表表达达式式2 的的值值作作为为条件表达式的值,否则以表达式条件表达式的值,否则以表达式2的值作为整个条件表达式的值。的值作为整个条件表达式的值。条件运算符和条件表达式条件运算符和条件表达式第二十二页,本课件共有34页 条件表达式通常用于赋值语句之中。条件表达式通常用于赋值语句之中。例如条件语句:例如条件语句:if(ab)max=a;else max=b;可用条件表达式写为可用条件表达式写为 max=(ab)?a:b;执行该语句的语义是:如执行该语句的语义是:如ab为真,则把为真,则把a 赋予赋予max,否则把否则把b 赋予赋予max。条件运算符和条件表达式条件运算符和条件表达式第二十三页,本课件共有34页 条件运算符的运算优先级条件运算符的运算优先级 低于关系运算符和算术运算符,高于赋值符。低于关系运算符和算术运算符,高于赋值符。因此因此 max=(ab)?a:b可以去掉括号而写为可以去掉括号而写为 max=ab?a:b 条件运算符条件运算符?:是一对运算符,不能分开单独使用。:是一对运算符,不能分开单独使用。条件运算符的结合方向是自右至左。条件运算符的结合方向是自右至左。例如:例如:ab?a:cd?c:d 应理解为应理解为 ab?a:(cd?c:d)条条件件表表达达式式常常常常用用在在只只执执行行单单个个的的赋赋值值语语句句时时,不不但但使使程程序序简简洁,也提高了运行效率。洁,也提高了运行效率。注意以下几点:注意以下几点:第二十四页,本课件共有34页例例.输入一个字符,若为大写字母,是则转换成小写,否输入一个字符,若为大写字母,是则转换成小写,否则不转换则不转换main()char ch;scanf(%c,&ch);ch=(ch=A&ch=Z)?ch+32:ch;printf(%c,ch);第二十五页,本课件共有34页1.switch1.switch语句使用的一般形式为:语句使用的一般形式为:switch(表达式表达式)case 常量表达式常量表达式1:语句语句1;case 常量表达式常量表达式2:语句语句2;case 常量表达式常量表达式n:语句语句n;default:语句语句n+1;switch语句语句第二十六页,本课件共有34页 先先计计算算表表达达式式的的值值,并并逐逐个个与与其其后后的的常常量量表表达达式式值值相相比比较;较;当当表表达达式式的的值值与与某某个个常常量量表表达达式式的的值值相相等等时时,即即执执行行其其后后的的语句;语句;然后不再进行判断,继续执行后面所有然后不再进行判断,继续执行后面所有case后的语句;后的语句;如如表表达达式式的的值值与与所所有有case后后的的常常量量表表达达式式均均不不相相同同时时,则则执执行行default后的语句。后的语句。语句的执行过程语句的执行过程:第二十七页,本课件共有34页void main()char grade;printf(input your mark:);scanf(%c,&grade);switch(grade)case A:printf(“85100n);case B:printf(“7084n);case C:printf(“6069n);case D:printf(“60 n);default:printf(errorn);程序运行时输入程序运行时输入 A,其输出结果是什么?,其输出结果是什么?例例 如如第二十八页,本课件共有34页 在在switch语语句句中中,“case 常常量量表表达达式式”只只相相当当于于一一个个语语句句标标号号,表表达达式式的的值值和和某某标标号号相相等等则则转转向向该该标标号号执执行行,但但不不能能在在执执行行完完该该标标号号的的语语句句后后自自动动跳跳出出整整个个switch 语语句句,将将继继续续执执行行所所有有后后面面case语语句的情况。句的情况。为为了了避避免免上上述述情情况况,语语言言还还提提供供了了一一种种break语语句句,专专用用于跳出于跳出switch语句。语句。break 语句使用形式为:语句使用形式为:break;在在每每一一case语语句句之之后后增增加加break 语语句句,使使每每一一次次执执行行之之后后均均可可跳出跳出switch语句,从而避免输出不应有的结果。语句,从而避免输出不应有的结果。说说 明明第二十九页,本课件共有34页switch(表达式表达式)case 常量表达式常量表达式1:语句语句1;break;case 常量表达式常量表达式2:语句语句2;break;case 常量表达式常量表达式n:语句语句n;break;default:语句语句n+1;使用使用switch语句的通常形式为:语句的通常形式为:第三十页,本课件共有34页void main()char grade;printf(input your mark:);scanf(%c,&grade);switch(grade)case A:printf(“85100n);break;case B2:printf(“7084n);break;case C:printf(“6069n);break;case D:printf(“60n);break;default:printf(errorn);例题修改如下:例题修改如下:第三十一页,本课件共有34页1.在在case后后的的各各常常量量表表达达式式的的值值不不能能相相同同,否否则则会会出出现错误。现错误。2.在在case后,允许有多个语句,可以不用后,允许有多个语句,可以不用 括起来。括起来。3.各各case和和default子子句句的的先先后后顺顺序序可可以以变变动动,而而不不会会影影响程序执行结果。响程序执行结果。4.default子句可以省略不用。子句可以省略不用。注意以下几点:注意以下几点:第三十二页,本课件共有34页 void main()float a,b,s;char c;printf(input expression:a+(-,*,/)b n);scanf(%f%c%f,&a,&c,&b);switch(c)case+:printf(%fn,a+b);break;case-:printf(%fn,a-b);break;case*:printf(%fn,a*b);break;case/:printf(%fn,a/b);break;default:printf(input errorn);计计 算算 器器 程程 序序用户输入运算数和四则运算符,用户输入运算数和四则运算符,输出计算结果输出计算结果第三十三页,本课件共有34页 1.关系表达式和逻辑表达式是两种重要的表达式,主要用于条关系表达式和逻辑表达式是两种重要的表达式,主要用于条件执行的判断。件执行的判断。2.语言提供了多种形式的条件语句以构成分支结构。语言提供了多种形式的条件语句以构成分支结构。(1)if语句主要用于单向选择。语句主要用于单向选择。(2)if-else语句主要用于双向选择。语句主要用于双向选择。(3)if-else-if语句和语句和switch语句用于多向选择。语句用于多向选择。这几种形式的条件语句一般来说可以互相替代。这几种形式的条件语句一般来说可以互相替代。本章小结本章小结第三十四页,本课件共有34页