第五章选择结构程序设计 ■5.1关系运算符和关系表达式 ■5.2逻辑运算符和逻辑表达式 5.3if语句 5.4 switch语句 5.5程序举例 1
第五章 选择结构程序设计 ◼ 5.1 关系运算符和关系表达式 ◼ 5.2 逻辑运算符和逻辑表达式 ◼ 5.3 if语句 ◼ 5.4 switch语句 ◼ 5.5 程序举例
5.1关系运算符和关系表达式 、关系运算符> 1.优先级:低于纯算术类,高于赋值类 2.结合性:左结合性 注意:(1)字符数据按其ASCⅢ码值进行比较 (2)应避免两个实数作==或!=的比较 二、关系表达式:用关系运算符连接起来的式子 关系表达式的值:只有2个,真以1表示,假以0表示 注意:(3)表达式5>2>7>8是允许的,它相当于(5>2)>7)>8 (4)可以将关系表达式看成是一种整型表达式
5.1 关系运算符和关系表达式 注意 : (1) 字符数据按其ASCII码值进行比较 (2) 应避免两个实数作 = = 或 != 的比较 一、关系运算符 > >= 2>7>8 是允许的 , 它相当于 ((5>2)>7)>8 (4) 可以将关系表达式看成是一种整型表达式
关系表达式: 注意:关系表达式的值应是逻辑值,在C中无逻辑 型数据 若关系表达式成立,其值为1;在C中非零的值均 表示逻辑真 若关系表达式不成立,其值为零;零表示逻辑假
关系表达式: 注意: 关系表达式的值应是逻辑值, 在C中无逻辑 型数据。 若关系表达式成立,其值为1;在C中非零的值均 表示逻 辑真 若关系表达式不成立, 其值为零;零表示逻辑假
已知: char c;inti,j,k; double x,y; c=w,i=1,j=2,k=-7,x=7e+033,y=0.001 表达式 等价表达式 表达式值 a’+1<c (a”+1)<c 3<i<5 3<j)<5 1’-“0’==1 (“103)==1 1’==0+1 1’==(“0+1) X<x+y X<(x+y) i+k<=2 (i+j)+k)<=(2*j) (i≤j==(x<y) K< i==(k<y) i=k<y i=(k<y) i=1
已知: char c ; int i, j, k; double x,y; c = ‘w’, i = 1, j = 2, k = -7, x = 7e+033, y = 0.001 ‘a’+1< c (‘a’+1)< c 1 3<j<5 (3<j)<5 1 ‘1’-‘0’= =1 (‘1’-‘0’)= =1 1 ‘1’= =‘0’+1 ‘1’= =(‘0’+1) 1 x<x+y x<(x+y) 1 i+j+k < =2*j ((i+j)+k)< =(2*j) 1 i<j= =x<y (i<j)= =(x<y) 0 i=j= =k<y i=(j= =(k<y) ) i= 0 表达式 等价表达式 表达式值 i=k<y i=(k<y) i= 1
5.2逻辑运算符和逻辑表达式 逻辑运算符&&‖!(与或非) 3个运算符的优先级由高到低为!→&&→‖ !的优先级高于关系运算,&&和‖的优先级低于关系运算 !是右结合性,&&和‖是左结合性 逻辑表达式 1.逻辑表达式的值应该是“逻辑真”或“逻辑假” 逻辑运算的结果以数值1代表“真”,以数值0代表“假” 进行判断时,非零值代表“真”,零值代表“假” 例:表示x∈[-1,1区间应写为:x>=-1&&x<=1
5.2 逻辑运算符和逻辑表达式 一、 逻辑运算符 && || ! (与 或 非) • 3个运算符的优先级由高到低为! → && → || • ! 的优先级高于关系运算, &&和 || 的优先级低于关系运算 • ! 是右结合性, && 和 || 是左结合性 二、逻辑表达式 1.逻辑表达式的值应该是“逻辑真”或“逻辑假” , 逻辑运算的结果以数值1代表“真”, 以数值0代表“假”; 进行判断时, 非零值代表“真”, 零值代表“假” 例: 表示 x ∈[-1,1]区间 应写为: x>=-1 && x<=1
2.逻辑运算中的规律 (1)在&&表达式中,若左端为0,则不必再计算右端, 表达式值为0即:0&&a (2)类似有1|la=1 规律: Oa==a 0&&a==0 1 a==1 1&&a==a alla==a a&&a==a !l==1 a&&!a=0 (a|b)==!a&&!b!(a&&b)==!al!b
2.逻辑运算中的规律 (1) 在&& 表达式中, 若左端为0, 则不必再计算右端, 表达式值为0 即: 0 && a == 0 (2) 类似有 1 || a == 1 规律: 0||a ==a 0&&a==0 1||a==1 1&&a==a a||a==a a&&a==a a||!a==1 a&&!a==0 !(a||b)==!a&&!b !(a&&b)==!a||!b
2逻辑表达式: (C的任何一种表达式均可) E0: char; int i, j, k; double x, y; c=w,; i=j=k=3; x=0.0; y=2.3; 表达式 等价表达式 表达式的值 i &&j & k (i&&j)&&k x &&ilj-2 (x&&i)‖-2) x i&&j-3 x‖(i&&(j-3) 0 i<j &&x<y (ij)&&(x<y) 0 i==&&x<=y(i==j)&&(x<=y) x!y&+1-!k+4(x=y)&&(+1)=(k)+4) A<=c&&c<=Z(A<=c)&&(=Z) i==2j=4k=6i=(i==2)|G==4)‖(k==6)
表达式 等价表达式 表达式的值 2.逻辑表达式: (C的任何一种表达式均可) 已知: char c ; int i, j, k; double x,y; c=‘w’; i=j=k=3; x=0.0;y=2.3; i && j && k (i && j) && k 1 x && i || j -2 (x && i) || (j-2) 1 x || i && j -3 x || (i && (j-3)) 0 i < j && x < y (i<j) && (x<y) 0 i = = j && x < = y (i= =j) && (x<=y) 1 x!=y&&j+1= =!k+4 (x!=y) && (j+1)= = ((!k)+4)) 1 ‘A’<=c && c<=‘Z’ (‘A’ <= c) && (c <= ‘Z’) 0 i=i= =2||j= =4||k==6 i=((i= =2) || (j= = 4) || (k= =6)) 0
已学过的运算符优先级如下: ++ 算术运算符关系运算符 =&& 赋值和复合赋值符逗号运算符
! ++ -- 算术运算符 关系运算符 = = != && || 已学过的运算符优先级如下: 赋值和复合赋值符 逗号运算符
运算符的优先级和结合性 优先级运算符含义 要求运算 结合方向 对象的个数 圆括号 下标运算符 指向结构体 成员运算符 自左至右 结构体成员运算符 逻辑非运算符 按位取反运算符 2 自增运算符 自减运算符 负号运算符 自右至左 (类型)类型转换运算符 指针运算符 (单目运算符) & 地址运算符 sizeof长度运算符 2 除法运算符 自左至右 求余运算符 (双目运算符) +加法运算符 减法运算符 (双目运算符) 自左至右
运算符的优先级和结合性 优先级 运算符 含义 要求运算 结合方向 对象的个数 圆括号 下标运算符 指向结构体 成员运算符 结构体成员运算符 逻辑非运算符 按位取反运算符 自增运算符 自减运算符 负号运算符 类型转换运算符 指针运算符 地址运算符 长度运算符 乘法运算符 除法运算符 求余运算符 加法运算符 减法运算符 1 2 3 4 ( ) [ ] . ! ~ ++ - - - (类型) * & sizeof * / % + - 1 (单目运算符) 2 (双目运算符) 2 (双目运算符) 自右至左 自左至右 自左至右 自左至右
优先级运算符含义 要求运算 结合方向 对象的个数 左移运算符 2 >> 右移运算符 (双目运算符)自左至右 2 关系运算符 (双目运算符)自左至右 7 等于运算符 运算符 (双目运算符)自左至右 & 按位与运算符 (双目运算符) 自左至右 按位异或运算符(双目运算符自左至右 10 按位或运算符 (双目运算符自左至右 11&& 逻辑与运算符 (双目运算符自左至右 逻辑或运算符 2 12 (双目运算符 自左至右 13 ? 条件运算符 (三目运算符)自右至左 14 赋值运算符 2 自右至左 = 15 逗号运算符 (顺序求值运算 自左至右
5 9 10 11 2 (双目运算符) 2 (双目运算符) 2 (双目运算符) 优先级 运算符 含义 要求运算 结合方向 对象的个数 左移运算符 右移运算符 关系运算符 等于运算符 不等于运算符 按位与运算符 按位异或运算符 按位或运算符 逻辑与运算符 逻辑或运算符 条件运算符 赋值运算符 逗号运算符 (顺序求值运算符) 6 7 8 12 13 14 15 > >= = = != & ^ ! && || ? : = += &= , 2 (双目运算符) 2 (双目运算符) 2 (双目运算符) 2 (双目运算符) 2 (双目运算符) 3 (三目运算符) 2 自右至左 自右至左 自左至右 自左至右 自左至右 自左至右 自左至右 自左至右 自左至右 自左至右 自左至右