跳转至

for 循环

同一件事,要重复做很多次,就可以用循环。

基本语法

for (循环变量初始化; 循环条件; 每轮循环结束操作) {
    // 循环体,要重复执行的语句
}

观察循环的执行过程

for (int i = 1; i <= 3; i++) {
    cout << i << ' ';
}

输出 1 2 3。

  1. 先执行 int i = 1,只执行一次。
  2. 判断 i <= 3,成立就进入循环体,不成立就结束循环。
  3. 执行循环体,输出当前的 i。
  4. 执行 i++,再回到第 2 步。

注意:不是先执行 i++,再执行循环体。

循环范围与次数

从 0 循环到 n-1

for (int i = 0; i < n; i++) {
    cout << i << ' ';
}

从 1 循环到 n

for (int i = 1; i <= n; i++) {
    cout << i << ' ';
}

对于非负整数 n,这两种写法,循环体都执行 n 次,但 i 的取值不同。

从 n 倒着循环到 1

for (int i = n; i >= 1; i--) {
    cout << i << ' ';
}

循环条件一开始就不成立,循环体一次也不执行。

自增自减

i++; // 自增,相当于i = i + 1
i--; // 自减,相当于i = i - 1

i++ 与 ++i 的区别

两种写法,都会让 i 加 1。区别在于,表达式给出去的是哪个值。

int i = 3;
int a = i++; // a得到3,i变成4
int i = 3;
int a = ++i; // i先变成4,a得到4

对于这里的普通整数,单独写在 for 的更新位置时,i++ 和 ++i 效果相同。

常见错误

for 后面,不要随手加分号

for (int i = 1; i <= n; i++); // 错误:循环体变成了空语句
{
    cout << "Hello"; // 这里不受循环控制,只执行一次
}

大括号放在同一行,也一样是错的:

for (int i = 1; i <= n; i++); { // 错误:循环体变成空语句
    cout << "Hello"; // 这里只执行一次
}

循环变量的使用范围

for (int i = 1; ...) 中定义的 i,只能在这个循环里使用,出了循环就不能再用。

检查起点、终点、每次怎么变

i < n 和 i <= n,可能差一轮。条件一直成立,循环就停不下来,叫作死循环。

更新操作也要检查范围,不能只看循环体里的计算有没有超出范围。

注意大括号和缩进。

多条语句要一起重复执行,就都放进循环体里。