if 到 while,再到 for本课定位:前六课写的程序都有一个共同点:每句话只执行一次。可现实里很多任务天生就是重复的——把 1 到 100 打印出来、把 1 到 n 加起来、数一数 1 到 n 里有几个是 3 的倍数。这些活交给计算机,几行就能办完,靠的就是循环。本课先想清楚“为什么要循环”,再一步步把已经学过的
if改造成while,最后升级成更紧凑的for;然后用循环做三件最常见的事:输出、求和、求个数。建议时长:90 分钟(含课堂练习)。
前置条件:会写完整的
if/else;会用关系运算符>、<、>=、<=、==和%判断整除;能用cin/cout完成输入输出。
前六课:一句一句往下走,每句只做一次
读入 n ──► 判断 ──► 输出 ──► 结束
这节课:让某一段话自己重复
┌───────────────┐
│ 循环体 │◄─────┐
└───────┬───────┘ │
│ │ 条件还成立?
▼ │
检查条件 ──────────┘
│
不成立
▼
接着往下走
if ──► while ──► for
if :条件成立,做一次
while :条件成立就做一次,做完回来再问一次……
for :把“起点、条件、每轮怎么变”三件事收进一行
学完本课,学员要能用一句话说清楚:循环就是“条件成立就做一遍,做完回到条件再问一次,直到条件不成立为止”。
要求:把 1 打印出来。我们已经会写了:
#include<iostream>
using namespace std;
int main() {
int i = 1;
if (i <= 5) { // 1 <= 5 成立
cout << i << endl; // 输出 1
}
return 0;
}
运行结果:
1
现在把要求改成:把 1、2、3、4、5 都打印出来。用 if 只能打印一个数——因为 if 是“问一次,做一次”,做完就继续往下走了,不会回头再问。
想输出 5 个数,一个笨办法是写五遍:
int i = 1;
if (i <= 5) { cout << i << endl; }
i = i + 1;
if (i <= 5) { cout << i << endl; }
i = i + 1;
// ……一直写到 i = 5
五遍还行,可如果题目要打印到 100、到 1000 呢?这样写显然行不通。计算机最擅长的就是重复做同一件事,我们需要一种能让一段话自己转圈的写法。
if 到 while:让“做一次”变成“反复做”盯着刚才的笨办法,会发现它反复在做两件事:
i <= 5 还成立吗?”;i,然后让 i 往前走一步。既然这两步要重复,就干脆把它们圈成一个圈。把 if 换成 while,把“往前走一步”也写进圈里,就得到:
#include<iostream>
using namespace std;
int main() {
int i = 1;
while (i <= 5) { // 条件成立,就进圈做一遍
cout << i << endl;
i = i + 1; // 关键:让 i 往前走
}
return 0;
}