🔷 第四章 条件判断语句
📄 一句话概括

条件运算符 ? : 是第三章认识的三目,本章把它放回本行——它其实就是"挑值版"的 if-else:条件真取冒号前的值,假取冒号后的值。三行 if-else 能缩成一行,但只适用于"两个值里挑一个"的场景。

一、语法:条件和两个候选值

条件 ? 值甲 : 值乙      // 真取甲、假取乙,整体是一个"值"

和 if-else 的本质区别(对着图看):

铁律:整体套括号。 3.2 讲过 << 优先级高于 ? :,cout << n % 2 == 0 ? "偶数" : "奇数"; 会被拆成 (cout << n % 2 == 0) ? ...——cout 和 0 比较直接编不过。写 cout << (条件 ? 甲 : 乙); 才对。

二、实例 04:用条件运算符判断数的奇偶性

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "请输入一个整数:";
    cin >> n;

    cout << n << (n % 2 == 0 ? " 是偶数" : " 是奇数") << endl;
    return 0;
}

看到什么算成功:输入 10 输出"10 是偶数";输入 -7 输出"-7 是奇数"(-7 % 2 是 -1,非 0,条件假——4.2.1 的负数坑这里天然免疫)。

对照:同样的事 if-else 要写四行(见配图左栏)。三目把"判断"和"取值"压进一行,特别适合给变量赋默认值、挑字符串、挑较大数这类轻活:

int bigger = (a > b) ? a : b;              // 挑大数
string level = (score >= 60) ? "及格" : "挂了";  // 挑文案

三、30 秒实验:三目塞不塞得进 cout

把实例里三目外的括号删掉再编译:

看到什么算成功:报错(error 提示 cout 不能与 int 比较)——<< 抢先把式子拆散了。括号加回去,一切正常。这就是"整体套括号"不是风格而是语法需要的证据。

四、常见误区

  1. "三目能替代所有 if-else"——不能。三目两边只能放值,放 cout << ... 这类语句直接编不过(有的编译器放宽但结果是错的)。要"执行动作"老实用 if-else。
  2. "三目嵌套三目很高级"——能写(a > b ? a : c > d ? c : d)但可读性崩盘,0.5 秒看不懂的代码都是坏代码。嵌套超过一层改回 if-else。
  3. "忘了三目整体是值"——n % 2 == 0 ? "偶数" : "奇数"; 单独写一行,算出的值没人接,等于白算(3.3.1 的 a+b; 同款陷阱)。
自测三问(点开对答案) 1. `a > b ? a : b` 算出什么?——a、b 中较大的那个数(整个式子是值)。 2. 三目两边能放语句吗?——不能,只能放值;执行动作用 if-else。 3. 为什么三目进 cout 必须套括号?——`<<` 优先级高于 `? :`,不套会被拆散(3.2)。

相关笔记