计算机除了存储数据外,还可以做很多其他的工作。可以对数据进行分析、合并、重组、抽取、修改、推断、合成以及其他操作。有时甚至会歪曲和破坏数据,不过我们应当尽量防止这种行为的发生。为了发挥其强大的操控能力,程序需要有执行重复的操作和进行决策的工具。当然,C++提供了这样的工具。事实上,它使用与常规C语言相同的 for循环、while循环、do while循环、if 语句和switch语句。这些程序控制语句通常都使用关系表达式和逻辑表达式来控制其行为。
很多情况下都需要程序执行重复的任务,如将数组中的元素累加起来或将歌颂生产的赞歌打印20份,C++中的 for循环可以轻松地完成这种任务。我们来看看下面的程序1中,以了解for循环所做的工作,然后讨论它是如何工作的。
//forloop.cpp -- introducing the for loop #include <iostream> int main () { using namespace std; int i; // create a counter // initialize; test ; update for (i = 0; i < 5; i++) cout << "C++ knows loops.\n" ; cout <<"C++ knows when to stop .ln" ; return 0; }
下面是该程序的输出:
程序一
该循环首先将整数变量i设置为0:
i = o
这是循环的初始化(loop initialization)部分。然后,循环测试(loop test)部分检查i是否小于5:
i < 5
如果确实小于5,则程序将执行接下来的语句——循环体(loop body):
cout << "C++ knows loops.\n" ;
然后,程序使用循环更新(loop update)部分将i加1:
i++
这里使用了++运算符——递增运算符(increment operator),它将操作数的值加1。递增运算符并不仅限于用于for循环。例如,在程序中,可以使用i++;来替换语句i=i+l;。将i加1后,便结束了循环的第一个周期。
接下来,循环开始了新的周期,将新的i值与5进行比较。由于新值(1)也小于5,因此循环打印另一行,然后再次将i加1,从而结束这一周期。这样又进入了新的一轮测试、执行语句和更新i的值。这一过程将一直进行下去,直到循环将i更新为5为止。这样,接下来的测试失败,程序将接着执行循环后的语句。
for循环为执行重复的操作提供了循序渐进的步骤。我们来具体看一看它是如何工作的。for 循环的组成部分完成下面这些步骤。
1.设置初始值。
2.执行测试,看看循环是否应当继续进行。
3.执行循环操作。
4.更新用于测试的值。
C++循环设计中包括了这些要素,很容易识别。初始化、测试和更新操作构成了控制部分,这些操作由括号括起。其中每部分都是一个表达式,彼此由分号隔开。控制部分后面的语句叫作循环体,只要测试表达式为true,它便被执行:
for (initialization; test-expression; update-expression)
body
C++语法将整个for看作一条语句——虽然循环体可以包含一条或多条语句。(包含多条语句时,需要使用复合语句或代码块,这将在本章后面进行讨论。)
循环只执行一次初始化。通常,程序使用该表达式将变量设置为起始值,然后用该变量计算循环周期。
test-expression(测试表达式)决定循环体是否被执行。通常,这个表达式是关系表达式,即对两个值进行比较。这个例子将i的值同5进行比较,看i是否小于5。如果比较结果为真,则程序将执行循环体。实际上,C++并没有将test-expression的值限制为只能为真或假。可以使用任意表达式,C++将把结果强制转换为bool类型。因此,值为0的表达式将被转换为bool值false,导致循环结束。如果表达式的值为非零,则被强制转换为 bool值 true,循环将继续进行。程序2通过将表达式i用作测试条件来演示了这一特点。更新部分的i--与i++相似,只是每使用一次,i值就减1。
/ / num_test.cpp -- use numeric test in for loop #include <iostream> int main ( ) { using namespace std; cout << "Enter the starting countdown value: "; int limit ; cin >> limit ; int i; for (i = limit; i; i--) //quits when i is o cout << "i = " << i << " \n" ; cout << "Done now that i = " << i << "\n" ; return 0 ; }
该程序的输出:
程序二
注意,循环在i变为0后结束。
关系表达式(如 i<5)是如何得到循环终止值0的呢?在引入 bool类型之前,如果关系表达式为true,则被判定为1;如果为 false,则被判定为0。因此,表达式3<5的值为1,而5<5的值为0。然而,C++添加了bool类型后,关系表达式就判定为bool字面值true和 false,而不是1和0了。这种变化不会导致不兼容的问题,因为C++程序在需要整数值的地方将把 true和false分别转换为1和0,而在需要bool值的地方将把0转换为false,非0转换为true。
for 循环是入口条件(entry-condition)循环。这意味着在每轮循环之前,都将计算测试表达式的值,当测试表达式为false时,将不会执行循环体。例如,假设重新运行程序清单5.2中的程序,但将起始值设置为0,则由于测试条件在首次被判定时便为false,循环体将不被执行:
update-expression(更新表达式)在每轮循环结束时执行,此时循环体已经执行完毕。通常,它用来对跟踪循环轮次的变量的值进行增减。然而,它可以是任何有效的C++表达式,还可以是其他控制表达式。这使for循环的功能不仅仅是从0数到5。
然后今天就讲到这里啦,大家记得点赞收藏,分享转发,关注小哥哥哦! 最后,如果你想学或者正在学C/C++编程,可以加入小编的编程学习C/C++企鹅圈