學(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)語句就能派上大用場了。
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語句, 看下輸出:
1 2 Others
可以看到, 程序從滿足的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)。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

