1-6 For, While與Do迴圈


阿瑟 發表



迴圈乍聽之下感覺好像只是一個簡化重複動作的小技巧, 但是您可能不會相信, 從畫面的更新到讀取資料, 都是迴圈大顯身手之處.

*注意: C++所有語法大小寫有差. 如果您在執行時發現中文無法顯示請自行將程式修改成英文.

*注意: 如果您執行程式後, 程式視窗會自動關閉的話, 請至MS-DOS模式重新執行程式, 或是在void main()最底端加上system("PAUSE");來暫停程式.



迴圈三部曲, 當然就是介紹三種不同的迴圈: For迴圈, While迴圈與Do-While迴圈.
三種迴圈功能上其實並沒有差太多, 其實是個人習慣上的問題.

先來介紹一下迴圈的基本概念, 不管是什麼迴圈, 都有一組條件式 (和if/then有點類似), 只要條件式為"真" (True) 迴圈就會繼續運轉, 反之, 條件式若為"偽" (false), 迴圈就會終止.
For迴圈 (For Loop), For迴圈的特色是對於固定次數 (fixed iterations) 的計算較方便使用.

While迴圈 (While Loop)的特色則是架構開放, 對於不固定次數的計算較方便使用.

For與While迴圈, 都是先檢查條件式再運行, 因此如果條件式本身就不成立的話, 那迴圈就完全不會運行.

Do-While迴圈 (Do-While Loop)比較特別的就是該迴圈會至少運行一次, 再進行條件式檢查, 當然在這裡聽起來好像沒有什麼特別之處, 但是在某些特定的情況下Do-While迴圈就可以發揮作用, 這小弟下面再介紹.


小弟先介紹一下For迴圈的寫法:
#include <iostream.h>
#include <stdlib.h>


void main()
{
   int number=0;

   for(int x=0; x<5; x++)
   {
     number++;
     cout << number << endl;
   }

}


for迴圈的結構: for(迴圈變數, 迴圈條件, 迴圈更新動作)

迴圈變數是一個簡單的宣告, 如此範例的int x=0, 是宣告了一個x的整數作為迴圈次數計算用的變數.

迴圈條件就是和if/then是一樣的作用, 在這個範例中: 只要在x小於5的情況下迴圈就會自動運行.

迴圈更新動作代表的是: 當迴圈條件成立時, 迴圈執行完畢後的更新動作, 在這個範例中的x++ (其實是x=x+1的另外一種寫法) 的意思是如果迴圈執行完就將x增加1

而for()的下面的{}就是迴圈的內容了, 在這個範例中每當迴圈執行一次, number變數的數值就會增加1.
這個範例迴圈會總共會執行5次 (第一次是0, 第二次是1, 第三次是2, 第四次是3, 第五次是4, 第六次是5, 而5不小於5因此迴圈終止)
number變數的初始數值是0, 第一次迴圈執行數值增加到1, 第二次增加到2, 依次類推一直到5.
編譯並且執行這隻程式, 您應該會在螢幕上一個1, 2, 3, 4, 5 的數列. 如果您看到了那代表這個迴圈正常執行了.

您可以試試看: 將條件設定為x<0 , 您會發現螢幕上沒有輸出, 因為條件一開始就不成立, 迴圈並沒有執行


接著小弟要介紹的是while迴圈:

#include <iostream.h>
#include <stdlib.h>


void main()
{
   int x=0;
   int number=0;

   while(x<5)
   {
     number++;
     cout << number << endl;
     x++;
   }
}


While迴圈的結構就開放多了:
   int x=0; - 這個是迴圈變數
   int number=0;

   while(x<5) - 括弧中的是迴圈條件
   {
     number++;
     cout << number << endl;
     x++; - 這個是迴圈更新動作
   }


這些名詞小弟在先前已經介紹過了, 因此先略過.
從這邊應該不難看出, 比起for迴圈, while迴圈架構很方便, 這些變數高興放在哪裡就放在哪裡.



今天最後要介紹的是Do-While Loop, 這個迴圈就比較特別了:

#include <iostream.h>
#include <stdlib.h>


void main()
{
   int x=0;
   int number=0;

   do
   {
     number++;
     cout << number << endl;
     x++;
   }while(x<5);
}


搞什麼, 跟While Loop沒有什麼兩樣啊...
現在請您將後面的while(x<5)改成while(x<0), 也就是讓條件不成立, 然後再執行一次.
您會發現, 雖然條件不成立, 但是迴圈還是執行了一次, 在螢幕上留下了一個小小的1, 這就是這個迴圈的奧妙之處了.

下面這隻程式可以讓您參考一下:

#include <iostream.h>
#include <stdlib.h>


void main()
{
   int keyin=0;

   do
   {
     cout << "請輸入一個5:";
     cin >> keyin;
   }while(keyin!=5);

   cout << "輸入正確" << endl;
}


來看一下程式邏輯:
這個迴圈的條件是使用者輸入(存於變數keyin)必須是一個正整數"5". 不管先前的變數數值為何, 迴圈都會先執行一次, 如果使用者輸入的數值不是5, 迴圈就會繼續執行, 直到使用者正確的輸入.


講完了迴圈的基本架構, 阿得在這邊順便介紹一下所謂的無限迴圈 (infinite loop), 這是許多人使用迴圈時常常犯的錯誤
看看下面這段程式 (但是不要編譯執行喔, 不然您的電腦可能會當機):

#include <iostream.h>
#include <stdlib.h>


void main()
{
   int x=0;
   int number=0;

   while(x<5)
   {
     number++;
     cout << number << endl;
   }
}


看出了什麼了嗎?
這隻程式的while迴圈缺少了迴圈更新動作, 由於迴圈變數初始值是0, 而執行過後仍然是0, 因此此變數恆小於5, 換句話說就是這個迴圈永遠不會終結啦! 大家在使用迴圈的時候一定要特別小心這種錯誤.

講到這邊迴圈也講解的差不多了, 希望這篇教學對大家有所助益.

最後更新日期: 5/17/2003 8:28:43 PM