问答题【说明】本程序从正文文件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);