選擇結構 - 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整除的條件了。