close

迴圈:

迴圈可以重複執行某一段程式碼,並對某些變數進行重複的操作。

利用forwhile等關鍵字可以寫出迴圈,常用寫法如下:

(1) for迴圈:

for ( 變數型態 變數名稱 = ; 執行條件; 控制程式碼)

{

    內容程式碼

}

兩個小括號( )內可分為三部分:

第一部份是變數型態 變數名稱 = ;。這是迴圈的初始設定,在for迴圈剛開始時就會執行,且只執行一次。

第二部分是執行條件,乃是迴圈執行的條件,每一次迴圈內的內容程式碼要被執行前,這個執行條件就會被檢查一次,若條件成立則繼續執行內容程式碼,若不成立則結束迴圈。

第三部分是控制程式碼,用來控制迴圈執行的次數。每一次迴圈內的內容程式碼被執行完後,控制程式碼就會被執行一次。

範例,求31次方到310次方之值:

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            int result = 1;

            for (int i = 1; i <= 10; i++)

            {

                result = result * 3;

                Console.WriteLine("3" + i + "次方是" + result);

            }

 

            Console.Read();

        }

    }

}

執行後顯示:

image

範例說明:

-1:此for迴圈的初始設定,是將整數變數i設為1,在i <=10之情況下執行,每執行一次i的值就增加1。由此可見,當迴圈執行10次之後,i的值會是11,也就是1+10,因此使條件i <=10不成立而造成迴圈結束。可知,此迴圈只執行10次。

-2:此for迴圈的內容程式碼是:

                result = result * 3;

                Console.WriteLine("3" + i + "次方是" + result);

表示此迴圈每執行一次,變數result的值就會變成原先的3倍,並且輸出一行文字來顯示那時的result值。由於迴圈執行了10次,故知總共顯示了10行。譬如第3行就表示了迴圈執行第3次時的i值和result值。

(2) 強制中斷執行、強制跳過執行:

(2-1) 如上所述,一旦執行條件不成立,for迴圈就不會繼續執行。但在某些情況下,程式設計者需要令for迴圈在執行條件不成立之前,就強迫中斷for迴圈的執行。此時可用break關鍵字來強迫for迴圈中斷。譬如,將之前的範例問題改成:

2N-1次方小於100000,而2N次方大於100000,問N為多少?

這一題解法如下:

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            int result = 1;

            for (int i = 1; i > 0; i++)

            {

                result = result * 2;

                if (result > 100000)

                {

                    Console.WriteLine("N="+ i );

                    break;

                }

            }

 

            Console.Read();

        }

    }

}

執行後顯示:N=17

範例說明:題目只說2N-1次方小於100000,而2N次方大於100000,光憑這樣無法知道到底要執行幾次迴圈才能得到答案。故先把執行條件設計成i>0,因為每執行一次迴圈i都會增加1,故知這條件永遠都成立。這也就是說,迴圈會一直跑下去,直到找到N為止。而在result大於100000N找到了,迴圈沒有必要再跑了,就用break強制迴圈結束。(執行break後,其後的內容程式碼不會再被執行)

(2-2) 在某些情況下,程式設計者需要令for迴圈跳過某次執行,然後去執行下一次。此時可用關鍵字continue來跳過。譬如,將之前的範例問題改成:

已知N是偶數,且2N-1次方小於50000,而2N次方大於50000,問N為多少?

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            int result = 1;

            for (int i = 1; i > 0; i++)

            {

                result = result * 2;

                if (i % 2 == 1) { continue; }

                if (result > 50000)

                {

                    Console.WriteLine("N=" + i);

                    break;

                }

            }

 

            Console.Read();

        }

    }

}

範例說明:既然已知N是偶數,那i為奇數(i%2==1)的情況就不要理它了,直接用continue跳過。之後會進入到下一次執行,而本次執行中,continue後面的:

          if (result>50000)

        {

        Console.WriteLine("N=" + i);

        break;

    }

則不會被執行。

(3) while 迴圈:

while 迴圈跟for 迴圈在執行的邏輯上很類似,只是寫法比較簡單。while 迴圈寫法為:

while (執行條件)

{

    內容程式碼

}

for迴圈一樣,while每執行一次內容程式碼之前,都會檢查執行條件是否成立,成立就執行,不成立就結束迴圈。以範例來說,上述(1)中的問題:求21次方到210次方之值,用while迴圈來寫是這樣的:

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            int result = 1;

            int i = 1;

            while (i <= 10)

            {

                result = result * 2;

                Console.WriteLine("2" + i + "次方是" + result);

                i++;

            }

 

            Console.Read();

        }

    }

}

其中原本for迴圈內的初始設定int i=1;被移到迴圈之外,而原本的控制程式碼i++被寫到內容程式碼裡了。而執行後的顯示在螢幕上的結果是一樣的。

註:while迴圈也可以使用breakcontinue來中斷迴圈、跳過執行。

 

 

上一篇:if判斷式和邏輯運算子

下一篇:c#-變數轉換

按此前往C#完整教學目錄

arrow
arrow

    埃伯 發表在 痞客邦 留言(0) 人氣()