C/C++‎ > ‎

if 條件(選擇結構)

2012/10/27 謝碧景(c)編製更新 

 學習目標:

  • 瞭解運算式的種類與應用。
  • 學會單向選擇結構的設計與應用。
  • 學會雙向選擇結構的設計與應用。
  • 學會多向選擇的設計與應用。

一、 單向選擇

(一)當條件式為 true(真)時,就執行大括號內的成立敘述區塊,當條件式為 false(假)時,則跳開大括號成立敘述區塊,往下繼續執行。

(二)敘述區塊可為一列或多列若僅一列敘述,則{}符號可省略;亦即{}內之敘述為兩個(含)敘述以上,則{}符號不可省略

    • 【格式一】【if...】

  if (條件式)

  {

            成立敘述;

     …

  }

*註:條件式可搭配 比較運算子(<、>、<=、>=、==、!=)  邏輯運算子(&&、||、!) 使用。
    • 單向選擇流程圖:
 

 範例1:會員密碼輸入判斷。(檔名:if-ex1.cpp)

執行結果1 執行結果2
*註:列9→密碼為12345,若輸入的密碼正確,就執行10-13列敘述,若密碼錯誤則直接跳至列14結束程式。

二、雙向選擇


(一)當條件式為 true(真)時,就執行成立敘述區塊,當條件式為 false(假)時,則執行不成立敘述區塊。

(二)敘述 區塊可為一列或多列,若僅一列敘述,則{}符號可省略;亦即{}內之敘述若為兩個(含)敘述以上,則{}符號不可省略

    • 【格式二】【if...else...】

 if (條件式)

    {

  成立敘述;

 }

 else

    {

  不成立敘述;

 }

*註:條件式可搭配 比較運算子(<、>、<=、>=、==、!=)  邏輯運算子(&&、||、!) 使用。
    • 雙向選擇流程圖:
 

 範例2:成績判斷,成績若在60分(含)以上,輸出“及格",低於60分,則輸出“不及格"。參閱 ASCII符號表 (檔名:if-ex2.cpp)

執行結果1 執行結果2

註1:列9→輸入的成績若大於或等於60分以上,成立時執行列10-12敘述,輸出“及格";不成立時執行列14-16,輸出“不及格,請加油!"。

註2:同例以【三元運算子】設計,程式如下:列9→sc成績變數若大於或等於60分以上,則輸出“及格",否則輸出“不及格,請加油!"。(檔名:if-ex2-2.cpp)


三、多向選擇

  • 【格式三】【if...else if...else】(以三個條件式為例)

 if (條件式1)

    {程式區;}

 else if (條件式2)

            {程式區2;}

         else if (條件式3)

               {程式區3;}

          else

                  {程式區else;}

*註:條件式可搭配 比較運算子(<、>、<=、>=、==、!=)  邏輯運算子(&&、||、!) 使用。
  • 多向選擇流程圖:

 

 範例3:若成績大於60(含)分印出「及格」,否則印出「不及格」;但成績需在0~100分,否則印出「輸入錯誤」。(檔名:if-ex3.cpp)

執行結果1 執行結果2

註:敘述區塊內可為一列或多列敘述,若僅一列敘述,則 {} 符號可省略。


四、多向選擇

  • 【格式四】【switch...case】

switch...case 跟 if...else if...else 一樣,都是多向選擇的指令,但 運算式 及 case 值必須為整數字元,不能為浮點數。

switch (運算式 或 變數)

    {

  case 值1:

          敘述1;

          break;

  case 值2:

          敘述2;

          break;

          ...........

  default:

          敘述;

    } 

註:
1.運算式 或 變數,當值等於 case 的值就執行相對應之敘述,每個 case 最後一行若加上 break可讓程式跳離switch。若省略break程式不會跳離switch,而會繼續往下執行其他的case。當所有 case 值都不相等時,就執行 default後的敘述,亦可省略 default: 整個敘述區塊。case區塊若包含多個敘述,不需用大括號框住。
2.每一個case值必須不同,多個case值可連續在一起,如下【範例4】case 2: case 3: case 4:相同於 case 2 ... 4:以三個點...表示範圍。 

  • 多向選擇流程圖:

 範例4:輸入月份(月份為一個正整數),判斷此月份在四季(春、夏、秋或冬)中的哪一季 ?(檔名:switch_if-ex4.cpp)

    (春:2~4月,夏:5~7月,秋:8~10月,冬:11~12月以及1月)

 
執行結果   

註:(1)列7-36分別加入 Start: 標記及 goto Start; 敘述,使得程式不斷的反覆執行,若需關閉視窗請合按【Ctrl+C】即可強迫結束程式執行。

   (2)列12-14變數m值為 2或 3或 4,都會顯示春季。相同於case 2 ... 4:


§實作練習


一、百貨周年折扣戰,顧客購物金額折扣如下:
     10,000(含)以上→打 9.5 折
     20,000(含)以上→打 9 折
     30,000(含)以上→打 8.5 折
     40,000(含)以上→打 8 折

執行結果

執行結果2


二、輸出變數 a 的絕對值。

執行結果

執行結果2