这份文档是华南理工大学2020-12学年《初级语言程序设计 I》课程的期末考试试卷(A卷),包含选择题和简答题,主要考察C++编程语言的基础知识。以下是根据试卷内容提炼出的一些关键知识点:
1. **常量**:常量是不能被修改的值,题目中提到了合理常量表示的选择题,例如 `(A) 'program'` 是不合法的,因为单引号用于表示字符常量,而 `program` 是一个单词,不是一个字符。
2. **运算符优先级**:在表达式中,运算符的优先级会影响计算的顺序。例如,`--`、`=`、`->` 和 `[]` 运算符中,`--` 的优先级是最高的,然后是 `->`,接着是 `[]`,最后是 `=`。
3. **逻辑运算符**:`&&`(逻辑与)和 `||`(逻辑或)用于组合布尔表达式,`!`(逻辑非)用于反转布尔值。在逻辑表达式 `x!=0&&y!=0` 和 `x&&y` 中,前者表示 x 和 y 都不为零,后者表示 x 和 y 至少有一个为真。
4. **指针和数组**:指针可以用来存储数组的首地址,通过指针可以访问数组元素。例如,`iArray+1` 表示数组的第二个元素的地址,`*(*(iArray+1))` 访问第二个元素的值,即 `iArray[1][0]`。
5. **循环控制**:`for` 循环的语法结构包括初始化、条件检查和迭代部分。例如,`for(int i=10;i>0&&i%2;){ i=i-2; }` 表示当 `i` 大于0且是奇数时执行循环体,循环体将 `i` 减2,因此循环次数是5次。
6. **函数指针**:`typedef int (*pType)(int,int)` 定义了一个指向接受两个整数参数并返回整数的函数的指针类型。`pf` 是一个这种类型的指针,可以用来调用函数。正确调用 `pf` 的方式是 `(*pf)(1,2)`。
7. **字符串处理**:字符串在C++中是字符数组。例如,`char *a[]` 是一个字符串指针数组,`cout<<a+3` 输出的是数组中第三个字符串的首地址,也就是 "c++"。
8. **比较字符串**:比较两个字符串是否相等通常使用 `strcmp()` 函数,而非直接比较指针。`strcmp(s1, s2)==0` 表示两个字符串相等。
9. **运算符的优先级和结合性**:例如,`'F'-'C'` 是字符差,`*` 和 `/` 的优先级高于 `+` 和 `-`,而括号具有最高优先级。表达式 `30*(‘F’-‘C’)/5-2*3` 的计算涉及这些规则。
10. **类型转换**:在C++中,不同类型的数据可以相互转换,但需要注意潜在的精度损失或溢出问题。例如,`a+xp+1` 中,`a` 是 `int` 类型,`xp+1` 是 `int *` 类型,需要类型转换才能进行加法运算。
11. ** sizeof 运算符**:`sizeof` 返回一个类型或表达式的大小(以字节为单位)。在表达式 `sizeof(char)+6*(6>5)/(2>3?2:3)` 中,`sizeof(char)` 返回1,`6*(6>5)/(2>3?2:3)` 的值是4,因此整个表达式的结果取决于 `sizeof(char)` 和计算结果的结合。
简答题涉及的方面包括:
1. **逻辑表达式**:要求考生写出表示两个变量不等于零的逻辑表达式,如 `x!=0&&y!=0`。
2. **循环次数**:考察了 `while` 循环的执行次数及结束时变量 `x` 的值。题目中的循环会在 `x` 递减至0时结束,因此循环体执行10次,`x` 的最终值是0。
3. **表达式类型**:分析了表达式的类型,如 `a+x` 是 `int` 类型,`a+xp+1` 是 `int *` 类型,以及 `double` 类型与 `int` 类型的转换。
以上知识点涵盖了C++的基础语法,包括常量、变量、运算符优先级、逻辑表达式、指针、数组、字符串、函数指针、循环控制、类型转换和表达式求值等方面,这些都是学习C++时必须要掌握的关键概念。