逻辑运算符与分支结构

逻辑运算符

运算结果为布尔型数据(只有true和false)

运算符名称含义示例(结果)
!逻辑非取反。如果操作数为 true,则结果为 false,反之亦然。!truefalse
&&逻辑与仅当两个操作数都为 true 时,结果才为 truetrue && falsefalse
||逻辑或只要任意一个操作数为 true,结果就为 truetrue || falsetrue

真值表

条件A条件B!条件A条件A && 条件B条件A || 条件B
truetruefalsetruetrue
truefalsefalsefalsetrue
falsetruetruefalsetrue
falsefalsetruefalsefalse

相关特性与概念

  1. 短路求值
    • &&(逻辑与):如果左边的操作数结果为 false,则整个表达式立刻确定为 false右边的操作数根本不会被执行或计算
    • ||(逻辑或):如果左边的操作数结果为 true,则整个表达式立刻确定为 true右边的操作数不会被计算
  2. 操作数与返回值
    • 操作数: 通常是结果为 bool 类型的表达式(如 a > bflag)。C++ 中,任何非零值在逻辑上下文中都被视为 true零值被视为 false
    • 返回值: 逻辑运算符的结果是 bool 类型,即 truefalse
  3. 运算符优先级:在复杂表达式中,逻辑非>逻辑与>逻辑或
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

房老师建议

  1. 始终使用大括号 {}
  2. 保持条件简单清晰,复杂逻辑拆分或使用变量
  3. 使用有意义的布尔变量名
  4. 注意条件的排列顺序,将最常见或最可能的情况放在前面
  5. 避免过深的嵌套(一般不超过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;