4 條件選擇 4.1 程式基本結構 4-2 4.1.1 循序式結構 4-2 4.1.2 選擇式結構 4-2 4.1.3 重複式結構 4-3 4 條件選擇 4.1 程式基本結構 4-2 4.1.1 循序式結構 4-2 4.1.2 選擇式結構 4-2 4.1.3 重複式結構 4-3 4.1.4 goto結構 4-4 4.2 條件選擇 4-5 4.2.1 關係運算符號 4-5 4.2.2 邏輯運算符號 4-9 4.2.3 if敘述 4-11 4.2.4 if-else敘述 4-15 4.2.5 if-else if敘述 4-20 4.2.6 巢狀if敘述 4-26 4.2.7 switch敘述 4-29 4.2.8 條件運算符號 4-35
4.1 程式基本結構 程式的基本結構可概分為循序式結構(sequence structure)、選擇式結構(selection structure)、與重複式結構(repetition structure)等三種,幾乎所有程式都是在循序式結構的基礎上,加上選擇式結構或重複式結構。
4.1.1 循序式結構 循序式結構(sequence structure)的程式是指程式依序從第一個敘述執行至最後一個敘述。 範例 4.1.1 循序式結構 循序式結構(sequence structure)的程式是指程式依序從第一個敘述執行至最後一個敘述。 範例 int main( ) { int Var = 5; //第1步 cout << "Var起始值 = " << Var; //第2步 Var = 10; //第3步 cout << "\nVar變更值 = " << Var; //第4步 return 0; }
4.1.2 選擇式結構 選擇式結構(selection structure)的程式是指程式含有條件敘述,當條件敘述的條件成立(也就是條件運算式的值為1)時,執行條件成立區的敘述。 反之,當條件敘述的條件不成立(也就是條件運算式的值為0)時,則結束條件選擇(是非結構)如下面範例一,或是執行條件不成立區的敘述(二選一結構)如下面範例二。
4.1.2 選擇式結構 (續) 是非結構 int main() { char inkey; //第1步 4.1.2 選擇式結構 (續) 是非結構 int main() { char inkey; //第1步 cout << "請按 Y 鍵,再按 Enter‧‧‧"; //第2步 cin >> inkey; //第3步 if(inkey == 'Y' || inkey == 'y') { //第4步 cout << "祝您一路順風!\n"; } return 0;
4.1.2 選擇式結構 (續) 二選一結構 int main( ) { char inkey; //第1步 4.1.2 選擇式結構 (續) 二選一結構 int main( ) { char inkey; //第1步 cout << "請按 Y 鍵,再按 Enter‧‧‧"; //第2步 cin >> inkey; //第3步 if(inkey == 'Y' || inkey == 'y') //第4步 cout << "祝您一路順風!\n"; //if運算值為1的第5步 else //否則 cout << “請勿酒後駕車!\n"; //if運算值為0的第5步 }
4.1.3 重複式結構 重複式結構(repetition structure)的程式是指程式含有重複敘述,當重複敘述的條件成立(也就是條件運算式的值為1)時,重複執行重複區的敘述。 反之,當重複敘述的條件不成立(也就是條件運算式的值為0)時,則結束重複結構。
4.1.3 重複式結構 (續)
4.1.4 goto結構 goto 標籤; . 標籤:
4.1.4 goto結構 (續) 標籤: . . goto 標籤;
4.2 條件選擇 在日常生活中,通常處理某些事情時都事先分析判斷再作決定。例如,今天要不要帶電腦課本,此時您會先想想今天有沒有電腦課,有電腦課則要帶電腦課本,沒有則不帶電腦課本。同理,在程式設計中,也經常使用條件敘述,協助判斷並決定程式流程。例如,是否要結束程式時,通常先判斷使用者的輸入,若使用者輸入 “y” 或 “Y” 則結束程式,若使用者輸入 “n” 或 “N” 則不結束程式。
4.2.1 關係運算符號 符號 功能 範例 說明 > 大於 a>b 若a>b則結果為真 < 小於 a<b 4.2.1 關係運算符號 符號 功能 範例 說明 > 大於 a>b 若a>b則結果為真 < 小於 a<b 若a<b則結果為真 >= 大於等於 a>=b 若a>=b則結果為真 <= 小於等於 a<=b 若a<=b則結果為真 == 等於 a==b 若a==b則結果為真 != 不等於 a!=b 若a!=b則結果為真
4.2.1 關係運算符號 (續) 運算符號的優先順序 18 % 4 * 5 - 7 <= 12 + 25 / 4 – 18 4.2.1 關係運算符號 (續) 運算符號的優先順序 18 % 4 * 5 - 7 <= 12 + 25 / 4 – 18 (((18 % 4) * 5) - 7) <= ((12 + (25 / 4)) - 18) (( 2 * 5) – 7) <= ((12 + 6 ) – 18) ( 10 - 7) <= ( 18 - 18) 3 <= 0 false
4.2.2 邏輯運算符號 符號 功能 範例 說明 ! 邏輯 NOT !(a=1) 若a1則結果為真 && 邏輯 AND 4.2.2 邏輯運算符號 符號 功能 範例 說明 ! 邏輯 NOT !(a=1) 若a1則結果為真 && 邏輯 AND a>1 && a<9 若1<a<9則結果為真 || 邏輯 OR a<1 || a>9 若a<1或a>9則為真
4.2.2 邏輯運算符號 (續) 運算式A 運算式B A&&B A||B 1 4.2.2 邏輯運算符號 (續) 運算式A 運算式B A&&B A||B 1 AND運算:有一個運算式為0 (false) 則A && B為0 (false)。 OR運算:有一個運算式為1 (true) 則A || B為1 (true)。
4.2.2 邏輯運算符號 (續) 運算符號的優先順序 !(4.3 > 3.7) && (7 == 5 + 2) || (15 / 3 < 5) !( true ) && ( true ) || ( 5 < 5 ) !( true ) && ( true ) || ( false ) !( true ) || ( false ) !( true ) false
4.2.3 if敘述 if (條件運算式) C++ 敘述; 範例一 cin >> letter; //輸入letter字元 if (letter == 'Y' || letter == 'y') //若letter = 'Y'或'y' cout << "Yes"; //則顯示"Yes“ 範例二 cin >> number; //輸入number資料 if (number % 3 == 0) //若number/3餘數為0 cout << number << " 為 3 的倍數"; //則顯示訊息
4.2.3 if敘述 (續) 範例三 sum = 0 cin >> num; //輸入num資料 if (num > 0) //若num大於0 sum += num; //sum=sum+num 範例四 if (num > 0) sum += num; //若num>0則 sum+=num
4.2.3 if敘述 (續)
4.2.3 if敘述 (續) 區塊型 if if (條件運算式) { 敘述1; 敘述2; . 敘述n; }
4.2.3 if敘述 (續) 範例 sum = 0 cin >> num; //輸入num資料 if (num > 0) //若num大於0 { //if區塊起始 sum += num; //sum=sum+num cout << sum; //顯示sum值 } //if區塊結束
4.2.3 if敘述 (續)
4.2.4 if-else敘述 單行型 if-else if (條件運算式) 敘述1; else 敘述2;
4.2.4 if-else敘述 (續) 範例一 cin >> letter; //輸入letter字元 if (letter == 'Y' || letter == 'y') //若letter == 'Y'或'y' cout << "Yes"; //則顯示"Yes" else //否則 cout << "No"; //則顯示"No“ 範例二 cin >> number; //輸入number資料 if (number % 3 == 0) //若number/3餘數為0 cout << number << " 是 3 的倍數"; //則顯示訊息1 cout << number << " 不是 3 的倍數"; //則顯示訊息2
4.2.4 if-else敘述 (續)
4.2.4 if-else敘述 (續) 區塊型 if-else if (條件運算式) { 敘述區1; } else { 敘述區2; }
4.2.4 if-else敘述 (續)
4.2.5 if-else if敘述 if(條件運算式) 敘述1; else if(條件運算式) 敘述2; else 敘述n;
4.2.5 if-else if敘述 (續) 範例 if (num > 0) //若num > 0 plus += 1; //則plus = plus + 1 else if (num < 0) //若num < 0 minus += 1; //則minus = minus + 1 else //以上皆非 zero += 1; //則zero = zero + 1
4.2.5 if-else if敘述 (續) 區塊型 if-else if if(條件運算式) { 敘述區1; } else if(條件運算式) { 敘述區2; } else { 敘述區n; }
4.2.5 if-else if敘述 (續) 範例 Short num1, num2; if ((num1 + num2) > 32767) { //若num1+num2>32767 cout << num1 << " + " << num2; cout << " = 上限溢位"; // 顯示錯誤訊息 } else if ((num1 + num2) < -32768) { //若num1+num2<-32768 cout << num1 << " + (" << num2; cout << ") = 下限溢位"; // 顯示錯誤訊息 } else { //以上皆非 sum = num1 + num2; cout << " = " << sum; // 顯示運算值 }
4.2.5 if-else if敘述 (續)
4.2.6 巢狀if敘述 巢狀if敘述(nested if statements)是一個if敘述(或區塊)包含於另一個if敘述(或區塊)之中,簡單的說就是大if包小if。 範例一 if (number > 0) //若number>0 { if (number < 9) //若number<9 cout << "Yes"; //則顯示"Yes" }
4.2.6 巢狀if敘述 (續) 範例二 if (num % 3 == 0) //num是否為3的倍數 { //num是3的倍數 cout << num << "是3和5的倍數"; //num是3和5的倍數 } else //num不是3的倍數 cout << num << "不是3的倍數"; //顯示字串2
4.2.6 巢狀if敘述 (續) 範例三 int year; if (year % 4 != 0) //若year不是4的倍數 cout << year << "不是閏年"; //則顯示year不是閏年 else if (year % 100 == 0) //若year是100的倍數 { if (year % 400 == 0) //且year不是400的倍數 cout << year << "是閏年"; //則顯示year是閏年 else //否 cout << year << "不是閏年"; //則顯示year不是閏年 } else //否 cout << year << "是閏年"; //則顯示year是閏年
4.2.7 switch敘述 switch (條件運算式) { case 數值1: 敘述區1; break; //中斷switch case數值2: 敘述區2; break; //中斷switch default: 敘述區n; }
4.2.7 switch敘述 (續) 範例一 switch(letter) //條件 = letter { case 'Y': //若letter = 'Y' cout << "Yes"; //顯示 "Yes" break; //中斷switch case 'N': //若letter = 'N' cout << "No"; //顯示 "No" default: //若 letter != 'Y'或'N' cout << "Unexpected"; //顯示 "Unexpected" }
4.2.7 switch敘述 (續) 範例二 switch(letter) //條件 = letter { case 'Y': cout << "Yes"; //letter='Y'顯示 "Yes" break; //中斷switch case ‘N’: cout << “No”; //letter=‘N’則顯示 "No" default: //若 letter != 'Y'或'N' cout << "Unexpected"; //顯示 "Unexpected“ }
4.2.7 switch敘述 (續) 範例三 switch(letter) //條件 = letter { case 'Y': //若letter = 'Y' case 'y': //若letter = 'y' cout << "Yes"; //顯示 "Yes" break; //中斷switch case 'N': //若letter = 'N' case 'n': //若letter = 'n' cout << "No"; //顯示 "No" default: //若 letter != 'Y'或'N' cout << "Unexpected"; //顯示 "Unexpected" }
4.2.7 switch敘述 (續)
4.2.8 條件運算符號 變數 = 運算式1 ? 運算式2 : 運算式3 範例 4.2.8 條件運算符號 變數 = 運算式1 ? 運算式2 : 運算式3 範例 letter = (num >= 0) ? '+' : '-'; 對等if-else敘述 if (num >= 0) //若num >= 0 letter = '+'; // letter = '+' else //否 letter = '-'; // letter = '-'
4.2.8 條件運算符號 (續) 運算式1 ? 敘述2 : 敘述3 範例 (num >= 0) ? plus+=1 : minus+=1; 對等if-else敘述 if (num >= 0) //若num >= 0 plus += 1; //則plus = plus + 1 else //否 minus += 1; //則minus = minus + 1