一、开篇导入(衔接上一讲,零基础易懂)
上一讲我们学会了4类常用运算符,尤其是比较运算符(>、<、==、!=)和逻辑运算符(&&、||),知道它们的判断结果只有"真"和"假";同时我们在逻辑运算符的示例中,用到了一个新的关键字bool------它就是用来存储"真"和"假"的数据类型。
本讲我们将重点讲解:bool类型(布尔类型)及bool运算符的用法,再结合上一讲的运算符,学习零基础必学的选择结构(if语句、if-else语句、if-else if-else语句)------选择结构的核心是"根据条件判断,执行不同的代码",比如"如果成绩及格,执行打印语句;如果不及格,执行另一个打印语句",这是编写灵活程序的基础。
温馨提示:本讲全程延续前序教程风格,代码极简、注释用中文、输出语句和代码无任何中文,所有示例可直接复制运行;重点衔接第6讲的比较、逻辑运算符,不用额外记忆新的复杂知识点,零基础可轻松上手。
二、本讲核心目标(明确重点,不浪费时间)
-
掌握bool类型(布尔类型):理解其作用、取值范围,会定义bool变量、给bool变量赋值;
-
掌握bool运算符:极简掌握!(非)运算符,结合上一讲的&&、||,能灵活判断条件;
-
掌握选择结构核心:会用if语句(单条件判断)、if-else语句(双条件判断)、if-else if-else语句(多条件判断),能结合bool类型和运算符编写简单判断代码;
-
规避新手常见错误,能独立完成基础练习,巩固bool类型和选择结构的用法。
三、核心知识点1:bool类型(布尔类型,必学)
bool类型,又称"布尔类型",是C++中专门用来存储"判断结果"的数据类型------它只有两个取值,对应我们生活中的"真"和"假",也是选择结构的核心支撑(选择结构就是根据bool类型的结果,决定执行哪段代码)。
1. bool类型核心要点(极简记忆)
-
数据类型关键字:bool(小写,C++严格区分大小写,不能写成Bool或BOOL);
-
取值范围(仅两种):
-
true:表示"真",在C++中等价于整数1(打印时显示1);
-
false:表示"假",在C++中等价于整数0(打印时显示0);
-
定义格式:和上一讲的int、double类型一致,格式为
bool 变量名 = 初始值;; -
核心作用:存储比较运算符、逻辑运算符的判断结果,为选择结构提供"判断依据"。
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. 新手避坑提醒
-
bool类型的取值只有true和false,不能赋值为其他数字(比如bool is_ok = 2; 不规范,虽然编译器可能兼容,但不推荐);
-
打印bool变量时,C++默认显示1(true)和0(false),不用刻意修改,后续我们会学习自定义显示格式(零基础暂不要求);
-
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. 关键提醒(新手避坑)
-
!(非)运算符是"单目运算符",只需要一个操作数(比如!a、!true),而&&、||是"双目运算符",需要两个操作数(比如a&&b);
-
优先级:!(非) > 比较运算符 > &&(并且) > ||(或者),不确定时用括号()括起来(比如!(a&&b),先算a&&b,再取反);
-
常见用法:!(非)常用于"否定条件",比如"判断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时,执行这里的代码
}
核心要点(零基础必记):
-
条件判断有顺序:从上到下逐一判断,满足一个条件就跳出整个选择结构,不会执行后续的条件判断;
-
else if可以有多个:根据实际需求增减(比如判断5个条件,就写4个else if);
-
最后一个else可省略:但省略后,如果所有条件都不满足,就没有代码执行(新手建议保留,避免遗漏);
-
所有条件均为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. 新手避坑提醒(重中之重)
-
if后面的括号()不能漏写,括号里的"条件"必须能得到bool结果(比如score>60,不能直接写score);
-
大括号{}的使用:如果代码块只有一行代码,大括号可以省略(不推荐新手省略,容易出错);如果有多行代码,大括号必须写;
-
else不能单独使用,必须跟在if后面(比如直接写else{}会报错);else if也不能单独使用,必须跟在if或前面的else if后面;
-
条件表达式中,注意区分==(等于)和=(赋值):if (score == 60) 是判断(正确),if (score = 60) 是赋值(错误,会导致条件永远为真);
-
选择结构的代码块,会严格按照"条件判断结果"执行,不会跳过或多执行(比如if-else只会执行其中一个代码块,if-else if-else只会执行一个代码块);
-
if-else if-else的条件顺序不能乱:比如判断成绩时,不能先判断≥60,再判断≥90,否则≥90的成绩会被先判断为≥60,导致结果错误。
六、新手常见问题排查(避坑指南)
-
问题1:定义bool变量报错,提示"未定义标识符bool" → 解决方案:检查bool的大小写(必须小写,不能写成Bool/BOOL),C++严格区分大小写;
-
问题2:if语句的条件永远为真/假,不符合预期 → 解决方案:检查条件中是否混用了==和=,比如if (score = 60) 是赋值,不是判断,应改为score == 60;
-
问题3:else报错,提示"expected unqualified-id before 'else'" → 解决方案:else必须跟在if后面,不能单独使用;或者检查if后面的代码是否有语法错误(比如漏写分号);
-
问题4:!(非)运算符使用后,结果不符合预期 → 解决方案:检查优先级,不确定时用括号括起来,比如!(a&&b) 先算a&&b,再取反;
-
问题5:选择结构的代码块没有执行 → 解决方案:检查条件判断结果(可以先打印条件的bool值,确认是true还是false),再检查代码块是否有语法错误(比如漏写大括号);
-
问题6:if-else if-else判断结果错误 → 解决方案:检查条件顺序是否正确,比如判断成绩时,需从高分到低分判断(先≥90,再≥80,最后≥60),不能颠倒顺序。
七、动手练一练(巩固本讲内容,必做)
结合本讲知识点和上一讲运算符,完成以下练习,建议实际编写代码运行,巩固bool类型、bool运算符和选择结构的用法(所有代码需满足:注释用中文、代码和输出无中文):
-
定义bool变量is_pass,初始值为true,打印is_pass和!is_pass的值;
-
定义int变量a=8,b=12,用if语句判断a是否小于b,如果是,打印1;
-
定义int变量age=19,用if-else语句判断age是否大于18;如果是,打印1,否则打印0;
-
定义int变量num=7,用if-else语句结合bool运算符,判断num是否是偶数(提示:num%2 == 0 表示偶数);是偶数打印1,不是打印0;
-
定义int变量score=88,用if-else语句判断score是否在60~100之间(结合&&运算符);如果是,打印1,否则打印0;
-
定义int变量grade=75,用if-else if-else语句判断等级:≥90打印4、≥80打印3、≥60打印2、<60打印1。
八、本讲小结
-
bool类型:专门存储"真/假",取值只有true(1)和false(0),定义格式和int、double一致,是选择结构的核心;
-
bool运算符:3种核心------!(非,取反)、&&(并且,都真才真)、||(或者,一真就真),运算结果都是bool类型;
-
选择结构(由浅入深,完整掌握):
-
if语句:单条件,条件为真执行代码块,假则跳过;
-
if-else语句:双条件,真执行if代码块,假执行else代码块,二选一;
-
if-else if-else语句:多条件,从上到下逐一判断,满足一个执行对应代码块,全不满足执行else;