5. 迴圈:
迴圈可以重複執行某一段程式碼,並對某些變數進行重複的操作。
利用for、while等關鍵字可以寫出迴圈,常用形式如下:
(1) for迴圈:
for ( 變數型態 變數名稱 = 值; 執行條件; 控制程式碼)
{
內容程式碼
}
兩個小括號( 和 )內可分為三部分:
第一部份是變數型態 變數名稱 = 值;。這是迴圈的初始設定,在for迴圈剛開始時就會執行,且只執行一次。
第二部分是執行條件,乃是迴圈執行的條件,每一次迴圈內的內容程式碼要被執行前,這個執行條件就會被檢查一次,若條件成立則繼續執行內容程式碼,若不成立則結束迴圈。
第三部分是控制程式碼,用來控制迴圈執行的次數。每一次迴圈內的內容程式碼被執行完後,控制程式碼就會被執行一次。
※ 範例,求2的1次方到2的10次方之值:
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迴圈中斷。譬如,將之前的範例問題改成:
※ 若2的N-1次方小於50000,而2的N次方大於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
範例說明:題目只說2的N-1次方小於50000,而2的N次方大於50000,光憑這樣無法知道到底要執行幾次迴圈才能得到答案。故先把執行條件設計成i>0,因為每執行一次迴圈i都會增加1,故知這條件永遠都成立。這也就是說,迴圈會一直跑下去,直到找到N為止。而在result大於50000時N找到了,迴圈沒有必要再跑了,就用break強制迴圈結束。(執行break後,其後的內容程式碼不會再被執行)
(2-2) 在某些情況下,程式設計者需要令for迴圈跳過某次執行,然後去執行下一次。此時可用關鍵字continue來跳過。譬如,將之前的範例問題改成:
※ 已知N是偶數,且2的N-1次方小於50000,而2的N次方大於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)中的問題:求2的1次方到2的10次方之值,用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迴圈也可以使用break和continue來中斷迴圈、跳過執行。
<下一頁--函式 >
留言列表