阅读下列C程序和程序说明,将应填入(n)处的字句写在对应栏内。 【说明】本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。 程序用一棵有序二叉树存

admin2009-02-15  28

问题 阅读下列C程序和程序说明,将应填入(n)处的字句写在对应栏内。
   【说明】本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。
   程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉树上的结点的内容输出。
   #include  <stdio.h>
   #include  <malloc.h>
   #include  <ctype.h>
   #include  <string.h>
   #define   INF    "text.in"
   #define   OUTF    "wotd.out"
   typedef struct treenode{
        char *word;
        int  count;
        struct treenode *left,*right;
   }BNODE
   int getword (FILE *fpt,char *word)
   {  char c;
      c=fgetc (fpt);
      if  ( c=EOF)
            return 0;
      while(!(tolower(c)>=’a’ && tolower(c)<=’z’))
      {  c=fgetc (fpt);
         if  ( c==EOF)
               return 0;
      }  /*跳过单词间的所有非字母字符*/
      while (tolower (c)>=’a’ && tolower (c)<=’z’)
      {  *word++=c;
         c=fgetc (fpt);
      }
      *word=’\0’;
      return 1;
   }
   void binary_tree(BNODE **t,char *word)
   {    BNODE  *ptr,*p;int compres;
        P=NULL;  (1);
        while  (ptr)  /*寻找插入位置*/
        {  compres=strcmp (word,  (2)  );/*保存当前比较结果*/
           if (!compres)
           {    (3);return;}
           else
           {    (4);
              ptr=compres>0? ptr->right:ptr->left;
           }
       }
       ptr=  (BNODE*) malloc (sizeof (BNODE)) ;
       ptr->left = ptr->right = NULL;
       ptr->word=  (char*) malloc (strlen (word) +1) ;
       strcpy (ptr->word, word);
       ptr->count - 1;
       if (p==NULL)
             (5);
       else if  (compres > 0)
           p->right = ptr;
       else
           p->left = ptr;
   }
   void midorder (FILE **fpt, BNODE *t)
   {   if (t==NULL)
            return;
       midorder (fpt, t->left);
       fprintf (fpt, "%s %d\n", t->word, t->count)
       midorder (fpt, t->right);
   }
   void main()
   {   FILE     *fpt;  char word[40];
       BNODE   *root=NULL;
       if ((fpt=fopen (INF,"r")) ==NULL)
       {    printf ("Can’t open file %s\n", INF )
            return;
       }
       while (getword (fpt, word) ==1 )
            binary_tree (&root, word );
       fclose (fpt);
       fpt = fopen (OUTF, "w");
       if (fpt==NULL)
       {    printf ("Can’t open file %s\n", OUTF)
            return;
       }
       midorder (fpt, root);
       fclose(fpt);
   }

选项

答案(1)ptr=*t (2)ptr->word或 (*ptr).word 或ptr[0].word (3)ptr->count++ (4)p=ptr (5)*t=ptr

解析 (1)ptr=*t
   本处填空是函数binary_tree的开始处,进行初始化,应该是让指针ptr指向树的根结点*t。因此应该填入:ptr=*t。
(2)ptr->word或  (*ptr).word  或ptr[0].word
   本处填空是将要插入的单词word与当前指针ptr所指的结点的word比较大小。
(3)ptr->count++
   本处填空是当要插入的单词word与指针ptr所指的结点的word相同时的处理,必然是将指针ptr所指结点的计数器count加1。因此应该填入:ptr->count++。
(4)p=ptr
   本处填空是当要插入的单词word与指针ptr所指结点的word不相同时的处理,必然是让p指向ptr,而ptr指向其左子树或右子树。因此应该填入:p=ptr。
(5)*t=ptr
   本处填空是当p为空时的处理,应该是让树的根结点指针指向ptr以便返回。
转载请注明原文地址:https://kaotiyun.com/show/DwDZ777K
0

相关试题推荐
最新回复(0)