




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告(英文词汇的统计)题目:对英语范文中词汇的统计一.需求分析(1).程序将读取C盘根目录下的一个名为test.txt的文本文件,然后循环输入文件中的字符.程序只会处理大写或者小写的英文字符,对其余的任何字符会进行输入,但是不会进行任何处理.当遇到文件结束符EOF后停止输入并显示出对所有单词的统计.最后程序会要求输入需要查询的单词个数及需要查询的单词.查询完毕后程序结束.(2).程序在执行后先输出对文本中所有单词的统计,之后会提示用户输入需要查询的单词数量N,再提示N次输入需要查询的单词,每次输入完毕后输出查询结果.(3).本程序能对文本中所出现的英文单词及单词出现的次数进行统计,最后提供给用户查询.(4).测试数据(1).(在文本中输入) abc abc acb bca bcc.bca,./;bac acb /bcc输出:abc:2 acb:2 bca:2 bcc:2 bac:1若C盘跟目录下没有名称为test.txt的文本文件.则输出”文件不存在”后程序自动结束,若文本为空,程序会输出文本为空的提示后自动结束.二.概要设计 为了实现上述功能,应使用链表储存每一个得到的新单词.所以需要一个抽象数据类型:有序表.1.有序表的抽象数据类型定义为:ADT word 数据对象:D=ai|ai=0数据关系:R1=|ai-1,aiD,ai-1next=head-next;head-next=p; /使用头插法插入新节点p- vocabulary=d; /给新节点数据域赋值p-num=1;Int findwords(word *head,d)Find=(word *)malloc(sizeof(word);Find=head;If(find- vocabulary=p) Return 0; /查找到,返回1Else Return 0; /未找到.返回0Void printwords(word *head)P=head;If(p!=NULL) Printf(p- vocabulary); /输出每个节点的数据域 Printf(p-num); P=p-next;Void searchwords(word *head,d)Find=(word *)malloc(sizeof(word);Find=head-next;If(find- vocabulary=d) Printf(find-num); /输出找到的节点数据域的值 Break; /跳出循环Else Find=find-next; /查找下一节点3. 函数的调用关系图反映了演示程序的层次结构:Main Findords Newords Printwords Searchwords四.调试分析1.由于对线性表的算法了解不足,在第一次尝试建立线性表的时候头节点未与其后部分链接起来.2.在写findwords函数的时候忘记在查找成功后使用break语句退出循环,这样每次查找都要遍历链表,导致程序运行效率低下.3.字符串处理部分在程序写好后才想起使用strcmp,strcpy等字符串处理函数提高效率.4.本程序的模块划分比较合理,不同功能的实现有对应的函数,使程序代码简单易懂,同时也方便调试.其中字符串处理部分未独立为函数的原因是在若函数中处理好字符串再返回主函数时使用指针容易导致错误,所以在主函数中处理好再使用.头节点在主函数中定义好也方便新建节点函数反复调用以完成头插建立链表的过程.5. 算法的时空分析1). 基于有序链表实现的有续集的各种运算和操作的时间复杂度分析如下:构造和插入有序表算法中,有序表的长度为n,所以此算法的时间复杂度为O(n).同时,输出线性表的时间复杂度也为O(n).查找线性表的时间复杂度也为O(n).2). 在对字符串的处理部分中,设文本长度为n,由于字符串是全部被输入,非字母部分将被排除,设字母长度为m,所以此部分的时间复杂度为O(m+n).3). 在线性表建立部分,头节点和新的建立只需要建立一个,所以空间复杂度为O(1).在字符串处理部分,需要建立一个字符串保存,一个字符串传递所得到的单词,每建立一个节点需要一个,所以空间复杂度为O(n+1).6. 本专业设计习题将结构体,有续表和字符串处理放在一起进行考察,在了解所有部分的使用的同时,也使我们在调试程序的时候更加熟悉了所有工具的用法,确实得到了一次良好的程序设计训练.五,用户手册1. 本程序的运行环境为任何Windows操作系统,执行文件为:词汇统计.exe2. 执行程序前,要在系统C盘根目录下新建一个文本文档,并且命名为test.txt,同时将测试文本输入文档.3. 执行程序,先会显示出所有单词的统计结果,之后将提示用户输入需要查询的单词个数,如下图:之后输入一个数字n(比如示例中输入2),程序将循环n次提示输入一个单词,输入单词后,将输出对此单词的查询结果,若查询到输出此单词出现个数,若未找到则提示没有此单词查询完毕,按任意键即退出.六.测试结果在文本中输入一句话:Hello word! This is my first program!程序执行后输出:program:1 first:1 my:1 is:1 This:1 word:1 Hello:1若附带的测试文档中没有任何英文字符,(包括只有符号和数字的概况)程序会提示将英文文本输入,且不会有任何输出.若测试文档不存在于指定位置下,则程序报错后自动退出.总的来说,程序的设计很好的完成了既定任务,由于时间紧迫,所以程序还不是很完善,以下问题亟需日后改善:本程序是通过识别一个英文字母开始输入单词,以连续英文字符后的非英文字符作为单词的结束.这样的判定方式虽然在大部分时候可以实现功能,但还是有它的局限性,例如在输入”Its”这样的组合词时会判定为两个单词It和S保存及输出,另外对于相同单词的不同语法形式也无法判断,例如”use”及”used”也会作为两个单词处理.以上这些问题,都需要在将来花更多时间创造更加智能的程序去解决.七.附录程序源代码:#include stdio.h#include stdlib.h#include string.hstruct word /定义储存单词及出现次数的结构体char vocabulary25;int num;word *next;void main ()int findwords(word *head,char d); /声明比较单词的函数void newwords(word *head,char d); /声明创建新单词节点的函数void printwords(word *head); /声明节点打印函数void searchwords(word *head,char str); /声明节点查找函数char c,d25,str25;int i=0,flag=0,sum,n;word *head;FILE *fp;fp=fopen(c:/test.txt,r); /打开文本文件if(fp=NULL)printf(文本不存在,请在C盘根目录下重建test.txt文件!n); /若文件不存在exit(0);head=(word *)malloc(sizeof(word); /创建头节点if(head=NULL)printf(内存不足,无法开辟头节点!n);exit(0);head-next=NULL;while(fscanf(fp,%c,&c)!=EOF) /在文件结束前循环读取字符if(c=65&c=97&cnext=NULL) /若文本为空或没有英文字符printf(文本为空或不存在任何英文字符,请重新输入!n);exit(0);printwords(head); /文章输入完毕,打印所有单词及其出现次数printf(n请输入需要查询的单词个数:n);scanf(%d,&n);getchar(); /忽略掉一个回车符printf(n);for(i=0;ivocabulary,d)=0) /若查找到相同单词,节点计数器加一find-num+;p=1;return 1;elsefind=find-next; /当前节点没有找到,寻找下一节点if(p=0)return 0; /没有找到匹配单词,返回0void newwords(word *head,char d) /定义节点创建函数word *p;p=(word *)malloc(sizeof(word);if(p=NULL)printf(内存不足,无法保存数据!);exit(0);strcpy(p-vocabulary,d); /把新单词赋给p所指向节点的数据域p-num=1; /此节点单词计数器为1p-next=head-next; /用头插法插入节点head-next=p;void printwords(word *head) /定义节点打印函数word *p;int i=0;p=head-next;while(p!=NULL)printf(%s:,p-vocabulary);printf(%d ,p-num);if(i!=0&i%5=0) /每五个单词一行printf(n);p=p-next;i+;void searchwords(word *head,char str) /定义节点查
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 揭阳市榕城区2026届化学九年级第一学期期中调研试题含解析
- 广东省茂名市高州市2024-2025学年八年级下学期期末物理试题
- 2026届福建省厦门市湖里实验中学英语九年级第一学期期末复习检测模拟试题含解析
- 2025年工伤人员安全培训多选试题及答案
- 2026届山东省青岛42中英语九上期末统考模拟试题含解析
- 供应链上下游企业生产技术信息保密及资源共享协议
- 专业健身教练劳动合同模板(含服务条款)
- 体育产业劳动合同模板(含运动员权益保护)
- 离婚协议书模板:解除婚姻关系后的赡养协议
- 科技园区物业租赁与创新创业支持服务合同
- 1.2位置 位移(教学课件) 高中物理教科版必修第一册
- 浅谈机关干部身心健康
- (2025)未成年人保护法知识竞赛必刷题库附含参考答案
- 江苏省淮安市2024-2025学年七年级下学期6月期末考试英语试题(含答案解析)
- 企业融资培训课件
- 小学生拖地课件
- 期货技术指标培训课件
- 上海市静安区2024-2025学年高一下学期期末教学质量调研数学试卷(含答案)
- 深圳片区控制性详细规划设计导则2025
- 2025至2030中国多圈绝对旋转编码器行业项目调研及市场前景预测评估报告
- 译林版六年级上册公开课Unit-3holiday-fun(story-time)教案课件原创
评论
0/150
提交评论