1第4章选择结构程序设计2第四章选择结构程序设计一、关系运算符和关系表达式二、逻辑运算符和逻辑表达式三、使用if语句实现的选择结构四、条件运算符和条件表达式五、switch语句六、选择结构程序举例主要内容3关系运算符====!=(6种)第四章选择结构程序设计优先级赋值关系(后2前4)算术关系表达式用关系运算符将两个表达式连接起来的式子.算术、关系、逻辑、赋值、字符。值真(1)假(0)53一、关系运算符和关系表达式4219举例已知a=5,b=4,c=3,d=7求下列表达式的值a+b==c*dabca!=bca+b==c*d0abc10a!=bc01算术运算符的优先级高于关系运算符不能用于判断b的值是否在a与c之间“”运算符的优先级高于“!=”5逻辑运算符!(逻辑非)&&(逻辑与)||(逻辑或)运算规则优先次序赋值||&&关系算术!第四章选择结构程序设计(1)!:取逻辑值的相反值。(2)&&:参加运算的两个逻辑值都为真时,结果为真(1)。(3)||:参加运算的两个逻辑值都为假时,结果为假(0)。逻辑表达式用逻辑运算符将关系表达式和逻辑量连接起来的式子。举例已知:(a=1b=0)1a||b&&0!a&&(53)||b0双目单目二、逻辑运算符和逻辑表达式6第四章选择结构程序设计二、逻辑运算符和逻辑表达式第五章选择结构程序设计举例53&&84-!00(53)&&(8(4-!0))4&&53||(a=6)1逻辑运算符两侧的运算对象不但可以是0和1,也可以是0或非0的整数,也可是任何类型的数据。系统判定标准:0为假;非0为真。当“与运算”的左侧为0,或者“或运算”的左侧为1时,右侧的表达式不再进行计算。短路现象#includestdio.hvoidmain(){inta=1,b=1;if(a1&&(b=5))a=4;printf(“%d,%d”,a,b);}1,17选择结构单分支双分支if(表达式)语句多分支if(表达式)语句1else语句2if(表达式1)语句1elseif(表达式2)语句2……else语句nif语句的嵌套switch语句第四章选择结构程序设计选择结构的分类8格式流程图第四章选择结构程序设计if(表达式)语句三、if语句实现选择结构–单分支不成立(假、0)表达式语句块成立(真、1)if(xy)printf(“%d”,x);举例9例4.5第四章选择结构程序设计#includestdio.hintmain(){intnum1,num2,max;printf(inputtwonumbers:\n);scanf(%d%d,&num1,&num2);max=num1;if(maxnum2)max=num2;printf(max=%d\n,max);return0;}5641max=56三、if语句实现选择结构–单分支输入两个整数,输出其中较大的数。10例4.6第四章选择结构程序设计#includestdio.hintmain(){floata,b,t=0;scanf(“%f,%f”,&a,&b);if(ab){t=a;a=b;b=t;}printf(“%5.2f,%5.2f\n”,a,b);return0;}3,43.00,4.00……if(ab)t=a;a=b;b=t;…………if(ab)t=a;a=b;b=t;……3,44.00,0.00当某些语句作为一个整体出现的时候,必须是复合语句的形式。三、if语句实现选择结构–单分支输入两个实数,按由小到大的数序输出它们。11格式if(xy)printf(“%d”,x);elseprintf(“%d”,y);第四章选择结构程序设计if(表达式)语句1else语句2三、if语句实现选择结构–双分支举例流程图12第四章选择结构程序设计#includestdio.hintmain(){floata,b,c,p,s;scanf(“%f,%f,%f”,&a,&b,&c);if(a+bc&&a+cb&&b+ca){p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“s=%7.2f\n”,s);}elseprintf(“Notatriangle!\n”);return0;}输入三角形的三边,求三角形的面积。3,4,5s=6.003,4,8Notatriangle!三、if语句实现选择结构–双分支例4.9输入a,b,c是三角形吗?YNp(a+b+c)/2ssqrt(p*(p-a)*(p-b)*(p-c))输出s输出“Notatriangle!”13编程实现如下分段函数,输出结果保留2位小数。y=0x≤0练习1#includestdio.h#includemath.hintmain(){floatx,y;scanf(“%f”,&x);if(x=0)y=0;elsey=sqrt(x);printf(“x=%.2f,y=%.2f\n”,x,y);return0;}这4行包含几条语句?if(x=0)y=0;if(x0)y=sqrt(x);14编程实现分段函数。y=0x≤01.0/x0x≤105x-1x202x+110x≤20例4.11输入xx=0是否y=0否0x≤10是y=1.0/xx=20是否y=2*x+1x20是否y=5*x-10x&&x=10x=10y=5*x-1if(x=0)y=0;elseif(x=10)y=1.0/x;elseif(x=20)y=y=2*x+1;elsey=5*x-1;输出y15第四章选择结构程序设计if(表达式1){语句组1}elseif(表达式2){语句组2}……elseif(表达式n){语句组n}else{语句组n+1}三、if语句实现选择结构–多分支(1)if…elseif形式16#includestdio.hintmain(){floatx,y;scanf(%f,&x);if(x=0)y=0.0;elseif(x=10)y=1.0/x;elseif(x=20)y=y=2*x+1;elsey=5*x-1;printf(x=%.2f,y=%.2f\n,x,y);return0;}第一次运行:5x=5.00,y=0.2015x=15.00,y=31.00第二次运行:21.67x=21.67,y=107.35第三次运行:y=0x≤01.0/x0x≤105x-1x202x+110x≤20程序如下:17编程实现分段函数——换一种判断顺序y=0x≤01.0/x0x≤105x-1x202x+110x≤20例4.11输入xx=10是否y=1.0/x否x=0是y=0x=20是否y=2*x+1y=5*x-1if(x=10)if(x=0)y=0;elsey=1.0/x;elseif(x=20)y=2*x+1;elsey=5*x-1;输出yif(x=10)if(x=0)y=0;elsey=1.0/x;elseif(x=20)y=2*x+1;elsey=5*x-1;18if语句的嵌套第四章选择结构程序设计if(表达式1)if(表达式2)语句1[else语句2][elseif(表达式3)语句3[else语句4]]注意if与else的配对原则:从else入手,找它上面最近的未配对的if配对。三、if语句实现选择结构–多分支(2)if语句嵌套结构19练习第四章选择结构程序设计已知a=3b=4c=5d=0,d=?if(ab)d=a;elseif(cb)d=c;elsed=b;if(ab)if(cb)d=c;elsed=b;if(ab){if(cb)d=c;}elsed=b;if(ab)if(cb)d=c;elsed=b;elsed=a;d=5d=3d=0d=420使用if语句中应注意的问题•在if关键字之后的括弧内为表达式,该表达式通常是逻辑表达式或关系表达式,但也可以是其它任何合法的C表达式•条件判断表达式必须用括弧括起来,后面没有分号。但在语句之后必须加分号。•如果希望在满足/不满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句#includestdio.hintmain(){floata,b,c,p,s;scanf(“%f,%f,%f”,&a,&b,&c);if(a+bc&&a+cb&&b+ca){p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“s=%7.2f\n”,s);}elseprintf(“Notatriangle!\n”);return0;}21条件运算符条件表达式举例if(ab)max=a;elsemax=b;第四章选择结构程序设计表达式1?表达式2:表达式3max=(ab)?a:b;条件运算符的使用条件若if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值,则可以用简单的条件运算符来处理。取值表达式1为真,则取值为表达式2的值;表达式1为假,则取值为表达式3的值。四、条件运算符和条件表达式右结合方向22使用条件表达式求两个数的较大值。(自己看)#includestdio.hintmain(){floatnum1,num2,max=0;scanf(%f,%f,&num1,&num2);max=(num1num2)?num1:num2;printf(%5.2f\n,max);return0;}例4.14第一次运行:3.2,44.00第二次运行:4,3.24.0023思考一个简单的菜单选择程序。示例1示例224开关语句第四章选择结构程序设计switch(表达式){case常量表达式1:语句组1case常量表达式2:语句组2case常量表达式3:语句组3……case常量表达式n:语句组ndefault:语句组n+1}五、switch语句实现多分支break;执行过程定位入口、依次执行、遇break跳出整型或字符型25例4.17#includestdio.hvoidmain(){chargrade;printf(“请输入考试等级A~D:”);scanf(“%c”,&grade);switch(grade){case‘A’:printf(“80~100\n”);case‘B’:printf(“70~79\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“60\n”);default:printf(“error\n”);}}B根据输入的考试成绩等级打印出百分制分数段。A:80~100B:70~79C:60~69D:60说明:应在每一个printf后加break语句第四章选择结构程序设计70~7960~6960Error26#includestdio.hvoidmain(){chargrade;printf(“请输入考试等级A~D:”);scanf(“%c”,&grade)switch(grade){case‘A’:printf(“80~100\n”);break;case‘B’:printf(“70~79\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“60\n”);break;default:printf(“error\n”);}}B70~79最后一行的break可以省略。第四章选择结构程序设计例4.17根据输入的考试成绩等级打印出百分制分数段。A:80~100B:70~79C:60~69D:6028思考(例4.18)#includestdio.hvoidmain(){intscore;printf(“请输入考试成绩0~100:”);scanf(“%d”,&score);if(score100)printf(“请输入0~100之间的整数\n”);elseif(score=80)printf(“