c语言期中考试错题汇总
期中考错题汇总
❌ 错题记录:C 语言八进制陷阱
题目:
1 | 4、【单选题】下列程序段输出结果为:( ) |
你的答案:
B. 12(错误)
正确答案:
C. 10
✅ 解析:
关键点:012 是八进制数
- C 语言中,以 0 开头的整数是八进制(base 8)
012= 八进制 12 = 十进制1*8 + 2 = 10
所以:
1 | y = 10 |
表达式:y \* x++
x++是后置自增:先使用,再自增- 表达式中使用的是 x = 1
- 用完之后 x → 2(但与输出无关)
因此:
1 | y * x++ = 10 * 1 = 10 |
🎯 最终输出:
1
10
1 | 10 |
🔹 题目 10:赋值表达式右结合陷阱
题目
执行以下语句后,a 的值为多少?
1 | a = 5; |
选项:
- A. 15
- B. 10
- C. 20
- D. 5
我的答案
D. 5(错误)
正确答案
B. 10
✅ 解析
表达式:
1 | a += a = 5; |
关键点:
① 赋值运算符 = 的结果值是右侧的值
所以:
1 | (a = 5) 的结果值是 5 |
② 赋值表达式从右向左结合
所以执行顺序是:
1 | a = 5; // 第一次赋值 |
③ 执行过程逐步展开:
执行
a = 51
a = 5
计算右边
(a = 5)1
2a = 5
表达式值为 5执行
a += 5
等价于:1
a = a + 5 = 5 + 5 = 10
🎯 最终结果
1
a = 10
1 | a = 10 |
🔹 题目 16:if 语句作用域被逗号误读
题目
1 | int i, x, y; |
我的答案
9 8 15(错误)
正确答案
9 1 20
错误原因(关键点)
x += i,这一行末尾没有分号- 下面的
i++实际上是和上面一起属于 if 语句块
也就是说:
1 | if (i % 2) { |
你原本把它误解成:
1 | if (i % 2) |
因此 if 每次只在奇数 i 才会执行两句,而你之前把第二句当成 if 外的逻辑,导致结果计算错误。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 mymod的博客!
