全国计算机二级C语言改错题分析与解答

需积分: 1 0 下载量 49 浏览量 更新于2024-07-23 收藏 1.65MB DOC 举报
"全国计算机二级C语言改错题题库,包含两道具体题目,主要涉及链表操作和函数处理" 这篇资源提供了两道全国计算机二级考试中的C语言改错题,主要考察对链表操作和函数的理解。让我们逐一分析这两道题目。 1. 第一道题目: 这道题目涉及一个链表的实现,其中包含了定义链表节点结构体,找到链表中最大值的函数`fun`,以及输出最大值和链表内容的辅助函数`outresult`和`outlink`。 - 链表节点结构体定义: ```c typedef struct aa { int data; struct aa *next; } NODE; ``` 这里定义了一个名为`NODE`的结构体,包含了整型数据`data`和指向下一个节点的指针`next`。 - `fun`函数中存在问题: - 在`while`循环前,错误地将`p`指向了`h->next`,应当保持`p=h`不变,因为我们要遍历整个链表,包括头节点。 - 在`while`循环内,错误地使用`p=h->next;p=p->next;`来移动指针,应该改为`p=p->next;`来逐个访问节点。 修正后的`fun`函数应该如下: ```c int fun(NODE *h) { int max = -1; NODE *p = h; while (p) { if (p->data > max) max = p->data; p = p->next; // 移动指针到下一个节点 } return max; } ``` - `outresult`和`outlink`函数分别用于输出最大值和链表内容,这部分代码没有问题。 2. 第二道题目: 这道题目是一个简单的数学计算函数,目标是返回给定整数`m`的阶乘的倒数,并以双精度浮点数形式返回结果。 - `fun`函数: ```c double fun(int m) { double y = 1.0; int i; for (i = 1; i <= m; i++) { y *= i; // 计算阶乘 } return 1.0 / y; // 返回阶乘的倒数 } ``` 这个函数中没有明显的错误,可以正确计算阶乘并返回其倒数。 总结,这两道题目主要考察了链表操作(如遍历和查找最大值)以及基本的数学计算(阶乘的倒数)。通过改正错误,我们可以更好地理解和应用这些基本概念。在实际的计算机二级考试中,掌握这些基础知识是非常重要的。