close

< C++完整教學目錄 >

 

5. 迴圈:

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

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

(1) for迴圈:

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

{

    內容程式碼

}

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

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

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

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

範例,求21次方到210次方之值:

int result = 1;

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

{

       result = result*2;

       cout<<"2"<<i<<"次方是"<<result<<endl;   

}

執行後顯示:

範例說明:

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

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

        result = result*2;

       cout<<"2"<<i<<"次方是"<<result<<endl;

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

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

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

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

int result = 1;

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

{

       result = result*2;

       if (result>50000)

       {

        cout<<"N="<<i<<endl;

        break;

    }         

}

執行後顯示:N=16

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

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

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

int result = 1;

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

{

       result = result*2;

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

       if (result>50000)

       {

        cout<<"N="<<i<<endl;

        break;

    }         

}

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

        if (result>50000)

       {

        cout<<"N="<<i<<endl;

        break;

    }

則不會被執行。

(3) while 迴圈:

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

while (執行條件)

{

    內容程式碼

}

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

int result = 1;

int i=1;

while (i<=10)

{

       result = result*2;

       cout<<"2"<<i<<"次方是"<<result<<endl; 

    i++; 

}

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

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

 

 

<下一頁--函式 >

 

 

 

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

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