45.C++for循环的组成部分

                                 5.1.1 for循环的组成部分

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值flase,导致循环结束。如果表达式的值为非零,则被强制转换为bool值true,循环将继续进行。程序通过将表达式i作为测试条件来演示了这一特点。更新部分的i--与i++相似,只是每使用一次,i值就减1或加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--)
	{
		cout<<"i="<<i<<endl;
	}
	cout<<"Done now that i = "<<i<<endl;
	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循环是入口条件循环。这意味着在每轮循环之前,都将计算测试表达式的值,当测试表达式为false时,将不会执行循环体。例如,假设重新运行程序中的程序,但将起始值设置为0,则由于测试条件在首次被判定时便为false,循环体将不被执行:

     Enter the starting countdown valse : 0

    Done now that i = 0;

    这种在循环之前进行检查的方式可避免程序遇到麻烦。

    更新表达式在每轮循环结束时执行,此时循环体已经执行完毕。通常,它用来对跟踪循环轮次的变量的值进行增减。然而,它可以是任何有效的C++表达式,还可以是其他控制表达式。这使for循环的功能不仅仅是从0数到5(这是第一个循环示例所做的工作),稍后将介绍一些例子。

       for循环体由一条语句组成,不过很快将介绍如何扩展这条规则。

    for语句看上去有些像函数调用,因为它使用一个后面跟一对括号的名称。然而,for是一个C++关键字,因此编译器不会将for视为一个函数,这还将防止将函数命名为for。

提示:C++常用的方法是,在for和括号之间加上一个空格,而省略函数名与括号之间的空格。

for (i = 6;i < 10; i++)

     smart_function(i);

  对于其他控制语句(如if和while),处理方式与for相同。这样从视觉上强化了控制语句和函数调用之间的区别。另外,常见的做法是缩进for语句体,使它看上去比较显著。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值