GESP 三级 · GESP 202512 C++ 三级 第 22 题

判断题 · 答案 A · 考点:运算符优先级

← 整套速查表 GESP 三级 全部真题

题目

C++ 表达式 z = a > b ? x : y 等同于:

if (a > b) {
    z = x;
} else {
    z = y;
}

以下代码执行后,输出将会是 2。

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    cout << arr[3 > 2 ? 1 : 2] << endl;
    return 0;
}
答案:A

考点

运算符优先级

解题思维

答案A。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。

常见错误

位运算追踪时建议把数字写成二进制形式再逐位计算。

详细解析(节选)

【考点】条件运算符|数组下标运算|运算符优先级

🎯 考纲定位 本题考查 GESP 三级大纲"表达式与运算符"模块的核心语法点——条件运算符。命题人卡住的是绝大多数考生对"三元运算符优先级"与"结合性"的模糊认知,误以为它只是 if-else 的语法糖,而忽略其作为右结合运算符在复杂表达式中的特殊行为。

🧠 解题思维 看到题先想"三元运算符是什么"——它本质是条件表达式:条件真返回第一个操作数,假返回第二个。关键观察是"右结合性"与"优先级",这决定了它在嵌套时如何被解析。本题核心推理链:1)判断 3 > 2 为真,故 3 > 2 ? 1 : 2 等同于 1;2)代入数组下标得 arr[1];3)数组初始化 arr[1] = 2,输出自然为 2。通法:遇到三元运算符,先定位条件表达式,再按右结合规则确定取值,最后结合上下文(数组下标、函数参数等)验证整体语义。

🪤 陷阱拆解 陷阱拆解:选项 A 看似"正确",实则命题人埋下"优先级偷换"的坑。若把 arr[3 > 2 ? 1 : 2] 误读为"先取数组再判断条件",会陷入"三元运算符优先级低于下标运算符"的误区——事实上 ?: 优先级高于 [],条件先求值再代入下标。此外,题干前半句"等同于 if-else"是纯语法等价,后半句"输出 2"是运行时语义,命题人故意用"语法正确性"掩盖"运行时正确性"的陷阱,让你只背结论而忽略结合性细节。

🔄 反命题思维 反命题思维:若把条件改为 3 > 2 ? 1 : 2 中的 3 > 2 为假,表达式变为 arr[2],输出 3;若数组改为 {1, 0, 3, 4, 5},输出 0。这提醒我们:刷到类似题时,先问自己"命题人想考我什么"——是语法等价性、优先级陷阱,还是运行时语义?别只背"三元运算符等价 if-else",要警惕"结合性"与"优先级"的偷换。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断