努力
摘要: 因為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)(所有一元符) | 從右到左 |
* / % | 從左到右 |
- | 從左到右 |
< > <= >= | 從左到右 |
== != | 從左到右 |
= | 從右到左 |
學習使人成長
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!