数据结构课设报告--词频统计系统的设计_第1页
数据结构课设报告--词频统计系统的设计_第2页
数据结构课设报告--词频统计系统的设计_第3页
数据结构课设报告--词频统计系统的设计_第4页
数据结构课设报告--词频统计系统的设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上沈阳航空航天大学课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目:词频统计系统的设计院(系):专 业:计算机科学与技术班 级:学 号:姓 名:指导教师:完成日期:2012年01月11日专心-专注-专业目录第1章 概要设计1.1题目的内容与要求 内容:打开一篇英文文章,统计每个词在该文章中的出现频率,然后根据用户输入的两个阈值a和b,将词频大于a的和词频小于b的所有单词输出。要求: 1) 独立完成系统的设计、编码和调试;2) 系统利用C语言实现;3) 按照课程设计规范书写课程设计报告。1.2总体结构 本程序主要分为五个模块:主函数模块,读取单词函数模块,

2、显示单词统计函数模块,单词统计函数模块,单词添加函数模块。主函数模块:先调用读取单词函数,然后根据用户输入的阈值调用显示单词统计函数输出结果。读取单词函数模块:打开用户输入的文件,调用单词统计函数,然后关闭文件。显示单词统计函数模块:将链表中频率大于a且小于b的单词输出在操作界面上。单词统计函数模块:用户输入的文章以字符的形式进行判断,如果该字符为字母(包括“”),则添加到单词数组中,否则,调用单词添加函数添加一个新单词。单词添加函数模块 首先将要添加单词首字母改为小写,然后判断该单词在链表中是否存在,若存在,则出现频率加1,否则在链表中创建一个新的节点,将该单词信息放到该节点中。 主函数ma

3、in( ) 读取单词函数ReadWord( )显示单词统计函数ShowWord( int a,int b) 单词统计函数WordCount( )单词添加函数AddWord(char *ww) 图1.1 总体结构示意图第2章 详细设计2.1主函数模块打开一篇英文文章,统计每个词在该文章中的出现频率,然后根据用户输入的两个阈值a和b,将词频大于a的和小于b的所有单词输出。其中首先调用读取单词函数ReadWord()统计文章中的单词,然后由用户输入阈值a和b,通过调用显示单词统计函数ShowWord( int a,int b)将词频大于a小于b的所有单词输出。 开始 进入读取单词函数 ReadWor

4、d()模块输入阈值a和b进入显示单词统计函数ShowWord( int a,int b)模块 结束图2.1 主函数模块流程图2.2读取单词函数模块此函数主要作用是打开用户需要打开的英文文章,首先在界面上输出"请输入要读取的单词文件名如:test.txt:",待用户输入一个文件名后,打开该文件,然后调用单词统计函数WordCount( )对该英文文章进行单词统计,最后关闭文件。 开始fp,name输入文件名namefp=fopen(name,"r")进入单词统计函数WordCount( )模块 fclose(fp) 结束 图2.2 读取单词函数模块流程图2

5、.3显示单词统计函数模块此函数主要作用是根据用户输入的阈值a和b,把词频大于a和小于b的所有单词输出。其中先定义一个链表指针p,让其指向头结点,判断其若为空,则结束,否则将该节点内单词频率与阈值比较,若满足要求,则输出该节点内单词,然后指向下一个节点,若不满足,则直接指向下一节点,继续判断节点是否为空,如此循环,直至结束。 开始 *p,a,bp=headp!=NULL N Y词频大于a且小于b N Y输出该单词p=p->next 结束图2.3 显示单词统计函数模块流程图2.4单词统计函数模块此函数主要作用是对该英文文章中每个单词出现频率的统计。首先,该文章以字符的形式进行读取,判断每一个

6、字符是否为字母,如果该字符为字母(包括“”),则添加到单词数组中,否则,调用单词添加函数AddWord(char *ww)添加一个新单词。 开始 i=0,j=0word ,c文件未执行完 N Yfscanf(fp,"%c",&c)wordj='0'c为字母 N j>0 Ywordj=c N YAddWord(word) j+j=0 i+ 结束图2.4 单词统计函数模块流程图2.5单词添加函数模块此函数作用主要是添加单词。首先将要添加单词首字母改为小写(若首字母为大写字母,则该字母ASCII码加32),然后判断该单词在链表中是否存在,若存在,则出

