【知识点详解】
1. **C语言程序结构**:C语言中的`main()`函数的位置是任意的,可以在程序的任何位置,选项C正确。
2. **字符变量**:字符变量可以存储一个字符,`'\t'`代表制表符,占一个字节,所以选项C正确。
3. **输入输出函数**:将字符串输入到数组中,应使用`gets()`函数,选项B正确。`printf()`用于输出,`scanf()`通常用于从键盘读取格式化的输入,而`puts()`用于输出字符串。
4. **算术运算**:在C语言中,整数除法会去掉小数部分,因此`n/m`为1,`(int)(a+b)`的结果是3(2.2+1.5的整数部分),`%2`是求余运算,3%2=1,所以整个表达式的值为2,选项C正确。
5. **逻辑运算符**:`! (e+1)`等价于`e <= -1`,因为`e+1`的结果为非零即真,取反即假,即`e <= -1`为真,选项D正确。
6. **嵌套if语句**:该程序段中,由于`a<b`成立,然后`a<c`也成立,执行`c--`,因此`c`的值变为1,选项B正确。
7. **循环与条件判断**:该段代码用于统计数组中被3整除的元素个数,但不包括0,因此`c`的值为2,选项B正确。
8. **宏定义与函数调用**:宏`PII`定义为3,`S(c)`会被展开为`PII*c*c`,此时`c`的值为3(`a+b`的结果),所以输出结果为27,选项B正确。
9. **数组引用**:数组下标不能超过数组长度减一,所以`a[4]`是非法引用,选项D错误。
10. **指针运算**:表达式中能给出int类型数值的是`p-d`,它表示两个指针间的距离,选项D正确。
11. **字符串比较**:在C语言中,字符串比较应该使用`strcmp()`函数,当返回值为0时,表示两字符串相等,因此选项D正确。
12. **函数声明**:函数`hex2dec`应该返回一个整数值,因此其声明应该是`int hex2dec(char str[])`,选项A正确。
13. **结构体运算**:结构体数组`stu`的前两个成员之和的平均值为`(90+91.5)/2`,结果是90.75,但浮点数在C语言中不能精确表示,通常会四舍五入到最近的整数,所以选项B的91.5可能是编译器处理的结果。
14. **文件操作**:在C语言中,要将文件位置指针重新定位到文件开头,应使用`rewind()`函数,选项B正确。
15. **链表操作**:要输出链表中间节点(数据为E的节点),应先移动指针`p`到第二个节点,然后将`q`指向`p`的下一个节点,即`q=p->next;`,再输出`q->data`,选项B正确。
**程序填空题1**:
题目要求根据输入的`a`和`n`输出特定的表达式。这涉及到字符串处理和嵌套循环。`n`次2的连加可以通过嵌套循环实现,外层循环控制次数,内层循环构建2的连加。具体实现可能如下:
```c
for(int i=1; i<=n; i++) {
for(int j=0; j<i; j++)
printf("2");
printf("+");
}
```
注意,题目未提供完整的程序,这部分需要补充完整并正确嵌入到程序中。
以上就是针对给定的C语言试卷中各个知识点的详细解析,涵盖了程序结构、数据类型、输入输出、算术运算、逻辑运算、控制结构、数组、指针、字符串、结构体、文件操作和链表操作等多个方面。