C语言程序设计教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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。