7、现频率加1,否则在链表中创建一个新的节点,将该单词信息放到该节点中。 开始首字母改为小写单词在链表中新建节点 否 是添加单词信息 频率加1 结束 图2.5 单词添加函数模块流程图第3章 调试分析调试分析包括以下的几个方面:(1)一开始拿到这个题目时无从下手,刚开始就在用树还是用链表上无法选择,后来发现这个题目的要求不是很复杂,用链表就可完成其数据的处理,最终选择用链表来处理这个题目。 (2)词频统计系统要首先打开一篇文章,因此我选择以一个一个字符的形式对文章进行处理,先判断字符是否为字母,然后对单词用链表进行处理,链表的每个节点代表一个单词,该节点中存储该单词的频率,通过单词频率与阈值的比较,

8、把满足要求的单词筛选出来,最终输出到操作界面上,完成对整篇文章每个单词词频的统计。(3)在程序的调试过程中,我也出现了一些问题,首先没有解决好单词的比较问题,后来通过书本找到了用于字符串比较的函数以及字符串复制的函数,大大的减轻了我编程的难度。第4章 使用说明 运行操作及结果: 进入主界面,输入所要操作文件名。图4.1 输入文件名菜单输入阈值图4.2 输入阈值菜单词频统计结果显示图4.3 最终结果显示 程序所操作原文件。图4.4 程序所操作的文件参考文献1 严蔚敏,吴伟民 . 数据结构:C语言版M. 北京:清华大学出版社,20072 王敬华,林萍 . C语言程序设计教程M. 北京:清华大学出版

9、社,20093 严蔚敏. 数据结构习题集M.北京:清华大学出版社,2009附 录(程序清单)#include <stdafx.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define File_Name_Max 30/文件名最大长度#define Word_Max_Size 60/每个单词最大长度typedef struct word/连表 单词结构char wWord_Max_Size;/单词int count;/个数struct word *next;Link;Link

10、 *head=NULL;/连表头FILE *fp;/文件指针int count=0;int IsNotWord(char a)/判断是否为字母 if(a <= 'z' && a >= 'a')return 0;else if(a <= 'Z' && a >= 'A')return 0;else if(a = ''')return 0;elsereturn 1;void AddWord(char *ww)/添加单词Link *p1,*p2;if(ww0

11、<= 'Z' && ww0 >= 'A')/转成小写字母ww0+=32;for(p1=head;p1!=NULL;p1=p1->next)/判断单词在连表中是否存在if(!strcmp(p1->w,ww)p1->count+;/存在就个书加1return;/不存在添加新单词p1=(struct word *)malloc(sizeof(word);strcpy(p1->w,ww);p1->count=1;p1->next=NULL;count+;if(head=NULL)head=p1;elsefo

12、r(p2=head;p2->next!=NULL;p2=p2->next);p2->next=p1;void WordCount()/统计单词int i=0,j=0;char wordWord_Max_Size,c;while(!feof(fp)fscanf(fp,"%c",&c);if(IsNotWord(c)wordj='0'if(j>0)AddWord(word);j=0;elsewordj=c;j+;i+;void ReadWord()/读取文件中的单词char nameFile_Name_Max;printf(&qu

13、ot;请出入要读取的单词文件名如:test.txt:");scanf("%s",name);getchar();fp=fopen(name,"r");WordCount();fclose(fp);void ShowWord(int a,int b)/显示单词统计情况Link *p;printf("个数t单词n");for(p=head;p!=NULL;p=p->next)if(p->count > a)&&(p->count < b)printf("%dt%sn&quo

14、t;,p->count,p->w);int main()ReadWord();int a,b;printf("请输入阈值a和b如:2 10:");scanf("%d %d",&a,&b);getchar();ShowWord(a,b);getchar();课程设计总结:通过这次课程设计中对词频统计系统的设计,使我对文件以及链表有了新的了解和认识,让我受益匪浅。也让我知道在数据结构的领域还有许多需要我去学习的地方。在做这次课设之前,也学习了数据结构这门学科的初步知识 ,但是并不知怎样才能自己编写和更好的利用, 但通过这次课设,经过查找资料,并且通过老师和同学的帮助终于能够完成这项任务,并且掌握了运用方法,使我增强了数据结构的兴趣,同时还增强了我的动手能力和逻辑思维,提高了自己的编程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论