B050

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

所属年份:2010.9;2011.3;2012.3;

下列给定程序中,函数fun的功能是:在带头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。
请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。

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

#include    <stdio.h>
#include    <stdlib.h>
#define    N    8
typedef  struct list
{
    int  data;
    struct list  *next;
} SLIST;
SLIST *creatlist(char  *);
void outlist(SLIST  *);
int fun( SLIST  *h, char  ch)
{
    SLIST  *p;
    int  n=0;
    p=h->next;
    /**********found**********/
    while(p!=___1___)
    {
        n++;
        /**********found**********/
        if (p->data==ch)  return ___2___;
        else  p=p->next;
    }
    return 0;
}

main()
{
    SLIST  *head;
    int  k;
    char  ch;
    char  a[N]= {'m','p','g','a','w','x','r','d'};
    head=creatlist(a);
    outlist(head);
    printf("Enter a letter:");
    scanf("%c",&ch);
    /**********found**********/
    k=fun(___3___);
    if (k==0)   printf("\nNot found!\n");
    else       printf("The sequence number is :  %d\n",k);
}

SLIST *creatlist(char  *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("\nThe list is NULL!\n");
    else
    {
        printf("\nHead");
        do
        {
            printf("->%c",p->data);
            p=p->next;
        }
        while(p!=NULL);
        printf("->End\n");
    }
}

【参考答案】

(1) NULL  
(2) n  
(3) head,ch

【考点分析】
本题考查:链表相关知识;while循环语句;函数返回值。

【解题思路】
填空1:while循环语句判断是否到达链表结尾,链表结尾结点指针域是NULL。
填空2:若找到指定字符,则通过return语句将该结点在链表的顺序号返回给main函数。
填空3:函数调用语句,其形式是:函数名(实际参数表),因此根据函数定义语句,填入:head,ch。