南昌大学计算中心C语言程序设计南昌大学计算中心第4章选择结构4.1关系运算和逻辑运算4.1.1C语言的逻辑值通过关系运算或逻辑运算都会得到一个逻辑值。只有两种结果:“真”和“假”,4.1.2关系运算符和关系表达式C语言的关系运算符(左结合)====!=较高较低关系运算符是双目运算符。所有6种运算符的优先级都高于赋值运算符,但都低于算术运算符。南昌大学计算中心关系表达式的值为逻辑值(0或1)。如:1=3值为01+1==4/2值为14.1.3逻辑运算符和逻辑表达式!逻辑非&&逻辑与||逻辑或高低!(非)、算术、关系、&&、||、赋值高低南昌大学计算中心逻辑运算规则:!逻辑非,单目,否定运算&&逻辑与,双目,两边均为“真”结果为“真”||逻辑或,双目,两边均为“假”结果为“假”逻辑运算的短路规则:运算按照从左至右的顺序进行时,一旦能够确定整个逻辑表达式的值,就立即结束运算。如:假设a=0,b=1,c=2a&&b&&c表达式的结果为0结果为0,运算终止(++a)||(b--)&&(--c)表达式的结果为1结果为非0,运算终止南昌大学计算中心练习:下面程序的输出结果是____。main(){inta=5,b=4,c=3,d;d=(abc);printf(“%d\n”,d);}0南昌大学计算中心练习:设intx=1,y=1;表达式(!x||y--)的值是____。A)0B)1C)2D)-1√南昌大学计算中心练习:下面程序的输出结果是____。main(){intx=4,y=0,z;x*=3+2;printf(“%d”,x);x*=y==(z=4);printf(“%d”,x);}A)1440B)200C)204D)144√南昌大学计算中心练习:设x,y和z都是int型变量,且x=3,y=4,z=5,则下面表达式中,值为0的表达式是____。A)x&&yB)x=yC)x||++y&&y-zD)!(xy&&!z||1)√南昌大学计算中心4.2if语句和用if语句构成的选择结构4.2.1if语句的两种基本形式if(表达式)语句if(表达式)语句1else语句2语句流程图NY表达式?语句1语句2流程图NY表达式?南昌大学计算中心练习:下面程序的输出结果是____。main(){inta=1,b=3,c=5;if(c=a+b)printf(“yes\n”);elseprintf(“no\n”);}yes南昌大学计算中心练习:下面程序的输出结果是____。main(){intx=3;if(x=5)x++;printf(“%d”,x);}6南昌大学计算中心练习:下面程序的输出结果是____。main(){intn=0,m=1,x=2;if(!n)x-=1;if(m)x-=2;if(x)x-=3;printf(“%d\n”,x);}-4南昌大学计算中心练习:下面程序的输出结果是____。main(){intx=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf(“%d,%d”,x,y);}20,0南昌大学计算中心练习:下面程序的输出结果是____。main(){inti=1,j=1,k=2;if((j++||k++)&&i++)printf(“%d,%d,%d\n”,i,j,k);}A)1,1,2B)2,2,1C)2,2,2D)2,2,3√南昌大学计算中心4.2.2嵌套的if语句4.2.2.1在if子句中嵌套具有else子句的if语句if(表达式1)if(表达式2)语句1else语句2else语句34.2.2.2在if子句中嵌套不含else子句的if语句if(表达式1){if(表达式2)语句1}else语句2南昌大学计算中心练习:下面程序的输出结果是____。main(){inta=2,b=-1,c=2;if(ab)if(b0)c=0;elsec++;printf(“%d\n”,c);}A)0B)1C)2D)3√南昌大学计算中心练习:下面程序的输出结果是____。main(){inta=2,b=-1,c=2;if(ab);if(b0)c=0;elsec++;printf(“%d\n”,c);}A)0B)1C)2D)3√南昌大学计算中心练习:下面程序的输出结果是____。main(){inta=10,b=20,c=30;if(ab)if(ac)printf(“a=%d”,a);elseprintf(“b=%d”,b);printf(“c=%d”,c);}c=30南昌大学计算中心在else子语嵌套if语句if(表达式1)语句1elseif(表达式2)语句2else语句3if(表达式1)语句1elseif(表达式2)语句2……elseif(表达式m)语句melse语句n拓展南昌大学计算中心例4.5#includestdio.h{intg;Printf(“Enterg:”,g);if(g=90)printf(“A\n”);elseif(g=80)printf(“B\n”);elseif(g=70)printf(“C\n”);elseif(g=60)printf(“D\n”);elseprintf(“E\n”);}南昌大学计算中心表达式2?表达式1?语句n语句1语句2语句m…YNYNNY南昌大学计算中心练习:下面程序的输出结果是____。main(){floatx=2.0,y;if(x0.0)y=0.0;elseif(x10.0)y=1.0/x;elsey=1.0;printf(“%f\n”,y);}A)0.000000B)0.250000C)0.500000D)1.000000√南昌大学计算中心练习:下面程序运行时输入:-1-2↙,输出结果是____。main(){inta,b,m=1,n=1;scanf(“%d%d”,&a,&b);if(a0)m=m+n;if(ab)n=2*m;elseif(a==b)n=5;elsen=m+n;printf(“m=%dn=%d”,m,n);}m=1n=2南昌大学计算中心4.3条件表达式构成的选择结构利用C语言中唯一的三目运算符?:(条件运算符)构成选择结构。条件表达式的形式:表达式1?表达式2:表达式3条件表达式的结果是表达式2或表达式3,取决于表达式1的真假。条件运算符优先级高于赋值、逗号运算符,低于其他运算符如:5/37/3?10:20结果为20南昌大学计算中心练习:若运行时给变量x赋值12,则下面程序的输出结果是____。main(){intx,y;scanf(“%d”,&x);y=x12?x+10:x-12;printf(“%d\n”,y);}A)0B)22C)12D)10√南昌大学计算中心填空:以下程序输出x,y,z三个数中的最小值。main(){intx=4,y=5,z=8;intu,v;u=xy?__________;v=uz?__________;printf(“%d”,v);}x:yu:z南昌大学计算中心4.4switch语句以及用switch语句和break语句构成的选择结构4.4.1switch语句switch(表达式){case常量表达式1:语句1case常量表达式2:语句2...case常量表达式n:语句ndefault:语句n+1}南昌大学计算中心4.4.2switch语句的执行过程如:switch(a){case1:printf(&);case2:printf(#);default:printf($);}结果:若a等于1,输出:$若a等于2,输出:#$若a是其他值,输出:$南昌大学计算中心4.4.3在switch语句体中使用break语句switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;...case常量表达式n:语句n;break;default:语句n+1;}如:switch(a){case1:printf(&);break;case2:printf(#);break;default:printf($);break;}结果:若a等于1,输出:&若a等于2,输出:#若a是其他值,输出:$南昌大学计算中心例4.6#includestdio.hmain(){intg;printf(“Enteramark:”);scanf(“%d”,&g);printf(“g=%d:”,g);switch(g/10){case10:case9:printf(“A\n”);case8:printf(“B\n”);case7:printf(“C\n”);case9:printf(“D\n”);default:printf(“E\n”);}}南昌大学计算中心练习:下面程序的输出结果是____。main(){intx=1,a=0,b=0;switch(x){case0:b++;case1:a++;case2:a++;b++;}printf(“a=%d,b=%d\n”,a,b);}A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2√南昌大学计算中心注意:case后面的常量表达式不能用浮点数形式,switch后面的表达式也不能是浮点数形式。练习:若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是____。A)switch(x){case1.0:printf(“*\n”);case2.0:printf(“**\n”);}B)switch((int)x);{case1:printf(“*\n”);case2:printf(“**\n”);}C)switch(a+b){case1:printf(“*\n”);case2+1:printf(“**\n”);}D)switch(a+b){case1:printf(“*\n”);casec:printf(“**\n”);}√南昌大学计算中心练习:下面程序的输出结果是____。main(){intn=‘c’;switch(n++){default:printf(“error”);break;case‘a’:case‘A’:case‘b’:case‘B’:printf(“good”);break;case‘c’:case‘C’:printf(“pass”);case‘d’:case‘D’:printf(“warn”);}}passwarn