計算機概論:C/C++程式設計

 

第4. 反覆計算:迴圈

 

 


授課教師:陳慶瀚

WWW : http://www.miat.ee.isu.edu.tw/cpp

E-mail : pierre@isu.edu.tw   

 


4.4 while迴圈

while 迴圈語法如下 :

while (條件運算式)

{

         陳述1

         陳述2

        ......

}

就像for迴圈一樣,while迴圈在執行其內部陳述前會先檢查條件運算式,如果其值為true,則執行其內部陳述,否則就結束while迴圈。

如果內部陳述只有一個,可以省略大括號{}

while (條件運算式)

         陳述;

for迴圈與while迴圈有何差別呢?基本上,所有以for迴圈可以解決的問題都可以替換成while迴圈。但是兩者的應用時機還是有所差別,for迴圈適用在已知迴圈數的問題,while迴圈則適用在無法預知迴圈數的問題。

/*----------------------------------------------------*/

//                  範例程式4-7

//           while迴圈的應用:偵測特定輸入值

//                  陳慶瀚,2001

/*----------------------------------------------------*/

#include <iostream.h>

void main()

{

int x=0;

while(x!=123)

{

    cin>>x; 

        }

    }

這個程式使用while迴圈來偵測使用者由鍵盤輸入的數值,使用者輸入任何不等於123的數值都將使迴圈繼續執行。while迴圈之外,我們設定x的初值x=0,老實說,如果我們沒設定這個初值,在多數情況下並不會影響這個程式的正常運作。因為一個變數如果沒有初值化(即設定初值),則它可能具有一個任意的數值(依該變數所在記憶體殘留資料而定),最算是隨機產生,x大概只有幾萬分之一的機會(甚至更小)會等於123。不過我們不能排除這種可能性,如果真的發生了,那麼while迴圈一執行條件運算式,就會立刻結束迴圈。這就是我們要在while迴圈之外作初值設定的理由。

/*----------------------------------------------------*/

//                  範例程式4-8

//             while迴圈的應用:數值遞減

//                  陳慶瀚,2001

/*----------------------------------------------------*/

    #include <iostream.h>

void main()

{

         int x=3;

while (x>0)

        {

cout<<"x = "<<x<<endl;

x--;

}

}

程式輸出 :

x=3

x=2

x=1

因為while 迴圈除了可以接受條件判斷式外, 還可以接受其他運算式, 下列用法都是合法的 :

    while (x--);

    while (x=x+1);

    while (x+=5);

運用這種方式, 除非 x--, x=x+1, x+=5 所運算出的結果為0, 否則while 指令將會繼續執行迴圈中的陳述, 也就是說, 運算出的結果若是0或是false, 則將會讓while 指令的條件判斷不成立, 並使迴圈結束。

下面兩個範例程式進一步展示while迴圈的應用。

/*----------------------------------------------------*/

//                  範例程式4-9

//             while迴圈的應用:讓變數x 往上計數至11

//                  陳慶瀚,2001

/*----------------------------------------------------*/

    #include <iostream.h>

void main()

{

int x=0;

while (x++ < 10);

cout<<"x="<<x;

    }

範例程式輸出:

    x=11

while迴圈的運算式裡,我們使用

    x++ < 10

首先x遞增1,再判斷是否小於10,如果條件滿足,則迴圈繼續執行,直到x遞增至1111<10使該運算式結果為falsewhile迴圈才結束。此時輸出x11

接下來的程式展示輸入字元的控制的例子:

/*----------------------------------------------------*/

//                  範例程式4-10

//             while迴圈的應用:輸入字元的控制

//                  陳慶瀚,2001

/*----------------------------------------------------*/

    #include <iostream.h>

    #include <stdio.h>

void main()

{

    char ch;

    cout<<" 輸入一個字元:";

    cin>>ch;

while ( ch != 'y')

{

      cout<<" 重新輸入:";

      cin>>ch;

}

    }

範例程式輸出:

    a

    a

    d

    d

    y

首先要求使用者由鍵盤輸入一個字元,存放在變數chch變數值如果不等於'y',則運算式得到truewhile迴圈會執行其內部的陳述,也就是要求重新輸入,直到使用者鍵入'y',則'y'!='y'這個運算結果將為false,迴圈結束,輸出「你成功了」,接著程式結束。


課堂練習4-8

參考範例程式4-7,使用while迴圈,讓使用者輸入一個整數,如果使用者輸入的數值不是介於0和100之間,則迴圈繼續讓使用者重新輸入,直到輸入的數值介於0和100之間,才輸出"OK",程式結束

 

課堂練習4-9

寫一個程式由使用者輸入一個任意正整數KK2輾轉相除n次後,其商為0,輸出n

例如82輾轉相除4次後商為0,所以n=4,因為:

8/2=4...n=1

4/2=2...n=2

2/2=1...n=3

1/2=0...n=4

 


 

計算機概論:C/C++程式設計

義守大學電機系 陳慶瀚 
2001.10.22