C++ 零基础教程 - 第 7 讲 bool运算符和选择结构教程

一、开篇导入(衔接上一讲,零基础易懂)

上一讲我们学会了4类常用运算符,尤其是比较运算符(>、<、==、!=)和逻辑运算符(&&、||),知道它们的判断结果只有"真"和"假";同时我们在逻辑运算符的示例中,用到了一个新的关键字bool------它就是用来存储"真"和"假"的数据类型。

本讲我们将重点讲解:bool类型(布尔类型)及bool运算符的用法,再结合上一讲的运算符,学习零基础必学的选择结构(if语句、if-else语句、if-else if-else语句)------选择结构的核心是"根据条件判断,执行不同的代码",比如"如果成绩及格,执行打印语句;如果不及格,执行另一个打印语句",这是编写灵活程序的基础。

温馨提示:本讲全程延续前序教程风格,代码极简、注释用中文、输出语句和代码无任何中文,所有示例可直接复制运行;重点衔接第6讲的比较、逻辑运算符,不用额外记忆新的复杂知识点,零基础可轻松上手。

二、本讲核心目标(明确重点,不浪费时间)

  1. 掌握bool类型(布尔类型):理解其作用、取值范围,会定义bool变量、给bool变量赋值;

  2. 掌握bool运算符:极简掌握!(非)运算符,结合上一讲的&&、||,能灵活判断条件;

  3. 掌握选择结构核心:会用if语句(单条件判断)、if-else语句(双条件判断)、if-else if-else语句(多条件判断),能结合bool类型和运算符编写简单判断代码;

  4. 规避新手常见错误,能独立完成基础练习,巩固bool类型和选择结构的用法。

三、核心知识点1:bool类型(布尔类型,必学)

bool类型,又称"布尔类型",是C++中专门用来存储"判断结果"的数据类型------它只有两个取值,对应我们生活中的"真"和"假",也是选择结构的核心支撑(选择结构就是根据bool类型的结果,决定执行哪段代码)。

1. bool类型核心要点(极简记忆)

  1. 数据类型关键字:bool(小写,C++严格区分大小写,不能写成Bool或BOOL);

  2. 取值范围(仅两种):

  • true:表示"真",在C++中等价于整数1(打印时显示1);

  • false:表示"假",在C++中等价于整数0(打印时显示0);

  1. 定义格式:和上一讲的int、double类型一致,格式为 bool 变量名 = 初始值;

  2. 核心作用:存储比较运算符、逻辑运算符的判断结果,为选择结构提供"判断依据"。

2. 实战示例(直接复制运行)

结合上一讲的比较、逻辑运算符,演示bool类型的定义、赋值和使用,注释用中文,输出无中文:

cpp 复制代码
#include <iostream>

int main() {
    // 定义bool变量,初始值为true(真)
    bool is_true = true;
    // 定义bool变量,初始值为false(假)
    bool is_false = false;
    
    // 定义int变量,用于结合比较运算符获取bool结果
    int a = 10;
    int b = 3;
    // 比较运算符的结果是bool类型,直接赋值给bool变量
    bool is_greater = (a > b);  // a>b为真,is_greater的值为true
    bool is_equal = (a == b);   // a==b为假,is_equal的值为false
    
    // 逻辑运算符的结果是bool类型,直接赋值给bool变量
    bool logic_and = (a > b) && (a > 5);  // 两个条件都真,结果为true
    bool logic_or = (a < b) || (a > 5);   // 一个条件真,结果为true
    
    // 打印所有bool变量的值(true=1,false=0),输出无中文
    std::cout << is_true << std::endl;
    std::cout << is_false << std::endl;
    std::cout << is_greater << std::endl;
    std::cout << is_equal << std::endl;
    std::cout << logic_and << std::endl;
    std::cout << logic_or << std::endl;
    
    return 0;
}

3. 运行结果

1

0

1

0

1

1

4. 新手避坑提醒

  1. bool类型的取值只有true和false,不能赋值为其他数字(比如bool is_ok = 2; 不规范,虽然编译器可能兼容,但不推荐);

  2. 打印bool变量时,C++默认显示1(true)和0(false),不用刻意修改,后续我们会学习自定义显示格式(零基础暂不要求);

  3. bool变量名建议起有意义的名字,比如is_greater(是否大于)、is_pass(是否及格),方便阅读代码(和上一讲变量命名规则一致)。

四、核心知识点2:bool运算符(极简讲解,必学)

