努力
摘要: 因为while循环经常要依赖于进行比较的判断表达式,这样的表达式称为关系表达式,其中出现的运算符称为关系运算符。关系运算符
运算符 | 含义 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
>= | 大于等于 |
> | 大于 |
!= | 不等于 |
注意:关系表达式也可以用于字符的比较。例:ch != '$';进行比较时使用的是机器的字符代码(我们假定为ASCII)。然而不能使用关系运算符来比较字符串。
关系运算符也可以用来比较浮点数。但要小心,在浮点数比较中只能使用>和<。原因在于传入误差可能导致两个逻辑上相等的数不相等。例如,3和1/3的乘积应该是1.0.但是如果您使用6位小数来表示1/3,乘积就是.999999而不是1.使用在math.h头文件中声明的fabs()函数可以方便的进行浮点数判断。这个函数返回一个浮点数的绝对值(即没有代数符号的值)。
例如,您可以使用类似下面示例的方法来判断一个数是否接近一个想要的结果。
示例 比较浮点数
在用户的答案与正确的答案的误差小于0.0001之前,这个循环反复地请求输入答案。
-
什么是真
对于C来说,一个真表达式的值为1,而一个假表达式的值为0.
-
还有什么是真
更一般地,所有的非零值都被认为是真,只有0被认为是假。C对真的范围放的非常宽。
可以说,只要while循环的判断条件的值非零,它就可以执行循环。这使得判断条件是建立在数值的基础上而不是真假的基础上。要谨记如果关系表达式为真,它的值就为1;如果为假,它的值就为0.
-
真值的问题
要确保使用正确的运算符。编译器允许您使用错误的形式,产生您不希望的结果。
如果比较的双方中有一个是常量,则可以把它放在比较表达式的左边,这样有助于发现错误。
5==canoes;
关键之处在于,为常量赋值是非法的。所以编译器把赋值运算符的这种用法识别为语法错误(5=canoes).
总之,关系运算符被用来构成关系表达式。关系表达式在为真时,值为1,为假时值为0.通常使用关系表达式作为判断条件的语句(例如while和if)可以使用任何表达式作为判断,非零值被认为是真,而零值被认为是假。
-
新的_bool类型
在C中,表示真/假的变量一直是由int类型来表示的。C99专门为这种类型的变量添加了_Bool类型。
一个_Bool变量只可以具有值1或0。如果您把一个_Bool变量赋为一个非零值,变量就被设置为1.这说明,C把任何非零值都认为是真。
使用bool类型
注意代码是如何把比较结果赋值给变量的:
input_is_good = (scanf("%ld",&num)==1);
这是有意义的,因为==运算符的返回值为1或0.顺便说一句,把==表达式括起来的()不是必需的,因为==运算符的优先级高于=,但是它们可以使代码更容易阅读。
C99还提供了一个stdbool.h的头文件。包含这个头文件可以使用bool来代替_Bool,并把true和false定义成值为1和0的符号常量。
-
关系运算符的优先级
关系运算符的优先级要低于包括 和-在内的算术运算符,但是要高于赋值运算符。
运算符的优先级
运算符(优先级从高到低) | 结合性 |
() | 从左到右 |
- -- sizeof(type)(所有一元符) | 从右到左 |
* / % | 从左到右 |
- | 从左到右 |
< > <= >= | 从左到右 |
== != | 从左到右 |
= | 从右到左 |
学习使人成长
,