學(xué)習(xí)C++ -> 循環(huán)語句與循環(huán)控制
一、循環(huán)語句
當(dāng)程序中需要不斷的重復(fù)執(zhí)行某個(gè)動(dòng)作, 例如: 重復(fù)輸出1000行"Hello,world!", 如果自己寫一千行cout<<"Hello,world!";, 就算復(fù)制粘貼也得一會(huì)時(shí)間, 這時(shí)循環(huán)語句就能派上大用場(chǎng)了。
1. for循環(huán)
for循環(huán)使用的基本形式:
for( 初始化表達(dá)式; 條件表達(dá)式; 增量表達(dá)式 ) 語句; //循環(huán)體
初始化是一個(gè)賦值語句, 它用來給循環(huán)控制變量賦初值; 條件表達(dá)式是一個(gè)關(guān)系表達(dá)式, 它決定什么時(shí)候退出循環(huán); 增量定義循環(huán)控制變量每循環(huán)一次后循環(huán)控制變量按什么方式變化。這三個(gè)部分之間用分號(hào)(;)分開。
例如:
int i ; for( i = 0; i < 10; i++ ) cout<< i <<endl ;
for循環(huán)語句首先計(jì)算初始化表達(dá)式, 即將循環(huán)控制變量i賦初始值0; 條件表達(dá)式 i < 10 ;表示當(dāng)i的值小于10的時(shí)候執(zhí)行 cout<< i <<endl ;語句, 當(dāng)大于或等于(>=)10的時(shí)候就結(jié)束循環(huán); i++是告訴for循環(huán)循環(huán)控制變量沒循環(huán)一個(gè)循環(huán)控制變量i的值增加1, 然后繼續(xù)執(zhí)行循環(huán)體中的語句, 直到i的值大于或等于10時(shí)結(jié)束循環(huán)。
注意:
1>. 循環(huán)體中如果有多條語句需要用大括號(hào){}括起來構(gòu)成一條符合語句;
2>. for循環(huán)中的初始化表達(dá)式、條件表達(dá)式和增量表達(dá)式可以缺省, 但分號(hào)(;)不能缺省, 例如:
for ( ; ; ) //死循環(huán) 語句; for ( i = 1; ; i += 2 ) //i每次加2, 循環(huán)不停止 語句; for ( j = 5; ; ) //j為5, 循環(huán)不停止 語句;
3>. for循環(huán)允許多層嵌套, 例如:
for( ; ; ) { for( ; ; ) { //循環(huán)體 }
//其他語句 }
實(shí)例: 用for循環(huán)求1+2+...+100的和
#include<iostream>using namespace std ;int main(){ int i ; //循環(huán)控制變量 int sum = 0 ; //存儲(chǔ)求和的結(jié)果, 賦初始值為0 for( i = 1; i <= 100; i++ ) sum += i ; /*1+2+...+100*/ cout<< sum <<endl ; //輸出求和的結(jié)果 return 0 ;}
2. while循環(huán)
while循環(huán)使用的基本形式:
while(判斷表達(dá)式) 循環(huán)體
當(dāng)程序執(zhí)行到while循環(huán)時(shí)首先計(jì)算 判斷表達(dá)式 , 當(dāng)判斷表達(dá)式的值為真(不為0)時(shí)便開始執(zhí)行循環(huán)體, 當(dāng) 判斷表達(dá)式 的值為假(為0)時(shí)跳過循環(huán)體繼續(xù)執(zhí)行循環(huán)體下面的語句。
例如:
int i = 0 ; while( i < 10 ) { cout<< i << endl ; i ++ ; }
首先為循環(huán)控制變量i賦初始值為0, 然后程序執(zhí)行到while時(shí)計(jì)算 i < 10, 此時(shí) i 的值為0, 所以 i < 10 為真, 程序開始執(zhí)行循環(huán)體中的語句 : 輸出目前 i 的值, 然后用 i ++ ; 使i的值增加1, 執(zhí)行完一次循環(huán)后再到 i < 10這里判斷值是否為真, 直到 i 的值大于或等于10時(shí)結(jié)束循環(huán)。
和for循環(huán)一樣, while循環(huán)也允許多層嵌套。
實(shí)例: 用for循環(huán)求1+2+...+100的和
#include<iostream>using namespace std ;int main(){ int i = 1 ; //循環(huán)控制 int sum = 0 ; //計(jì)算結(jié)果 while( i <= 100 ) { sum += i ; i ++ ; } cout<< sum << endl ; return 0 ;}
3. do...while循環(huán)
與while循環(huán)不同, while循環(huán)是先判斷 判斷表達(dá)式 中的值是否為真再?zèng)Q定是否執(zhí)行循環(huán)體, 而 do...while 循環(huán)是先執(zhí)行一次循環(huán)體再判斷是否繼續(xù)執(zhí)行循環(huán)體, 通過一個(gè)示例說明:
int i = 0 ; //循環(huán)控制 do { cout<< i <<endl ; }while( i > 0) ; //當(dāng)i>0時(shí)執(zhí)行循環(huán)
在這段代碼中, 首先為循環(huán)控制變量 i 賦初始值0, 然后進(jìn)入 do...while循環(huán)體中, 執(zhí)行 cout<< i <<endl ; 這句 , 然后再判斷i是否大于0, 若i大于0則繼續(xù)循環(huán), 否則結(jié)束循環(huán), 這里的i不大于0, 所以執(zhí)行了一次循環(huán)體后便結(jié)束了循環(huán)。
也就是說, 無論 是否符合do...while的執(zhí)行條件, 循環(huán)體總要執(zhí)行一次。
總結(jié)一下就是: while循環(huán)線判斷循環(huán)條件再執(zhí)行循環(huán)體, do...while循環(huán)先執(zhí)行一次循環(huán)體再判斷是否繼續(xù)執(zhí)行循環(huán)體。
注意: do...while中while后面的分號(hào)(;)不可省略。
實(shí)例: 用do...while循環(huán)求1+2+...+100的和
#include<iostream>using namespace std ;int main(){ int i = 1 ; //循環(huán)控制 int sum = 0 ; //計(jì)算結(jié)果 do { sum += i ; i ++ ; }while( i <= 100 ) ; cout<< sum <<endl ; return 0 ;}
二、循環(huán)控制
1. break語句
break語句通常用在循環(huán)語句或開關(guān)語句(switch)中。其作用是從當(dāng)前循環(huán)或當(dāng)前switch語句中跳出, 從而執(zhí)行當(dāng)前語句的下一條語句。
例如在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語句, 看下輸出:
12Others
可以看到, 程序從滿足的case處將后面的語句全部輸出了, 如果我們只想得到一個(gè)結(jié)果, 而不是將入口后面的case語句全部執(zhí)行的話就需要case語句了, 可以這樣:
case 0: cout<< "0" <<endl ; break ; case 1: cout<< "1" <<endl ; break ; case 2: cout<< "2" <<endl ; break ; default: cout<< "Others" <<endl;
在每個(gè)case語句后加上一個(gè)break語句, 當(dāng)執(zhí)行到滿足條件的case語句后再執(zhí)行完該case后的語句塊便退出switch語句。
再舉一個(gè)break語句應(yīng)用于循環(huán)語句中的例子, 以while循環(huán)為例:
int i = 0 ; while( true ) { cout<< i <<endl ; i ++ ; if( i > 10 ) break ; }
這里使用了while( true )語句, true是C++的關(guān)鍵字之一, 代表真, 也就是說如果沒有其他任何語句這就是一個(gè)死循環(huán)(永遠(yuǎn)不會(huì)停止), 這里我們還定義了一個(gè)變量i, 在循環(huán)體中使用cout<< i << ;輸出i的值, i++ ;語句是i自增1, 接下來是if語句, 條件表達(dá)式是當(dāng) i > 10時(shí)執(zhí)行if語句塊中的語句, 也就是說當(dāng)i自增到大于10時(shí)就會(huì)執(zhí)行break語句, 從而跳出while循環(huán), 這樣while( true )就不再是死循環(huán)了。
注意:
1>. break語句對(duì)if-else的條件語句不起作用。
2>. 在多層循環(huán)中,一個(gè)break語句只向外跳一層。
2. continue語句
continue語句的作用是跳過本輪循環(huán)中剩余的語句, 而執(zhí)行下一輪循環(huán)。continue語句只用在for、while、do-while等循環(huán)體中, 常與if條件語句一起使用, 用來控制循環(huán), 但不能用來控制if語句中的剩余語句。
一個(gè)實(shí)例: 輸出100以內(nèi)同時(shí)能被3整除且能同時(shí)被5整除的整數(shù)。
#include<iostream>using namespace std ;int main(){ int i; for( i = 0; i < 100; i++ ) { if( i % 3 != 0 || i % 5 != 0 ) //當(dāng)i不符合要求時(shí)結(jié)束本次循環(huán) continue ; cout<< i <<endl ; //輸出i } return 0 ;}
程序輸出的結(jié)果是15, 30, 45, 60, 75, 90。 從if語句中可以看出, 當(dāng)i不能整除3或5時(shí)就continue繼續(xù)下一個(gè)循環(huán), 所以cout<< i <<endl ;這句不會(huì)被每次都執(zhí)行, 只有沒有被continue時(shí)才能執(zhí)行到該輸出語句。
3. goto語句
當(dāng)循環(huán)嵌套較深且需要全部跳出循環(huán)時(shí), 使用goto語句應(yīng)該說是個(gè)不錯(cuò)的選擇, 例如:
#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個(gè)for循環(huán)嵌套, 計(jì)算3個(gè)100以內(nèi)的數(shù)i, m, n相加和為256的情況, 這里我們只取一個(gè)結(jié)果, 也就是說只要出現(xiàn)第一個(gè)符合條件的i, m, n 輸出后便退出循環(huán), 如果在if語句中使用break的話只能退出當(dāng)前if語句所在的循環(huán), 而無法退出更上一層的循環(huán)。
使用goto語句在循環(huán)外部定義一個(gè)表示stop, 需要退出所有循環(huán)時(shí)直接goto到循環(huán)外部, 這樣就相當(dāng)于一次跳出了3個(gè)循環(huán)。
--------------------
wid, 2012.11.21
聯(lián)系客服