《2022年2022年关系运算符和表达》由会员分享,可在线阅读,更多相关《2022年2022年关系运算符和表达(22页珍藏版)》请在金锄头文库上搜索。
1、关系运算符和表达式在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。在 C语言中有以下关系运算符: 小于 大于= 大于或等于= 等于!= 不等于关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中, ,= 的优先级相同,高于 =和!= ,=和!= 的优先级相同。例如: xy=z 等效于xy!=z 等效于 (xy)!z z=xy 等效于 z= =(xc-d ,x3/2 ,a+1(bc),a!=(c=d)等。关系表达式的值是“真”和“假” ,用“1”和“0”表示。如: 50 的值为“真”,即
2、为 1。(a=3)(b=5) 由于 35不成立,故其值为假,即为0。void ? ain() char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; prinpf(%d,%dn,+5=k+1); printf(%d,%dl,1j5,x-5.25b & cd 等价于(ab) & (cd) !b=c|da 等价于(!b)=c)|(dc & x+yc) & (x+y)0&42,由于 50 为真,42 也为真,相与的结果也为真。2. 或运算| 参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如: 50|58,由于赋值运算符 & | 关系运
3、算符算术运算符 ! 低高名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 22 页 - - - - - - - - - 50为真,相或的结果也就为真3. 非运算! 参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(50) 的结果为假。虽然 C编译在给出逻辑运算值时,以“1”代表“真”, “0 ”代表“假”。 但反过来在判断一个量是为“真”还是为“假”时,以“ 0”代表“假”,以非“ 0”的数值作为“真”。例如:由于 5 和 3 均为非“ 0”因此 5&3的值
4、为“真”,即为 1。又如:5|0 的值为“真”,即为 1。逻辑表达式逻辑表达式的一般形式为:表达式逻辑运算符表达式 其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。例如: (a&b)&c根据逻辑运算符的左结合性,上式也可写为: a&b&c 逻辑表达式的值是式中各种逻辑运算的最后值,以“ 1”和“0”分别代表“真”和“假” 。void main() char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(%d,%dn,!x*!y,!x); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
5、- - - - 名师精心整理 - - - - - - - 第 4 页,共 22 页 - - - - - - - - - printf(%d,%dn,x|i&j-3,ij&xy); printf(%d,%dn,i=5&c&(j=8),x+y|i+j+k); 本例中!x 和!y 分别为 0,!x*!y也为 0,故其输出值为0。由于 x 为非 0,故!x的逻辑值为 0。对 x| i & j-3式,先计算 j-3 的值为非 0,再求 i & j-3 的逻辑值为 1,故 x|i&j-3的逻辑值为 1 。对 ij&xy 式,由于 ij 的值为 1,而 xy 为 0 故表达式的值为 1,0 相与,最后为 0
6、,对 i=5&c&(j=8) 式,由于 i=5 为假,即值为 0, 该表达式由两个与运算组成,所以整个表达式的值为0。对于式 x+ y|i+j+k 由于 x+y 的值为非 0,故整个或表达式的值为1。if 语句用 if语句可以构成分支结构。 它根据给定的条件进行判断,以决定执行某个分支程序段。 语言的 if语句有三种基本形式。1.第一种形式为基本形式if( 表达式) 语句; 其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图void main() int a,b,max; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
7、 - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 22 页 - - - - - - - - - printf(n input two numbers: ); scanf(%d%d,&a,&b); max=a; if (maxb) max=b; printf(max=%d,max); 输入两个整数,输出其中的大数。scanf(%d%d,&a,&b); max=a; if (maxb) printf(max=%dn,a); else printf(max=%dn,b); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
8、- - - - - 名师精心整理 - - - - - - - 第 7 页,共 22 页 - - - - - - - - - 输入两个整数,输出其中的大数。改用if-else语句判别 a,b 的大小,若 a 大,则输出 a,否则输出 b。3.第三种形式为if-else-if 形式前二种形式的 if语句一般都用于两个分支的情况。当有多个分支选择时, 可采用 if-else-if语句,其一般形式为:if( 表达式 1) 语句 1;else if(表达式 2) 语句 2;else if(表达式 3) 语句 3;,else if(表达式 m) 语句 m ;else 语句 n;名师资料总结 - - -精品
9、资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 22 页 - - - - - - - - - 其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if 语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n 。 然后继续执行后续程序。 if-else-if语句的执行过程如图33所示。#includestdio.h void main() char c; printf(input a character: ); c=getchar(); if(c=0&c=A&c=a
10、&cb) a+; b+; else a=0; b=10; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 22 页 - - - - - - - - - if 语句的嵌套当 if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。其一般形式可表示如下:if( 表达式 ) if语句;或者为if( 表达式 ) if语句;else if语句;在嵌套内的 if语句可能又是 if-else型的, 这将会出现多个 if和多个 else 重叠的情况,这时要特别注意 if和 e
11、lse的配对问题。例如:if( 表达式 1) if( 表达式 2) 语句 1;else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 22 页 - - - - - - - - - 语句 2;其中的 else 究竟是与哪一个 if配对呢 ? 应该理解为:还是应理解为:if( 表达式 1) if( 表达式 1) if(表达式 2) if( 表达式 2) 语句 1;语句 1;else else 语句 2;语句 2;为了避免这种二义性, C语言规定, else 总是与它前面最
12、近的if配对,因此对上述例子应按前一种情况理解。void main() int a,b; printf(please input A,B: ); scanf(%d%d,&a,&b); if(a!=b) if(ab) printf(ABn); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 22 页 - - - - - - - - - else printf(Ab) printf(ABn); else printf(AB 、Ab) printf(ABn); else pr
13、intf(Ab) max=a; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 22 页 - - - - - - - - - else max=b; 可用条件表达式写为 max=(ab)?a:b; 执行该语句的语义是:如ab 为真,则把 a 赋予 max ,否则把 b 赋予 max 。使用条件表达式时,还应注意以下几点:1. 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此 max=(ab)?a:b可以去掉括号而写为 max=ab?a:b 2. 条件
14、运算符 ?和:是一对运算符,不能分开单独使用。3. 条件运算符的结合方向是自右至左。例如:ab?a:cd?c:d应理解为ab?a:(cd?c:d) 这也就是条件表达式嵌套的情形,即其中的表达式3 又是一个条件表达式。void main() int a,b,max; printf(n input two numbers: ); scanf(%d%d,&a,&b); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 22 页 - - - - - - - - - printf(
15、max=%d,ab?a:b); 用条件表达式对上例重新编程,输出两个数中的大数。switch 语句C语言还提供了另一种用于多分支选择的switch 语句, 其一般形式为:switch(表达式 ) case常量表达式 1: 语句 1; case常量表达式 2: 语句 2; case常量表达式 n: 语句 n; default : 语句 n+1; 其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句, 然后不再进行判断, 继续执行后面所有case 后的语句。 如表达式的值与所有case 后的常量表达式名师资料总结 - - -精品资料欢
16、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 22 页 - - - - - - - - - 均不相同时,则执行default后的语句。void main() int a; printf(input integer number: ); scanf(%d,&a); switch (a) case 1:printf(Mondayn); case 2:printf(Tuesdayn); case 3:printf(Wednesdayn); case 4:printf(Thursdayn); case 5:p
17、rintf(Fridayn); case 6:printf(Saturdayn); case 7:printf(Sundayn); default:printf(errorn); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 22 页 - - - - - - - - - 本程序是要求输入一个数字,输出一个英文单词。但是当输入3 之后,却执行了 case3 以及以后的所有语句,输出了 Wednesday 及以后的所有单词。 这当然是不希望的。 为什么会出现这种情况呢 ?
18、这恰恰反应了 switch 语句的一个特点。在 switch 语句中, “case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case 语句的情况。这是与前面介绍的 if语句完全不同的, 应特别注意。为了避免上述情况,语言还提供了一种break 语句,专用于跳出 switch 语句,break 语句只有关键字 break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case 语句之后增加 break 语句, 使每一次执行之后均可跳出switch 语句,从而避免输出不应有
19、的结果。void main() int a; printf(input integer number: ); scanf(%d,&a); switch (a) case 1:printf(Mondayn);break; case 2:printf(Tuesdayn); break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 22 页 - - - - - - - - - case 3:printf(Wednesdayn);break; case 4:printf(T
20、hursdayn);break; case 5:printf(Fridayn);break; case 6:printf(Saturdayn);break; case 7:printf(Sundayn);break; default:printf(errorn); 在使用 switch 语句时还应注意以下几点:1. 在 case 后的各常量表达式的值不能相同,否则会出现错误。2. 在 case 后,允许有多个语句,可以不用 括起来。3. 各 case 和 default子句的先后顺序可以变动,而不会影响程序执行结果。4.default子句可以省略不用。程序举例输入三个整数,输出最大数和最小数。
21、void main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 22 页 - - - - - - - - - int a,b,c,max,min; printf(input three numbers: ); scanf(%d%d%d,&a,&b,&c); if(ab) max=a;min=b; else max=b;min=a; if(maxc) min=c; printf(max=%dnmin=%d,max,min); 本程序中,首先比较输入的a,b 的大小
22、,并把大数装入max , 小数装入 min 中,然后再与 c 比较,若 max小于 c,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 22 页 - - - - - - - - - 则把 c 赋予 max ;如果 c 小于 min,则把 c 赋予 min。因此 max内总是最大数, 而 min 内总是最小数。 最后输出 max和 min的值即可。计算器程序。用户输入运算数和四则运算符,输出计算结果。void main() float a,b,s; char c; pri
23、ntf(input expression: a+(-,*,/)b n); scanf(%f%c%f,&a,&c,&b); switch(c) case +: printf(%fn,a+b);break; case -: printf(%fn,a-b);break; case *: printf(%fn,a*b);break; case /: printf(%fn,a/b);break; default: printf(input errorn); 本例可用于四则运算求值。 switch 语句用于判断运算符,然后输出运算值。 当输入运算符不是 +,-,*,/时给出错误提示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 22 页 - - - - - - - - -