逻辑运算符
运算结果为布尔型数据(只有true和false)
| 运算符 | 名称 | 含义 | 示例(结果) |
|---|---|---|---|
! | 逻辑非 | 取反。如果操作数为 true,则结果为 false,反之亦然。 | !true → false |
&& | 逻辑与 | 仅当两个操作数都为 true 时,结果才为 true。 | true && false → false |
|| | 逻辑或 | 只要任意一个操作数为 true,结果就为 true。 | true || false → true |
真值表
| 条件A | 条件B | !条件A | 条件A && 条件B | 条件A || 条件B |
|---|---|---|---|---|
| true | true | false | true | true |
| true | false | false | false | true |
| false | true | true | false | true |
| false | false | true | false | false |
相关特性与概念
- 短路求值
- &&(逻辑与):如果左边的操作数结果为
false,则整个表达式立刻确定为false,右边的操作数根本不会被执行或计算。 - ||(逻辑或):如果左边的操作数结果为
true,则整个表达式立刻确定为true,右边的操作数不会被计算。
- &&(逻辑与):如果左边的操作数结果为
- 操作数与返回值
- 操作数: 通常是结果为
bool类型的表达式(如a > b,flag)。C++ 中,任何非零值在逻辑上下文中都被视为true,零值被视为false。 - 返回值: 逻辑运算符的结果是
bool类型,即true或false。
- 操作数: 通常是结果为
- 运算符优先级:在复杂表达式中,逻辑非>逻辑与>逻辑或
bool result = !true || false && true;
// 等价于:((!true) || (false && true))
分支结构:if语句
单分支句式
if (条件表达式) {
// 当条件为真时执行的代码块
}
- 计算条件表达式的值
- 如果值为true(非0),执行{}中的代码
- 如果值为false(0),跳过{}中的代码
双分支句式
if (条件表达式) {
// 条件为真时执行的代码块
} else {
// 条件为假时执行的代码块
}
- 计算条件表达式的值,有选择的执行两个{}代码中的一个
多分支句式
if (条件1) {
// 条件1为真时执行
} else if (条件2) {
// 条件1为假,但条件2为真时执行
} else if (条件3) {
// 条件1、2为假,但条件3为真时执行
} else {
// 所有条件都为假时执行
}
- 从上至下计算每一个条件,直到结果为真,执行其中一个代码
大括号{}用法
- 当条件对应的执行内容只有一句时,可以省略大括号,但对于新手,强烈建议始终使用大括号,即使只有一行代码
- 没有大括号时,只控制紧随其后的一句代码
// 正确但不推荐
if (x > 0)
cout << "正数";
else
cout << "非正数";
// 推荐写法 - 更清晰,更安全
if (x > 0) {
cout << "正数";
} else {
cout << "非正数";
}
嵌套条件结构
结构之间可以相互嵌套
int age = 20;
bool hasLicense = true;
if (age >= 18) {
cout << "满足年龄要求" << endl;
if (hasLicense) {
cout << "可以合法驾驶" << endl;
} else {
cout << "但需要考取驾照" << endl;
}
} else {
cout << "未满18岁,不能驾驶" << endl;
}
常见错误
- 赋值运算符(=)当比较运算符(==)用
// 错误:这是赋值,不是比较!
if (x = 5) { // 总是为真,因为 x=5 返回 5(非零)
cout << "x等于5";
}
// 正确
if (x == 5) {
cout << "x等于5";
}
- 悬空else问题
// 哪个if对应哪个else?容易混淆
if (con1)
if (con2)
statement1;
else // 这个else实际属于最近的if(con2),而不是if(con1)
// 解决方法:使用大括号明确范围
if (con1) {
if (con2) {
statement1;
} else {
statement2;
}
}
- 忽略边界问题
// 错误:99分也会被判断为B
if (score >= 90) grade = 'A';
if (score >= 80) grade = 'B'; // 这里应该用 else if
房老师建议
- 始终使用大括号
{} - 保持条件简单清晰,复杂逻辑拆分或使用变量
- 使用有意义的布尔变量名
- 注意条件的排列顺序,将最常见或最可能的情况放在前面
- 避免过深的嵌套(一般不超过3层)
条件运算符(三目运算符或称三元运算符)
作为if-else双分支结构的简洁替代方式
// 标准if-else
int max;
if (a > b) {
max = a;
} else {
max = b;
}
// 使用三元运算符
int max = (a > b) ? a : b;
// 更复杂的例子
string result = (score >= 60) ? "及格" : "不及格";
cout << "考试结果: " << result << endl;