第5章选择结构程序设计 教学目与要求 掌握关系运算符和逻辑运算符及其优先顺序,关系 表达式和逻辑表达式的组成及运算,语句的三种 形式,条件嵌套时和else配对规则,条件运算符 及条件表达式, switch语句格式和作用 教学内容: 关系运算符和关系表达式:;逻辑运算符和逻辑表达 式;语句; switch语句;程序举例。 教学重点与难点: i语句的三种形式及 switch语句,条件嵌套
1 ▪ 教学目与要求 掌握关系运算符和逻辑运算符及其优先顺序,关系 表达式和逻辑表达式的组成及运算,if语句的三种 形式,条件嵌套时If和else配对规则,条件 运算符 及条件表达式,switch语句格式和作用。 ▪ 教学内容: 关系运算符和关系表达式;逻辑运算符和逻辑表达 式;if语句;switch语句;程序举例。 ▪ 教学重点与难点: if语句的三种形式及switch语句,条件嵌套。 第5章 选择结构程序设计
51关系运算符和表达式 511关系运算符及优先次序:≈ 优先级6(高) 种类:=> 结合方向:自左向右 优先级别:低于算术高于赋值!=优先级7(低) 例c>a+b />(a 52关系表式/系运算符将两个表达式(算术、关 系、逻輯扣赋值馋字裘达式)连接起来的式子。其值 是一个逻辑值“真鲅假”,在c的逻辑运算中,分 别用1和0表示 b int a=3, b=2, c=l, d, f; a>b 表达式值1 (a>b)==c ∥表达式值1 b+cb //d=1 ∥/f=0 ·fa>b>c
2 5.1 关系运算符和表达式 5.1.1 关系运算符及优先次序: • 种类:= > != • 结合方向:自左向右 • 优先级别:低于算术,高于赋值 >= == != 优先级6(高) 优先级7(低) 例 c>a+b //c>(a+b) a>b!=c //(a>b)!=c a==bc //a=(b>c) 5.1.2 关系表达式:用关系运算符将两个表达式(算术、关 系、逻辑、赋值及字符表达式)连接起来的式子。其值 是一个逻辑值“真”或“假”,在C的逻辑运算中,分 别用1和0表示 •例 int a=3,b=2,c=1,d,f; • a>b • (a>b)==c • b+cb • f=a>b>c //表达式值1 //表达式值1 //表达式值0 //d=1 //f=0
51关系运算符和表达式 关系运算注意: 例若a=0;b=0.5;x=0.3: 则a2>7>8在C中是允许的, 值为0 例inti=1,j7,a; a=i+ 4:=0) 则a=2 例‘a”>0结果为1 A>100结果为0
3 关系运算注意: 例 若a=0; b=0.5; x=0.3; 则 a2>7>8在C中是允许的, 值为 0 例 int i=1, j=7,a; a=i+(j%4!=0); 则a= 2 例 ‘a’>0 结果为 ‘A’>100 结果为 1 0 5.1 关系运算符和表达式
51关系运算符和表达式 关系运算注意: 例应避免对实数作相等或不等的判断 如1.03.023.0==1.0结果为0 可改写为: fabs(1.03.0*30-1.0)<1e-6 例注意区分“=”与“=” int a=0,b=1; if(a=b printf(“ a equal to b”); eise printf(“ a not equal to b”);
4 关系运算注意: 例 注意区分“=”与“==” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”); 例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0==1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6 0 5.1 关系运算符和表达式
52、逻辑运算符和表达式 521逻辑运算符及顺序 种类:!&& 逻辑运算真值表 b a !a&ba‖b 真 假 真 假 真 真 假 ·C语言中,运算量:0表示“假”, 非0表示“真”, 运算结果:0表示“假”, 表示“真
5 a b !a !b a&&b a||b 真 假 真 假 假 假 真 真 5.2、逻辑运算符和表达式 5.2.1 逻辑运算符及顺序 ▪ 种类: ! && || ▪ 逻辑运算真值表 • C语言中,运算量: 0表示“假” , • 非0表示“真” , • 运算结果: 0表示“假” , • 1表示“真” , 真 假 假 假 假 假 真 真 假 假 真 真 真 假 真 真
52、逻辑运算符和表达式 522逻辑表达式 ●优先级 !(2) 高 !:从右向左 结合方向: &&(11) &&:从左向右 2)|低 :从左向右 例ab&&x> (a>b)&&(x>y) a==bx==y (a=b)‖(x=y) alla>b (∵)(a>b)
6 ! (2) && (11) || (12) 高 低 例 ab&&x>y a==b||x==y !a||a>b ⚫优先级: ⚫结合方向: ! :从右向左 && :从左向右 || :从左向右 // (ab)&&(x>y) //(a==b)||(x==y) //(!a)||(a>b) 5.2、逻辑运算符和表达式 5.2.2 逻辑表达式
5.2、逻辑运算符和表达式 522逻辑表达式 0优先级 !(2) 高 从右向左 ●结合方向 &&(11 &&:从左向右 ‖(12) 低 :从左向右 例a=4;b=5; 值为0 a&&b 值为1 值为1 lab 值为1 48&0|2 值为1 5>3882|840(53)&&2|(8<(4()值为1 值为1 c&&d3
7 ! (2) && (11) || (12) 高 低 ⚫优先级: ⚫结合方向: ! :从右向左 && :从左向右 || :从左向右 例 a=4;b=5; • !a • a&&b • a||b • !a||b • 4&&0||2 • 5>3&&2||83)&&2||(8<(4-(!0))) 值为1 5.2、逻辑运算符和表达式 5.2.2逻辑表达式
5.2、逻辑运算符和表达式 522逻辑表达式 (2) !:从右向左 ●优先级: 高 &&(11) &&:从左向右 结合方向: (12)/低 l:从左向右 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被 执行,只是在必须执行下一个逻辑运算符才能求出表达式 的解时,才执行该运算符 例a&&b&&c∥只在a为真时,才判别b的值; 只在a、b都为真时,才判别c的值 例l|bl )在a为假时,才判别b的值; 只在a、b都为假时,才判别c的值 例a=1;b=2;c=3;d=4;m=1;n=1 (m=a>b)&&(n=c>d) ∥结果m=0,n=1
8 ! (2) && (11) || (12) 高 低 ⚫优先级: ⚫结合方向: ! :从右向左 && :从左向右 || :从左向右 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被 执行,只是在必须执行下一个逻辑运算符才能求出表达式 的解时,才执行该运算符 例 a&&b&&c //只在a为真时,才判别b的值; 只在a、b都为真时,才判别 c的值 例 a||b||c //只在a为假时,才判别b的值; 只在a、b都为假时,才判别 c的值 例 a=1;b=2;c=3;d=4;m=1;n=1; (m=a>b)&&(n=c>d) //结果m=0,n=1 5.2、逻辑运算符和表达式 5.2.2 逻辑表达式
5.2if语旬 5.3.1if语旬的三种形式 expr 形式一 非0 格式:if( expression) statement statement 执行过程: 例:i(x>y) printf(%d”,x) ●形式二 ◆格式:if( expression) 非0 expr statement1 eise statement l statement2 statement2 ◆执行过程 例:if(x>y)max=x; ese max-y
9 ▪ 5.2 if语句 5.3.1 if语句的三种形式 ▪ 形式一: • 格式:if (expression) statement • 执行过程: expr statement 非0 =0 expr statement1 statement2 非0 =0 ⚫形式二: ◆格式:if (expression) statement1 else statement2 ◆执行过程: 例:if (x>y) max=x; else max=y; 例:if (x>y) printf(“%d”,x);
5.2if语旬 if expr1) statement1 5.3.1if语旬的三种形式 else if(expr2) statement2 形式三: else if(expr3) statement 格式: ◆执行过程: ●。。 ese statement 例:if( salary>1000 index=0. 4 else if(salary>800) index=0.3 else if(salary>600) index=0.2 else if (salary>400) index=0. se index=0 statemnt statemnt statemnt statemnt
10 ▪ 5.2 if语句 5.3.1 if语句的三种形式 形式三: ▪ 格式: if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 …... [ else statementn ] expr1 statemnt 1 非0 =0 expr2 expr3 statemnt n statemnt 3 statemnt 2 非0 非0 =0 =0 ◆执行过程: 例:if (salary>1000) index=0.4; else if (salary>800) index=0.3; else if (salary>600) index=0.2; else if (salary>400) index=0.1; else index=0;