決策敘述 - if 敘述句

if 敘述句是最簡單的決策敘述,語法結構如下:
if(if-expression) 
{
    // if 程式區塊 …
}
if 關鍵字後面緊接著一段由小括弧包圍的條件表示式,這是一段回傳布林運算結果的判斷式,根據其回傳值,決定是否執行if 關鍵字後面的程式區塊,回傳值等於 true 則執行其中的 if 程式區塊,否則跳過區塊內容。
class Program
{
    static void Main(string[] args)
    {
        const int intMaxSpeed = 100;
        int intSpeed = 0; 
        
        Console.WriteLine("請輸入目前車速?");
        intSpeed = int.Parse(Console.ReadLine());

        if (intSpeed > intMaxSpeed)
        {
            Console.WriteLine("請注意,目前車速過快!!");
        }
        Console.ReadLine();
    }
}
首先建立一個代表速限值的 int 常數 intMaxSpeed ,並且將其值初始化為 100 ,並且定義用來代表目前車速的 int 變數 intSpeed ,此變數的值初始化為 0 。

接下來取得使用者的輸入值,這個數值被儲存至 intSpeed 變數,if 判斷式區塊中,判斷 intSpeed 的值是否大於 intMaxSpeed ,是的話結果為 true ,也就是大於 100 時,執行大括弧中的程式碼,輸出警告訊息。

於主控台執行程式,首先輸入 50 ,由於比 100 小,因此沒有任何的訊息輸出,如下式:
請輸入目前車速 ?
50
輸入大於100的數值,則執行if區塊內容,輸出特定的訊息:
請輸入目前車速 ?
150
請注意,目前車速過快 !!

if-else 敘述

如果程式邏輯包含了二個判斷式,而且這兩個判斷式互斥,可以選擇使用另外一種比較複雜的 if 敘述,語法結構如下:
if(if-expression) 
{
    if 程式區塊 … 
}
else 
{
    else 程式區塊 …
}
當if 關鍵字後面的條件式不成立,則程式流程會跳至 else 執行其中大括弧內的區塊程式碼。

現在假設要車速狀況,根據使用者輸入的行車速度,輸出合適的警示訊息,程式的判斷式如下:
  • 若是車速大於 100,顯示車速過快之訊息。
  • 若是車速小於 100,顯示車速適中之訊息。
以下的程式碼,實現判斷邏輯:
class Program
{
    static void Main(string[] args)
    {
        const int intMaxSpeed = 100;
        int intSpeed = 0;

        Console.WriteLine("請輸入目前車速?");
        intSpeed = int.Parse(Console.ReadLine());

        if (intSpeed > intMaxSpeed)
        { 
            Console.WriteLine("請注意,目前車速過快!!"); 
        }
        else
        { 
            Console.WriteLine("目前車速適中,請保持車速!!"); 
        }
        Console.ReadLine(); 
    }
}
首先在 if 判斷式中,若是大於常數 intMaxSpeed ,則第 13 行執行 if 程式碼區塊,於主控台輸出車速過快的警告訊息。

若是變數值 intSpeed 小於 intMaxSpeed ,提示目前的車速適中,則跳過 if 區塊,執行 else 以後的程式碼區塊。

執行其中的程式碼,假設行車速限為 100 ,當使用者輸入小於 100 的數值,程式輸出車速適中的訊息,輸出如下:
請輸入目前車速 ?
50
目前車速適中,請保持車速 !!
接下來來則是當使用者輸入大於 100 的數值,主控台輸出的訊息畫面。
請輸入目前車速 ?
105
請注意,目前車速過快 !!

巢狀 if

當程式的選擇判斷式不只一個的時候,你可能需要一個巢狀式的 if-else 敘述句,也就是在 if 或是 else 裏面的程式區塊加入另一段 if 敘述句,甚至是 if –else ,語法如下:
if(if-expression ) 
{
    if(Expression ) 
    {
        if 程式區塊 … 
    }
    else 
    {
        else 程式區塊 …
    }
}
else 
{
    if(if-expression) 
    {
        if 程式區塊 … 
    }
    else 
    {
        else 程式區塊 …
    }
}
if 以及 else 區塊中還可以放入其他的 if 或是 if-else ,也就是網底標示的部份,以進行下一層的判斷。

為了說明巢狀if敘述,這裏新增了一塊判斷式,若是車速 < 100,則在else以下的區塊裏面再加上一段 if-else 敘述句,整個判斷式擴充如下:
  • 假如車速小於100 則進行更進一步的判斷。 
  • 當車速小於 60,主控台輸出車速過慢的警告。 
  • 當車速大於 60,主控台輸出車速適中的訊息。
class Program
{
    static void Main(string[] args)
    {
        const int intMaxSpeed = 100;
        const int intMinSpeed = 60; 
        int intSpeed = 0;
        Console.WriteLine("請輸入目前車速?");

        intSpeed = int.Parse(Console.ReadLine());
        if (intSpeed > intMaxSpeed)
        {
            Console.WriteLine("請注意,目前車速過快!!");
        }
        else
        {
if (intSpeed > intMinSpeed) { Console.WriteLine("目前車速適中,請保持車速!!"); } else { Console.WriteLine("請注意,目前車速過慢!!"); }
} Console.ReadLine(); } }
其中新增一個整數值等於 60 的常數 intMinSpeed ,在 else 區塊中的 if-else 區塊形成巢狀區塊,如果第一個 if 判斷式不成立時,執行此巢狀區塊。

巢狀 if 區塊內部進一步判斷是否使用者輸入的值大於intMinSpeed,並且輸出適常的訊息。

此範例的輸出結果類似上面的範例內容,只是當使用者輸入的數字小於100的時候,系統會依小於或大於 60 作出不同的判斷,以下是大於60的輸出結果:
請輸入目前車速 ?
80
目前車速適中,請保持車速 !!
底下則是小於60的輸出結果:
請輸入目前車速 ?
50
請注意,目前車速過慢 !!
從這個範例的說明,我們很清楚的看到,巢狀結構如何被用來進行多種條件值的判斷,同時執行更為複雜的流程控制。

如果選擇的條件值過多,使用巢狀if判斷式,程式碼就會變得非常複雜且不容易閱讀,此時你可以選擇使用另外一個 switch 敘述句進行流程的控制,這一部份於討論 if-else-if 敘述的時作討論。







沒有留言: