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

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
