今天介紹的是程序中三個基本控制結構(順序,分支,循環)的最后一個:循環。
只要三種基本的控制結構就能夠表達用一個入口和一個出口框圖表達的任何程序邏輯。所以在寫程序的時候,要盡量避免使用GOTO語句,只用三種基本的控制結構。
寫循環語句要有下面三個步驟:
- 需要重復的語句,即循環體
- 用循環語句包含循環體
- 循環條件,即什么時候跳出循環
WHILE循環
while循環的語法如下:
while(loop-condition) { //loop body }
loop-condition是循環條件,是一個bool類型的變量。當loop-condition為true時,就會執行{……}內的循環體。舉個例子:
int sum = 0, i = 1; //循環4次,第5次時,i = 5,i < 5為false while (i < 5) { sum += i; i++; } cout << "5以內的數之和為:" << sum << endl; //結果為:5以內的數之和為:10
如果你想要用戶確認后再循環:
char loop = 'Y'; while (loop == 'Y') { //loop body cout << "執行" << endl; cout << "Do you want to continue? Yes(y or Y) or No(n or N): "; cin >> loop; //toupper()函數再<cctype>頭文件中,把單個字符轉換為大寫 loop = toupper(loop); }
執行結果:
DO-WHILE循環
do-while的基本語法:
do { //loop body } while (loop-condition);
注意最后的分號!
do-while循環和while基本相同,區別僅在於do-while先執行循環體,再判斷條件,如果條件為真,則繼續執行。
上面的例子用do-while循環重構一下:
int sum = 0, i = 1; //循環4次,第5次時,i = 5,i < 5為false do { sum += i; i++; }while (i < 5); cout << "5以內的數之和為:" << sum << endl; //結果為:5以內的數之和為:10
FOR循環
for循環是編程時最常用的循環格式,語法如下:
for (initial-action; loop-condition; action-after-each-iteration) { //loop body }
解釋一下三個參數:
initial-action是初始化動作,即初始化循環時需要的變量
loop-condition是循環條件,為true時執行循環體
action-after-each-iteration是每次迭代后的動作,即執行完一次循環體后的操作,一般是i++
上面的例子用for循環重構一下:
int sum = 0; //循環4次,第5次時,i = 5,i < 5為false for (int i = 1; i < 5; i++) { sum += i; } cout << "5以內的數之和為:" << sum << endl; //結果為:5以內的數之和為:10
當然,如果要初始化的動作在前面寫也可以:
int sum = 0, i = 1; //此時i的作用域為整個生命周期,而不是for循環 for (; i < 5; i++) { sum += i; } cout << "5以內的數之和為:" << sum << endl; //結果為:5以內的數之和為:10
同理,如果沒有后續執行的操作,action-after-each-iteration可以不寫
int sum = 0, i = 1; //循環4次,第5次時,i = 5,i < 5為false for (; i < 5;) { sum += i; i++; } cout << "5以內的數之和為:" << sum << endl; //結果為:5以內的數之和為:10
break和continue
這是C++的兩個關鍵字。
break用來跳出整個控制語句(如while,switch...),continue用來跳過一次迭代。
(迭代就是當前執行的這一次)
break:
for (int i = 0;i < 10; i++) { if (i == 5) { //當i=5時,跳出整個循環 break; }
cout << i << endl;
}
執行結果:
從數字5之后就沒有了,因為跳出了整個大的循環
continue:
for (int i = 0;i < 10; i++) { if (i == 5) { //當i=5時,跳過本次循環 continue; } cout << i << endl; }
執行結果:
只是沒有數字五,因為i = 5時,跳過了本次循環