3.2 重复执行语句块
对大多数应用程序而言,重复一组语句的功能是基本要求。如果没有这种功能,则公司每当雇用一名新员工时就需要修改工资计算程序,每当我们想要玩自己喜欢的游戏时就需要重新加载。因此,下面首先介绍一下循环的工作原理。
3.2.1 循环的概念(1)
循环即重复执行一个语句序列,直到特定的条件为true或false为止。实际上,我们用目前所学过的C++(www.cppentry.com)语句就能编写出循环,需要的只是if和令人畏惧的goto而已。看下面的示例:
- // Ex3_07.cpp
- // Creating a loop with an if and a goto
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- int main()
- {
- int i(1), sum(0);
- const int max(10);
- loop:
- sum += i; // Add current value of i to sum
- if(++i <= max)
- goto loop; // Go back to loop until i = 11
- cout << endl
- << "sum = " << sum << endl
- << "i = " << i << endl;
- return 0;
- }
本示例是累加整数1~10的和。首次执行该语句序列时,i的初始值是1,该变量与最初是0的sum相加。在if语句中,i递增为2,但只要它小于等于max,就无条件转移到loop,然后i的值(现在是2)再次与sum相加。每次使i递增并与sum相加的动作重复执行,直到最后在if语句中i递增到11时,才不再重复这一过程。如果运行该示例,则得到下面的输出。
- sum = 55
- i = 11
本示例非常清楚地展示了循环的工作过程,但使用了goto语句,还在程序中引入一个标签,这两者都是我们应该尽可能避免的。使用下面这条专门用于编写循环的for语句,可以实现相同的功能,甚至更多。
试一试:使用for循环
可以使用for循环来重写上一个示例。
- // Ex3_08.cpp
- // Summing integers with a for loop
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- int main()
- {
- int i(1), sum(0);
- const int max(10);
- for(i = 1; i <= max; i++) // Loop specifi cation
- sum += i; // Loop statement
- cout << endl
- << "sum = " << sum << endl
- << "i = " << i << endl;
- return 0;
- }
示例说明
如果编译并运行该程序,那么将得到与前面的示例完全相同的输出,但这里的代码更加简单。决定循环操作的条件位于关键字for后面的圆括号中。该圆括号内共有3个以分号隔开的表达式:
第一个表达式最初执行一次,以设定循环的初始条件,在本示例中,该表达式将i设置为1。
第二个是逻辑表达式,它决定是否应该继续执行循环语句(或语句块)。如果第二个表达式为true,则继续执行循环;如果是false,则结束循环,然后执行循环后面的语句。在本示例中,只要i小于等于max,就一直执行下面的循环语句。
在循环语句(或语句块)执行之后,计算机将求出第三个表达式的值,在本示例中,每次循环都使i加1。在计算该表达式之后,第二个表达式再次被计算,以确定循环是否应该继续。