學習C++ -> 循環語句與循環控制


學習C++ -> 循環語句與循環控制

 


一、循環語句
    當程序中需要不斷的重復執行某個動作, 例如: 重復輸出1000行"Hello,world!", 如果自己寫一千行cout<<"Hello,world!";, 就算復制粘貼也得一會時間, 這時循環語句就能派上大用場了。
    
1. for循環
    for循環使用的基本形式:

    for( 初始化表達式; 條件表達式; 增量表達式 )
        語句;    //循環體


    初始化是一個賦值語句, 它用來給循環控制變量賦初值; 條件表達式是一個關系表達式, 它決定什么時候退出循環; 增量定義循環控制變量每循環一次后循環控制變量按什么方式變化。這三個部分之間用分號(;)分開。
    
    例如:

    int i ;
    for( i = 0; i < 10; i++ )
        cout<< i <<endl ;


    for循環語句首先計算初始化表達式, 即將循環控制變量i賦初始值0; 條件表達式 i < 10 ;表示當i的值小於10的時候執行 cout<< i <<endl ;語句, 當大於或等於(>=)10的時候就結束循環; i++是告訴for循環循環控制變量沒循環一個循環控制變量i的值增加1, 然后繼續執行循環體中的語句, 直到i的值大於或等於10時結束循環。
    
    注意:
        1>. 循環體中如果有多條語句需要用大括號{}括起來構成一條符合語句;
        2>. for循環中的初始化表達式、條件表達式和增量表達式可以缺省, 但分號(;)不能缺省, 例如:

        for ( ; ; )        //死循環
            語句;
            
        for ( i = 1; ; i += 2 )    //i每次加2, 循環不停止
            語句;
            
        for ( j = 5; ; )    //j為5, 循環不停止
            語句;

        3>. for循環允許多層嵌套, 例如:

        for( ; ; )
        {
            for( ; ; )
            {
                //循環體
            }
       //其他語句 }

 
        
    實例: 用for循環求1+2+...+100的和

#include<iostream>

using namespace std ;

int main()
{
    int i ;             //循環控制變量
    int sum = 0 ;       //存儲求和的結果, 賦初始值為0
    for( i = 1; i <= 100; i++ )
        sum += i ;      /*1+2+...+100*/
    cout<< sum <<endl ; //輸出求和的結果

    return 0 ;
}

 



2. while循環
    while循環使用的基本形式:

    while(判斷表達式)
        循環體


    當程序執行到while循環時首先計算 判斷表達式 , 當判斷表達式的值為真(不為0)時便開始執行循環體, 當 判斷表達式 的值為假(為0)時跳過循環體繼續執行循環體下面的語句。
    例如:

    int i = 0 ;
    while( i < 10 )
    {
        cout<< i << endl ;
        i ++ ;
    }

 
    首先為循環控制變量i賦初始值為0, 然后程序執行到while時計算 i < 10, 此時 i 的值為0, 所以 i < 10 為真, 程序開始執行循環體中的語句 : 輸出目前 i 的值, 然后用 i ++ ; 使i的值增加1, 執行完一次循環后再到 i < 10這里判斷值是否為真, 直到 i 的值大於或等於10時結束循環。
    
    和for循環一樣, while循環也允許多層嵌套。
    
    實例: 用for循環求1+2+...+100的和

#include<iostream>

using namespace std ;

int main()
{
    int i = 1 ;         //循環控制
    int sum = 0 ;       //計算結果
    while( i <= 100 )
    {
        sum += i ;
        i ++ ;
    }
    cout<< sum << endl ;

    return 0 ;
}

 



3. do...while循環
    與while循環不同, while循環是先判斷 判斷表達式 中的值是否為真再決定是否執行循環體, 而 do...while 循環是先執行一次循環體再判斷是否繼續執行循環體, 通過一個示例說明:

    int i = 0 ;         //循環控制
    do
    {
        cout<< i <<endl ;
    }while( i > 0) ;    //當i>0時執行循環

 
    在這段代碼中, 首先為循環控制變量 i 賦初始值0, 然后進入 do...while循環體中, 執行  cout<< i <<endl ; 這句 , 然后再判斷i是否大於0, 若i大於0則繼續循環, 否則結束循環, 這里的i不大於0, 所以執行了一次循環體后便結束了循環。
    
    也就是說, 無論 是否符合do...while的執行條件, 循環體總要執行一次。
    
    總結一下就是: while循環線判斷循環條件再執行循環體, do...while循環先執行一次循環體再判斷是否繼續執行循環體。
    
    注意: do...while中while后面的分號(;)不可省略。
    
    實例: 用do...while循環求1+2+...+100的和

#include<iostream>

using namespace std ;

int main()
{
    int i = 1 ;         //循環控制
    int sum = 0 ;       //計算結果
    do
    {
        sum += i ;
        i ++ ;
    }while( i <= 100 ) ;
    cout<< sum <<endl ;

    return 0 ;
}

 



二、循環控制
1. break語句
    break語句通常用在循環語句或開關語句(switch)中。其作用是從當前循環或當前switch語句中跳出, 從而執行當前語句的下一條語句。
    
    例如在switch語句中:

    int i = 1 ;
    switch( i )
    {
        case 0:
            cout<< "0" <<endl ;
        case 1:
            cout<< "1" <<endl ;
        case 2:
            cout<< "2" <<endl ;
        default:
            cout<< "Others" <<endl;
    }

 
    這里沒有使用break語句, 看下輸出:

1
2
Others


    可以看到, 程序從滿足的case處將后面的語句全部輸出了, 如果我們只想得到一個結果, 而不是將入口后面的case語句全部執行的話就需要case語句了, 可以這樣:

        case 0:
            cout<< "0" <<endl ; break ;
        case 1:
            cout<< "1" <<endl ; break ;
        case 2:
            cout<< "2" <<endl ; break ;
        default:
            cout<< "Others" <<endl;

 
    在每個case語句后加上一個break語句, 當執行到滿足條件的case語句后再執行完該case后的語句塊便退出switch語句。
    
    再舉一個break語句應用於循環語句中的例子, 以while循環為例:

    int i = 0 ;
    while( true )
    {
        cout<< i <<endl ;
        i ++ ;

        if( i > 10 )
            break ;
    }

    這里使用了while( true )語句, true是C++的關鍵字之一, 代表真, 也就是說如果沒有其他任何語句這就是一個死循環(永遠不會停止), 這里我們還定義了一個變量i, 在循環體中使用cout<< i << ;輸出i的值, i++ ;語句是i自增1, 接下來是if語句, 條件表達式是當 i > 10時執行if語句塊中的語句, 也就是說當i自增到大於10時就會執行break語句, 從而跳出while循環, 這樣while( true )就不再是死循環了。

    注意:
        1>. break語句對if-else的條件語句不起作用。
        2>. 在多層循環中,一個break語句只向外跳一層。   


2. continue語句
    continue語句的作用是跳過本輪循環中剩余的語句, 而執行下一輪循環。continue語句只用在for、while、do-while等循環體中, 常與if條件語句一起使用, 用來控制循環, 但不能用來控制if語句中的剩余語句。
    
    一個實例: 輸出100以內同時能被3整除且能同時被5整除的整數。

#include<iostream>

using namespace std ;

int main()
{
    int i;
    for( i = 0; i < 100; i++ )
    {
        if( i % 3 != 0 || i % 5 != 0 )  //當i不符合要求時結束本次循環
            continue ;
        cout<< i <<endl ;   //輸出i
    }

    return 0 ;
}

 
    程序輸出的結果是15, 30, 45, 60, 75, 90。 從if語句中可以看出, 當i不能整除3或5時就continue繼續下一個循環, 所以cout<< i <<endl ;這句不會被每次都執行, 只有沒有被continue時才能執行到該輸出語句。


3. goto語句
    當循環嵌套較深且需要全部跳出循環時, 使用goto語句應該說是個不錯的選擇, 例如:

#include<iostream>

using namespace std ;

int main()
{
    int i, m, n;
    for( i = 0; i < 100; i++ )
    {
        for( m = 0; m < 100; m++ )
        {
            for( n = 0; n < 100; n++ )
            {
                if( (i + m + n) == 256 )
                {
                    cout<<"i = "<< i <<endl;
                    cout<<"m = "<< m <<endl;
                    cout<<"n = "<< n <<endl;
                    goto stop ;
                }
            }
        }
    }
    stop: cout<<"Stop"<<endl;

    return 0 ;
}

    這里是使用3個for循環嵌套, 計算3個100以內的數i, m, n相加和為256的情況, 這里我們只取一個結果, 也就是說只要出現第一個符合條件的i, m, n 輸出后便退出循環, 如果在if語句中使用break的話只能退出當前if語句所在的循環, 而無法退出更上一層的循環。
    
    使用goto語句在循環外部定義一個表示stop, 需要退出所有循環時直接goto到循環外部, 這樣就相當於一次跳出了3個循環。

 

--------------------

wid, 2012.11.21

 

上一篇: 學習C++ -> 選擇結構程序設計


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM