GESP C++ 二级 · 自学讲义 ②(共 4 讲)

分支 · 循环 · 读代码画变量表

这是二级最核心的一讲。分支和循环是所有编程题的骨架,读代码题也全靠它。

本讲学完你能

一、分支:让程序“做选择”

1. 基本结构

if (条件) {
    // 条件成立时做这里
} else if (另一个条件) {
    // 上面不成立、这个成立时做这里
} else {
    // 都不成立时做这里
}
比较与逻辑运算
易错

2. 嵌套分支

if (score >= 90) cout << "A";
else if (score >= 80) cout << "B";
else if (score >= 60) cout << "C";
else cout << "D";
小贴士else if 串起来,从大到小(或从小到大)判断,顺序别乱,否则会提前命中。

二、循环:让程序“重复做”

1. for 循环

for (int i = 1; i <= n; i++) {
    cout << i << " ";
}
// 输出 1 2 3 ... n

for 三部分:① 初始化 int i=1② 条件 i<=n(成立才继续)→ ③ 更新 i++(每轮末尾执行)。

2. while 循环

int i = 1;
while (i <= n) {
    cout << i << " ";
    i++;            // 千万别忘了让 i 变大,否则死循环!
}
循环边界:少一/多一

这是二级失分重灾区。看清楚 < 还是 <=

写法循环次数i 取到
for(i=1;i<=n;i++)n 次1 ~ n
for(i=0;i<n;i++)n 次0 ~ n-1
for(i=1;i<n;i++)n-1 次1 ~ n-1

写循环前先问自己:我要循环几次?i 从几到几?

3. break 与 continue

三、二重循环(行 × 列)

外层管,内层管。打印一个 3 行 4 列的星号矩形:

for (int i = 1; i <= 3; i++) {       // 第 i 行
    for (int j = 1; j <= 4; j++) {   // 第 j 列
        cout << "*";
    }
    cout << "\n";                     // 每行末尾换行
}
记住内层循环跑完一整遍,外层才走一步。换行 "\n" 写在内层循环外面、外层里面。第 4 讲会专门讲各种图形。

四、读代码题:画变量表

读代码题不要靠脑子硬想,一定动手画表:每执行一行,把变量的新值写下来。这样几乎不会错。

例题
int s = 0;
for (int i = 1; i <= 4; i++) {
    s = s + i;
}
cout << s;

逐轮画变量表:

is = s + is 现在
10+11
21+23
33+36
46+410

循环结束(i 变 5 不满足 ≤4),输出 s = 10

五、自测(先想,再点开看答案)

Q1. for(int i=0;i<5;i++) 循环体执行几次?i 最后一次是几?

看答案5 次;最后一次 i=4(i=5 时条件不成立,不执行)。

Q2. 下面输出什么?
int s=0; for(int i=1;i<=3;i++) for(int j=1;j<=2;j++) s++; cout<<s;

看答案6。外层 3 次 × 内层 2 次 = 6 次 s++

Q3. 判断 x 是否在 1 到 100 之间,正确写法是?

看答案if (x >= 1 && x <= 100)。不能写 1<=x<=100

Q4. 用变量表算:int a=1; for(int i=1;i<=3;i++) a=a*2; cout<<a;

看答案i=1:a=2;i=2:a=4;i=3:a=8。输出 8。

Q5. while 循环里忘了写 i++ 会怎样?

看答案条件永远成立 → 死循环(程序卡住/超时)。

六、速记卡