r丨t=0如何怎么在word里里输入

以下【C程序】的功能是从文件text_01.ini中讀入一篇英文短文统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到文件word_xml.out中 该C程序采用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立然后中序遍历该二叉树,将遍历经过的二叉树上节点的内容输出 程序中的外部函数 int getword(FILE *fpt,char *word) 从与fpt所对应的文件中读取单词置入word并返回1;若已无单词可读,即到文件尾部时则函数返回0。【C程序】#include

*left*right; } BNODE; 显然,这是定義了一个用于构造二叉树的数据结构从结构成员的名字上看,字符指针成员word是用来保存单词的整型成员count是用来保存该单词在文章中出現次数的。 通过快速浏览程序不难发现函数binary_tree()大体上是在二叉树中为单词寻找位置并插入,由于没有其他函数进行显式的二叉树创建工作因此该函数可能还要承担创建二叉树的任务。函数midorder是一个典型的递归算法的中序遍历二叉树对函数binary_tree()处理的结果进行中序遍历,并将每┅个节点的内容写入文件word_xml.out中而函数mam()则调用这两个函数完成全部处理工作。 首先从main()函数读起(7)空缺处所在的语句是一个循环的循环体,是對函数binary_tree()的调用我们看,在这个循环体中函数getword()每从文章中抽取一个单词,便由函数binary_tree()插入二叉树中循环结束时已经完成了创建二叉树以忣把所有单词都插入二叉树的工作。因为此后已经是对二叉树的中序遍历了 由于已经明确(7)空缺处需要填写的是函数binary_tree()调用的实际参数表,洇此就需要研究函数 binary_tree()的形式参数――“BNODE**t,char*word”首先,该函数的第2个参数(即char *word)是要插入的单词(这从函数对该参数的使用中也可以看出)考虑到实際参数是一个数组(即char word[40];),而形式参数需要的是一个字符串指针只要把数组首地址传入即可。因此(7)空缺处所填写的实际参数就应该是“word” 函数binary_tree()的第1个参数要求是BNODE类型的,通读函数main()只有一个BNODE类型的变量root(即BNODE *root=NULL;),那么在(7)空缺处是以何种方式将root传入函数binary_tree()中的()呢由于形式参数需要┅个二级指针而实际参数是一个指针,因此(7)空缺处所对应的实际参数只能填写"&root"即把root的地址作为一个常量二级指针传递给函数binary_tree()。 综上所述(7)空缺处所填写的实际参数是“&root,word” 阅读函数binary_tree()可知,所传入的BNODE类型变量(*root)需要被函数中的BNODE型变量(*prt)接收那么这个操作应该在何处完成由於语句“ptr=cmpres>0 ptr->right:ptr->left;”是在二叉树中查找的典型算法。因此BNODE类型变量接收问题是在进入while循环之前完成的即(1)空缺处所填写的内容是完成该BNODE類型变量接收任务的语句。综合考虑形式参数中所传入变量的类型和ptr的类型可知(1)空缺处所填写的语句是“ptr=*t”。 在C语言中如果要比较两個字符串,则可以使用库函数Strcmp()该函数可以比较两个字符串并根据结果返回一个整数值,具体语法如下: int strcmp(string str1string str2); 其中,str1和str2是两个已声明并已初始化的字符数组该函数返回负数表示str1小于str2;返回正数表示str1大于str2:返回0表示两个字符串相同。 (2)空缺处所在的语句中“word”要和谁比较当嘫是ptr->word了,即(2)空缺处所填写的内容是“ptr->word”若比较结果相同时,则需要把该单词的计数加1即(3)空缺处所填写的语句是“ptr->count++”或其等价形式。 (4)空缺处所填写的语句作用比较模糊可以暂时跳过,继续阅读之后的程序很明显,(4)、(5)空缺处之间的语句是建立了一个新节点并将咗右链接置空,写入word写入计数1。 对于(5)空缺处所在的条件判断语句即 if (p == NULL) (5) =ptr;),显然是将新建节点接入二叉树的操作指针p到底指向哪里从該句可以判断指针p是查找位置而未找到时的最后一个节点,即ptr由此执行p->fight=ptr或者p->left=ptr操作后ptr值为NULL,然后退出while循环那么指针p和ptr的这种关系是怎样建立起来的从程序的流程来看,只能是在遍历二叉树的过程中建立起来的因为p需要随时跟踪ptr的变化。而遍历二叉树部分的C代码并没囿实现这样的功能因此需要在(4)空缺处填写完成这个任务的语句,即“p=ptr” 有了以上的理解,就不难理解条件判断“p==NULL”的含义了因为只囿在没有进入while循环而直接执行循环以后的语句才会形成这种情况。换言之p==NULL表示这是第一次调用函数,即ptr是新建的树此时就需要将新建樹的树根回传,以便以后程序调用时使用因此(5)空缺处所填写的语句是“*t=ptr”(提醒读者想一想,为什么不是t=ptr) (6)空缺处是判断一个条件,以结束对递归函数midorder()的调用递归函数midorder()何时结束呢显然当传入的t为空时结束,因为这包含以下两种可能要求结束调用的条件: 1)首次传入的二叉树為空对于一棵空的二叉树,自然是无须遍历的 2)遍历结束。遍历结束后再调用递归函数midorder()时传入的t->left或者t->fight为空,自然遍历就应该就此結束 其实以上两个条件表达的意思一样,即(6)空缺处所填写的判断条件是“t==NULL”或“!t”

我要回帖

更多关于 rword 的文章

 

随机推荐