🔷 第四章 条件判断语句
📄 一句话概括

判断语句是分支结构的 C++ 写法,全是一家人:单分支 if(真才做)、双分支 if-else(二选一)、多分支 if-else if-else(逐级挑)。本节先认全三张脸、看清共同骨架,4.2.1~4.2.3 再逐个细拆。

一、共同骨架:先算条件,再看真假

三种形式长着同一副骨架:

if (条件) { ... }          // 条件是 bool 表达式

小括号里站的是第 3 章练出来的表达式——score >= 90、n % 2 != 0、a && b 都行。执行时先把条件算出一个真/假,再按真假决定走哪条路。

三条铁律(三种形式通用,后面不重复):

  1. if 后面不加分号——if (a > 5); 这个分号是空语句,等于"条件为真时什么都不干",真正的代码块反而变成无条件执行(新手第一坑,4.2.1 实验验证)。
  2. 多个语句必须加大括号——大括号圈出"条件为真时的地盘";不加的话,if 只管紧跟它的一条语句。
  3. 条件里的 == 别手滑成 =——if (a = 5) 是赋值再判真假(3.1.2 讲过),防手滑神技:常量放左边 if (5 == a)。

二、三种形式各管一摊

形式 适用场景 例
单分支 if 一件事做或不做 成绩不及格才提示
双分支 if-else 二选一,必有结果 成年/未成年
多分支 if-else if-else 多档选一 成绩分优良中差

选型心法:几条路就选第几种——但要记住多分支能覆盖前两种(if-else if-else 写成只有一级就是 if-else),反过来不行。

三、30 秒实验:验证"分号坑"

#include <iostream>
using namespace std;

int main() {
    int a = 3;
    if (a > 5);                 // 注意这个分号!
        cout << "大于5" << endl; // 它其实不受 if 管
    return 0;
}

看到什么算成功:输出"大于5"——a 是 3,条件明明是假!因为分号让 if 管了一条空语句,下一行成了普通语句。删掉分号再跑,什么都不输出——这才是对的。编译器对这种写法常给警告("空语句"),警告别无视。

四、常见误区

  1. "if 和 else 中间可以再插一句独立语句"——不行。if 块和 else 必须紧挨着,中间插语句会报错(else 找不到主)。
  2. "条件写反了也能跑,没关系"——能跑但结果错。判断逻辑是"业务级错误",编译器帮不了你,必须自己验(用两组输入各跑一遍)。
  3. "三种形式是三个不相关的东西"——是一家人:多分支是双分支的 else 里再套 if 的简化写法(else if 连写的糖),4.5 嵌套会揭底。
自测三问(点开对答案) 1. `if (条件)` 里的条件是什么类型的东西?——能算出 `bool` 值的表达式(关系/逻辑运算符搭的)。 2. `if (a > 5);` 的问题在哪?——分号是空语句,`if` 管住了它,真正的代码反而无条件执行。 3. 什么时候用双分支而不是单分支?——真、假两种情况**都要做事**(只管"做或不做"就用单分支)。

相关笔记