武汉大学C语言期末试题解析

需积分: 9 7 下载量 101 浏览量 更新于2024-09-15 收藏 83KB DOC 举报
"武汉大学2007级C语言期末试卷包含了多项选择题,主要测试学生对C语言的基础知识,包括变量操作、表达式语法、逻辑运算符、指针、结构体、数组以及算术运算的优先级和类型转换等。" 在C语言中,这些知识点是至关重要的: 1. **变量操作与逻辑运算符**:题目中的第一题考察了逻辑运算符`||`的用法。在C语言中,逻辑或`||`运算符遵循短路原则,如果左边的表达式足以确定整个表达式的真伪,右边的表达式就不会再被执行。在 `(m+=2)>=7 || ((n-=3)<10)` 中,`m` 加 2 后会变为 7,使得 `(m+=2)>=7` 成立,因此右边的表达式不会被执行,`n` 的值保持不变。所以答案是 `7和3`。 2. **表达式语法**:第二题询问了不符合C语言语法的表达式。在C语言中,表达式 `w+=-2` 是合法的,`a+=a-=(b=4)*(a=3)` 允许复合赋值和链式操作,但 `x%(-3)` 是非法的,因为 `%` 运算符不适用于浮点数,且除数不能为负。选项 `k=(a=2,b=3,a+b)` 使用逗号运算符也是合法的。因此,答案是 `D.x%(-3)`。 3. **逻辑运算与赋值运算**:第三题中,`a/=b+(b&&c);` 表达式中,`b&&c` 的结果是 `1`(布尔逻辑,非零表示真),因此 `a` 被 `b+1` 除,由于 `b` 是 `10`,所以 `a` 变为 `1`。答案是 `1`。 4. **预处理器宏**:第四题涉及宏展开和计算顺序。`M1` 和 `M2` 都会被替换,`M1` 展开为 `5*3`,`M2` 展开为 `5*2`,但在 `#include` 之前的宏定义会优先展开,所以 `M1+M2` 结果为 `15+10`,即 `25`。答案是 `25`。 5. **指针操作**:第五题考察如何正确地让指针 `p` 指向结构体 `data` 中的 `a` 域。正确的方法是 `p=&data.a;`,这样 `p` 就指向了 `data` 结构体内的 `a` 字段。答案是 `p=&data.a;`。 6. **指针与数组**:第六题涉及指针的递增和加法运算。`*p++` 会先访问并修改 `p` 所指的值,`*p` 即 `a[0]` 变为 `11`,然后 `p` 自增,现在 `p` 指向 `a[1]`;`*p+=1` 使 `a[1]` 变为 `12`。因此,最终的数组值是 `11,12,12`。答案是 `11,12,12`。 7. **算术运算**:第七题的表达式 `2.5 + 5 % 2 - 1 / 2 * 2` 中,整数除法 `1 / 2` 结果为 `0`,`5 % 2` 结果为 `1`,所以表达式变为 `2.5 + 1 - 0`,计算得到 `3.5`,但题目中显示结果为 `-2.5`,可能存在错误,因为正常的计算结果应该是 `3.5`。 这些题目覆盖了C语言的关键概念,包括变量、运算符、表达式、宏、指针和数组,这些都是编写C程序时必备的知识。学习者应该深入理解这些概念,以便更好地掌握C语言编程。