C++ Primer Plus 预习(五) for循环

for循环

1-n的循环

C++最简单的循环,也是要记住的,就是循环n次,代码如下:

int n = 10; //n表示循环次数
for(int i = 1; i <= n; i++)
{
    cout << i << ' '; //可以书写任意语句块
}
//输出结果:1 2 3 4 5 6 7 8 9 10

现在看一下for循环的格式,for(语句a; 语句b; 语句c),必须由两个分号隔开。语句a是初始化语句,只执行一次;语句b是判断条件,只要为true就执行代码块一次;执行完代码块一次之后,执行语句c,是循环的更新,执行完语句c之后,循环执行语句b。循环结束的条件就是语句b判断条件为false,上面的例子中,最后一次循环i变为11,语句块b判断为false,循环结束。
for语句和if语句一样,只能影响到离它最近的一条语句,所以如果语句块超过一句,就要用大括号括起来。


初始化语句中的变量释放

先看下面的代码:

#include <iostream>
using namespace std;
int main()
{
    int n = 10; //n表示循环次数
    for(int i = 1; i <= n; i++)
    {
        cout << i << ' '; //可以书写任意语句块
    }
    cout << i;

    return 0;
} 

按理来说,i在循环结束时的值为11,输出时应为11,但编译不通过,显示变量i没有被定义,这样的原因是:i在for循环中进行定义,属于局部变量,i的作用范围就是for语句中,一旦循环结束,变量i的内存空间就被编译器释放,在循环外调用自然会出错。
需要注意,有些编译器(如VC++ 6.0)并不会释放变量i的空间,同时VC++6.0 BUG较多,所以不推荐使用VC++ 6.0。


循环的嵌套

循环和if else一样也可以一层一层地嵌套,循环的嵌套只是把大循环的循环体语句中也添加循环而已,下面看一个例子:

#include <iostream>
using namespace std;
int main()
{
    for(int i = 1; i <= 10; i++) //循环1 
    {
        cout << "循环1:" << i << "   (";
        for(int j = 1; j <= 5; j++) //循环2 
        {
            cout << "循环2:" << j << ' ';
        }
        cout << ")   结束一次循环1" << endl;
    }

    return 0;
} 

代码执行结果:
for循环嵌套
从执行结果可以清晰地看出循环嵌套的执行顺序,在一次大循环中,每次都执行一遍小循环。


用break和continue来结束循环

在循环中,可以用一句 break; 来结束整个循环,常常配合if else语句来控制循环结束条件。举个例子,求10! 以内大于500的最小阶乘,示例代码如下:

#include <iostream>
using namespace std;
int main()
{   
    int f = 1; // 阶乘的值
    for(int i = 1; i <= 10; i++) 
    {
        f = f * i; //i的阶乘
        if(f > 500) //如果有阶乘大于500
        {
            cout << i << "! = " << f << endl; //输出i的阶乘
            break; //结束循环
        }
    }

    return 0;
} 

我们得到的输出结果是:6! = 720 ,得到了最小值。
我们可以用一句 continue;跳过当前这次循环。举一个相似的例子,求10! 以内所有大于500的阶乘,示例代码如下:

#include <iostream>
using namespace std;
int main()
{   
    int f = 1; //阶乘的值
    for(int i = 1; i <= 10; i++)
    {
        f = f * i; //i的阶乘
        if(f <= 500) //如果有阶乘小于等于500
        {
            continue; //跳过当前的循环,不执行后面的代码
        }
        cout << i << "! = " << f << endl; //输出i的阶乘
    }

    return 0;
} 

得到的输出结果:

6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
原文链接:加载失败,请重新获取