關係運算符函數
運算符 | 含義 |
< | 小於 |
<= | 小於等於 |
== | 等於 |
>= | 大於等於 |
> | 大於 |
!= | 不等於 |
注意:關係表達式也能夠用於字符的比較。例:ch!='$';進行比較時使用的是機器的字符代碼(咱們假定爲ASCII)。然而不能使用關係運算符來比較字符串。ui
關係運算符也能夠用來比較浮點數。但要當心,在浮點數比較中只能使用>和<。緣由在於傳入偏差可能致使兩個邏輯上相等的數不相等。例如,3和1/3的乘積應該是1.0.可是若是您使用6位小數來表示1/3,乘積就是.999999而不是1.使用在math.h頭文件中聲明的fabs()函數能夠方便的進行浮點數判斷。這個函數返回一個浮點數的絕對值(即沒有代數符號的值)。spa
例如,您可使用相似程序清單6.5的方法來判斷一個數是否接近一個想要的結果。code
//cmpflt.c -- 浮點數比較 #include <math.h> #include <stdio.h> int main(void) { const double ANSWER = 3.14159; double response; printf("What is the value of pi?\n"); scanf("%lf",&response); while(fabs(response-ANSWER)>0.0001) { printf("Try again!"); scanf("%lf",&response); } printf("Close enough!\n"); return 0; }
在用戶的答案與正確的答案的偏差小於0.0001以前,這個循環反覆地請求輸入答案。ci
6.3.1 什麼是真字符串
對於C來講,一個真表達式的值爲1,而一個假表達式的值爲0.input
6.3.2 還有什麼是真編譯器
更通常地,全部的非零值都被認爲是真,只有0被認爲是假。C對真的範圍放的很是寬。it
能夠說,只要while循環的判斷條件的值非零,它就能夠執行循環。這使得判斷條件是創建在數值的基礎上而不是真假的基礎上。要謹記若是關係表達式爲真,它的值就爲1;若是爲假,它的值就爲0.io
6.3.3 真值的問題
要確保使用正確的運算符。編譯器容許您使用錯誤的形式,產生您不但願的結果。
若是比較的雙方中有一個是常量,則能夠把它放在比較表達式的左邊,這樣有助於發現錯誤。
5==canoes;
關鍵之處在於,爲常量賦值是非法的。因此編譯器把賦值運算符的這種用法識別爲語法錯誤(5=canoes).
總之,關係運算符被用來構成關係表達式。關係表達式在爲真時,值爲1,爲假時值爲0.一般使用關係表達式做爲判斷條件的語句(例如while和if)可使用任何表達式做爲判斷,非零值被認爲是真,而零值被認爲是假。
6.3.4 新的_Bool類型
在C中,表示真/假的變量一直是由int類型來表示的。C99專門爲這種類型的變量添加了_Bool類型。
一個_Bool變量只能夠具備值1或0。若是您把一個_Bool變量賦爲一個非零值,變量就被設置爲1.這說明,C把任何非零值都認爲是真。
程序清單6.9 boolean.c程序
//boolean.c --使用_Bool變量 #include <stdio.h> int main(void) { long num; long sum=0L; _Bool input_is_good; printf("Please enter an integer to be summed.(q to quit):"); input_is_good = (scanf("%ld",&num)==1); while(input_is_good) { sum = sum + num; printf("Please enter next integer(q to quit ):"); input_is_good = (scanf("%lf",&num)==1); } printf("Those integer sum to %ld.\n",sum); return 0; }
注意代碼是如何把比較結果賦值給變量的:
input_is_good = (scanf("%ld",&num)==1);
這是有意義的,由於==運算符的返回值爲1或0.順便說一句,把==表達式括起來的()不是必需的,由於==運算符的優先級高於=,可是它們可使代碼更容易閱讀。
C99還提供了一個stdbool.h的頭文件。包含這個頭文件可使用bool來代替_Bool,並把true和false定義成值爲1和0的符號常量。
6.3.5 關係運算符的優先級
關係運算符的優先級要低於包括+和-在內的算術運算符,可是要高於賦值運算符。
運算符的優先級
運算符(優先級從高到低) | 結合性 |
() | 從左到右 |
- + ++ -- sizeof(type)(全部一元符) | 從右到左 |
* / % | 從左到右 |
+ - | 從左到右 |
< > <= >= | 從左到右 |
== != | 從左到右 |
= | 從右到左 |