备战大晨7月 GESP C++ 1级(7):if-else 分支结构,程序终于"会做选择"了

上回说到

上一篇带大晨刷完了顺序结构的练习题,加减乘除、变量赋值,基本能独立敲出来了。我当时说”下一篇咱们该上分支了”,结果大晨问我:”爸,分支是啥?能吃吗?”

好家伙,你要不说,我还真以为能吃

什么是分支结构

我跟大晨解释:你每天出门上学,如果下雨就带伞,不下雨就不带——这就是分支。程序也一样,遇到某个条件成立就做 A,不成立就做 B,这就是 if-else

大晨恍然大悟:”就跟妈妈说,如果考 90 分以上就买乐高,否则就买练习册一样?”

准确,而且扎心。

if-else 的基本写法

C++ 里 if-else 的长这样:

1
2
3
4
5
if (条件) {
// 条件成立时执行
} else {
// 条件不成立时执行
}

大晨第一次注意花括号,问我这俩符号干嘛的。我说就像你家院子的围墙,把属于 if 的代码圈起来,别让它们跑到 else 那边去。

大晨说:”那围墙不结实的话,代码会翻墙跑出来吗?”

你别说,他还真问到点上了——以后讲作用域的时候再细说这个。

来一道实战题

GESP 一级常考的类型:输入一个整数,判断它是奇数还是偶数。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;

int main() {
int n;
cin >> n;
if (n % 2 == 0) {
cout << "even" << endl;
} else {
cout << "odd" << endl;
}
return 0;
}

大晨看到 n % 2 == 0 的时候卡住了,问我这个 % 是啥。我说就是取余数,比如 5 颗糖分给 2 个人,每人 2 颗剩 1 颗——那个”剩 1 颗”就是 5 % 2 的结果。

“那 == 呢?跟 = 不一样吗?”

这个问题特别重要,好多孩子在这一行栽过跟头。= 是赋值,把右边的值塞给左边;== 是判断相等,问两边是不是一样。写错一个等号,程序的行为完全变。

我让大晨故意把 == 改成 = 编译试了一次,编译器报了个 warning,他这才记住这俩真不一样。

大晨踩的坑

大晨自己敲的时候,第一次把 else 拼成了 esle,编译报错盯着屏幕找了五分钟没找出来。我说你把那一行念出来,他一念:”E-S-L-E……诶?”

拼写错误是初学者的头号敌人,没有之一。

第二个坑是 if 后面手滑多了个分号:

1
if (n % 2 == 0);  // 注意这个分号!

大晨写了这个分号,程序不管输入啥都输出 even,他一脸懵。我跟他解释,这个分号相当于 if 后面跟了一条空语句,条件成立啥也不干,然后直接往下跑到了 cout 那行。

“分号也有坏的时候啊。”大晨嘟囔了一句。

练习量

这天大晨做了 6 道 if-else 的练习题,包括判断正负数、判断闰年、比较两个数大小。前 3 道我陪着写,后 3 道自己独立完成,对了 4 道,错了 2 道——一道是 == 写成 =,一道是忘写花括号导致逻辑串了。

GESP 一级的 if-else 题目本身不难,但细节决定成败。

小结

if-else 是大晨从”线性思维”跨到”条件思维”的第一步。今天 6 道题做下来,他对条件判断有感觉了,但拼写和符号的小毛病还得多练几轮才能磨掉。

不过,在往更复杂的嵌套 if 走之前,还有个东西得先拿下——多条件判断的 else if 写法。大晨下次见面要问我的问题,估计比今天还多。

下篇咱们聊 else if 和多路分支,看看大晨能不能扛住三个以上条件的连环判断。


免责声明:本文为个人陪跑记录,非专业教学指导,代码和观点仅供参考。每个孩子学习节奏不同,请根据实际情况调整。