if-else 條件判斷敘述

參考

  1. 課本 page 84-86, 221-233

  2. Turbo C / Borland C 線上說明

讓 CPU 可以根據資料進行判斷,決定如何可執行的 if 敘述

你開車遇見堵車的話會挑比較不堵塞的路走, 天氣熱的話你會吹冷氣, 冷的話你會吹暖氣, 這是智慧的表現, 人在處理事情的時候常常會根據不同的狀況而採用不同的策略。 在 C 程式裡, 基本的敘述或是指令都是順序執行的, 一個做完接做下一個, 似乎沒有辦法去檢查資料的內容, 根據資料內容決定是否執行某一個命令。 下面要介紹的這個 if 敘述就是要讓你完成這個目標。

假設我們有一個浮點變數 x , 在程式內希望 "如果為正的就輸出正確的訊息, 否則輸出錯誤的訊息"。 我們可以利用下列 if 敘述來完成

再看一個例子

假設一個自動控制空調的程式裡有一個 temperatrue 變數, 其中存放的是現在的氣溫, 當氣溫高過 22 度時自動開放冷氣系統, 當氣溫低於 20 度時自動關閉冷氣系統。 程式如下:

注意: && 為邏輯的運算 "AND" , !代表邏輯的運算 "NOT", turnOnAirConditioner(); 及 turnOffAirConditioner(); 為兩個操作冷氣系統的函式, 將操作的細節隱藏在函式內, 使得邏輯流程清晰是程式設計很重要的訓練, airConditionerOn 是一個整數變數, 其值為 0 代表冷氣機沒有開, 非 0 則代表冷氣機是開放著的, 前面的兩個函式在動作成功時, 會傳回 1,否則會傳回 0。

由上面兩個範例, 除了知道如何使用 if 和 else 之外, 應該可以知道如何讓 C 程式根據資料的內容來決定該執行哪些動作, 如此程式才可以視當時狀況做出適當的反應, 而不是絲毫無法應變直接做下去而已。

CPU 要做哪些事?

請注意 if 敘述在執行時 CPU 必須執行測試控制移轉等兩種工作。

基本功能測試

讓我們來做一點基本功能測試, 把下面程式拷貝到 Turbo C 中, 編譯、執行一下,列印的結果是什麼?

流程圖

我們可以用下圖右的流程圖來表示下圖左的 if-else 敘述:
    if (x >= 0) { y = 1; } else { y = 0; }

if 敘述變形 I

if 敘述不一定要有一個 else 跟在後面, 如下圖左, 當測試成功時會執行大括號內的動作, 測試失敗的話就直接跳過大括號內所有的動作, 如下圖右流程圖所示:
    if (x >= 0) { printf("The data in x >= 0!\n"); }

當然如果大括號內只有一個敘述的話可以省略大括號,如下:

if 敘述變形 II

if 敘述不一定只有一個 else 跟在後面, 如上圖程式, 當第一個測試 x < -1 成功時會執行 y = 1; 的動作, 測試失敗的話會接著測試 x < 0, 如果成功的話會執行 y = 2; 的動作, 測試失敗的話會接著測試 x < 1, 如果成功的話會執行 y = 3; 的動作, 如果還是失敗的話, 會執行 else 下面最後一個大括號內所有的動作, 也就是 y = 4; 的動作, 如下圖流程圖所示:

注意:else 屬於比較接近的 if

如下面程式: 如果執行前變數 x 之值為 30 請問執行完畢後, 變數 y 的數值為多少? 是 2 嗎? 喔! 不,是 0 耶! 如果你希望答案是 2 的話, 你應該要這樣子寫:

請找出下面範例的問題

程式設計課程 首頁
by Pei-yih Ting
E-mail: pyting@cs.ntou.edu.tw