- C语言程序设计案例精粹
- 崔丹等编著
- 566字
- 2024-12-22 15:10:57
3.5 关系运算符与关系表达式
关系运算符是二元运算符(双目运算符),用于对两个操作对象进行比较。关系表达式是由关系运算符和操作对象组成的,是利用关系运算符进行比较的一种操作方式。关系表达式的值只有两个:真(1)和假(0)。例如表达式10>3的值为1,表达式即为真,而表达式-1>0的值为0,表达式即为假。关系表达式广泛应用于流程控制语句中。
关系运算符的优先级低于算术运算符,结合性为自左至右。关系运算符中大于(>)、小于(<)、大于等于(>=)和小于等于(<=)优先级相同,等于(= =)和不等于(!=)优先级相同,但低于前面四种运算符的优先级。这里请注意,判断两个对象是否相等,使用运算符==或!=,一定与赋值运算符=区分开来。
范例3.8 RelationOperater.c
RelationOperater.c程序分析关系运算符的优先级,验证在同一表达式中有算术运算符和关系运算符时程序的执行顺序,分析关系运算符的结合性,分析关系表达式的真和假。(光盘\chat3\ RelationOperater.c)
01 #include<stdio.h>02 main()03 {04 char c=' m' ;05 int i=1, j=2, k=3;06 printf("%d, %d\n", ' a' +3<c, -i-2*j>=k+1);07 printf("%d, %d\n",1<j<3, i==j<=3*k);08 printf("%d, %d\n", i+j+k==3*j, k==j==i+5);09 }
程序第6行中,对于表达式'a'+3<c,由于关系运算符<优先级低于算术运算符+,因此先计算左边的表达式'a'+3,得字符'd',然后进行'd'<c的比较运算,由于c被赋值为'm',因此表达式为'd'<'m',表达式为真(1)。对于表达式-i-2*j>=k+1,先计算关系表达式>=两侧的表达式的值:-i-2*j为-5,k+1为4,因此变为:-5>4,表达式为假(0)。
程序第7行,对于表达式1<j<3,等价于:(1<j)<3。首先计算表达式1<j,结果为真(1),然后计算1<3,结果仍然为真(1)。对于表达式i==j<=3*k,由于<=优先级高于==,因此先计算==后面的表达式,即表达式等价于:i==(j<=3*k)。对于表达式j<=3*k,其值为真(1),因此总表达式变为:i==1,i初始时被赋值为1,因此该表达式为真(1)。
程序第8行,对于表达式i+j+k==3*j,先计算i+j+k和3*j,分别为6和6,因此表达式6==6的值为真(1)。对于表达式k==j==i+5,等价于:(k==j)==(i+5),由于表达式k==j为假(0),且i+5等于6,因此表达式0==6为假(0)。
程序运行输出结果为:1, 0
1, 1
1, 0
作者心得:
读者务必搞清楚程序第7行的表达式1<j<3的运算顺序。后续章节将继续讨论这一表达式。