




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 长沙理工大学 数据结构课程设计报告 学 院 专 业 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 课程设计成绩评定学 院 专 业 班 级 学 号 学生姓名 指导教师 完成日期 指导教师对学生在课程设计中的评价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综合成绩 指导教师签字 年 月 日课程设计任务书计算机与通信工程学院 软件工程专业 课程名称数据结构课程设计时间学生姓名指导老师题 目文章编辑主要内容:采用单链表数据结构静态存储文章,以c语言实现相关程序,实现
2、对输入的文章进行统计文章中总字符数、统计文章中空格个数、统计文章中数字个数、统计文章中英文字母数、删除文章中指定字符串、统计文章中指定字符串出现次数的文章编辑功能操作。要求:(1)通过实际项目的分析、设计、编码、测试等工作,掌握用c语言来开发和维护软件。(2)按要求编写课程设计报告书,能正确编写分析、设计、编码、测试等技术文档和用户使用手册。应当提交的文件:(1)文章编辑数据结构课程设计论文。(2)代码清单。 文章编辑 学生姓名:陈旖指导老师:陈倩诒摘 要 本课程设计主要解决了基本的文章编辑问题。对于一页按要求输入到程序执行窗口的文章,静态存储结构使用线性表中,分别完成统计文章总字符数、文章中
3、空格个数、文章中英文字母数、统计文章中英文字母数的操作和文章中某一字符串的出现的次数,并输出该次数;除以上的统计操作,还实现删除文章中指定字符串,并且将删除字符串后面的字符前移,再保存为编辑后的文章。关键字 静态存储;线性表;编辑;字符串 目 录1.引言1 1.1课程设计意义 11.2课程设计目的11.3课题要求12.设计思路与方案22.1函数流程22.2功能函数43.详细实现53.1数据结构设计53.2功能函数设计53.3函数分析64.运行环境与结果 124.1运行环境124.2运行结果125.结束语 166.参考文献 177.附录 18代码清单18陈旖文章编辑1引 言1.1课程设计意义在实
4、践教学中,课程设计是一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。数据结构1是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计2及其实现等方面,加深对课程基本内容的理解3。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。1.2课程设计目的1提高对数据逻辑结构4的特点以及存储表示方式的认识,培养在具体应用中选择合适的数据结构和存储结构的能力。
5、2熟悉软件开发的基本过程,初步掌握软件开发过程的问题分析、系统设计、程序编码5、测试等阶段基本任务和技能方法。3培养自己的算法设计和算法分析能力,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。4训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的工作方法、作风和相互合作的精神。5综合运用链表6的查找、插入和删除,理论结合实际,将其运用到文章编辑这一实验中。使这些知识得到进一步巩固、加深和拓展。利用模块的思想,模块之间用指针连接,减少了不必要的麻烦。巩固加深指针的用途,理解模块的优点。加深对链表的理解,全面认识链表操作的字符串的模式匹配操作。1.3课题要求课题名称
6、:文章编辑具体要求:(1)静态存储一页文章,每行最多不超过80个字符,共n行;(2)分别统计出其中英文字母数和空格数及整篇文章总字数; (3)统计某一字符串在文章中出现的次数,并输出该次数; (4)删除某一子串,并将后面的字符前移; (5)存储结构使用线性表3,分别用几个子函数实现相应的功能。 2 设计思路与方案2.1函数流程根据课题文章编辑的详细要求,可将程序的运行分为三个模块,即文章输入和文章输出模块、指令输入和指令判断模块、执行指令操作模块。构造多个线性表,将输入的文章的每一行字符,都分别静态存储4在相应的线性表中。每个线性表的存储容量不超过80个字符。 文
7、章输入结束后,程序输出指令菜单,列出程序可以合法执行的操作指令,并选择输入合法的指令,以执行相应的指令操作。 依照课题要求,程序设计了6大功能,分别为统计文章中总字符数、统计文章中空格个数、统计文章中数字个数、统计文章中英文字母个数、删除文章中指定字符串、统计文章中指定字符串出现次数,并且为每一项功能提供相信的执行指令。程序的执行流程如图2.1所示。首先按要求输入文章,然后按照指令菜单选择要执行的指令,程序判断指令,并且执行相应的指令操作,输出指令执行结果后,重新返回指令菜单,再次等待指令输入。指令书输入和指令执行为无限循环,在用户退出程序前,程序不会自动结束。 图2.1 函数执行流程图2.2
8、功能函数 为实现6个执行指令操作,分别设计相应的功能函数,并运用c语言数据结构构造相关代码。功能函数名以功能说明如表2.2所示。表2-1 功能函数列表函数功能void countall()统计文章中总字符数void countspace()统计文章中空格个数void countnumber()统计文章中数字个数void conuntletter()统计文章中英文字母数void delstring()删除文章中指定字符串void findstring()统计文章中指定字符串出现次数3 详细实现3.1数据结构设计(1)定义结构体:typedef struct line char *data; st
9、ruct line *next;line; line为单链表存储结构。3.2功能函数设计(1)统计文章总字数:void countall(line * &head)将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中总字数; 用printf语句输出文章中总字数,调用子函数menu()。(2)统计文章中的空格数:void countspace(line * &head) 将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中空格数; 用printf语句输出文章中空格数,调用子函数menu()。(3) 统
10、计文章中数字个数:void countnumber(line* &head) 将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中数字个数; 用printf语句输出文章中数字个数,调用子函数menu()。 (4) 统计文章中英文字母数:void countletter(line * &head) 将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中英文字母数 用printf语句输出文章中英文字母数,调用子函数menu()。(5)查找字符串的函数:void findstring(line * &
11、;head)将p付给表头指针;初始化count为0;初始化len1,用来保存当前行的总字符数;定义整型变量len2表示待统计字符串的长度;用printf语句提醒用户输入要统计的字符串;用do-while语句遍历链表,同时用for循环和if语句找出指定字符串在文章中出现的次数;用printf语句输出指定字符串在文章中出现的总次数,调用子函数menu()。(6)删除字符串的函数:void delstring(line * &head) 先创建一个delstringword,其中包含两个字符串char *s和char *str,用*s表示输入的字符串,*str表示要删除的字符。这个函数的功能
12、是找到字符串s在字符串中出现的位置并删除该字符串。 定义字符串的删除函数delstring(),用do-while语句遍历链表,语句中再套用if语句,并调用delstringword()进行删除。 3.3函数分析(1)void countall(line * &head)本函数的作用是统计整篇文章的所有字符数,包括空格。返回统计结果之后会调用menu方法打印指令菜单。void countall(line * &head) line *p=head; int count=0; do count+=strlen(p->data); while(p=p->next)!=n
13、ull); printf("文章总字数: %d n",count); printf("*n"); printf("n"); menu();(2)void countspace(line * &head)本函数的作用是统计字符串链表中的空格个数,在统计完空格个数后,调用menu方法打印指令菜单。void countspace(line * &head) line *p=head; int count=0; do int len=strlen(p->data); for(int i=0;i<len;i+) if
14、(p->datai=32)count+; while(p=p->next)!=null); printf("文章中空格个数: %d n", count); printf("*n"); printf("n"); menu();(3)void countnumber(line * &head) 本函数的作用是统计字符串链表中的数字个数,在统计完数字个数后,调用menu方法打印指令菜单。void countnumber(line * &head) line *p=head; int count=0; do int
15、 len=strlen(p->data); for(int i=0;i<len;i+) if(p->datai>=48 && p->datai<=57)count+; while(p=p->next)!=null); printf("文章中数字个数: %d n",count); printf("*n");printf("n"); menu();(4)void countletter(line * &head)本函数的作用是统计整个字符串链表中英文字母的个数。遍历完成之后
16、会调用menu方法打印指令菜单。void countletter(line * &head) line *p=head; int count=0;do int len=strlen(p->data); /计算当前data里的数据元素个数 for(int i=0;i<len;i+)if(p->datai>='a'&&p->datai<='z')|(p->datai>='a'&&p->datai<='z') count+; /计算字母数
17、 while(p=p->next)!=null); /遍历链表 printf("文章中英文字母个数: %d n", count); /返回文章里 printf("*n");printf("n"); menu();(5)void findstring(line * &head)用户调用这个方法查找相应字符串的出现在文章中的次数。统计后调用menu()方法打印指令菜单。void findstring(line * &head) line *p=head; int count=0;int len1=0; int len
18、2; int i,j,k; char str120; printf("n"); printf("请输入要统计的字符串:"); scanf("%s",str1); len2=strlen(str1); do len1=strlen(p->data); for(i=0;i<len1;i+) if(p->datai=str10) k=0; for(j=0;j<len2;j+) if(p->datai+j=str1j) k+; if(k=len2) count+;i=i+k-1; while(p=p->ne
19、xt)!=null); /遍历链表 printf("该字符串在文中出现的次数: %d n",count); printf("*n");printf("n"); menu();(6)void delstring(line * &head)删除字符串的函数,通过这个函数,删除出现在字符串链表里的所有的输入的字符片段。最后调用menu方法打印指令菜单。void delstring(line * &head) line *p=head;char str20; printf("请输入要删除的字符串: ");
20、scanf("%s",str); do if(strstr(p->data,str)!=null)delstringword(p->data,str);while(p=p->next)!=null);printf("删除指定字符串后的文章为: n");output(head);printf("*n");printf("n");menu();4 运行环境与结果4.1运行环境本程序的运行环境为以windows 7系统pc上的visual c+ 6.0。4.2运行结果如图4.1,所示,输入一段包含汉字、
21、英文大小写字母、阿拉伯数字、空格、特殊字符的文章,每行都不超过80个字符,以“ctrl+e(e)”为结束符。图4.1 文章输入如图4.2所示,输入指令“2”,执行“统计文章中总字符数”指令,执行结果为“399”。图4.2 统计文章中总字符数如图4.3所示,输入指令“3”,执行“统计文章中空格个数”指令,执行结果为“57”。图4.3 统计文章中空格个数如图4.4所示,输入指令“3”,执行“统计文章中数字个数”指令,执行结果为“6”。图4.4 统计文章中数字个数如图4.5所示,输入指令“4”,执行“统计文章中英文字母数”指令,包括英文大写字母和英文小写字母,执行结果为“399”。图4.5 统计文章
22、中英文字母数如图4.6所示,输入指令“5”,执行“删除文章中指定字符串”指令,输入要删除的字符串“n”,执行结果如下。 图4.6 删除文章中指定字符串如图4.7所示,输入指令“6”,执行“统计文章中指定字符串出现次数”指令,输入要统计的字符串为“printf”,执行结果为“8”。图4.7 统计文章中指定字符串出现次数如图4.8所示,输入指令“7”,输出“指令输入错误”。图4.8 指令输入错误本程序的文章为用户输入的文章,只能做即时输入的统计、编辑,而不能对已有的磁盘文件中的文章进行统计、编辑,如果引入文件流类,就可以打开磁盘文件,对其进行统计、编辑并保存,这是有待改进的。5结束语此次课程设计使
23、我对数据结构方面的知识有了更加深入的了解,也使我认识到自己在学习编程方面还有很多的不足。今后我要多读一些编程方面的书籍,不能只拘泥于课本上的知识,并注重理论与实践的结合,多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的掌握编程思想。同时,此次课程设计也使我对编程产生了兴趣,特别是在通过查书籍资料以及网上资源的情况下能够使程序运行成功,得到了一种成就感,相对于以前的一组人完成一个程序,此次一个人独立完成成就感更大一些。参考文献1 严蔚敏,吴伟民数据结构(c语言版)北京:清华大学出版社,20022 许卓群数据结构与算法北京:高等教育出版社,20043 金远平数据结构
24、(c语言版) 北京:清华大学出版社,20054 殷人昆数据结构(c语言版) 北京:清华大学出版社,20015 g.perryc+程序设计教程. 北京:清华大学出版社,1994 6 严蔚敏,吴伟民数据结构习题集(c语言版)北京:清华大学出版社,200417附录代码清单:#include <string.h>#include <stdio.h> typedef struct line char *data; struct line *next;line; /创建链表,向里面输入文本数据void output(line * &head) /向屏幕输出文字 line *
25、p=head;/printf(":n");do printf("%sn",p->data); while(p=p->next)!=null); /遍历链表printf("n");void menu()printf("*编辑指令*n");printf("1:统计文章中总字符数 n");printf("2:统计文章中空格个数 n");printf("3:统计文章中数字个数 n");printf("4:统计文章中英文字母数 n")
26、;printf("5:删除文章中指定字符串 n");printf("6:统计文章中指定字符串出现次数n");printf("*n");void create(line * &head)printf ("请输入文章,每行最多80个字符,以ctrl+e(e)为结束符n");line *p=new line; /首先为链表建立一个附加表头结点 head=p; /将付给表头指针char tmp100;while(1)gets(tmp); /输入字符串if(strlen(tmp)>80)printf("
27、;每行最多输入80个字符!");break;if(tmp0=5)break; /如果发现输入e,则退出输入 p=p->next=new line;p->data=new charstrlen(tmp)+1; /为结点分配空间 strcpy(p->data,tmp);if(tmpstrlen(tmp)-1=5) /除去最后一个控制符e p->datastrlen(tmp)-1='0'break;p->next=null; /最后一个指针为空head=head->next;printf("n");menu();voi
28、d countletter(line * &head) /统计英文字母数line *p=head; int count=0;do int len=strlen(p->data); /计算当前data里的数据元素个数for(int i=0;i<len;i+)if(p->datai>='a'&&p->datai<='z')|(p->datai>='a'&&p->datai<='z') count+; /计算字母数while(p=p-&g
29、t;next)!=null); /遍历链表printf("文章中英文字母个数: %d n", count);/返回文章里printf("*n");printf("n");menu();void countnumber(line * &head) line *p=head;int count=0;do int len=strlen(p->data);for(int i=0;i<len;i+)if(p->datai>=48 && p->datai<=57)count+; whil
30、e(p=p->next)!=null); printf("文章中数字个数: %d n",count);printf("*n");printf("n");menu();void countspace(line * &head) line *p=head; int count=0;do int len=strlen(p->data);for(int i=0;i<len;i+)if(p->datai=32)count+; while(p=p->next)!=null); printf("文章中
31、空格个数: %d n", count);printf("*n");printf("n");menu();void countall(line * &head) line *p=head; int count=0; do count+=strlen(p->data); while(p=p->next)!=null); printf("文章总字数: %d n",count);printf("*n");printf("n");menu();void findstring(
32、line * &head) line *p=head;int count=0;int len1=0; int len2; int i,j,k;char str120; printf("n");printf("请输入要统计的字符串:");scanf("%s",str1);len2=strlen(str1);do len1=strlen(p->data); for(i=0;i<len1;i+) if(p->datai=str10)k=0;for(j=0;j<len2;j+)if(p->datai+j=str1j) k+;if(k=len2)count+;i=i+k-1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租房铺面转让合同范本
- 灯具公司采购合同范本
- 夜市用品转让合同范本
- 公交车身广告合同专业定制版
- 合作加工木炭合同范本
- 有机肥培训知识大全课件
- 揭阳劳动合同范本
- 并购投资协议合同范本
- 股份经营合作合同范本
- 新能源知识培训课件
- 二年级数学有余数的除法(2位数除以1位数)竞赛试题练习题
- 2025年法理学接本试题及答案
- 2025年安庆医药高等专科学校单招职业技能考试题库标准卷
- 同等学力英语申硕考试词汇(第六版大纲)电子版
- 初中数学基于核心素养导向的大单元教学设计(共50张)
- 福州仓山万达广场项目可行性研究报告
- 中国铁路总公司铁路技术管理规程高速铁路部分2014年7月
- 邮差先生详细解析(小说复习用).ppt课件
- 附录6眼保健操图解
- 2020年江西省南昌市中考真题物理
- 《模具电火花加工》PPT课件.ppt
评论
0/150
提交评论