备战大晨7月 GESP C++ 1级(8):if-else 分支结构,大晨终于开窍了

备战大晨7月 GESP C++ 1级(8):if-else 分支结构,大晨终于开窍了
强仔上篇说到,大晨学完顺序结构,突然冒出一句:”爸,分支是啥?能吃吗?”
我当时差点喷了口茶。
顺序结构学会了,但远远不够
前面几篇,大晨跟着《一本通·编程启蒙C++版》把顺序结构啃下来了——输入、计算、输出,一条线走到底。说实话,顺序结构本身不难,大晨花了大概 6 天基本掌握,做了 32 道课后题,正确率 85% 左右。
但问题来了。
有一天练习题出了这么一道:输入一个整数,如果是正数就输出”正数”,否则输出”非正数”。
大晨盯着屏幕看了 3 分钟,转头问我:”爸,这程序怎么知道该输出哪个?之前学的都是从头到尾一条路啊。”
好问题。这正好是分支结构的用武之地。
用生活讲分支,大晨秒懂
我没急着讲语法,先拿生活举例。
“大晨,你早上出门,如果下雨带伞,如果不下雨就不带,对吧?”
“对啊。”
“这就是分支。程序运行到某个地方,要根据条件做判断——条件成立走一条路,不成立走另一条路。这就是 if-else。”
大晨眼睛一亮:”哦!就像我在学校,如果考 90 分以上妈妈奖励冰淇淋,否则没有。”
没错,这不就是 if(score >= 90) 嘛。
if 语句:最简单的分支
先从最简单的 if 讲起。语法很简单:
1 | if (条件) { |
我让大晨写了个小程序——输入考试成绩,如果大于等于 90 就输出”优秀”:
1 |
|
大晨敲完运行,输入 95,屏幕弹出”优秀”,小脸直接笑开了花。
“爸,我输入 85 呢?”
“那你看看屏幕。”
啥也没输出。这就是单 if——条件不满足就什么都不干,程序直接跳过。
if-else:两条路都安排上
单 if 只管条件成立的情况,但很多时候我们需要”否则”怎么办。这就轮到 if-else 上场了。
1 | if (条件) { |
我把刚才那道课后题让他重写——输入一个整数,正数输出”正数”,否则输出”非正数”:
1 |
|
大晨这回试了好几个数:5、-3、0,结果都对。他特别兴奋:”爸,这程序会做选择了!”
对,这就是分支的精髓——程序不再是”一根筋”,而是能根据不同情况做不同的事。
两个坑,大晨踩了俩
学 if-else 不难,但细节容易出错。大晨踩了两个坑:
坑一:== 写成 =。 大晨写 if (n = 0),编译器没报错,但逻辑全乱了。我跟他解释,= 是赋值,== 才是判断相等。他改完之后嘟囔了一句:”C++ 这个设计也太坑了吧。”
坑二:if 后面多加了分号。 if (n > 0); 这样写,分号直接把 if 语句结束了,大括号里的代码无论如何都会执行。大晨 debug 了 10 分钟才发现。
这两个坑,我自己当年学 C 也踩过。所以新手踩坑太正常了,踩了才知道疼,疼了才记得住。
小结与下篇预告
这篇大晨学了 if-else 分支结构,做了 18 道练习题,正确率提升到 88% 左右。if-else 的核心就一句话:条件成立走 if,不成立走 else,程序终于有了”判断力”。
但很快大晨就发现一个问题——如果条件不只是两种情况呢?比如成绩分优秀、良好、及格、不及格四档,该怎么写?
大晨试了半天,最后抬头问我:”爸,if 里面能再套一个 if 吗?”
这个问题,咱们下篇聊。
免责声明:本系列文章仅为本人陪孩子学习信奥的真实记录,不构成任何教学建议。孩子进度因人而异,代码示例仅供参考,如有错误欢迎指正。


