4.1 关系运算符与bool类型

正在加载视频播放器…

GESP C++ 一级:关系运算符与 bool 类型精讲

核心目标:掌握 6 个关系运算符,理解关系表达式的值是 bool 类型,会用 true / false,能正确与 if 结合,避开 = 与 ==、连写比较等常见错误。
关系运算符用来比较,结果是 bool;true 就是 1,false 就是 0,但输出 true/false 要用 boolalpha。


一、什么是关系运算符

关系运算符用于比较两个值的大小或相等关系。

C++ 一级必须掌握的 6 个关系运算符:

运算符 名称 示例 含义
> 大于 a > b a 是否大于 b
< 小于 a < b a 是否小于 b
>= 大于等于 a >= b a 是否大于或等于 b
<= 小于等于 a <= b a 是否小于或等于 b
== 等于 a == b a 是否等于 b
!= 不等于 a != b a 是否不等于 b

注意:>= 不能写成 =>,<= 不能写成 =<。
== 是两个等号,表示判断相等;= 是一个等号,表示赋值。


二、关系表达式的结果:bool 类型

关系表达式的结果只有两种:

  • true:成立,真
  • false:不成立,假

例如:

5 > 3      // true
5 < 3      // false
5 == 5     // true
5 != 5     // false

在 C++ 中:

true 相当于 1
false 相当于 0

所以:

cout << (5 > 3) << endl;   // 输出 1
cout << (5 < 3) << endl;   // 输出 0

考试提示:cout 直接输出关系表达式时,必须加括号。
因为 << 优先级高于关系运算符。

cout << (a > b);   // 正确
cout << a > b;     // 错误,会被理解为 (cout << a) > b

三、bool 类型详解

1. bool 是什么

bool 是布尔类型,只有两个值:

true   // 真
false  // 假

声明布尔变量:

bool flag = true;
bool isEven = false;

2. bool 与整数的关系

  • true 转为整数是 1
  • false 转为整数是 0
  • 非零整数转为 bool 是 true
  • 零转为 bool 是 false

示例:

bool a = 5;      // a = true
bool b = 0;      // b = false
int x = true;    // x = 1
int y = false;   // y = 0

3. bool 的输出

默认输出:

bool flag = true;
cout << flag << endl;   // 输出 1

使用 boolalpha 输出 true/false:

cout << boolalpha << flag << endl;   // 输出 true

也可以关闭:

cout << noboolalpha << flag << endl; // 又输出 1

4. bool 的输入

bool flag;
cin >> flag;

通常输入 0 或 1:

  • 输入 0 → false
  • 输入 1 → true
  • 输入非零整数 → true

一级考试中,bool 输入了解即可,重点在关系表达式和 if 判断。


四、关系运算符与 if 结合

关系运算符最常用于 if 条件。

1. 基本用法

int a = 5, b = 3;
if (a > b) {
    cout << "a 大于 b" << endl;
}

2. if-else

int a, b;
cin >> a >> b;
if (a == b) {
    cout << "相等" << endl;
} else {
    cout << "不相等" << endl;
}

3. 判断奇偶

int n;
cin >> n;
if (n % 2 == 0) {
    cout << "偶数" << endl;
} else {
    cout << "奇数" << endl;
}

4. 判断范围

int score;
cin >> score;
if (score >= 60 && score <= 100) {
    cout << "及格" << endl;
}

这里用到了逻辑与 &&,一级也会接触。

5. 字符比较

字符按 ASCII 码比较:

char c;
cin >> c;
if (c >= 'a' && c <= 'z') {
    cout << "小写字母" << endl;
}

五、关系运算符的优先级与结合性

1. 优先级从高到低

算术运算符:+  -  *  /  %
关系运算符:<  <=  >  >=
关系运算符:==  !=
逻辑与:&&
逻辑或:||
赋值:=

记忆:

先算算术,再比大小,再看相等,最后逻辑和赋值。

2. 示例

int a = 2, b = 3, c = 4;
cout << (a + b > c) << endl;   // 先算 a+b=5,5>4,输出 1
cout << (a > b == false) << endl;
// 先算 a > b 得 false(0),再算 0 == false,输出 1

