選擇結構 - if

程式設計中,常常會有判斷、選擇或決策的需要,以下實務上應用的需求:

例1,如果是會員則使用會員價,否則用原價購買。要列出帳單,必須判斷是否是會員。

例2,如果必修成績不及格,則需重修。要列出學生需重修科目,則需判斷是否是必修而且成績不及格。

例3,聯邦信用卡優惠專案,如果一個月中達到單數日刷卡三次,則雙數日刷卡超過888元可得 2% 回饋金。要計算回饋金,則需條件判斷。

例4,營業用電,條件如下圖,要寫程式計算電費,則必須根據條件做複雜的判斷。

台電營業用電計算式

if 語法就是用再判斷、選擇或決策的。

單一條件,單向 if ...

只有一個 if 條件,只處理條件成立時,沒有 else,不處理條件不成立的狀況。

語法:

if (條件式) :

敘述區塊,有一個或多個敘述

離開 if 語句後的下一個敘述

注意-

1. 條件是要在括號中。

2. 區塊開始符號是分號 ( : ) ,而且必須在條件式同一列的後面。

3. 敘述區塊必須縮排。區塊符號 : 後按 enter 會自動在下一列縮排。用 tab 或 Shift+Tab 可縮排或取消縮排。

4. 並無區塊結束的符號。當沒有縮排的敘述出現,就是離開了敘述區塊了。

例如: 下列範例,如果 (a>0) 屬實,則執行了3個敘述。

單一條件,雙向 if ...else...

只有一個 if 條件,條件成立時,有敘述區塊1來處理,條件不成立時(else),也有敘述區塊2來處理。

語法:

if (條件式) :

敘述區塊1,有一個或多個敘述

else:

敘述區塊1,有一個或多個敘述

離開 if 語句後的下一個敘述

注意-

1. 條件是要在括號中。

2. 區塊開始符號是分號 ( : ) ,而且必須在條件式或else 的同一列的後面。

3. 敘述區塊必須縮排。區塊符號 : 後按 enter 會自動在下一列縮排。用 tab 或 Shift+Tab 可縮排或取消縮排。

4.並無區塊結束的符號。當沒有縮排的敘述出現,就是離開了敘述區塊了。

例如: 下列範例,如果 (a>0) 屬實,則執行了2個敘述,否則(else),也執行另外2個敘述。

多個條件, if ...elif...else...

有多個條件需要判斷時,這些條件必須不重疊,其中只會有一個條件符合,或都不符合所列出的條件,以最後的 else 區塊來處理。

語法:

if (條件式1) :

敘述區塊1,有一個或多個敘述

elif (條件式2) :

敘述區塊2,有一個或多個敘述

elif (條件式3) :

敘述區塊3,有一個或多個敘述

。。。

elif (條件式n-1) :

敘述區塊n-1,有一個或多個敘述

else:

敘述區塊1,有一個或多個敘述

離開 if 語句後的下一個敘述

注意-

1. 條件是要在括號中。

2. 區塊開始符號是分號 ( : ) ,而且必須在每個條件式或else 的同一列的後面。

3. 敘述區塊必須縮排。區塊符號 : 後按 enter 會自動在下一列縮排。用 tab 或 Shift+Tab 可縮排或取消縮排。

4.並無區塊結束的符號。當沒有縮排的敘述出現,就是離開了敘述區塊了。

5.這些條件只會有一個成立或皆不成立。

6. 若皆不成立則會執行最後 else 後面的區塊。

例如: 下列範例,如果成績 score >= 90 則優等,否則如果成績 >=80 則甲等,否則如果成績 >=60 則乙等,否則不及格。

巢狀 if

if 條件 的每個處理區塊中的敘述,也可以有 if 條件 的敘述。如此即形成巢狀 if 。程式碼範例如下。判斷可結婚否?

上面成績範例:如果成績 score >= 90 則優等,否則如果成績 >=80 則甲等,否則如果成績 >=60 則乙等,否則不及格。也可以用下列寫法

邏輯條件須注意正確性

TQC+ 程式語言 202 倍數判斷

請使用選擇敘述撰寫一程式,讓使用者輸入一個正整數,然後判斷它是3或5的倍數,

顯示【x is a multiple of 3.】或【x is a multiple of 5.】;

若此數值同時為3與5的倍數,顯示【x is a multiple of 3 and 5.】;

如此數值皆不屬於3或5的倍數,顯示【x is not a multiple of 3 or 5.】,

將使用者輸入的數值代入x。

以下左邊程式正確:因為 if 條件若不成立會循序從上面的條件往下測試。一旦有成立的條件,下方條件便不會再被測試。

先測試 是否可以同時被3整除和被5整除。如可以自然同時是3 和 5 的倍數。若不行,將再往下測試是否能被3整除,若不行則再測試是否能被5整除。這樣不會條件被漏掉。

以下右邊程式不正確:因為 if 條件若不成立會循序從上面的條件往下測試。一旦有成立的條件,下方條件便不會再被測試。

可以被3整除 也可能可以同時被5整除。如果,一開始就測試可以被3整除嗎,若可以,馬上列印 x 是 3 的倍數,整個下方的條件就不再被測試了,這樣就少了偵測是否可以被5整除的條件了。