二级C语言考试填空题解析

需积分: 10 0 下载量 102 浏览量 更新于2024-07-24 收藏 292KB DOC 举报
"计算机二级C语言题库填空题,包含2014年3月份的考试填空题目,主要涉及C语言程序设计,包括链表操作和数据处理。" 在给定的C语言代码中,我们需要填充两个空缺的地方,以实现计算带有头结点的单向链表中所有结点数据域之和的功能。首先,我们来分析这段代码。 代码定义了一个结构体`SLIST`,代表链表中的一个节点,包含一个整型数据域`data`和一个指向下一个节点的指针`next`。`creatlist`函数用于创建链表,而`outlist`函数用于输出链表。主要关注的`fun`函数则用于计算链表中所有节点的数据之和。 在`fun`函数内部,我们有一个指针`p`,它初始化为头结点`h->next`。这是因为`h`本身是头结点,而数据域的和应该从第一个实际数据节点开始计算,即`h->next`。然后,我们用`while`循环遍历链表,直到`p`为空,即遍历完整个链表。 现在,我们来看需要填写的两处空缺: 1. `s+=p->___1___;` 这里,我们需要填入`p`指向的节点的数据域,即`p->data`。因此,正确的代码应该是: ```c s += p->data; ``` 2. `p=p->___2___;` 这里,我们需要更新`p`使其指向下一个节点,即`p->next`。所以,正确的代码是: ```c p = p->next; ``` 将这两个填充回原代码,完整的`fun`函数应该是这样的: ```c int fun(SLIST* h) { SLIST* p; int s = 0; p = h->next; while (p) { s += p->data; p = p->next; } return s; } ``` 在`main`函数中,创建了一个数组`a`,并用其初始化了一个链表`head`,然后调用了`outlist(head)`输出链表,并调用`fun(head)`计算链表的和。 总结来说,这个填空题考察了C语言中链表的处理,特别是如何遍历链表并访问每个节点的数据域。理解链表结构和指针操作是解答此类问题的关键。在实际编程中,这样的功能常用于链表的遍历、统计和操作。