bool运算符,就是专门用于"操作bool类型数据"的运算符,我们上一讲已经学过两种:&&(并且)、||(或者);本讲新增一种核心bool运算符:!(非),三者结合,能满足所有基础条件判断需求。

重点:bool运算符的操作数是bool类型(或能得到bool结果的表达式,比如比较表达式),运算结果也依然是bool类型(true或false)。

1. 3种bool运算符总结(表格清晰,记牢)

运算符 核心作用(极简记忆) 示例(bool a=true, b=false) 运算结果
&&(并且) 两个条件都为真,结果才为真;否则为假(延续第6讲) a && b、(a>5) && (b<3) false(0)
(或者) 两个条件有一个为真,结果就为真;都假才为假(延续第6讲)
!(非)(新增) 取反:条件为真,结果为假;条件为假,结果为真(核心:反着来) !a、!b、!(a>5) !a=false,!b=true

2. 关键提醒(新手避坑)

  1. !(非)运算符是"单目运算符",只需要一个操作数(比如!a、!true),而&&、||是"双目运算符",需要两个操作数(比如a&&b);

  2. 优先级:!(非) > 比较运算符 > &&(并且) > ||(或者),不确定时用括号()括起来(比如!(a&&b),先算a&&b,再取反);

  3. 常见用法:!(非)常用于"否定条件",比如"判断a不大于b",可以写成!(a>b),等价于a<=b(后续会结合选择结构演示)。

3. 实战示例(直接复制运行)

演示3种bool运算符的用法,结合bool变量和比较表达式,注释用中文,输出无中文:

cpp 复制代码
#include <iostream>

int main() {
    // 定义bool变量
    bool a = true;
    bool b = false;
    
    // 定义int变量,用于结合比较表达式
    int score = 75;
    
    // 1. 演示!(非)运算符:取反操作
    bool not_a = !a;       // a是true,!a是false
    bool not_b = !b;       // b是false,!b是true
    bool not_pass = !(score > 60);  // score>60是true,取反后是false
    
    // 2. 演示&&(并且)和!结合
    bool logic1 = (score > 60) && !(score > 90);  // 及格且不优秀
    
    // 3. 演示||(或者)和!结合
    bool logic2 = !(score > 60) || (score > 90);  // 不及格或优秀
    
    // 打印所有结果,输出无中文
    std::cout << not_a << std::endl;
    std::cout << not_b << std::endl;
    std::cout << not_pass << std::endl;
    std::cout << logic1 << std::endl;
    std::cout << logic2 << std::endl;
    
    return 0;
}

4. 运行结果

0

1

0

1

0

5. 新手练习

修改score的值为55、95,分别运行代码,观察logic1和logic2的结果变化,理解"!(非)"和其他bool运算符的结合用法。

五、核心知识点3:选择结构(if、if-else、if-else if-else,重中之重)

选择结构,又称"分支结构",核心作用是"根据条件判断(bool类型结果),执行不同的代码块"------就像我们生活中的选择:"如果下雨,就带伞;如果不下雨,就不带伞";"如果成绩及格,就打印1;如果不及格,就打印0"。

零基础必学三种选择结构,由浅入深:if语句(单条件)、if-else语句(双条件)、if-else if-else语句(多条件),语法极简,结合前面的bool类型和运算符就能快速掌握。

1. 选择结构基础语法(固定写法,记牢)

核心规则:选择结构的"条件"必须是bool类型(或能得到bool结果的表达式,比如比较表达式、bool运算符表达式);代码块用大括号{}包裹(新手建议必写,避免语法错误)。

(1)if语句(单条件判断)

语法格式(固定):

cpp 复制代码
if (条件) {
    // 条件为true(真)时,执行这里的代码
    // 注释用中文,代码、输出无中文
}

核心逻辑:只有当"条件"的结果是true(1)时,才执行大括号里的代码;如果是false(0),则跳过大括号里的代码,继续执行后面的代码。

(2)if-else语句(双条件判断)

语法格式(固定):

cpp 复制代码
if (条件) {
    // 条件为true(真)时,执行这里的代码
} else {
    // 条件为false(假)时,执行这里的代码
}

核心逻辑:二选一------条件为真,执行if后面大括号的代码;条件为假,执行else后面大括号的代码,两个代码块不会同时执行。

(3)if-else if-else语句(多条件判断)

当需要判断**多个条件(不止两个)**时,if和if-else语句就不够用了,此时需要用if-else if-else结构------核心是"逐一判断条件,满足一个就执行对应代码块,全部不满足则执行最后else代码块",比如判断成绩等级(优秀、良好、及格、不及格)。

