【C语言程序设计】期末试题(卷)A卷涵盖了C语言的基础知识,包括字符常量、赋值语句、存储类型、数组、表达式计算、指针、函数声明与调用、预处理命令以及程序结构等多个方面。以下是这些知识点的详细解释:
1. **字符常量**:合法的字符常量使用单引号括起,例如'\x43'代表十六进制的字符。选项A的'\084'不是合法的八进制表示,C语言中八进制字符常量最多三位;选项C的'ab'不是一个字符,而是两个字符;选项D的"\"0\"是字符串常量,而非字符常量。
2. **赋值语句**:正确的赋值语句可以包含复合赋值运算符和条件运算符。选项A的`++t;`是自增操作符;选项B的`n1=(n2=(n3=0))`是合法的链式赋值;选项C的`k=i==j;`是条件赋值,如果`i==j`为真,则`k=1`,否则`k=0`;选项D的`a=b+c=13`在C语言中是错误的,因为赋值运算符不能链式用于等号的左边。
3. **静态变量**:静态变量在C语言中使用`static`关键字声明,它在程序的整个生命周期内只被初始化一次,存储在静态存储区。
4. **表达式计算**:`printf(“%d\n”,z=(x%y,x/y));`的输出取决于逗号运算符的优先级,先执行`x%y`,然后是`x/y`,所以结果是`x/y`的值。
5. **结构体变量**:结构体变量的大小是其所有成员变量大小之和。
6. **fread函数**:`fread(buffer, size, count, fp)`中的`buffer`是指向要读取数据的存储区域的指针。
7. **数组定义**:合法的数组定义中,选项A和C是错误的字符串定义,应该使用双引号;选项B的数组长度超过了初始化值,是非法的;选项D是正确的,因为它没有指定长度,且元素是整数。
8. **表达式计算**:`5>2>7>8`的结果是0,因为比较操作符`>`是右结合的,先计算`5>2`和`7>8`,再将结果进行比较。
9. **指针声明**:`double *p[6]`声明了p是一个指向double类型的指针数组。
10. **函数声明**:`void *fun( );`声明fun函数返回一个通用型指针,可以指向任何类型的数据。
11. **指针操作**:字母'o'可以通过`s[2]`或`(ps+=2)*ps`访问,但不能通过`ps+2`或`ps[2]`直接访问,因为`ps+2`指向的是`s`字符串的第三个字符地址,而`ps[2]`会解引用第三个字符的地址,这在未加解引用前无法获取字符。
12. **变量作用域**:主函数main中的变量只在其定义范围内有效,而不是整个程序。选项A表述错误。
13. **预处理命令**:预处理命令以`#`开头,如`#define`,在程序编译阶段处理。选项C表述错误,因为预处理是在执行过程之前完成的。
14. **宏定义及程序执行**:程序中的`ADD(m+n)*k`会先计算`m+n`,然后将结果传递给`ADD`,得到`2+2`,最后乘以`k`,因此`sum`的值是`12`。
15. **C语言特性**:C语言调用函数时,实参和形参之间是传值调用,形参不能影响实参。选项A正确,B、C、D错误,C语言不支持函数嵌套定义,函数可以无返回值,函数定义和调用可以分布在不同文件中。
16. **C语言程序结构**:C程序的主函数`main()`可以位于任何位置,但函数定义不能嵌套。选项B正确。
以上是对试卷中涉及的C语言知识点的详细解析,涵盖了基本语法、数据类型、表达式、函数、数组、指针和预处理等多个方面。