不建议写太复杂,建议加括号。

3. 结合性

关系运算符是左结合,但不要连写比较。

错误写法:

if (0 < a < 10)   // 错误逻辑

正确写法:

if (a > 0 && a < 10)   // 正确

六、常见比较模型

1. 判断相等

if (a == b) {
    cout << "相等";
}

2. 判断不相等

if (a != b) {
    cout << "不相等";
}

3. 判断大于

if (a > b) {
    cout << "a 更大";
}

4. 判断小于等于

if (a <= b) {
    cout << "a 不大于 b";
}

5. 求最大值

int a, b;
cin >> a >> b;
if (a > b) {
    cout << a << endl;
} else {
    cout << b << endl;
}

6. 判断闰年

int y;
cin >> y;
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
    cout << "闰年";
} else {
    cout << "平年";
}

七、常见错误

  1. = 与 == 混淆

    if (a = 1)    // 这是赋值,不是比较,条件恒为真
    if (a == 1)   // 正确
    
  2. >= 写成 =>

    if (a => b)   // 错误
    if (a >= b)   // 正确
    
  3. 关系表达式连写

    if (0 < a < 10)        // 错误逻辑
    if (a > 0 && a < 10)   // 正确
    
  4. 输出关系表达式忘记加括号

    cout << a > b;     // 错误
    cout << (a > b);   // 正确
    
  5. 浮点数直接用 == 比较

    double a = 0.1 + 0.2;
    if (a == 0.3) { }   // 可能不成立
    

    一级了解,尽量避免。

  6. bool 输出格式不符合题目要求
    题目要求输出 true/false 时要用:

    cout << boolalpha << flag;
    
  7. 字符比较忘记 ASCII 规律

    'A' < 'a'   // true,因为 65 < 97
    
  8. 把 ! 和 != 混淆

    !flag      // 逻辑非,取反
    a != b     // 判断不等于
    

八、阅读程序写结果

题目 1

cout << (5 > 3) << endl;

输出:

1

题目 2

cout << (5 < 3) << endl;

输出:

0

题目 3

cout << boolalpha << (5 > 3) << endl;

输出:

true

题目 4

int a = 3, b = 5;
cout << (a == b) << endl;

输出:

0

题目 5

int a = 3, b = 5;
cout << (a != b) << endl;

输出:

1

题目 6

int a = 3, b = 5;
bool f = a < b;
cout << f << endl;

输出:

1

题目 7

char c = 'A';
cout << (c == 'A') << endl;

输出:

1

题目 8

cout << (1 < 2 < 3) << endl;

输出:

1

解释:1 < 2 得 true,即 1,再算 1 < 3 得 true,输出 1。
但这是错误逻辑写法,不要模仿。

题目 9

cout << (3 < 2 < 1) << endl;

输出:

1

解释:3 < 2 得 false,即 0,再算 0 < 1 得 true,输出 1。
再次说明不能连写比较。


九、速查表

需求 写法
大于 a > b
小于 a < b
大于等于 a >= b
小于等于 a <= b
等于 a == b
不等于 a != b
定义布尔变量 bool flag = true;
输出布尔值 1/0 cout << flag;
输出 true/false cout << boolalpha << flag;
判断相等 if (a == b)
判断不相等 if (a != b)
判断范围 if (a > 0 && a < 10)
判断奇偶 if (n % 2 == 0)
判断闰年 if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)

十、总结

关系运算符与 bool 类型是一级考试中“分支结构”的基础。

  1. 关系运算符有 6 个:>、<、>=、<=、==、!=。
  2. 关系表达式的结果是 bool,只有 true 和 false。
  3. true 默认输出 1,false 默认输出 0;要输出 true/false 用 boolalpha。
  4. == 是判断相等,= 是赋值,千万不要混淆。
  5. 范围判断不能连写,要用 && 连接,如 a > 0 && a < 10。
  6. 输出关系表达式结果时要加括号,如 cout << (a > b);。

复习时多练“阅读程序写结果”和“if 条件判断”两类题,重点注意 == 与 =、连写比较、括号和 boolalpha。考试中先看清是比较还是赋值,再判断结果真假,最后按格式输出。