GESP 一级 第 08 讲:循环结构

本讲定位一级最难、也最关键的一讲。前七讲的程序,每条语句最多执行一次;从这一讲起,一段代码可以跑一万遍——这是”编程”和”照着算式抄”的分水岭。官方大纲把 forwhiledo-whilebreakcontinue 全部点名,真题里一级编程题的第 2 题几乎必然是循环题。零基础学生在这一讲的掉队率最高,原因不是语法难,而是想不清楚”同一行代码被反复执行”是怎么回事——所以本讲会用大量的手工模拟表来治这个病。

对应官方大纲:一级知识块 3「结构化程序设计」中的循环结构;知识块 4「程序的基本语句」中的 for 语句、while 语句、do-while 语句,以及 continuebreak 在循环中的应用。

前置知识:一级第 05 讲(%/++)、第 06 讲(条件表达式)、第 07 讲(分支)。

代码说明:本讲所有代码均已用 g++ 11.5(-std=c++11)编译运行验证,输出结果即为文中标注结果。


1. 先看一个不用循环做不到的题

输入一个正整数 $n$($1 \le n \le 1000$),求 $1 + 2 + 3 + \cdots + n$。

没有循环,你得写 1000 行 sum = sum + 1; sum = sum + 2; ...,而且 $n$ 是输入的,你根本不知道要写几行。

有了循环,三行搞定:

int sum = 0;
for (int i = 1; i <= n; i++) {
    sum = sum + i;
}

循环的价值:让”重复的工作”只写一遍。


2. for 循环

2.1 语法

for (初始化; 条件; 增量) {
    循环体;
}

三个部分,用两个分号隔开(注意是分号不是逗号):

部分 作用 执行次数
初始化 设置循环变量的起点 只在最开始执行一次
条件 判断要不要继续 每轮开始前判断一次
增量 改变循环变量 每轮循环体跑完后执行一次

2.2 执行流程(必须烂熟)

① 执行「初始化」(仅此一次)
        ↓
② 判断「条件」 ── 假 ──→ 跳出循环,执行后面的代码
        │
        真
        ↓
③ 执行「循环体」
        ↓
④ 执行「增量」
        ↓
     回到 ②

关键顺序:条件 → 循环体 → 增量 → 条件 → 循环体 → 增量 → ……

⚠️ 增量是在循环体之后执行的,不是之前。这决定了循环体里 i 的值。

2.3 第一个例子与手工模拟