B053

01-程序填空题 田少松, 软件154 312浏览

所属年份:2010.9;2011.3;2012.3

下列给定程序中,函数fun的功能是:统计带头结点的单向链表中结点的个数,并存放在形参n所指的存储单元中。
请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。

注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!

#include    <stdio.h>
#include    <stdlib.h>
#define    N    8
typedef  struct list
{
    int  data;
    struct list  *next;
} SLIST;

SLIST *creatlist(int  *a);
void outlist(SLIST  *);
void fun( SLIST  *h, int  *n)
{
    SLIST  *p;
    /**********found**********/
    ___1___=0;
    p=h->next;
    while(p)
    {
        (*n)++;
        /**********found**********/
        p=p->___2___;
    }
}

main()
{
    SLIST  *head;
    int  a[N]= {12,87,45,32,91,16,20,48}, num;
    head=creatlist(a);
    outlist(head);
    /**********found**********/
    fun(___3___, &num);
    printf("\nnumber=%d\n",num);
}

SLIST *creatlist(int  a[])
{
    SLIST  *h,*p,*q;
    int  i;
    h=p=(SLIST *)malloc(sizeof(SLIST));
    for(i=0; i<N; i++)
    {
        q=(SLIST *)malloc(sizeof(SLIST));
        q->data=a[i];
        p->next=q;
        p=q;
    }
    p->next=0;
    return  h;
}

void outlist(SLIST  *h)
{
    SLIST  *p;
    p=h->next;
    if (p==NULL)  printf("The list is NULL!\n");
    else
    {
        printf("\nHead ");
        do
        {
            printf("->%d",p->data);
            p=p->next;
        }
        while(p!=NULL);
        printf("->End\n");
    }
}

【参考答案】

(1) *n  
(2) next  
(3) head

【考点分析】
本题考查:变量赋初值操作;链表结点的数据域和指针域表示方法;函数调用。

【解题思路】
填空1:*n用来存放结点的个数,对其赋初值为0。
填空2:while循环用于遍历链表,循环一次,指针指向链表的下一个结点。
填空3:根据函数定义语句确定调用函数的实际参数,即fun(head,&num);。