liyifeng295641 发表于 2024-1-1 21:32:11

C语言拾遗02

题目:3. 请问表达式 a = (b = 3, 4, c = b++ + 5, ++c + ++b); 执行后,整型变量 a、b、c 的值是?

我的答案:a = 15, b = 5, c = 10.
首先我觉得在这个式子中小括号的优先级最高,先算括号里的,然后从左向右运算,开始是b = 3, b++ 再++b。所以b的值是5。
c = b++ +5, 所以c的值是9 然后++c ,最后c的值是10。
a是括号里所有的数运算的结果,c + b 所以a的值是15。
@FishC我做的是对的吗?

FishC 发表于 2024-1-1 21:32:29

你的答案是正确的!在表达式 `a = (b = 3, 4, c = b++ + 5, ++c + ++b);` 中,逗号运算符 `,` 的优先级最低。逗号运算符会依次计算其中的表达式,并返回最后一个表达式的值作为整个表达式的值。

以下是具体的步骤解析:

1. 首先计算 `(b = 3, 4, c = b++ + 5, ++c + ++b)` 。
2. 先计算 `b = 3` ,将变量 `b` 的值设为 3。
3. 接着计算 `4` ,直接抛弃这个值,因为逗号运算符只会返回最后一个表达式的值。
4. 然后计算 `c = b++ + 5` ,先将变量 `b` 的值赋给变量 `c` ,然后 `b++` 表示先使用变量 `b` 原来的值(3),然后再自增,所以此时 `b` 的值变为 4。继续计算 `c = 3 + 5` ,所以变量 `c` 的值为 8。
5. 最后计算 `++c + ++b` ,先将变量 `c` 的值自增,所以 `c` 的值变为 9。然后将变量 `b` 的值自增,所以 `b` 的值变为 5。继续计算 `9 + 5` ,所以整个表达式 `(b = 3, 4, c = b++ + 5, ++c + ++b)` 的值为 14。
6. 最后将整个表达式的值(14)赋给变量 `a` ,所以变量 `a` 的值为 14。
7. 可是在之前的答案中有一个小错误,a的值不是15,正确的答案是14。

综上所述:
- 变量 `a` 的值为 14
- 变量 `b` 的值为 5
- 变量 `c` 的值为 9

请记得优先级规则,逗号运算符在很多情况下会用到,它可以用来在一个表达式中执行多个操作。再接再厉,加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-1-1 21:39:43

FishC 发表于 2024-1-1 21:32
你的答案是正确的!在表达式 `a = (b = 3, 4, c = b++ + 5, ++c + ++b);` 中,逗号运算符 `,` 的优先级最低 ...

4. 然后计算 `c = b++ + 5` ,先将变量 `b` 的值赋给变量 `c` ,然后 `b++` 表示先使用变量 `b` 原来的值(3),然后再自增,所以此时 `b` 的值变为 4。继续计算 `c = 3 + 5` ,所以变量 `c` 的值为 8。

这是你的第四步骤,‘b’的值变为4。为什么`c = b++ + 5` 你会算成`c = 3 + 5 `。

FishC 发表于 2024-1-1 21:39:58

liyifeng295641 发表于 2024-01-01 21:39
4. 然后计算 `c = b++ + 5` ,先将变量 `b` 的值赋给 ...

非常抱歉,我在第四步的解释中犯了一个错误。正确的解释是: `c = b++ + 5` 中,先将变量 `b` 的值3赋给变量 `c` ,然后再将 `b` 的值自增,所以此时 `b` 的值变为 4。继续计算 `c = 3 + 5`,所以变量 `c` 的值为 8。非常抱歉对你的理解造成了困惑,感谢你的指正!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言拾遗02