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

第一种形式就是光杆 if:条件为真,执行大括号里的语句;为假,整个块跳过去。它只回答"这件事做不做",不设"不做时干什么"——最简单、也最常用的一种判断。

一、语法与执行流程

if (条件) {
    语句;      // 条件为真才会执行
}
// 大括号之后,真假两路汇合,程序继续

执行顺序(对着图看):程序走到 if → 算条件 → 真:进大括号干完再出来;假:直接跳过大括号 → 从大括号后面继续往下走。

要点:

二、实例 01:判断输入的数是否为奇数

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "请输入一个整数:";
    cin >> n;

    if (n % 2 != 0) {           // 除以 2 余数不是 0,就是奇数
        cout << n << " 是奇数" << endl;
    }
    cout << "程序结束" << endl;
    return 0;
}

看到什么算成功:输入 7 输出"7 是奇数"+ "程序结束";输入 8 只输出"程序结束"。

这个实例藏着第三章的两件旧装备:

  1. % 取余(3.1.1):n % 2 得余数,余 1 是奇、余 0 是偶
  2. 为什么写 != 0 而不是 == 1?——第三章讲过 % 的符号跟被除数:输入 -7 时 -7 % 2 = -1,用 == 1 判会漏掉负奇数;!= 0 才两个都管住。(写 !(n % 2 == 0) 或位运算 n & 1 也行——后者见 3.1.5)

三、30 秒实验:负数验证

把实例里的条件改成 n % 2 == 1,分别输入 7 和 -7:

改回 != 0,两个都对。一个条件写法的对错,要拿边界输入(负数、0)验过才算数。

四、常见误区

  1. "条件为假时程序会报错"——不会,跳过是正常行为。想让"假"也干活,那是双分支的活(4.2.2)。
  2. "if 大括号里可以放变量定义,外面也能用"——不行。大括号是作用域边界(2.1.5),里面定义的变量出了括号就没了。
  3. "if (n % 2 == 1) 和 if (n % 2 != 0) 一样"——负数面前不等价(上面的实验就是铁证)。
自测三问(点开对答案) 1. 单分支 `if` 条件为假时执行什么?——跳过整个大括号,从后面继续(不报错、不干假路的事)。 2. 判奇数为什么推荐 `n % 2 != 0` 而非 `== 1`?——负奇数取余得 -1,`== 1` 会漏判。 3. `if` 块里定义的变量,块外能用吗?——不能,大括号是作用域边界。

相关笔记