條件語句 (conditional expression) 的形式如下
(COND) ? A : B當 COND 是 True,整個語句的值就是 A 的值, 否則就是 B 的值。 它可以用來代替簡短的 if-else 結構。 例如
max = (a > b) ? a : b;這一個指令等同於
if (a > b) max = a; else max = b;由於 ?: 的優先序頗低 (是 2), 僅高於 = 和 += 這一些符號, 所以前述指令中的括號並不必要。
條件語句可以用在任何平常容許使用語句的地方。 例如,若 n 是 unsigned int 型態的變數, 以下指令可以將以正確的英文文法輸出一個句子。
printf("There %s %u item%s.\n", n==1 ? "is" : "are", n, n==1 ? "", "s");再例如 v[] 是 double 型態的序列,共有 N 個, 則以下指令將 v[] 每四個排成一列輸出。 兩數之間以一個空格隔開。 最後一列即使不滿四個,也會輸出一個 LF。
for (i=0; i < N; ++i) printf("%9.4f%c", v[i], (i%4==3 || i==n-1) ? '\n' : ' ');
條件語句之內還可以有條件語句, 就像 if-else 結構可以層層相套一樣。 例如,如果不想呼叫外部函式 floor(), 可以簡單地自己寫一個。假設 floor 是 int 型態, x 是 float 或 double 型態,則
floor = (int) x - (x >= 0 ? 0 : ((int) x-x > 0 ?1:0));的效果就是取得 x 的最大整數下界。 我們先取 x 的整數部份。如果 x 原本是正數或零, 就不必修正。如果 x 是負數, 那還要檢查 x 的小數部份是否為 0。 如果是,那也不必修正;如果不是,就要減一。 譬如 3.14 的 floor 是 3,-3 的 floor 是 -3, 但 -3.14 的 floor 是 -4。 習題
注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。
Created: May 14, 2000
Last Revised: May 14, 2000
© Copyright 2000 Wei-Chang Shann 單維彰