C# 的流程控制

基礎篇

C# 簡介

開發環境

變數與運算

流程控制

陣列

函數

物件

例外處理

函式庫篇

檔案處理

資料結構

正規表達式

Thread

應用篇

視窗程式

媒體影音

網路程式

遊戲程式

手機程式

資料庫

雲端運算

特殊功能

委派

擴展方法

序列化

LinQ

WPF

網路資源

教學影片

投影片

教學文章

軟體下載

考題解答

101習題

簡介

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

C# 中的條件判斷語法

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>

C# 中的迴圈語法

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

while (EXP)
  <BLOCK>

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

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

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

結語

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

練習

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("不及格");
        }
    }
}

迴圈範例

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);

        }
    }
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License