C++旧版课程库
C++第 1 期查看课程总览

022 循环语句while嵌套

主要内容

1. ++ 和 -- 符号


// demo code from Dashima
#include < iostream >
using namespace std;
int main()
{
    int i(0);
    while(true)
    {
        cout << i << endl;
        i = i + 1;
        if(i <= 20)
            break;
    }
    return 0;                     
}
这个循环可以执行 20 次。 其中,可以这样改写:

// demo code from Dashima
#include < iostream >
using namespace std;
int main()
{
    int i(0);
    while(true)
    {
        cout << i << endl;
        i++;             // 新语法,表示 i = i + 1;
        if(i <= 20)
            break;
    }
    return 0;                     
}
i++ 这种写法,可以提高书写的效率,是一种很常用的写法。 除此以外,还可以这样改写:

// demo code from Dashima
#include < iostream >
using namespace std;
int main()
{
    int i(20);
    while(i--) // 新语法,表示 i = i - 1;
    {
        cout << i << endl;
    }
    return 0;                     
}
小结:

i++; // 等价于 i = i + 1;
i--; // 等价于 i = i - 1;

2. 循环嵌套

while 循环的嵌套比较容易,请看示例程序:

// demo code from Dashima
#include < iostream >
using namespace std;
int main()
{
    int i(0), s(0);
    while(i < 100)
    {
        int j(0);
        while(j < 100) // 在 while 内,嵌套一个 while 
        {
            j++;
            s++;
        }
        i++;
    }

    cout << "i = " << i << endl; // 请问 i 的值是多少?
    cout << "s = " << s << endl; // 请问 s 的值是多少?

    return 0;                     
}
答案:

i=100;
s=10000;
循环的嵌套,也是一种很典型的程序结构。 举一个很典型的应用场景:写作文。 作文是从左往右,一行一行写的,所以可以描述为下面的过程:

1. 写第一行
        写第 1 个格子;
        写第 2 个格子;
        写第 3 个格子;
        写第 4 个格子;
        ...
        写第 9 个格子;// 假设一行是9个格子
2. 写第二行
        写第 1 个格子;
        写第 2 个格子;
        写第 3 个格子;
        写第 4 个格子;
        ...
        写第 9 个格子;// 假设一行是9个格子
3. 写第三行
        写第 1 个格子;
        写第 2 个格子;
        写第 3 个格子;
        写第 4 个格子;
        ...
        写第 9 个格子;// 假设一行是9个格子
...
用 while 的嵌套可以这样描述:

int j(0);
while(j < 100)
{
    j++;          // 移动到下一行

    int i(0);
    while(i < 10) 
    {
        i++;      // 移动到下一个格子
        写一个字;
    }
}

习题

课后练习