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

 

第4. 反覆計算:迴圈

 

 


授課教師:陳慶瀚

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

E-mail : pierre@isu.edu.tw   

 


4.6 強制迴圈中斷

C++ 提供了兩個指令來強制迴圈流程中斷或結束 :

·  break -- 從迴圈或switch 結構中跳脫;

·  continue -- 跳過一次的迴圈循環。

break陳述只需要單一指令就可以完成:

break;

當程式執行到break陳述時,不管迴圈控制的判斷條件為truefalse,都會強制跳離它所在的迴圈,而到達迴圈後的第一行陳述。:

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

//                  範例程式4-12

//              使用break強制for迴圈中斷

//                  陳慶瀚,2001

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

#include <iostream.h>

#include <stdio.h>

void main()

{

char ch; 

for(;;)

{ 

             ch = getchar();   // 輸入一個字元 

if(ch=='A') break;  // 如果ch=='A',離開for迴圈 

}

cout<<"你鍵入字元A"<<endl;

}

這個for迴圈是一個無窮迴圈,它將反覆執行直到使用者輸入字元A為止。在迴圈內,我們使用

if(ch=='A') break;

如果使用者輸入Ach=='A'true,則執行break,迴圈被強制中斷,因而程式跳至迴圈後的第一行陳述

    cout<<"你鍵入字元A"<<endl;

另一個範例程式是把break放在while迴圈內:

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

//                  範例程式4-13

//              使用break強制while迴圈中斷

//                  陳慶瀚,2001

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

#include <iostream.h>

void main( )

{

int d = 1, sum = 0;

while(d < 10)

{

sum = sum + d;

if(sum > 20)break;

d++;

}

cout<<"d="<<d<<endl;

cout<<"sum="<<sum<<endl;

    } 

程式執行範例:

    d=6

    sum=21

在這個程式,while迴圈的條件運算式是d < 10d的初始值是1,迴圈每一次循環,d遞增1。如果沒有強制中斷,d會遞增至10迴圈才會結束。事實上當d=6時,sum=21sum > 20運算式為true,因此陳述

    if(sum > 20)break;

就已強制迴圈結束,輸出結果。

再考慮一個範例程式,我們依照下列的條件讀進並處理一個整數數值。 當讀進的數值為負, 我們希望輸出錯誤訊息並結束迴圈。 當數值大於 100, 我們希望駁回它並讓使用者繼續輸入。 當數值為零, 我們則希望迴圈正常結束

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

//                  範例程式4-14

//              結合無窮while迴圈和break中斷

//                  陳慶瀚,2001

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

#include <iostream.h>

void main()

{

int value;

while (1)

{

cout<<endl<<"請輸入一個整數值 : ";

cin>>value;

if (value <= 0)

{

cout<<"數值太小,重來一次!\n";

}

else if (value > 100)

{

cout<<"數值太大,重來一次!\n";

}

else

{

cout<<"OK!再見!\n");

break;   //跳離while迴圈                                

}

}

程式執行範例1

請輸入一個整數值 : 1234

數值太大,重來一次!

請輸入一個整數值 : 0

數值太小,重來一次!

請輸入一個整數值 : 50

OK!再見!

 

另一個強制迴圈中斷的指令continue,與break指令應用的時機相當,但是相對於break強制迴圈結束的做法,continue則僅是強制迴圈跳離目前的迴圈循環,而直接進入下一個迴圈循環。

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

//                  範例程式4-15

//             使用continue中斷迴圈循環

//                  陳慶瀚,2001

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

#include <iostream.h>

void main()

{

        int x=0;

while(x!=20)

{

x++;

if((x%2)==0)continue;

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

}

}

我們想要輸出120之間的奇數,所以x0遞增至20才結束。在迴圈內有一行陳述

    if((x%2)==0)continue;

其中x%2將得出x除以2的餘數,如果餘數等於0,則條件運算式(x%2)==0將為true,此時執行中斷迴圈循環的指令continue,其結果將使得程式忽略後方的程式碼,即

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

而直接跳回迴圈的開頭,繼續迴圈的下一個循環。

課堂練習TD4-10

重作課堂練習4-8的程式,也就是寫一個程式請使用者輸入一個任意正整數KK2輾轉相除n次後,其商為0,輸出n。但改用for迴圈,配合break的使用。

 

課堂練習TD4-11

請找出大於1000且距離1000最近的第一個質數,使用forwhile迴圈,配合break的使用。


 

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

義守大學電機系 陳慶瀚 
2001.10.22