语法格式(固定,注释用中文,代码无中文):

cpp 复制代码
if (条件1) {
    // 条件1为true时,执行这里的代码
} else if (条件2) {
    // 条件1为false、条件2为true时,执行这里的代码
} else if (条件3) {
    // 条件1、2为false、条件3为true时,执行这里的代码
} else {
    // 所有条件都为false时,执行这里的代码
}

核心要点(零基础必记):

  1. 条件判断有顺序:从上到下逐一判断,满足一个条件就跳出整个选择结构,不会执行后续的条件判断;

  2. else if可以有多个:根据实际需求增减(比如判断5个条件,就写4个else if);

  3. 最后一个else可省略:但省略后,如果所有条件都不满足,就没有代码执行(新手建议保留,避免遗漏);

  4. 所有条件均为bool类型:和前面两种选择结构一致,条件可以是bool变量、比较表达式、bool运算符表达式。

2. 实战示例1:if语句(单条件)

需求:定义int变量score,判断score是否大于60(及格),如果及格,打印1(输出无中文):

cpp 复制代码
#include <iostream>

int main() {
    // 定义成绩变量
    int score = 70;
    
    // if语句:判断是否及格(条件是bool类型结果)
    if (score > 60) {
        // 条件为true(及格)时,执行打印
        std::cout << 1 << std::endl;
    }
    
    // 条件为false时,跳过上面的打印,执行这里的代码
    std::cout << 2 << std::endl;
    
    return 0;
}

运行结果(score=70时):1

2

补充:如果修改score=50(不及格),条件为false,跳过打印1,运行结果为:2

3. 实战示例2:if-else语句(双条件)

需求:定义int变量score,判断score是否大于60;及格则打印1,不及格则打印0(输出无中文):

cpp 复制代码
#include <iostream>

int main() {
    int score = 55;
    
    // if-else语句:双条件判断(及格/不及格)
    if (score > 60) {
        // 条件为true(及格),打印1
        std::cout << 1 << std::endl;
    } else {
        // 条件为false(不及格),打印0
        std::cout << 0 << std::endl;
    }
    
    return 0;
}

运行结果(score=55时):0

补充:修改score=80,运行结果为:1(两个代码块二选一,不会同时执行)

4. 实战示例3:if-else if-else语句(多条件)

需求:定义int变量score,判断成绩等级(优秀、良好、及格、不及格),对应打印4、3、2、1(输出无中文),结合比较运算符实现多条件判断:

cpp 复制代码
#include <iostream>

int main() {
    int score = 85;
    
    // 多条件判断:优秀(90+)、良好(80-89)、及格(60-79)、不及格(<60)
    if (score >= 90) {
        std::cout << 4 << std::endl; // 优秀,打印4
    } else if (score >= 80) {
        std::cout << 3 << std::endl; // 良好,打印3
    } else if (score >= 60) {
        std::cout << 2 << std::endl; // 及格,打印2
    } else {
        std::cout << 1 << std::endl; // 不及格,打印1
    }
    
    return 0;
}

运行结果(score=85时):3

示例说明:

  • score=85时,先判断条件1(≥90)为false,再判断条件2(≥80)为true,执行打印3,后续条件不再判断;

  • score=95时,条件1为true,打印4,跳出结构;

  • score=70时,条件1、2为false,条件3为true,打印2;

  • score=55时,所有条件均为false,执行else,打印1。

5. 实战示例4:结合bool运算符的选择结构

需求:定义int变量score,判断score是否在60~90之间(及格且不优秀);如果是,打印1;否则打印0(结合&&和!运算符):

cpp 复制代码
#include <iostream>

int main() {
    int score = 85;
    
    // 条件:score>60 并且 不大于90(结合&&和!运算符)
    if ((score > 60) && !(score > 90)) {
        std::cout << 1 << std::endl;
    } else {
        std::cout << 0 << std::endl;
    }
    
    return 0;
}

运行结果(score=85时):1

补充:修改score=95,条件为false,运行结果为0;修改score=55,运行结果也为0。

