★关系运算符和表达式 ◆关系远算符 ●种类 优先级6(高) ●结合方向:自左向右 ●优先级别 优先级7(低) 例c>a+b//c>(a+b) a>b!=c/(a>b)!=c 关系表滷式敏值:臭辑竄真”或“假”,用1和0表 9=h> //a=(h>) 例inta=3.b=2.c=1df (a>b)=c b+cb fa>b>c
关系运算符和表达式 ❖关系运算符 ⚫种类:= > != ⚫结合方向:自左向右 ⚫优先级别: >= == != 优先级6(高) 优先级7(低) 例 c>a+b //c>(a+b) a>b!=c //(a>b)!=c a==bc //a=(b>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 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
●关系运算注意 例若a=0:b=0.5;x=0.3 则a0结果为 A2>100结果为0
⚫关系运算注意: 例 若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 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
●关系运算注意: 例应避免对实数作相等或不等的判断 如1.0/3.0*3.0==1.0结果为0 可改写为:fabs(1.0/30*30-1.0)<1e-6 例注意区分“”与“” int a=0.b=1 if(a b) printf(a equal to b' else printf( a not equal to b”)
⚫关系运算注意: 例 注意区分“=”与“==” 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 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
★逻辑运算符和表达式 逻辑运算符 种类:!&&‖ ●逻辑运算真值表 b a&&b allb 真 真 假 假 真假 假真 假 真真假 假 假 真 真 ●C语言中, 0表示“假 非0表示“真 运算结果:0表示“假” 1表示“真
a b !a !b a&&b a||b 真 假 真 假 假 假 真 真 逻辑运算符和表达式 ❖逻辑运算符 ⚫种类: ! && || ⚫逻辑运算真值表 ⚫C语言中,运算量: 0表示“假” , 非0表示“真” , 运算结果: 0表示“假” , 1表示“真” , 真 假 假 假 假 假 真 真 假 假 真 真 真 假 真 真 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
●优先级 从右向左 ●结合方向: &&(11) & ‖(12)低 例ab&&x>y a==blx=y
! (2) && (11) || (12) 高 低 例 ab&&x>y a==b||x==y !a||a>b ⚫优先级: ⚫结合方向: ! :从右向左 && :从左向右 || :从左向右 // (ab)&&(x>y) //(a==b)||(x==y) //(!a)||(a>b) 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
●优先级 从右向左 ●结合方向 &&(11 & 2)低 例a=4:b=5 a&&b alb ab 4&&0|2 5>3&&2|8<4-!0 c&&d
! (2) && (11) || (12) 高 低 ⚫优先级: ⚫结合方向: ! :从右向左 && :从左向右 || :从左向右 例 a=4;b=5; !a a&&b a||b !a||b 4&&0||2 5>3&&2||8 值为1 值为0 值为1 值为1 值为1 值为1 //(5>3)&&2||(8<(4-(!0))) 值为1 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
●优先级 从右向左 ●结合方向 &&(11 & 2)低 短路特性:逻辑表达式求解时,并非所有的逻辑运算 符都被执行,只是在必须执行下一个逻辑远算符才能 求出表达式的解时,才执行该运算符 例a&&b&&c 例alb|c 例a=1;b=2;c=3;d=4;m=1;n= (m=a>b)&&(n=c>d)
! (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 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
★条件运算符与表达式 般形式: exprI?expr2:expr3 ◇执行过程 ☆功能:相当于条件语句,但不能取代一般ⅲ语旬 运符下嵌套 如(X%2=1)?1:0 10 b); htf(%d"Ja>b? a: b) X>=0)?x:-x 非C 予优,级cb?a: c>d?c:d a>b?a: (c>dgc: d) ☆ exprI、expr2、expr3类型可不同,表达式值取较高的 类型 例x?a1:b/=0,表达式值为“b';x+0,表达式值为a xy?1:1.5/Xy,值为10;xy,值为1.5 ●●
条件运算符与表达式 ❖一般形式: expr1 ? expr2 : expr3 ❖执行过程 ❖功能:相当于条件语句,但不能取代一般if语句 例 if (a>b) printf(“%d”,a); else printf(“%d”,b); printf(“%d”,a>b?a:b); 例 求 a+|b| printf(“a+|b|=%d\n”,b>0?a+b:a-b); expr1 取expr2值 取expr3值 非0 =0 例 (a==b)?’Y’:’N’ (x%2==1)?1:0 (x>=0)?x:-x (c>=‘a’ && c0?1:(xb?a:c>d?c:d a>b?a:(c>d?c:d) ❖expr1、expr2、expr3类型可不同,表达式值取较高的 类型 例 x?‘a’:‘b’ //x=0,表达式值为‘b’; x‡0,表达式值为‘a’ x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
853选择型程序设计 ★i语句(条件选择语旬) expr 8if语旬的三种形式 非0 ●形式 statement ◆格式:if( expression) statement ◆执行过程 例:f(x>y) print f( a. SIon expr statement el statement l statement2 statement2 ◆执行过程 if(xy) max-X max-y
§5.3 选择型程序设计 if语句(条件选择语句) ❖if语句的三种形式 ⚫形式一: ◆格式:if (expression) statement ◆执行过程: expr statement 非0 =0 例:if (x>y) printf(“%d”,x); expr statement1 statement2 ⚫形式二: 非0 =0 ◆格式:if (expression) statement1 else statement2 ◆执行过程:例:if (x>y) max=x; else max=y;
if( expr1 statement 1 ●形式三 ◆格式 else if(expr 2) statement2 else if (expr3) statements ◆执行过程: [else statement 例:if( salary>1000) index=0.4 else if (salary>800) index=0.3 else if (salary>600) index.2 else if (salary> 400) index=0. 1 else index=0 statemnt1 statemnt2 statemnt3statemntn
⚫形式三: ◆格式: if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 …... [ else statementn ] expr1 statemnt1 非0 =0 expr2 expr3 statemnt2 statemnt3 statemntn 非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;