條件語句 (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 單維彰