6. 新手避坑提醒(重中之重)

  1. if后面的括号()不能漏写,括号里的"条件"必须能得到bool结果(比如score>60,不能直接写score);

  2. 大括号{}的使用:如果代码块只有一行代码,大括号可以省略(不推荐新手省略,容易出错);如果有多行代码,大括号必须写;

  3. else不能单独使用,必须跟在if后面(比如直接写else{}会报错);else if也不能单独使用,必须跟在if或前面的else if后面;

  4. 条件表达式中,注意区分==(等于)和=(赋值):if (score == 60) 是判断(正确),if (score = 60) 是赋值(错误,会导致条件永远为真);

  5. 选择结构的代码块,会严格按照"条件判断结果"执行,不会跳过或多执行(比如if-else只会执行其中一个代码块,if-else if-else只会执行一个代码块);

  6. if-else if-else的条件顺序不能乱:比如判断成绩时,不能先判断≥60,再判断≥90,否则≥90的成绩会被先判断为≥60,导致结果错误。

六、新手常见问题排查(避坑指南)

  1. 问题1:定义bool变量报错,提示"未定义标识符bool" → 解决方案:检查bool的大小写(必须小写,不能写成Bool/BOOL),C++严格区分大小写;

  2. 问题2:if语句的条件永远为真/假,不符合预期 → 解决方案:检查条件中是否混用了==和=,比如if (score = 60) 是赋值,不是判断,应改为score == 60;

  3. 问题3:else报错,提示"expected unqualified-id before 'else'" → 解决方案:else必须跟在if后面,不能单独使用;或者检查if后面的代码是否有语法错误(比如漏写分号);

  4. 问题4:!(非)运算符使用后,结果不符合预期 → 解决方案:检查优先级,不确定时用括号括起来,比如!(a&&b) 先算a&&b,再取反;

  5. 问题5:选择结构的代码块没有执行 → 解决方案:检查条件判断结果(可以先打印条件的bool值,确认是true还是false),再检查代码块是否有语法错误(比如漏写大括号);

  6. 问题6:if-else if-else判断结果错误 → 解决方案:检查条件顺序是否正确,比如判断成绩时,需从高分到低分判断(先≥90,再≥80,最后≥60),不能颠倒顺序。

七、动手练一练(巩固本讲内容,必做)

结合本讲知识点和上一讲运算符,完成以下练习,建议实际编写代码运行,巩固bool类型、bool运算符和选择结构的用法(所有代码需满足:注释用中文、代码和输出无中文):

  1. 定义bool变量is_pass,初始值为true,打印is_pass和!is_pass的值;

  2. 定义int变量a=8,b=12,用if语句判断a是否小于b,如果是,打印1;

  3. 定义int变量age=19,用if-else语句判断age是否大于18;如果是,打印1,否则打印0;

  4. 定义int变量num=7,用if-else语句结合bool运算符,判断num是否是偶数(提示:num%2 == 0 表示偶数);是偶数打印1,不是打印0;

  5. 定义int变量score=88,用if-else语句判断score是否在60~100之间(结合&&运算符);如果是,打印1,否则打印0;

  6. 定义int变量grade=75,用if-else if-else语句判断等级:≥90打印4、≥80打印3、≥60打印2、<60打印1。

八、本讲小结

  1. bool类型:专门存储"真/假",取值只有true(1)和false(0),定义格式和int、double一致,是选择结构的核心;

  2. bool运算符:3种核心------!(非,取反)、&&(并且,都真才真)、||(或者,一真就真),运算结果都是bool类型;

  3. 选择结构(由浅入深,完整掌握):

  • if语句:单条件,条件为真执行代码块,假则跳过;

  • if-else语句:双条件,真执行if代码块,假执行else代码块,二选一;

  • if-else if-else语句:多条件,从上到下逐一判断,满足一个执行对应代码块,全不满足执行else;

相关推荐
Ivanqhz2 小时前
向量化计算
开发语言·c++·后端·算法·支持向量机·rust
LXS_3572 小时前
常用算法(下)---拷贝、替换、算术生成、集合算法
开发语言·c++·算法·学习方法
Yan_uuu2 小时前
ubuntu18.04 安装 x264、ffmpeg、nv-codec-hearers 支持GPU硬件加速
c++·图像处理·ubuntu·ffmpeg
近津薪荼2 小时前
优选算法——滑动窗口4(找子串)
c++·学习·算法
2301_822377652 小时前
模板代码异常处理
开发语言·c++·算法
hcnaisd22 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
JMchen1232 小时前
Android相机硬件抽象层(HAL)逆向工程:定制ROM的相机优化深度指南
android·开发语言·c++·python·数码相机·移动开发·android studio
王老师青少年编程2 小时前
2022信奥赛C++提高组csp-s复赛真题及题解:策略游戏
c++·真题·csp·信奥赛·csp-s·提高组·策略游戏
近津薪荼2 小时前
递归专题5——快速幂
c++·学习·算法