第5章第1节 第五章选择结构程序设计 C中选择结构主要由语句实现 if语句的形式:f(关系表达式) statement 1; else statement2; §5关系运算符和关系表达式 关系运算符及其优先次序 1.关系运算符——C提供了6种关系运算符,用于比较运算 0 大于 ④>= 大或等于 高左 右 等于 低 ⑥! 不等于 优先级相同
第5章 第1节 一. 关系运算符及其优先次序 §5.1 关系运算符和关系表达式 C中选择结构主要由if 语句实现 if 语句的形式: if(关系表达式) statement 1; else statement 2; 1. 关系运算符—— C提供了6种关系运算符,用于比较运算 ①< 小于 ②<= 小于或等于 ③> 大于 ④>= 大或等于 ⑤= = 等于 ⑥!= 不等于 优先级相同 优先级相同 高 低 优先性 结合性 左 右
第5章第1节 2.与其他运算符比较 算术运算符 关系运算符 赋值运算符 高 低 圆括号!++ 算术 关系逻辑条件赋值逗号 (类型) 先*/% && 后 高 低
圆括号 !+ +,- -, (类型) 算术 先* / % 后+ - 关系 >, >= < ,<= ==,!= 逻辑 && || 条件 赋值 逗号 高 低 第5章 第1节 2. 与其他运算符比较 算术运算符 关系运算符 赋值运算符 高 低
二.关系表达式 第5章第1节 1. 算术、关系、逻辑、赋值表达式 例:1).a>b 2).(a=3)>(b=5) 3).a+bb)>(e>d) 2.关系表达式的值 1比较成立(真) 例:设:a=1,b=2,c=3 0比较不成立(假) b 3>2 ))) 成立,值为“1” c>b==a (C>b)==a 成立,值为“1” 3 c>b>a (c>b)>a→1>1→不成立,值为“0” 3关系表达式中的数据类型整型、实型、字符型等 例:a’>“b’值为0 按ASCⅡ码值比较
二. 关系表达式 第5章 第1节 2. 关系表达式的值 例: 设:a=1, b=2, c=3 1) c>b 3>2 成立,值为“1” 2) c>b = = a → (c>b) = = a 成立,值为“1” 3) c>b>a → (c>b) > a → 1>1 不成立, 值为“0” 3.关系表达式中的数据类型 整型、实型、字符型等 算术、关系、逻辑、赋值表达式 例: 1). a>b 2). (a=3)>(b=5) 3). a+bb)>(c>d) 比较成立 (真) 比较不成立 (假) =1 =0 例: ‘a’> ‘b’ 值为0 按ASCⅡ码值比较 1
§52逻辑运算符和逻辑表达式 第5章第2节 逻辑运算符及其优先性 1.逻辑运算符及其运算法则 名称符号 运算法则 逻辑与(乘)&&a&&ba、b都为真(1)结果才为真(1),否则为假(0) 逻辑或(加) a|ba、b中有一个为真(1,结果为真( a、b都为假(0)结果才为假(0) 逻辑非 a为真(1),a为假(0), a为假(0),a为真(1) 2.逻辑运算符的优先性与结合性 1)优先性 高 低 !算术运算符关系运算符 &&和|赋值运算符 (&&高、‖低) 右结 2)结合性 &&、 左结合
第5章 第2节 §5.2 逻辑运算符和逻辑表达式 一. 逻辑运算符及其优先性 1. 逻辑运算符及其运算法则 名 称 符 号 运 算 法 则 逻辑与(乘) && a&&b a、b都为真(1),结果才为真(1),否则为假(0) 逻辑或(加) | | a | |b a、b中有一个为真(1),结果为真(1), a、b都为假 (0),结果才为假 (0), 逻辑非 ! !a a为真(1), !a为假(0), a为假 (0), !a为真 (1), 2. 逻辑运算符的优先性与结合性 ! 算术运算符 关系运算符 &&和 | | (&&高、| | 低) 赋值运算符 高 低 1). 优先性 2). 结合性 !—— 右结合 &&、| | ——左结合
第5章第2节 例:1)!a>b&&C>d→(!a)>b)&&(c>d) 2)a=bldc==d a=(b||e==d) 二,逻辑表达式 1、概念: 2逻辑表达式的值 真假 对于数值量,若非0(无论+-)则为“1” 对于数值量,若为0 则为“0” 例:如:a=1,b=2,C=3 1)!(a+b)>c→!3>3 0>3 2)a+b&d3→(a+b)&3→3&&3→1&&l→1 3)!a+b>3 0+2>3→0 4)4&&012→(4&&01→02→1 5)5>3&&!28<4.0 l&&0110→(1&&0|0→010→0
第5章 第2节 例: 1) !a>b&&c>d ((!a)>b)&&(c>d) 2) a=b | |c= = d a=(b | |(c= = d)) 1. 概念: 真 1 对于数值量,若非0 (无论 + -) 则为“1” 假 0 对于数值量,若为0 则为“0” 例: 如:a=1 , b=2, c=3 1) !(a+b)>c → !3>3 → 0>3 → 0 2) a+b&&3 → (a+b)&&3 → 3&&3 → 1&&1 → 1 3) !a+b>3 → 0+2>3 → 0 4) 4&&0| |2 → ( 4&&0)| |2 → 0| |2 → 1 5) 5>3&&!2| |8 2. 逻辑表达式的值 二 . 逻辑表达式
第5章第2节 3.说明 1).逻辑表达式中可以有任何类型的数据 c,+2&&a’-97 (c)+2)&&(a"-97)→2&&0→0&0→0 2)注意逻辑表达式的求解过程 当运算至某一步时,如整个逻辑表达式的值已经确定,则 不再进行后面的运算 ①a&&b&&c 如才计算如一{b沐 如a=0,则不计算b、c ②a|b|le 如a=1,则不计算b、c 如a=0,计算b,如一→{ b=0才计算c b=1则不计算c
3. 说明 1). 逻辑表达式中可以有任何类型的数据 !‘c’+2&&’a’-97 → ((!‘c’)+2)&&(‘a’-97) → 2&&0 → 0 &&0 → 0 第5章 第2节 2) 注意逻辑表达式的求解过程 ——当运算至某一步时,如整个逻辑表达式的值已经确定,则 不再进行后面的运算 ① a&&b&&c 如a=1才计算b; 如 如a=0, 则不计算b、c。 ② a||b||c 如a=1, 则不计算b、c 如a=0, 计算b, 如 b=1 才计算c b=0 则不计算c b=0 才计算c b=1 则不计算c
第5章第2节 例子:如a=1,b=2,C=3,d=4,m=1,n=1,执行下列逻辑表达式后m、m的值为什 么? (m=a>b)&&(n=c>d) 1>2→0 不执行,n保持原值 故 3)逻辑表达式的应用 构成较复杂的条件判断 例1:判断某一年是否为闰年。①能被4整除,但不能被100整除 条件为: ②能被4整除,又能被400整除 解: (y%4==0&&y%100:=0)(y%4==0&&y%400== 则为闰年 如表达式的值 0则为非闰年
第5章 第2节 1>2 →0 ∴m=0 不执行, n 保持原值 故: m=0, n=1 例子:如a=1,b=2,c=3,d=4,m=1,n=1, 执行下列逻辑表达式后m、n的值为什 么? (m=a>b)&&(n=c>d) 例1:判断某一年是否为闰年。 条件为: ① 能被4整除,但不能被100整除 ②能被4整除,又能被400整除 解: (y%4= =0&&y%100!=0)||(y%4= =0&&y%400= =0) 如表达式的值 =1 则为闰年 =0 则为非闰年 3) 逻辑表达式的应用 —— 构成较复杂的条件判断
第5章第2节 程序: mainO d int y,i; printf(“输入一个年号:”); scanf(“%d”,&y); i=(y%4==0&&y%100:=0)(y%4==0&&y%400==0) if(i==1) printf(“%d年是闰年”y); else printf(“%d年不是闰年Ⅶn”2y); 例2:将数学表达式1=1&&x<3 注意:直接定成1<=x<3的错误可假设经x=0、x=2和x=5进行 试算)
第5章 第2节 程序: main() { int y,i; printf (“ 输入一个年号:”); scanf (“%d”,&y); i=(y%4= =0&&y%100!=0)||(y%4= =0&&y%400= =0); if (i= =1) printf (“ %d 年是闰年 \n”,y); else printf (“ %d 年不是闰年 \n”,y); } 例2 : 将数学表达式 1≤x=1&&x<3 注意: 直接定成1<=x<3 的错误(可假设经x=0、x=2和x=5进行 试算) 1 3
第5章第2节 逻辑表达式(y%4=0&&y%100=0)(y%4==0&&y%400=0)的变化 1)提取公因子 (y%4==0&&y%100:=0)|(y%4=0&&y%400==0 (y%4==0)&&(y%100:=0)(y%400==0) (y%4==0)&&(y%100:=0y%400==0)(1) 2)能被40整除,就能被4整除 故上式可变为 (y%4==0&&y%100=0)|(y%400==0) (y%4==0&&y%100:=0)y%400==0 3)引入逻辑运算法则(反演律,狄摩根定律) (a&&b)=(a)|(b) (a|b)=(!a)&&(b) 对(1)取反,则 0则为闰年 (y%4==0)&&(y%100÷=0|y%400==0) 1则为非闰年 (y%4==0川((y%100=0)&((y%400==0) (y%4=0)|(y%100==0&&y%400:=0)
第5章 第2节 逻辑表达式(y%4= =0&&y%100!=0)||(y%4= =0&&y%400==0)的变化 1)提取公因子 (y%4= =0&&y%100!=0)||(y%4= =0&&y%400==0) (y%4= =0)&&((y%100!=0)||(y%400= =0)) (y%4= =0)&&(y%100!=0||y%400= =0) (1) 2).能被400整除,就能被4整除 故上式可变为: (y%4= =0&&y%100!=0)||(y%400= =0) (y%4= =0&&y%100!=0)||y%400= =0 (2) 3) 引入逻辑运算法则(反演律,狄摩根定律) 对(1)取反,则 !((y%4= =0)&&(y%100!=0||y%400= =0)) !(y%4= =0)||(!(y%100!=0)&&(!(y%400= =0)) (y%4!= 0)||(y%100==0&&y%400!=0) =0 则为闰年 =1 则为非闰年 !(a&&b)=(!a)||(!b) !(a||b)=(!a)&&(!b)
第5章第3节 §53if语句 if语句的三种形式 表达式 1.if(表达式)语句;—不平衡的语句 语句 如:if(x>max)max=x; 2.if(表达式)语句1;ee语句2 0 或:i(表达式)语句1 表达式 else语句2; 平衡i语句 语句1 语句2 tH: if(a>b)max=a; else max=b 3.i(表达式1)语句1 表达式 else it(表达式2)语句2; 表达式 else it(表达式n1)语句n1; 却达式 else语句n; 语句1 语句2 语句n-1 语句n
第5章 第3节 §5.3 if 语 句 一. if 语句的三种形式 1. if (表达式) 语句; ——不平衡的if语句 如:if(x>max) max=x; 表达式 语句 ≠0 =0 2 . if (表达式) 语句1;else 语句2; 或: if (表达式) 语句1; else 语句2; 如: if(a>b) max=a; else max=b; 表达式 语句1 ≠0 =0 语句2 平衡if语句 3 . if (表达式1) 语句1; else if (表达式2) 语句2; ...... else if (表达式n-1) 语句n-1; else 语句n; 表达式1 表达式2 表达式n-1 语句1 语句2 语句n-1 语句n ≠0 =0 ≠0 =0 ........ ≠0 =0