條件語句

條件語句 (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。

習題
  1. 利用條件語句寫一個指令來代替 ceil() 函式。

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]



注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。

Created: May 14, 2000
Last Revised: May 14, 2000
© Copyright 2000 Wei-Chang Shann 單維彰

shann@math.ncu.edu.tw