主要内容 #
前面我们复习了顺序结构的与分支结构的程序设计,在实际应用中,经常会遇到多种规律性的重复运算,这就需要掌握循环结构的程序设计。C++语言提供3种循环结构for、while和do-while。
- while 循环
- for 循环
- do…while 循环
- 循环嵌套
1. while 循环 #
只要给定的条件为真,while 循环语句会重复执行一个目标语句。
格式为:
while(条件表达式) { statement(s); }
在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。条件表达式可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环。
在这里,while 循环的关键点是循环可能一次都不会执行。当条件被测试且结果为假时,会跳过循环主体,直接执行紧接着 while 循环的下一条语句。
#include < iostream > using namespace std; int main () { // 局部变量声明 int i = 0,s = 0; // while 循环执行 while( i < 20 ) { s = s + i i++; } return 0; }
练习:求 s = 1 + 2 + 3 +… 当加到第几项时,s的值会超过1000?
2. for 循环 #
for 循环允许您编写一个执行特定次数的循环的重复控制结构。
格式为:
for ( 控制变量初始化表达式; 条件表达式; 增量表达式 ) { statement(s); }
下面是 for 循环的控制流:
- init 会首先被执行,且只会执行一次。这一步允许声明并初始化任何循环控制变量。也可以不在这里写任何语句,只要有一个分号出现即可。
- 接下来,会判断 条件表达式。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
- 在执行完 for 循环主体后,控制流会跳回上面的 增量表达式语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
- 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。
实例:
#include < iostream > using namespace std; int main () { // for 循环执行 for( int a = 10; a < 20; a = a + 1 ) { cout << "a 的值:" << a << endl; } return 0; }
练习:输出1至100之间能被3整除的数。
3. do…while 循环 #
do…while 循环与 while 循环类似,但是 do…while 循环会确保至少执行一次循环。
格式为:
do { statement(s); }while(条件表达式);
请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。
如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止。
实例:
#include < iostream > using namespace std; int main () { // 局部变量声明 int a = 10; // do 循环执行 do { cout << "a 的值:" << a << endl; a = a + 1; }while( a < 20 ); return 0; }
4. 循环嵌套 #
一个循环内可以嵌套另一个循环。C++ 允许至多 256 个嵌套层次。
f嵌套or循环的格式:
for ( 控制变量初始化表达式; 条件表达式; 增量表达式 ) { for ( 控制变量初始化表达式; 条件表达式; 增量表达式 ) { statement(s); } statement(s); // 可以放置更多的语句 }
嵌套 while 循环 格式:
while(条件表达式) { while(条件表达式) { statement(s); } statement(s); // 可以放置更多的语句 }
嵌套 do…while 循环的格式:
do { statement(s); // 可以放置更多的语句 do { statement(s); }while( 条件表达式 ); }while( 条件表达式);
关于嵌套循环有一点值得注意,您可以在任何类型的循环内嵌套其他任何类型的循环。比如,一个 for 循环可以嵌套在一个 while 循环内,反之亦然。
实例:下面的程序使用了一个嵌套的 for 循环来查找 2 到 100 中的质数:
#include < iostream > using namespace std; int main () { int i, j; for(i=2; i<100; i++) { for(j=2; j <= (i/j); j++) { if(!(i%j)) { break; // 如果找到,则不是质数 } } if(j > (i/j)) { cout << i << " 是质数\n"; } } return 0; }
练习:对于给定的自然数n(n < 20),在屏幕上输出仅有“*”组成的n行的直角三角形。
例如:当n = 5 时,输出:
* * * * * * * * * * * * * * *