4.1 关系运算
关系运算就是比较运算,即将两个数据进行比较,判断是否满足给定的条件。如果满足给定的条件,则称关系运算的结果为逻辑值“真”;如果不满足给定的条件,则称关系运算的结果为逻辑值“假”。
例如,x>0是比较运算,也就是关系运算,“>”是一种关系运算符。如果x的值为1,那么x>0条件满足,就是说关系运算x>0的结果为“真”。如果x的值为-1,那么x>0条件不满足,就是说关系运算x>0的结果为“假”。
4.1.1 关系运算符
在C语言中有6种双目关系运算符,见表4.1。
表4.1 关系运算符
关系运算符的优先级关系如下:
① 关系运算符的优先级前4种(<,<=,>,>=)相同,后两种(==,!=)相同,且前4种的优先级高于后两种;
② 关系运算符的优先级低于算术运算符,高于赋值运算符。
例如:
c>a+b 等价于 c>(a+b) a==b<c 等价于 a==(b<c) a=b>c 等价于 a=(b>c)
4.1.2 关系表达式
用关系运算符将两个常量、变量或任意有效的表达式(如算术表达式、赋值表达式、关系表达式等)连接起来所构成的符合C语言规则的式子,称为关系表达式。关系表达式的一般形式为:
表达式 关系运算符 表达式
例如,以下都是合法的关系表达式:
a+b>c-d (x=1)= =3/2 'a'+1<c a>(b>c) a!=(c= =d)
关系表达式的值是一个逻辑值,即“真”或“假”。C 语言没有提供逻辑型数据,它以数字1代表逻辑“真”,以数字0代表逻辑“假”,所以关系表达式的值只能是1或0两种值。
例如:5>0的值为“真”,即该关系表达式的值为1,而(a=3)>(b=5)的值为“假”,即该关系表达式的值为0。
【例4.1】 关系运算符示例。
/* 关系运算符示例 */ #include "stdio.h" main( ) { char c='b'; int i=1,j=2,k=3; printf("%d,",'a'+1<c); printf("%d,",1<j<5); printf("%d\n",k==j==i+5); }
程序运行结果为:
0,1,0
在进行关系运算时应注意以下事项。
① 应避免对实数做相等或不等的判断。
例如,关系表达式:1.0/3.0*3.0==1.0的值为0(假)。因为通常存放在内存中的实型数是有误差的,因此不可能精确相等或不等。
可将上式改写为:fabs(1.0/3.0*3.0-1.0)<1e-6。其中,fbas( )是求绝对值的标准函数,如果两个实型数之间相差一个很小的正数,就可以认为两者是相等的。
② 注意区分赋值运算符"="与关系运算符"=="两种运算符的写法和它们的含义。
③ 对于形如“10<=x<=20”的关系表达式,从语法上来说,C语言是允许的,但是在程序设计时它并不能正确地表示用户的意图。比如,当用户希望 x 的值在[10,20]范围内时,表达式值为1,否则值为0,那么当x=1时,按照运算符的运算规则,先计算10<=x,因为x为1,所以结果为0,再计算0<=20,结果为1,显然结果不对。其实无论x的值为多少,按照C语言的运算规则,表达式“10<=x<=20”的值都是1。