网友您好, 请在下方输入框内输入要搜索的题目:
阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。
【说明】
本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。
程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉树上的结点内容输出。
【函数】
include <stdio.h>
include <malloc.h>
include <ctype.h>
include <string.h>
define INF "text.in"
define OUTF "word.our'
typedef struct treenode {
char *word;
int count;
struct treenode *left, *right;
} BNODE;
int getword(FILE *fpt, char *word)
{ char c;
c=fgetc(tpt);
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, ptr->word);/* 保存当前比较结果 */
if (!compres)
{ (2); return;}
else
{ p=ptr;
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);
(3);
if (p==NULL)
*t=ptr;
else if (compres>0)
p->right=ptr;
else
p->left=ptr;
}
void midorder(FILE *fpt, BNODE *t)
{ if (t==NULL)
return;
midorder(fpt,(4));
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((5));
fclose(fpt);
fpt=fopen(OUTF, "w");
if (fpt==NULL)
{ printf("Can't open fife %s\n", OUTF);
return;
}
midorder(fpt, root);
fclose(fpt);
}
参考答案