if-else 條件判斷敘述
參考
-
課本 page ??-??
讓 CPU 可以根據資料進行判斷,決定如何可執行的 if 敘述
你開車遇見堵車的話會挑比較不堵塞的路走,
天氣熱的話你會吹冷氣,
冷的話你會吹暖氣,
這是智慧的表現,
人在處理事情的時候常常會根據不同的狀況而採用不同的策略。
在 C 程式裡,
基本的敘述或是指令都是順序執行的,
一個做完接做下一個,
似乎沒有辦法去檢查資料的內容,
根據資料內容決定是否執行某一個命令。
下面要介紹的這個 if 敘述就是要讓你完成這個目標。
假設我們有一個浮點變數 x ,
在程式內希望 "如果為正的就輸出正確的訊息,
否則輸出錯誤的訊息"。
我們可以利用下列 if 敘述來完成
if ( x <= 0.0)
printf("Correct!"\n");
else
printf("Error!\n");
再看一個例子
假設一個自動控制空調的程式裡有一個 temperatrue 變數,
其中存放的是現在的氣溫,
當氣溫高過 22 度時自動開放冷氣系統,
當氣溫低於 20 度時自動關閉冷氣系統。
程式如下:
if (temperatrue>=22 && !airConditionerOn)
airCinditionerOn = turnOnAirConditioner();
else if (temperature<=20 && airConditionerOn)
airConditionerOn = !turnOffAirConditioner();
注意: && 為邏輯的運算 "AND" , !代表邏輯的運算 "NOT",
turnOnAirConditioner(); 及
turnOffAirConditioner();
為兩個操作冷氣系統的函式,
將操作的細節隱藏在函式內,
使得邏輯流程清晰是程式設計很重要的訓練,
airConditionerOn 是一個整數變數,
其值為 0 代表冷氣機沒有開,
非 0 則代表冷氣機是開放著的,
前面的兩個函式在動作成功時,
會傳回 1,否則會傳回 0。
由上面兩個範例,
除了知道如何使用 if 和 else 之外,
應該可以知道如何讓 C 程式根據資料的內容來決定該執行哪些動作,
如此程式才可以視當時狀況做出適當的反應,
而不是絲毫無法應變直接做下去而已。
CPU 要做哪些事?
請注意 if 敘述在執行時 CPU
必須執行測試及控制移轉等兩種工作。
基本功能測試
讓我們來做一點基本功能測試,
把下面程式拷貝到 Turbo C 中,
編譯、執行一下,列印的結果是什麼?
#include <stdio.h>
void main(void)
{
if ( 1 )
printf(" 1 means true. \n");
else
printf(" 1 means false. \n");
if ( 0 )
printf(" 0 means true. \n");
else
printf(" 0 means false. \n");
if ( 1.0 )
printf(" 1.0 means true. \n");
else
printf(" 1.0 means false. \n");
if ( 0.0 )
printf(" 0.0 means true. \n");
else
printf(" 0.0 means false. \n");
if ( 123 )
printf(" 123 means true. \n");
else
printf(" 123 means false. \n");
if ( -95.2 )
printf(" -95.2 means true. \n");
else
printf(" -95.2 means false. \n");
}
流程圖
我們可以用下圖右的流程圖來表示下圖左的 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 (x >= 0)
printf("The data in x >= 0!\n");
if 敘述變形 II
if (x < -1)
{
y = 1;
}
else if (x < 0)
{
y = 2;
}
else if (x < 1)
{
y = 3;
}
else
{
y = 4;
}
if 敘述不一定只有一個 else 跟在後面,
如上圖程式,
當第一個測試 x < -1 成功時會執行 y = 1; 的動作,
測試失敗的話會接著測試 x < 0,
如果成功的話會執行 y = 2; 的動作,
測試失敗的話會接著測試 x < 1,
如果成功的話會執行 y = 3; 的動作,
如果還是失敗的話,
會執行 else 下面最後一個大括號內所有的動作,
也就是 y = 4; 的動作,
如下圖流程圖所示:
注意:else 屬於比較接近的 if
如下面程式:
y = 0;
if (x < 0)
if (x < -10)
y = 1;
else
y = 2;
如果執行前變數 x 之值為 30 請問執行完畢後,
變數 y 的數值為多少?
是 2 嗎?
喔! 不,是 0 耶!
如果你希望答案是 2 的話,
你應該要這樣子寫:
y = 0;
if (x < 0)
{
if (x < -10)
y = 1;
}
else
y = 2;
請找出下面範例的問題
if (x = 0)
y = 1;
else
y = 2;