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

019 循环语句while

主要内容

1. 什么是循环

在今天的大师码课程中,我们来介绍循环。首先,我们来看一下,身边的“循环”。 在科学技术中的“循环”。

2. while

2.1 while 基本结构

在 C++ 中,使用单词 while 表示循环。

while(表达式) // 循环启动的“控制开关”
{
	// 表达式为真,则执行“循环体”
}
下面来看一个例子,请分析一下,这个循环什么时候结束呢?

// 从 0 数到 …
int i(0);
while(true)
{
    std::cout<< i << " 只羊。" << std::endl; // 这个程序“失眠”了。
    i = i + 1;
}
假如硬件条件允许,这个循环可以连续运行几万年! 这种情况,被称为“死循环”。 所以,循环一般都需要一个特定的退出条件。 换句话说,也就是,循环什么时候应该结束。

2.2 while 退出条件

请看下面的代码:

int i(0);
while(true)
{
    std::cout<< i << " 只羊。" << std::endl;
    i = i + 1;
    if(i > 10) 
        break;    // 退出 语句
}
当 if 内的条件成立时,break 表示退出循环。 现在,请你用之前大师码课程学习的知识分析一下,这个循环退出时,i 的值是多少?

2.3 while 启动条件

我们再来看一下 while () 括号内的条件。
  • 注意,当条件成立时,循环启动。

#include < iostream >
using namespace std;
int main()
{
    cout << "请输入一个整数:" << endl;
    int i(0);
    cin >> i;
    while(i)
    {
        std::cout<< i << " 只羊。" << std::endl;
        i = i - 1;
    }
}
上面的这段程序,有两个奇怪的地方。
  • 1. while (i) 中的 i 是一个整数。整数可以作为条件吗?
  • 2. 这个 while 没有退出判断,那不是“死循环”了吗?
问题 1 :
  • 1. while (i) 中的 i 是一个整数。整数可以作为条件吗?
在 bool 变量一节中,我们提到了 true 对应数值 1,false 对应数值 0。 因为“自动类型转换(将在后续讲解)”,这个规则有如下的变化。

// 原始规则
1 对应 true;
0 对应 false;

//  受到“自动类型转换”的影响
大于等于 1 的所有整数, 对应 true;  // 但是,这并不意味上述的规则失效了。请注意。
小于等于 0 的所有整数, 对应 false;
所以,假如输入 10,则 while(i) 处于条件成立的状态。循环也就启动了。 问题 2 :
  • 2. 这个 while 没有退出判断,那不是“死循环”了吗?
在 while 循环中,每次循环前,此条件都会被检查一次。如果条件成立,则执行一次。 所以,条件既可以作为循环的启动条件,也可以作为循环的终止条件。 在这个例程中,当 i 变为 0 时,由于受到“自动类型转换”的影响, 条件不再成立。循环终止。 思考: 假如输入 10 ,上述的循环将执行多少次? (答案是 10 次)

习题

课后练习