您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第5章选择结构程序设计
第五章选择结构程序设计本章内容:1.关系运算符和关系表达式2.逻辑运算符和逻辑表达式3.if语句的使用4.条件运算符和条件表达式5.switch语句的使用6.程序举例顺序结构语句1语句2条件语句1语句2YN选择结构选择结构--根据某些条件决定执行或不执行某组操作关系运算符和表达式1.关系运算符及优先次序比较两个量的运算符称为关系运算符。在C语言中有以下关系运算符:小于=小于或等于大于=大于或等于==等于!=不等于关系运算符的优先级别:(1)、=、、=优先级相等,==、!=优先级相等,前者高于后者。(2)关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。关系表达式的一般形式为:表达式1关系运算符表达式2例如:a+bc-dx3/2'a'+1c-i-5*j==k+1关系表达式的值是:关系成立为“真”,不成立则为“假”。C语言中没有逻辑数据型,用1表示“真”、0表示“假”。如:50的值为“真”,即为1。(a=3)(b=5)由于35不成立,其值为0。关系表达式是表达式,因此也允许出现嵌套的情况。如:a(bc),a!=(c==d)等。2.关系表达式1.逻辑运算符C语言中提供了三种逻辑运算符!非运算&&与运算||或运算运算符&&、运算符||均为双目运算符,具有左结合性。非运算符!为单目运算符,具有右结合性。1)逻辑运算符优先级如下:(1)!高于&&高于||(2)&&,||低于关系运算符,!高于算术运算符(*,/)逻辑运算符和表达式按照运算符的优先顺序可以得出:ab&&cd等价于(ab)&&(cd)!b==c||da等价于((!b)==c)||(da)a+bc&&x+yb等价于((a+b)c)&&((x+y)b)逻辑运算符2)逻辑运算的值:逻辑运算的值也为“真”和“假”两种,用“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);参与运算量为假(值为0)时,结果为真(值为1)。例如:!(50)的结果为假,即为0。2.逻辑表达式逻辑表达式的一般形式为:表达式&&表达式表达式||表达式!表达式逻辑表达式的值:各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。3)逻辑运算的规则:main(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf(%d,%d\n,!x*!y,!!!x);printf(%d,%d\n,x||i&&j-3,ij&&xy);printf(%d,%d\n,i==5&&c&&(j=8),x+y||i+j+k);}分析下段程序的输出结果0,01,00,1在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,只有在必须执行下一个逻辑运算符才能求出表达式的值时,才执行下一个运算符。(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)若a=1,b=2,c=3,d=4,m和n原值为1(m=ab)&&(n=cd)则m=0,而n仍保持原值(4)‘c’&&‘d’逻辑运算符两侧,可以是任意类型的数据类型说明:1.if语句有三种基本形式1)第一种形式,基本形式:if(表达式)语句;如果表达式的值为真,则执行其后语句,否则不执行该语句。语句表达式非00if语句voidmain(){inta,b,max;scanf(%d,%d,&a,&b);max=a;if(maxb)max=b;printf(max=%d,max);}if(表达式)语句1;else语句2;如果表达式的值为真,则执行语句1,否则执行语句2。voidmain(){inta,b;scanf(%d,%d,&a,&b);if(ab)printf(max=%d\n,a);elseprintf(max=%d\n,b);}例:语句1表达式非00语句22)第二种形式,if-else形式前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:if(表达式1)语句1;elseif(表达式2)语句2;…elseif(表达式m)语句m;else语句n;语句n语句1表达式1非00语句2非00表达式2表达式m非00语句mif…elseif结构的执行过程3)第三种形式,if-else-if形式voidmain(){intresult;printf(inputyourresult:);scanf(“%d”,&result);if(result=90)printf(“yourresultiswounderful!\n);elseif(result=80)printf(yourresultisgood!\n);elseif(result=70)printf(yourresultisnormal!\n);elseif(result=60)printf(yourresultispassed!\n);elseprintf(“you’lltakeaanothertest!\n);}例如:(1)在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。注意:例如:if(a=5)语句;if(b)语句;只要表达式的值为非0,即为“真”。但是在if(a=5)…;中表达式的值永远为非0,所以其后的语句总是要执行的,但在语法上是合法的。又如,问下面程序段的输出结果?:intb,a=10;scanf(%d,&b);if(a=b)printf(a=b%d\n,a);elseprintf(a!=b%d,%d\n,a,b);注意:(2)在if语句中,条件判断表达式必须用括号括起来,即使是一个变量的最简单表达式,也要用括号括起来;在语句之后必须加分号。(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(x5)x++;elsex--;其中的else究竟是与哪一个if配对呢?应该理解为:还是应理解为:if(x=1)if(x=1)if(x5)if(x5)x++;x++;elseelsex--;x--;C语言规定,else总是与它前面最近的if配对例如:例:voidmain(){inta,b;printf(pleaseinputa,b:);scanf(%d,%d,&a,&b);if(a!=b)if(ab)printf(ab\n);elseprintf(ab\n);elseprintf(a=b\n);}if(x=1){if(x5)x++;}elsex--;如果要使else与第一个if配对,则可加括号{}来实现。例5.3Pg.95-1(x0)y=0(x=0)1(x0)main(){intx,y;scanf(%d,&x)if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(x=%d,y=%d\n,x,y);}if(x=0)if(x0)y=1;elsey=0;elsey=-1;程序1y=0;if(x!=0)if(x0)y=1;elsey=-1;程序2y=-1;if(x=0)if(x0)y=1;elsey=0;程序3条件运算符为?:三目运算符,即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为:表达式1?表达式2:表达式3其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。条件运算符和条件表达式条件表达式通常用于赋值语句之中。例如条件语句:if(ab)max=a;elsemax=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(){charch;scanf(%c,&ch);ch=(ch='A'&&ch='Z')?ch+32:ch;printf(%c,ch);}1.switch语句使用的一般形式为:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}switch语句先计算表达式的值,并逐个与其后的常量表达式值相比较;当表达式的值与某个常量表达式的值相等时,即执行其后的语句;然后不再进行判断,继续执行后面所有case后的语句;如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。语句的执行过程:voidmain(){chargrade;printf(inputyourmark:);scanf(%c,&grade);switch(grade){case‘A’:printf(“85~100\n);case‘B’:printf(“70~84\n);case‘C’:printf(“60~69\n);case‘D’:printf(“60\n);default:printf(error\n);}}程序运行时输入A,其输出结果是什么?例如在switch语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,将继续执行所有后面case语句的情况。为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句。break语句使用形式为:break;在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。说明switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;…case常量表达式n:语句n;break;default:语句n+1;}使用switch语句的通常形式为:voidmain(){chargrade;printf(inputyourmark:);scanf(%c,&grade);switch(grad
本文标题:第5章选择结构程序设计
链接地址:https://www.777doc.com/doc-3481737 .html