學習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個循環。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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