陳鍾誠

Version 1.0

C# 程式基礎:流程控制

在結構化的程式語言中,流程控制是以判斷 (if, switch) 與迴圈 (for, while) 為主的。C# 也不例外,我們將在本文中介紹 C# 的流程控制語法,包含如何利用條件判斷語法控制程式的分支情況,以及用迴圈語法重複運行某些程式碼。

if 語法

C# 的條件判斷以 if 為主,語法完全繼承 C 語言的語法,其語法如下:

if EXP 1
  BLOCK 1
else if EXP 2
  BLOCK 2
...
else EXP K
  BLOCK K

舉例而言,假如我們想要判斷成績變數 score 是否及格,也就是 score 是否到達 60 分以上,則可以用下列語法。

if (score >= 60)
  Console.WriteLine("及格");
else
  Console.WriteLine("不及格");

更進一步的,假如我們想用程式判斷等第,其中 90 分以上為 A,80-90 之間為 B,70-80 之間為 C,70 以下為 D,那麼就可以用下列語法進行判斷。

if (score >=90)
  degree = "A";
else if (score >= 80)
  degree = "B";
else if (score >= 70)
  degree = "C";
else
  degree = "D";

如果我們將上述範例與 if 語句的語法對照起來,可以很清楚的看到 if 語句的語法結構,如以下範例所示。

if (score >=90)            // if EXP 1
  degree = "A";            //   BLOCK 1
else if (score >= 80)      // else if EXP 2
  degree = "B";            //   BLOCK 2
else if (score >= 70)      // else if (EXP 3
  degree = "C";            //   BLOCK 3
else                       // else EXP 4
  degree = "D";            //   BLOCK 4  

for 語法

C# 當中的迴圈語法,包含 for, while, foreach 等,其中的 for 與 while 是由 C 繼承而來的,語法與 C 語言一致。而 foreach 的語法則是新創造的,其使用上比 for 語法更方便。

for 迴圈的語法如下所示,其中的 EXP1 是指定敘述,可以用來設定索引變數的初值,EXP2 是一個判斷條件,用來判斷是否應跳出迴圈,EXP3 則是累加條件,通常用來對索引變數進行累加 (++) 的動作。

for (EXP1; EXP2; EXP3)
  BLOCK;

舉例而言,假如我們想計算從 1 加到 100 的結果,就可以利用下列程式,不斷的將索引變數值 i 加入到總和變數 sum 當中,最後 sum 當中所儲存的就會是 1+2+…+100 的結果 5050。

int sum = 0;
for (int i=1; i<=100; i++)
  sum += i;

while 語法

while 迴圈的語法比 for 迴圈更簡單,其語法如下範例所示,其中的 EXP 是一個邏輯判斷式,用來判斷是否應該離開迴圈。在還沒離開之前,會不斷的重複執行 BLOCK 區塊。

while (EXP)
  BLOCK

同樣的,我們也可以利用 while 迴圈計算從 1 加到 100 的結果,其程式如以下範例所示。

int sum=0;
int i = 1;
while (i<=100) 
{
  sum = sum + i;
  i++;
}

至於 foreach 迴圈,則是針對某個容器結構 (例如陣列) 當中的每個元素都巡迴執行一次,其語法我們將留待未來討論陣列的主題時再行說明。

結語

判斷與迴圈是結構化程式設計的兩大流程控制方法,有效的結合判斷與迴圈,就能產生變化無窮的程式,這正是程式設計精妙的地方,也是程式設計師必須要會的基本能力。

練習:if 範例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // int score = 55;
            Console.Write("請輸入分數:");
            String scoreStr = Console.ReadLine();
            int score = int.Parse(scoreStr);
            if (score >= 60)
                Console.WriteLine("及格");
            else
                Console.WriteLine("不及格");
        }
    }
}

練習:while 範例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int score = 55;
            if (score >= 60)
                Console.WriteLine("及格!");
            else
                Console.WriteLine("不及格!");

            while (score < 60)
            {
                Console.WriteLine("score=" + score + "=> 不及格!");
                score++;
            }
            Console.WriteLine("score=" + score + "=> 恭喜你!及格了!");
/*
            int i = 1;
            while (i <= 10)
            {
                Console.WriteLine("i=" + i);
                i++; // i = i + 1; // i++
            }
*/
            for (int i = 1; i <= 10; i+=2) // i+=2 => i=i+2
                Console.WriteLine("i=" + i);


        }
    }
}