true / false 两个值的 bool 类型,
用比较运算符写出“条件”,理解条件本身就是一个值,
再用 if / else 让程序根据条件走不同的路,最后做出奇偶判断器和成年判断器。
true / false 两个值的 bool 类型,
用比较运算符写出“条件”,理解条件本身就是一个值,
再用 if / else 让程序根据条件走不同的路,最后做出奇偶判断器和成年判断器。
前四节课的程序都是从头跑到尾,每一行都会执行。 但现实里很多事要看情况:分数够 60 才算及格,年龄满 18 才算成年。
要让程序学会“如果……就……”,先得有办法表达“对还是错”。
这就是今天的起点——bool。
bool(布尔)是一种特殊的类型,它的值只有两个:
true(真)和 false(假)。就像一个只有“开 / 关”的开关。
Python:首字母大写
is_raining = True
is_sunny = False
C++:全小写
bool isRaining = true;
bool isSunny = false;
#include <iostream>
int main() {
bool isRaining = true;
bool isSunny = false;
std::cout << isRaining << std::endl; // 输出 1
std::cout << isSunny << std::endl; // 输出 0
return 0;
} std::cout 输出 bool 时,true 显示成 1、
false 显示成 0,不是文字 “true” / “false”。
这很正常,先记住:1 就是真,0 就是假。
int 凑合——
0 当假、非 0 当真。直到 1999 年的 C99 标准,C 才迟迟补上布尔类型
(底层叫 _Bool,还要包含 <stdbool.h> 才能用 bool 这个名字)。
而 C++ 从第一个标准 C++98 起就内置了 bool,true / false 都是现成的关键字。
这又是一处“C++ 比 C 更进一步”的小例子——还记得第 1 讲讲的 ++ 吗?
比较两个数,会得到一个 bool 结果(成立是 true,不成立是 false):
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
== | 是否相等 | 3 == 3 | true |
!= | 是否不相等 | 3 != 5 | true |
> | 大于 | 5 > 8 | false |
< | 小于 | 5 < 8 | true |
>= | 大于等于 | 6 >= 6 | true |
<= | 小于等于 | 6 <= 5 | false |
5 > 3 不只是写在 if 后面的“零件”——它本身会算出一个 bool 值,
就像 2 + 3 会算出 5 一样。
所以你完全可以把比较的结果存进变量,或者直接打印出来:
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 下面每行会输出 1 还是 0?先在纸上写答案,再运行验证:
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。
这是 C++ 初学者最经典的错误:
=(一个等号)是赋值:把右边装进左边==(两个等号)是比较:判断两边是否相等
判断条件里要用的是 ==。如果手滑写成 =,麻烦的是——它通常不报错:
int x = 10;
if (x == 5) { // ✓ 比较:x 是不是等于 5(这里不成立)
// ...
}
if (x = 5) { // ✗ 赋值:把 5 装进 x,结果永远成立!
// ...
} x = 5 先把 5 装进 x,这个赋值的“结果”就是 5,
而非零都算真——于是条件永远成立。Python 里写 if x = 5 会直接语法报错,
C++ 却让它过,所以更要小心。记住:比较一定用两个等号。
if 的结构是:圆括号 ( ) 里放条件,大括号 里放条件成立时要做的事。
条件为 true 才执行大括号里的代码;为 false 就整段跳过。
Python:冒号 + 缩进
if score >= 60:
print("及格")
C++:圆括号 + 大括号
if (score >= 60)
std::cout << "及格";
#include <iostream>
int main() {
int score;
std::cout << "请输入分数:";
std::cin >> score;
if (score >= 60) {
std::cout << "及格了!" << std::endl;
}
std::cout << "程序结束" << std::endl; // 这一行总会执行
return 0;
} 。但初学阶段建议每次都写上——
省略后很容易因为缩进产生误会,是另一个常见坑。
只用 if 时,条件不成立就什么都不做。加上 else,就能处理“否则”的情况——
两条路,必走其中一条。注意 else 后面不带条件。
if (score >= 60) {
std::cout << "及格" << std::endl;
} else {
std::cout << "不及格" << std::endl; // else 不带条件
} 写一个完整程序:
cin 读入一个分数(int)if / else 判断:>= 60 输出“及格”,否则输出“不及格”int pass = 60;,条件写成 score >= pass。
这样改及格线只要改一处。
读入一个整数,判断它是奇数还是偶数。回忆第 2 讲:n % 2 是 n 除以 2 的余数,
余数为 0 就是偶数。
要求:
n % 2 == 0(注意是两个等号!)if / else 分别输出“是偶数 / 是奇数”参考写法:
#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;
} 分两小题,任选或都做:
>= 18 输出“已成年”,否则输出“未成年”a、b,用 if / else 输出较大的那个挑战:比大小时,如果 a 和 b 相等会发生什么?试着让程序遇到相等时输出“两个一样大”。
if / else 两条路够不够用?这正是下节课要解决的问题。
1 / 0 不够直观?在输出前加一句 std::cout << std::boolalpha;,
之后的 bool 就会显示成 true / false。
std::cout << std::boolalpha; // 这句之后,bool 显示成 true / false
std::cout << (5 > 3) << std::endl; // 现在输出 true,不再是 1 | 能力 | 用到的工具 |
|---|---|
| 表达“对 / 错” | bool、true / false |
| 写出条件 | == != > < >= <= |
| 满足条件才做 | if (条件) |
| 两条路选一条 | if / else |
最该记住的一句话:条件本身就是一个 bool 值;最该警惕的一个坑:比较用两个等号 ==。
💡 下节课预告
现在我们只能在两条路里选。但很多判断有三条、四条路:
成绩分 A / B / C / D / E,年龄分儿童 / 少年 / 成年。
下节课用 else if 做多分支,再用 &&、|| 把多个条件组合起来。