AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 c语言选择判断题库 题目详情
CA4E3A01C46000013755684012D01E55
c语言选择判断题库
379
单选题

1、第193题 (1.0分) 题号:120 假设所有变量均为整型,表达式:a=2,b=5,a>b?a++:b++,a+b的值 是()。

A
7
B
8
C
9
D
2

答案解析

正确答案:B

解析:

这是一道关于 C 语言中**逗号表达式**、**三元运算符**以及**自增运算符**优先级的经典题目。 ### 1. 题目分析 表达式为:`a=2, b=5, a>b ? a++ : b++, a+b` 我们需要逐步拆解这个表达式的执行过程。在 C 语言中,逗号 `,` 是一个运算符,其优先级最低,结合方向是从左到右。整个表达式由三个主要部分组成(由逗号分隔): 1. `a=2` 2. `b=5` 3. `a>b ? a++ : b++` 4. `a+b` **注意**:这里有一个常见的陷阱。三元运算符 `?:` 的优先级高于逗号 `,`。因此,表达式实际上被解析为: `(a=2), (b=5), (a>b ? a++ : b++), (a+b)` 让我们一步步执行: #### 第一步:初始化 - `a = 2`:变量 `a` 被赋值为 2。 - `b = 5`:变量 `b` 被赋值为 5。 此时:`a = 2`, `b = 5`。 #### 第二步:执行三元运算符 `a>b ? a++ : b++` - 判断条件 `a > b`,即 `2 > 5`。 - 条件为 **假 (False)**。 - 因此,执行冒号后面的表达式:`b++`。 - **关键点**:`b++` 是**后置自增**。 - 它的值是 `b` 当前的值(5),但副作用是 `b` 会在该表达式求值后增加 1。 - 所以,执行完这部分后,`b` 变成了 **6**。 - `a` 保持不变,仍为 **2**。 此时:`a = 2`, `b = 6`。 #### 第三步:计算最终结果 `a+b` - 逗号表达式的值是**最后一个子表达式的值**。 - 最后一个子表达式是 `a + b`。 - 代入当前的值:`2 + 6`。 - 结果为 **8**。 ### 2. 易错点解析 * **误区1:认为 `b++` 没有生效或立即生效取值不同** 如果是 `++b`(前置自增),`b` 会先变成 6,然后取 6。 如果是 `b++`(后置自增),在这个三元表达式中,虽然表达式的“返回值”是 5(如果前面有赋值的话),但**副作用**(即 `b` 变为 6)在执行完该语句后已经发生。所以在接下来的 `a+b` 计算中,`b` 已经是 6 了。 * **误区2:优先级混淆** 有人可能会误以为 `a>b?a++:b++, a+b` 中的 `a+b` 是三元运算符的一部分。但实际上,三元运算符 `?:` 的优先级高于逗号 `,`。所以 `a+b` 是逗号表达式的最后一部分,独立于三元运算之外进行计算。 ### 3. 结论 最终计算过程如下: 1. `a` 赋值为 2。 2. `b` 赋值为 5。 3. `2 > 5` 为假,执行 `b++`,`b` 变为 6。 4. 计算 `a + b`,即 `2 + 6 = 8`。 因此,正确答案是 **B**。
题目纠错
c语言选择判断题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码