2.4.3 关系运算符和关系表达式
C语言提供完整的关系运算符,用于比较两个数据之间的大小关系。
关系运算符运算符有六个,它们的优先级为
一个变量或者常量就是最简单的关系表达式;使用关系运算符和圆括号将关系表达式连接得到新的关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”。
a>b 如果a大于b,则结果为真;否则为假。
a>=b 如果a大于或等于b,则结果为真;否则为假。
a<b 如果a小于b,则结果为真;否则为假。
a<=b 如果a小于或等于b,则结果为真;否则为假。
a= =b 如果a等于b,则结果为真;否则为假。
a!=b 如果a不等于b,则结果为真;否则为假。
例如,a为10,b为80,那么,关系表达式
a>=b
结果为假。
由于C语言中没有逻辑型数据,因而借用整数数值来表示“真”、“假”逻辑值。C语言中规定:以数值0表示假,以非0表示真。对于关系表达式来说,结果的真、假分别用1 和0表示。
关系运算只判定两个数据是否满足指定的关系,不考虑二者数值相差多少,也没有其他的操作。
例如,a为200,b为80,那么
a>b
的结果是1。并且,执行关系运算之后,数据a和b的值都不发生变化。
应注意,赋值号=与相等比较运算符= =的区别。例如,关系表达式
i= =500
判断i的值是否等于500;而赋值表达式
i=500
将500赋予变量i。
关系运算符的优先级低于算术运算符,高于赋值运算符。其结合性是按照自左至右的顺序进行,即左结合性。例如,a=50,b=30,c=68,d=100,则
a+b<c+d
相当于
(a+b)<(c+d)
值为1。
a<b>c
相当于
(a<b)>c
a<b的结果为0,0>c的结果为0,整个表达式的值为0。
x=a<b<c
先判断a<b<c,结果为1,然后再将1赋予x。
例2-1 分析下面程序的运行结果。
按照运算符优先级关系,表达式
i=j==k
等价于
i=(j==k)
先进行j与k是否相等的比较,其结果是1;再将1赋予变量i。第10行的赋值语句执行后,i的值是1,而j和k的值保持不变,仍然是原来的值60。
第11行printf函数执行后输出结果是:
i=1, j=60,k=60
表达式
(j=k++*2)
包含三个运算符, ++的级别最高,*次之,=最低。
等价于
j=((k++)*2)
由于k++是后缀形式,所以,先取出k的当前值(即60)乘以2,得到120,赋予变量j;然后k的自身增1,变为61。利用= =判断i的值(是1)是否等于j的值(即120)。应注意,这个比较的结果(数值0)并没有赋予任何变量。
第14行的语句中有三个运算符,即=、>和>=。按照优先级的高低,>和>=是同一级,且高于=的优先级;按照结合性——关系运算符的结合性是自左至右,所以,表达式
i=j>k>=100
等价于
i=((j>k)>=100)
j>k的结果为1,1>=100的结果是0,最后将0赋予i。
程序运行之后的输出结果是:
i=1, j=60, k=60
i=1, j=120, k=61
i=0, j=120, k=61
关系运算符的操作数可以是整型数据(包括字符数据)、浮点型数据,也可以是指针型数据(将在第5章中介绍),但运算结果的类型都是int型(即1或0)。
对于浮点型数据,由于存储可能存在(极小)误差,不能够直接使用==运算符进行是否相等的比较,而应该采用
fabs(fnumb1-fnum2)<1.0e-6
其中,fabs函数是求浮点数绝对值的库函数。
良好的编程习惯2.1
●每个程序的开始都应该有一个注释,描述这个程序的目的、作者、日期和时间(在本书的程序中,省略了这些信息)。
常见的编程错误2.1
●需要输入或输出数据,没有包含〈stdio.h〉头文件,会导致编译错误。
良好的编程习惯2.2
●使用空格和空行来增加程序的可读性。
常见的编程错误2.2
●遗漏了main函数的括号对。
●遗漏函数开始的左花括号{
●遗漏函数结束的右花括号}
常见的编程错误2.3
●函数名拼写错误,例如将函数printf误写成print。
●遗漏了每一条语句结束后的分号。
良好的编程习惯2.3
●将整个函数体缩进一级,使程序可读性增强、函数结构清晰。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。