析】本题考察C语言中字符串处理函数的理解。fun函数的目的是通过指针操作复制字符串。函数中的while循环条件是(*b=*a)!='\0',这表示将*a指向的字符赋值给*b,然后同时移动a和b指针,直到遇到字符串结束符'\0'。因此,这个函数实现了将a所指字符串赋值给b所指空间的功能,选项A正确。
9. C语言中的预处理指令#define用于创建宏定义,它可以用来创建常量或者简单的代码替换。例如在问题4中,宏定义`#define N 5`和`#define M N+1`分别定义了整型常量N和M,M的值为6。宏定义`#define f(x) (x*M)1 / 24`定义了一个函数式宏f(x),但需要注意,宏展开是在预处理阶段完成的,不会进行任何类型的检查和计算,所以f(1+1)在宏展开时会被替换为(1+1*N)1 / 24,这里出现了语法错误,因为1后面跟着1 / 24,没有空格,这在C语言中是非法的。实际的宏展开应该是(2*6)1/24,其中的1/24会被当作整数除法,结果为0,所以宏f(x)在宏展开后会有错误。
10. 在C语言中,指针是一个重要的概念,它存储了变量的内存地址。在问题1中提到,指针变量定义的格式是(类型名 *指针变量名),例如`int *p`定义了一个指向整型变量的指针p。指针可以通过取地址运算符`&`获取变量的地址,如`&x`。指针可以用来遍历数组、操作链表、动态内存分配等,但需要注意,未初始化的指针不能直接使用,否则可能导致未定义行为。
11. 文件操作是C语言中的一项重要内容。在问题2中,feof函数用于检测是否到达文件末尾。当读取文件时,如果到达文件末尾,feof函数返回非零值,否则返回0。因此,在题目中,如果fp已经到达文件末尾,feof(fp)返回非零值,选项C正确。
12. 结构体是C语言中复合数据类型的一种,允许我们创建包含不同类型数据的自定义类型。在问题5中,结构体类型`struct A`包含了整型、字符数组和双精度浮点型字段。当传递结构体给函数时,如`f(a)`,是按值传递的,这意味着在函数内部对结构体的修改不会影响到原来的结构体实例。因此,即使在f函数中改变了结构体成员的值,原结构体的值也不会改变,程序输出结果是D) 1001,ZhangDa,1098.0。
13. 链表是C语言中常用的数据结构之一,问题6涉及到链表节点的删除操作。要删除链表中的一个节点,通常需要更新前一个节点的next指针以指向被删除节点的下一个节点,然后释放被删除的节点。根据题目描述,选项A中的操作`p->next=q->next;free(q);`正确地完成了这个任务。
14. 结构体类型声明和变量定义的语法在问题7中进行了测试。选项B是正确的,它首先定义了一个名为REC的结构体类型,然后创建了两个REC类型的变量t1和t2。其他选项都存在语法错误,如分号的位置不当,或者试图在定义类型的同时初始化变量。
15. 函数`fun(char *a, char *b)`在问题8中处理了字符串复制。通过循环,它将*a所指向的字符逐个赋值给*b,直到遇到字符串结束符`\0`,这样就完成了字符串的复制。因此,选项A“将a所指字符串赋给b所指空间”是对这个函数功能的正确描述。
总结以上内容,全国计算机二级考试C语言中的易错知识点包括但不限于指针的定义和使用、文件操作、宏定义、结构体操作、链表处理、字符串处理以及预处理指令的理解。掌握这些知识点对于成功通过考试至关重要。考生需要特别注意指针操作的正确性、宏定义的副作用、结构体传值和传址的区别以及字符串复制函数的工作原理。通过大量练习和理解,可以有效避免在考试中出现这些常见的错误。