C 語言初學教材 - 第二章 指派

我們在上個例子中用到了 if-else 陳述,其結構解析如下




else 為關鍵字之一, if-else 陳述為單一 if 陳述的延伸,提供若真則執行某某,若非執行某某的後者,也就是條件為真,執行 if 底下大括弧的程式,條件為假則執行 else 底下大括弧的陳述。


利用 if-else 可以讓程式簡化,例如
if (a > b) {
    printf("a > b\n");
}
else {
    printf("a < b\n");
}


這樣程式只需要做單一的條件判斷。沒有用 else 就得寫兩個 if ,程式必須做兩次條件判斷
if (a > b) {
    printf("a < b\n");
}
if (a < b) {
    printf("a > b\n");
}


當程式發展規模越來越大的時候,差別就出現了,多餘的條件判斷會降低程式的效率。


指派運算子,也就是單一個等號 = ,可以和其他的運算子連用,運算後同時指派,使程式碼更為簡潔
運算子功能範例
+=相加同時指派a += b
-=相減同時指派a -= b
*=相減同時指派a *= b
/=相除同時指派a /= b
%=取餘數同時指派a %= b


簡單說, a += b 就是把 a + b 的結果再指派給變數 a 。到目前為止,我們介紹過的算術運算子都可以和指派運算子連用。這種寫法在許多 C 程式都常出現,因此需要習慣這種表示方式,我們以一個例子示範如下
#include <stdio.h>

int main(void)
{
    int a = 10; 
    int b = 10;
    
    a += 1;
    b++;
    
    a -= 1;
    --b;
    
    if (a == b) {
        printf("a == b\n");
    }
    else {
        printf("a != b\n");
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:assign.c
    功能:示範運算同時指派
    作者:張凱慶
    時間:西元2010年7月 */


編譯後執行,如下



這個例子也說明
a += 1;



a++; // 或++a;


的計算結果是相同的。同樣的
a -= 1;



a--; // 或--a;


的計算結果也是相同的。


問題與討論
  1. 程式寫的簡潔有什麼優點?又有什麼缺點?
  2. 為什麼說多餘的條件判斷會降低程式的效率?
  3. 除了算術運算子以外,位元運算子也可以跟指派願算子合用,位元運算子的功能是什麼呢?
  4. a += 1; 、 a++; 、 ++a; ,三者會得到相同的運算結果,你能不找出其他不同寫法但有相同結果的運算式?




沒有留言: