← 课程目录
第 5 讲 模块二:让程序做判断

布尔与单分支判断

5 / 24
💡
本节课目标
今天你会认识只有 true / false 两个值的 bool 类型, 用比较运算符写出“条件”,理解条件本身就是一个值, 再用 if / else 让程序根据条件走不同的路,最后做出奇偶判断器和成年判断器。
开场

程序学会“看情况办事”

📖 理论讲解

为什么需要判断

前四节课的程序都是从头跑到尾,每一行都会执行。 但现实里很多事要看情况:分数够 60 才算及格,年龄满 18 才算成年。

要让程序学会“如果……就……”,先得有办法表达“对还是错”。 这就是今天的起点——bool

第一段

bool:只有两个值的类型

📖 理论讲解

true 和 false

bool(布尔)是一种特殊的类型,它的值只有两个true(真)和 false(假)。就像一个只有“开 / 关”的开关。

Python

Python:首字母大写

is_raining = True

is_sunny = False

VS
C++

C++:全小写

bool isRaining = true;

bool isSunny = false;

bool_basic.cpp CPP
#include <iostream>

int main() {
    bool isRaining = true;
    bool isSunny   = false;

    std::cout << isRaining << std::endl;   // 输出 1
    std::cout << isSunny   << std::endl;   // 输出 0
    return 0;
}
⚠️
坑:输出 bool 看到的是 1 和 0
std::cout 输出 bool 时,true 显示成 1false 显示成 0不是文字 “true” / “false”。 这很正常,先记住:1 就是真,0 就是假
💡
一点历史:布尔类型来得很晚
有意思的是,C 语言早期根本没有布尔类型,程序员只能用 int 凑合—— 0 当假、非 0 当真。直到 1999 年的 C99 标准,C 才迟迟补上布尔类型 (底层叫 _Bool,还要包含 <stdbool.h> 才能用 bool 这个名字)。 而 C++ 从第一个标准 C++98 起就内置了 booltrue / false 都是现成的关键字。 这又是一处“C++ 比 C 更进一步”的小例子——还记得第 1 讲讲的 ++ 吗?
第二段

比较运算符:产生 bool 的“问句”

📖 理论讲解

六个比较运算符

比较两个数,会得到一个 bool 结果(成立是 true,不成立是 false):

运算符含义示例结果
==是否相等3 == 3true
!=是否不相等3 != 5true
>大于5 > 8false
<小于5 < 8true
>=大于等于6 >= 6true
<=小于等于6 <= 5false
📖 理论讲解

关键认知:条件本身就是一个值

5 > 3 不只是写在 if 后面的“零件”——它本身会算出一个 bool 值, 就像 2 + 3 会算出 5 一样。

所以你完全可以把比较的结果存进变量,或者直接打印出来:

condition_is_value.cpp CPP
bool result = (5 > 3);        // 5 > 3 成立,result 就是 true
std::cout << result << std::endl;      // 输出 1

bool isEqual = (2 + 2 == 5);  // 不成立,isEqual 就是 false
std::cout << isEqual << std::endl;     // 输出 0
为什么要强调这一点
想通“条件 = 一个值”,后面的逻辑运算符、循环条件、返回 true/false 的函数都会变得顺理成章。 这是这节课最重要的一句话。
⚡ 动手实操 约 8 分钟

猜输出:先猜,再验证

下面每行会输出 1 还是 0?先在纸上写答案,再运行验证:

guess.cpp CPP
std::cout << (7 > 4)  << std::endl;    // 1
std::cout << (7 < 4)  << std::endl;    // 0
std::cout << (3 == 3) << std::endl;    // 1
std::cout << (3 != 3) << std::endl;    // 0
std::cout << (5 >= 5) << std::endl;    // 1
💡
提示
把每个括号里的比较先在心里判断“成立 / 不成立”,成立就是 1,不成立就是 0
第三段

== 和 = 的天坑

📖 理论讲解

一个等号 vs 两个等号

这是 C++ 初学者最经典的错误:

  • =(一个等号)是赋值:把右边装进左边
  • ==(两个等号)是比较:判断两边是否相等

判断条件里要用的是 ==。如果手滑写成 =,麻烦的是——它通常不报错

equal_trap.cpp CPP
int x = 10;

if (x == 5) {  // ✓ 比较:x 是不是等于 5(这里不成立)
    // ...
}

if (x = 5) {   // ✗ 赋值:把 5 装进 x,结果永远成立!
    // ...
}
⚠️
为什么 if (x = 5) 永远成立
x = 5 先把 5 装进 x,这个赋值的“结果”就是 5, 而非零都算真——于是条件永远成立。Python 里写 if x = 5 会直接语法报错, C++ 却让它过,所以更要小心。记住:比较一定用两个等号
第四段

if:满足条件才做

📖 理论讲解

if 的写法

if 的结构是:圆括号 ( ) 里放条件,大括号 里放条件成立时要做的事。 条件为 true 才执行大括号里的代码;为 false 就整段跳过。

Python

Python:冒号 + 缩进

if score >= 60:

print("及格")

VS
C++

C++:圆括号 + 大括号

if (score >= 60)

std::cout << "及格";

if_basic.cpp CPP
#include <iostream>

int main() {
    int score;
    std::cout << "请输入分数:";
    std::cin >> score;

    if (score >= 60) {
        std::cout << "及格了!" << std::endl;
    }

    std::cout << "程序结束" << std::endl;   // 这一行总会执行
    return 0;
}
大括号建议总是写
如果大括号里只有一行,C++ 允许省略 。但初学阶段建议每次都写上—— 省略后很容易因为缩进产生误会,是另一个常见坑。
第五段

if / else:两条路选一条

📖 理论讲解

else:否则就……

只用 if 时,条件不成立就什么都不做。加上 else,就能处理“否则”的情况—— 两条路,必走其中一条。注意 else 后面不带条件

if_else.cpp CPP
if (score >= 60) {
    std::cout << "及格" << std::endl;
} else {
    std::cout << "不及格" << std::endl;     // else 不带条件
}
⚡ 动手实操 约 12 分钟

练习:及格判断器

写一个完整程序:

  1. 提示并用 cin 读入一个分数(int
  2. if / else 判断:>= 60 输出“及格”,否则输出“不及格”
  3. 最后再输出一行“判断完毕”,确认它不管走哪条路都会执行
进阶
把及格线改成一个变量 int pass = 60;,条件写成 score >= pass。 这样改及格线只要改一处。
实战

动手做两个判断器

练习 5-1

奇偶判断器

读入一个整数,判断它是奇数还是偶数。回忆第 2 讲:n % 2n 除以 2 的余数, 余数为 0 就是偶数。

要求:

  • 条件用 n % 2 == 0(注意是两个等号!)
  • if / else 分别输出“是偶数 / 是奇数”

参考写法:

odd_even.cpp CPP
#include <iostream>

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

    if (n % 2 == 0) {
        std::cout << n << " 是偶数" << std::endl;
    } else {
        std::cout << n << " 是奇数" << std::endl;
    }
    return 0;
}
练习 5-2

成年判断器 + 比大小

分两小题,任选或都做:

  • 成年判断:读入年龄,>= 18 输出“已成年”,否则输出“未成年”
  • 比大小:读入两个数 ab,用 if / else 输出较大的那个

挑战:比大小时,如果 ab 相等会发生什么?试着让程序遇到相等时输出“两个一样大”。

💡
想想看
“相等”这种第三种情况,光靠 if / else 两条路够不够用?这正是下节课要解决的问题。
学有余力:让 bool 显示成 true / false
觉得输出 1 / 0 不够直观?在输出前加一句 std::cout << std::boolalpha;, 之后的 bool 就会显示成 true / false
boolalpha.cpp CPP
std::cout << std::boolalpha;            // 这句之后,bool 显示成 true / false
std::cout << (5 > 3) << std::endl;      // 现在输出 true,不再是 1
收尾

小结

📖 理论讲解

这节课你掌握了

能力用到的工具
表达“对 / 错”booltrue / false
写出条件== != > < >= <=
满足条件才做if (条件)
两条路选一条if / else

最该记住的一句话:条件本身就是一个 bool 值;最该警惕的一个坑:比较用两个等号 ==

💡
下节课预告
现在我们只能在两条路里选。但很多判断有三条、四条路: 成绩分 A / B / C / D / E,年龄分儿童 / 少年 / 成年。 下节课用 else if 做多分支,再用 &&|| 把多个条件组合起来。