|
學(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語句, 看下輸出: 可以看到, 程序從滿足的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 上一篇: 學(xué)習(xí)C++ -> 選擇結(jié)構(gòu)程序設(shè)計(jì)
|