C# 入門指南

單元 6 - 選擇

~~學習進度表~~

程式中的選擇 (selection) 就是依條件 (condition) 使程式有不同的執行方向,若條件為真,也就是 true ,程式就會跳過 false 的部份執行 true 的部份,反之亦然

條件 → True
    ↘
      False

選擇結構有單一選擇跟多重選擇,兩者都可使用 if 陳述 (if statement) , if 為關鍵字 (keyword) 之一,若是多重選擇 if 須與 else 連用。單一選擇,也就是單獨使用 if 陳述如下

bool condition = true;
if (condition)
{
    Console.WriteLine("條件為真!");
}

以上條件為 3 大於 5 ,如果 3 大於 5 為真,程式就會執行條件後的大括弧的程式區塊 (block) ,如果 3 大於 5 為假,程式自然跳過條件後的程式區塊,去找區塊後的第一個陳述 (statement) 執行。

ifelse 連用,條件為真,執行 if 後的程式區塊,條件為假,就執行 else 後的程式區塊

bool condition = false;
if (condition)
{
    Console.WriteLine("條件為真!");
}
else
{
    Console.WriteLine("條件為假!");
}

if-else 也可以多個連用,形成 if-else if-else 的多重選擇,最後的 else 表示以上皆非

bool condition1 = false;
bool condition2 = false;
bool condition3 = false;
if (condition1) 
{
    Console.WriteLine("條件1為真!");    
}
else if (condition2)
{
    Console.WriteLine("條件2為真!");
}
else if (condition3)
{
    Console.WriteLine("條件3為真!");
}
else 
{
    Console.WriteLine("以上皆非!");
}

將以上「以上皆非」寫成完整的 C# 程式,如下

using System;

namespace SelectionDemo01
{
    class Program
    {
        static void Main(string[] args)
        {
            bool condition1 = false;
            bool condition2 = false;
            bool condition3 = false;
            if (condition1) 
            {
                Console.WriteLine("條件1為真!");    
            }
            else if (condition2)
            {
                Console.WriteLine("條件2為真!");
            }
            else if (condition3)
            {
                Console.WriteLine("條件3為真!");
            }
            else 
            {
                Console.WriteLine("以上皆非!");
            }
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:SelectionDemo01
// 檔名:Program.cs
// 功能:示範 C# 的 if-else 陳述
// 作者:張凱慶

執行結果如下

C:\SelectionDemo01> dotnet run
以上皆非!
C:\SelectionDemo01>

if-else if-else 多重選擇的缺點是需要很多個條件,程式需要做很多個條件判斷,因此另外有個 switch 陳述 (switch statement) ,條件為一個常數 (constant) 值,然後程式自動尋找符合的 case 。同樣的 switchcase 也都是關鍵字

int caseDemo = 3;
switch (caseDemo)
{
    case 1:
        Console.WriteLine("選項1");
        break;
    case 2:
        Console.WriteLine("選項2");
        break;
    case 3:
        Console.WriteLine("選項3");
        break;
    default:
        Console.WriteLine("預設選項");
        break;
}

這裡, switch 後面的小括弧是常數值,此例中使用有常數值的變數 (variable) ,也可以直接使用字面常數,或是非 null 的物件。 case 後空一格,然後也是接常數值,通常就是直接填入符合情況的字面常數,注意,每個 case 的常數後都要接冒號。

關鍵字 switch 之後的小括弧可以是預算式,由運算式的計算結果來當 case 判斷的值, C# 7.0 之後接受參考型態的物件,但不能是 null

case 底下的陳述,習慣上沒有用大括弧,而是用縮排 (indentation) 的方式表示屬於哪個 case 的工作。每個 case 最後,我們都有加上 break 陳述 (break statement) ,這是中斷跳出執行的意思,就是說,這個 case 符合並且執行了 case 所屬的工作,到此跳出 switch-case 的範圍,程式繼續執行 switch 大括弧後的陳述。

switch-case 最下面有個 defaultdefault 就是預設情況,如果以上皆非就會執行 default 的工作,這跟 if-else if-else 最後的 else 的用法相同。但是,如果 case 後沒有 break ,每一次執行 default 都會被執行。同樣的, breakdefault 也都是關鍵字之一。

我們將此例寫成完整的範例程式,如下

using System;

namespace SelectionDemo02
{
    class Program
    {
        static void Main(string[] args)
        {
            int caseDemo = 3;
            switch (caseDemo)
            {
                case 1:
                    Console.WriteLine("選項1");
                    break;
                case 2:
                    Console.WriteLine("選項2");
                    break;
                case 3:
                    Console.WriteLine("選項3");
                    break;
                default:
                    Console.WriteLine("預設選項");
                    break;
            }
            
        }
    }
}
        
//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:SelectionDemo02
// 檔名:Program.cs
// 功能:示範 C# 的 switch-case 陳述
// 作者:張凱慶

執行結果如下

C:\SelectionDemo02> dotnet run
選項3
C:\SelectionDemo02>

複合陳述 (compound statement) 除了選擇結構 (selection structure) 還有重複結構 (repetition structure) ,重複結構也被稱為迴圈 (loop) ,接下來我們就來看看如何使用迴圈吧!

相關教學影片

上一頁 單元 5 - 陳述與運算式
回 C# 入門指南首頁
下一頁 單元 7 - 迴圈
回 C# 教材首頁
回程式語言教材首頁
中英文術語對照
程式區塊block
break 陳述break statement
複合陳述compound statement
條件condition
常數constant
if 陳述if statement
縮排indentation
關鍵字keyword
迴圈loop
重複結構repetition structure
選擇selection
選擇結構selection structure
陳述statement
switch 陳述switch statement
變數variable
參考資料
1. C# 參考 | Microsoft Docs - if-else
2. C# 參考 | Microsoft Docs - switch
重點整理
1. 程式中的選擇結構有兩種,一種是 if-else ,另一種是 switch-case
2. if-else 是在 if 後面接條件,如果條件為真,就執行 if 底下的程式區塊,反之執行 else 底下的程式區塊。
3. switch-case 是在 switch 後接一個常數,下面有處理各種常數值的 case ,最後可接 default 處理沒有對應到 case 的情況,每個 case 的最後要接上 break
問題與討論
1. 我們在大括弧的程式區塊都有縮排,縮排的空格數有差異嗎?如果不縮排可以通過編譯嗎?
2. else if 的個數有限制嗎?
3. 為什麼要有 switch 陳述,多個 if-else if-else 不也一樣?
4. switch 陳述可以用物件當條件嗎?
練習
1. 建立一個新專案 Exercise0601 ,宣告兩個整數變數 aba 設定為 3b 設定為 5 ,利用 if 陳述判斷兩者是否相等,不管是否相等都印出對應的訊息。
2. 承上題,另建立一個新專案 Exercise0602 ,改成接受使用者輸入。
3. 建立一個新專案 Exercise0603 ,宣告整數變數 a 並將 a 設定為 6 ,然後寫一個 switch 判斷 a 屬於 09 哪一個整數,每個 case 不加上 break ,最後也不加上 default
4. 承上題,另建立一個新專案 Exercise0604 ,加入 breakdefault
5. 承上題,另建立一個新專案 Exercise0605 ,改成接受使用者輸入。
6. 承上題,另建立一個新專案 Exercise0606 ,改成用 if-else 來寫。
7. 承上題,另建立一個新專案 Exercise0607 ,改成判斷小於 6060707080809090100 ,以及 100 等幾種情況。