问答题

【说明】本程序从正文文件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
本处填空是函数binary_tree的开始处,进行初始化,应该是让指......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题