主要内容 #
1. 什么是循环 #
在今天的大师码课程中,我们来介绍循环。首先,我们来看一下,身边的“循环”。
在科学技术中的“循环”。
2. while #
2.1 while 基本结构 #
在 C++ 中,使用单词 while 表示循环。
while(表达式) // 循环启动的“控制开关”
{
// 表达式为真,则执行“循环体”
}
while(表达式) // 循环启动的“控制开关”
{
// 表达式为真,则执行“循环体”
}
while(表达式) // 循环启动的“控制开关” { // 表达式为真,则执行“循环体” }
下面来看一个例子,请分析一下,这个循环什么时候结束呢?
// 从 0 数到 …
int i(0);
while(true)
{
std::cout<< i << " 只羊。" << std::endl; // 这个程序“失眠”了。
i = i + 1;
}
// 从 0 数到 …
int i(0);
while(true)
{
std::cout<< i << " 只羊。" << std::endl; // 这个程序“失眠”了。
i = i + 1;
}
// 从 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; // 退出 语句
}
int i(0);
while(true)
{
std::cout<< i << " 只羊。" << std::endl;
i = i + 1;
if(i > 10)
break; // 退出 语句
}
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;
}
}
#include < iostream >
using namespace std;
int main()
{
cout << "请输入一个整数:" << endl;
int i(0);
cin >> i;
while(i)
{
std::cout<< i << " 只羊。" << std::endl;
i = i - 1;
}
}
#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;
// 原始规则
1 对应 true;
0 对应 false;
// 受到“自动类型转换”的影响
大于等于 1 的所有整数, 对应 true; // 但是,这并不意味上述的规则失效了。请注意。
小于等于 0 的所有整数, 对应 false;
// 原始规则 1 对应 true; 0 对应 false; // 受到“自动类型转换”的影响 大于等于 1 的所有整数, 对应 true; // 但是,这并不意味上述的规则失效了。请注意。 小于等于 0 的所有整数, 对应 false;
所以,假如输入 10,则 while(i) 处于条件成立的状态。循环也就启动了。
问题 2 :
- 2. 这个 while 没有退出判断,那不是“死循环”了吗?
在 while 循环中,每次循环前,此条件都会被检查一次。如果条件成立,则执行一次。
所以,条件既可以作为循环的启动条件,也可以作为循环的终止条件。
在这个例程中,当 i 变为 0 时,由于受到“自动类型转换”的影响,
条件不再成立。循环终止。
思考:
假如输入 10 ,上述的循环将执行多少次?
(答案是 10 次)