跳至正文
View Categories

2 min read

主要内容 #

前面我们复习了顺序结构的与分支结构的程序设计,在实际应用中,经常会遇到多种规律性的重复运算,这就需要掌握循环结构的程序设计。C++语言提供3种循环结构for、while和do-while。

  1. while 循环
  2. for 循环
  3. do…while 循环
  4. 循环嵌套

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 循环的控制流:

  1. init 会首先被执行,且只会执行一次。这一步允许声明并初始化任何循环控制变量。也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 条件表达式。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 增量表达式语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,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 时,输出:

*
* *
* * *
* * * *
* * * * *