选择结构1.ppt
第四章第四章 选择结构选择结构本章要点:u正确使用逻辑表达式u掌握用if语句实现选择结构u掌握条件运算符的使用14.关系运算符和关系运算符和逻辑运算符逻辑运算符.1.1 关系运算符及其运算结果关系运算符及其运算结果1.关系运算符及其优先次序关系运算符及其优先次序语言中的关系运算符有种:、!、!优先次序:前种同级,高于后种(后种同级)算术运算符 (高)关系运算符赋值运算符 (低)(s-d)(b+c)(bd)例如:x!=y s-db+c bd2 2.关系表达式关系表达式 关系表达式就是将两个表达式用关系表达式就是将两个表达式用关系运算符关系运算符连接起来。连接起来。如:如:(ab)(bc)、ay、s+fd 关系表达式的值为逻辑值关系表达式的值为逻辑值,“真真”或或“假假”.注意注意:语言没有逻辑型数据,语言没有逻辑型数据,关系表达式关系表达式的真、假的真、假是以是以 数值数值“”代表代表“真真”,以以“”代表代表“假假”。例例1:a=3,b=2,c=1 ,下列表达式的值是?下列表达式的值是?cb;(a-b)=1;b+cbc;(自左至右自左至右)3 用逻辑运算符将用逻辑运算符将关系表达式关系表达式或或逻辑量逻辑量连接起来就是逻辑表达式。连接起来就是逻辑表达式。1.逻辑运算符及其优先次序逻辑运算符及其优先次序 C语言提供三种逻辑运算符:&(逻辑与)、|(逻辑或)、!(逻辑非)注注:“&”和“|”是“双目(元)运算符”,它要求有两个运算量操作数。而“!”是“单目(元)运算符”,只要求有一个运算量。例:a&b+c 、(ab)|(xy)、!(x3&2|84!0 值为:值为:“?”b&d 值为:值为:“?”11在逻辑表达式的求解过程中,只要能确定表达式的值,就不在继续向下求解其他的值了.5例例3:判别某一年:判别某一年year是否闰年。是否闰年。条件:条件:能被整除,但不能被能被整除,但不能被100整除。或能被整整除。或能被整 除,又能被除,又能被400整除。整除。判断闰年的逻辑表达式为:(year%4=0&year%100!0)|year%400=0)判断非闰年的逻辑表达式为:(year%4!=0)|(year%100=0&year%400!=0)64.1.3 算术运算符、关系运算符及逻辑运算符的优先级算术运算符、关系运算符及逻辑运算符的优先级和结合律和结合律!(非)!(非)(高高)算术运算符算术运算符 关系运算符关系运算符&和和|赋值运算符赋值运算符 (低低)例例4a+bc&c=d (a+b)n+3 (a-(!d)|(m(n+3)a=53474.2 4.2 程序的三种基本结构及其框图表示方法程序的三种基本结构及其框图表示方法1.顺序结构顺序结构 BA 先执行A操作,再执行B操作,两者是顺序执行关系。82.选择结构选择结构当P条件为非零时,执行A操作,否则执行B操作APB非零非零零零93.循环结构循环结构当P为非零时,反复执行A,直到P为零为止。1)形式a零零PA非零非零102)2)形式形式b b先执行A操作,再判断P是否为非零,若P为非零,再执行A,直到P为零为止。AP非零非零零零 11 If语句用来判定给定的条件是否满足,根据判定的结果决定执行下面给出的语句.4.3.1 if 语句的一般形式语句的一般形式 if(条件表达式)条件表达式)语句语句1 else 语句语句2 4 4.3 if 语语 句句(条件语句条件语句)注注:左边格式中左边格式中语句可以表示语句可以表示一个语句或多个语句一个语句或多个语句,若多个语句则用若多个语句则用 括起来。括起来。12if 语句的三种形式 .if(表达式表达式)语句语句 例:if(xy)printf(“%d”,x);else printf(%d,y);3.if(表达式表达式)语句序列语句序列 else 语句序列语句序列 2 例:if(xy)t=x;x=y;y=t;else printf(“max=%dn,x);13或 if()if()语句语句 (内嵌if)else 语句语句 2注:每个每个else都与距其最近的都与距其最近的 if 配对配对。内嵌if 内嵌ifif()if()语句语句 else 语句语句else if()语句语句 else 语句语句2.if语句的嵌套语句的嵌套 在在if语句中又包含一个或多个语句中又包含一个或多个if语句的形式。语句的形式。一般格式如下:14I if 语句的语句的常用格式常用格式:if(表达式表达式)语句语句 1 else if(表达式表达式2)语句语句 2 else if(表达式表达式3)语句语句 3 else if(表达式表达式m)语句语句 m else 语句语句 n仅执行表达式为真的else if后的内嵌语句,若所有的表达式值都为0,则执行最后一个else后的内嵌语句.15例如例如:已知 编一个程序,输入一个 x的值,输出y值。程序为:main()int x,y;scanf(“%d”,&x);if(xb?a:b 若 a=3,b=2,则 max=说明:(1)条件运算符优于赋值运算符。(2)条件运算符的结合方向为“自右向左”。例1:当a=1,b=2,c=3,d=4 时,表达式 ab?a:cd?c:d,值为:?例2:若 x=1,y=0,a=3,b=-3 表达式 (yx?a:b)&a+b 值为?404.3.3 条件运算符条件运算符17(3)可以用条件表达式取代一般的if结构语句。如:if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,ab?a:b);(4)条件表达式中的表达式的类型可以与表达式和表达式的类型不同。条件表达式值的类型为二者中较高的类型。如:xy?1.2:6,当xy成立时条件表达式的值为1.2,否则为实型数据6.0。c=xy?1:s ,当xy成立时c=1,否则c=s。例:main()char ch;scanf(“%c”,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(“%c”,ch)输入 a 18uswitch语句 问题:为什么引出switch语句?该语句为开关语句,解决多分支的情况。格式:switch(表达式)表达式)case(常量表达式):语句块常量表达式):语句块;case(常量表达式):语句块常量表达式):语句块;case (常量表达式常量表达式m):):语句块语句块m;default:语句块语句块n;说明说明:(1)表达式可以是整型、字符型、枚举数据型的表达式。(2)计算表达式的值;(3)找到与表达式的值相同的case常量表达式,执行该case后边的语句块,之后依次往下执行语句块依次往下执行语句块。4.4 switch 语句语句19(3)case后的语句序列可以是一条语句,也可以后的语句序列可以是一条语句,也可以是多条语句,此时多条语句不必用括号括起来。是多条语句,此时多条语句不必用括号括起来。(4)case后后的的“常量表达式常量表达式”只起到语句标号只起到语句标号的作用,而不进行条件判断,故在执行完某个的作用,而不进行条件判断,故在执行完某个 case后的后的语句序列后,将自动转移到下一个语句序列后,将自动转移到下一个case继续执行。其计算过程为:继续执行。其计算过程为:20 a.计算表达式的值;b.找到与表达式的值相同的case常量表达式,执行该case后边的语句序列,之后依次往下执行语句块依次往下执行语句块。表达式语句序列1语句序列2语句序列n语句序列n+1 21若每个语句序列的最后一条语句均为break语句,则执行流程为:表达式语句序列1语句序列n语句序列n+1语句序列222 例如:根据考试成绩的等级打印出百分制分数段:例如:根据考试成绩的等级打印出百分制分数段:上述程序可写成多分支情况:switch(grade )case A:printf(“85100n”);break;case B:printf(“7084n”);break;case C:printf(“6069n”);break;case D:printf(“60n”);break;default:printf(“error”);若gread=A时,输出结果为?当 grad=B时,输出结果为:70 8423流程图为:grade输出 “85100”输出 “=3000)c=12;else c=s/250;switch(c)case 0:d=0;break;case 1:d=2;break;case 2:case 3:d=5;break;case 4:case 5:多个多个case可共用一可共用一组执行语句组执行语句29 case 6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;f=p*w*s*(1-d/100.0);printf(“freight=%15.4f”,f);运行:100,20,300结果:freight=588000.000030谢谢!31