C语言综合训练报告范例.docx_第1页
C语言综合训练报告范例.docx_第2页
C语言综合训练报告范例.docx_第3页
C语言综合训练报告范例.docx_第4页
C语言综合训练报告范例.docx_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

C语言综合训练报告范例1绪论(本部分描写程序或系统开发的背景,意义,你对题目的理解以及题目要求)1.1开发背景 计算机技术发展,信息化普及的状况下,运算高效快速化成为主流。1.2开发意义可以节省工作人员在对集合运算时的时间,得以有更多地时间做其它操作。1.3开发要求根据课程设计任务书要求,本系统开发主要完成以下功能和性能。 能够实现集合的并、交、差运算; 实现集合的元素判定和子集判定运算; 求集合的补集。2系统分析1、程序的实现(1)功能使用链表来表示集合,完成集合的合并,求交集等操作。 (2)实施1) 初步完成总体设计,搭好框架,确定函数个数;2) 完成最低要求;3) 继续完成进一步要求。2、设计的要求(1) 界面友好,函数功能要划分好;(2) 总体设计应画流程图;(3) 程序要加必要的注释;(4) 要提供程序测试方案;(5) 程序要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。3总体设计1、问题分析该问题主要实现以下功能:(1) 利用尾插法建立单链表;(2) 对于输入的链表进行有序排列(3) 删除有序链表中不符合要求的元素(4) 调用函数对单链表进行交、并运算并输出 2、模块结构(1)结构分析程序以用户和计算机的对话方式执行,即在计算及终端显示提示信息之后,由用户在键盘输入演示程序中规定的运算命令;相应的输入数据(过滤输入中的非法字符)和运算结果闲时间在其后。系统由以下几个模块组成,分别是:1) 单链表的建立2) 单链表的有序排列3) 删除单链表中不符合条件的元素4) 集合交集5) 集合并集6) 双链表输出7) 主函数 (2)结构分析图4详细设计(描写各个功能模块界面和程序的详细实现,里面要用到的算法,函数的具体实现,并画出对应的程序流程图。)先做整体介绍,然后再分各个模块介绍实现过程,对于每个模块要画出主要程序或算法的程序流程图1、解题思路(1)数据结构设计创建三个带头结点的单链表,用来存储两个集合中的元素和最终的结果,为实现集合的交、并运算功能,应以有序链表表示集合。为此,需要两个抽象数据类型:有序表和集合。(2)逻辑结构存储结构逻辑结构:创造一个带结点的单链表包括(头结点L、结点若干、尾结点);单链表中每个结点包括(*next表示指针data表示域) 2、算法设计程序执行的命令包括:(1) 定义单链表结点类型typedef struct LNode (2) 运用尾插法建立单链表void CreatListR(LinkList *&L,ElemType a,int n)(3) 创建头结点,为头结点分配空间(4) 创建新结点(5) 建立有序链表void Sort(LinkList *&head)(6) 将两个集合的元素进行比较 while语句(7) 删除有序链表中的重复元素void shanchu(LinkList *&head)(8) 求交集 void jiao(struct Lnode *L1,struct Lnode *L2,struct Lnode *L3)(9) 求并集 void bing(struct Lnode * L1,struct Lnode *L2,struct Lnode *L3)(10) 输出单链表void Display(LinkList *L)5调试与测试1、模块分析(1)定义单链表结点类型typedef struct LNode ElemType data; struct LNode *next; LinkList;(2)运用尾插法建立单链表void CreatListR(LinkList*&L,ElemType a,int n) LinkList *s,*r;int I; L=( LinkList *)malloc(sizeof(LinkList); /创建并为头结点分配空间 L-next=NULL;r=L;for(i=0;idata=ai; r-next=s; r=s;r-next=NULL; /尾结点指向空(3)建立有序链表void Sort(LinkList *&head) LinkList *p=head-next,*q,*r; if(p!=NULL) r=p-next;p-next=NULL; p=r;while(p!=NULL)/后续元素与第一个元素进行比较 r=p-next; q=head; while(q-next!=NULL&q-next-datadata) q=q-next; p-next=q-next; q-next=p; p=r; 2、结果分析选择数字1,进行排序输出;选择数字2,输出集合1与集合2的交集;选择数字3,输出集合1与集合2的并集。可以看出,该程序成功是实现了集合的排序和两个集合的交集运算,而两个集合的并集运算显然还存在问题,在以后的学习与操作中,我们要更加注重程序的运行,尽量做到零问题出现。6结论经过两个星期的努力,终于完成了集合运算器系统的开发和报告的撰写。整个课程设计程序实现了要求的功能:能够实现集合的并、交、差运算;实现集合的元素判定和子集判定运算;求集合的补集。;性能达到了要求;但是本系统还有不完善的地方,比如元素的删除与插入。结束语经过两周的课设,实际编程能力有了非常明显的提高。编程让我懂得了许多的道理,很多事情并不是想象中的那么简单,许多事情都要在失败的前提下,付出许多的心血才能够成功,一帆风顺是不存在的。不要轻言放弃,要执着,同时,学习的时候,知识一定要掌握的非常扎实才行,自己认为自己会了,其实并不是精通了,而只是大概有了一定的了解。在编程的过程中虽然非常累并且枯燥,但是当自己的程序成功运行的那一刻,心里的喜悦也是难以用语言描述的。自己的自信心瞬间提升,体会到了成功的快乐。 参考文献 1 催俊凯。计算机软件基础。机械工业出版社。2007.7 2 唐发根。数据结构教程(第二版)。北京航空航天大学出版社。2005.5.3 严尉敏,吴伟民.数据结构(C语言版)M.清华大学出版社,2011年11月4 谭浩强。C程序设计(第三版)。清华大学出版社。2005.5 李建学,李光元,吴春芳。数据结构课程设计案例精编(用C/C+描述)。北京:清华大学出版社。2007.26 王宏生,宋继红。数据结构。北京:国防工业出版社,2006.1附录1用户手册(单独起一页)(附录中的图和前面文中的图统一编号,接着上面的往下排)点击运行,首先出现菜单,如图12所示。图12 登录界面输入元素,如图13所示。图13 主界面 在此界面可以运行两个两个集合之间进行交、并、差的运算,以及求集合的补集和判定元素以及子集的判定。如图14。附录2源程序 (单独起一页)主要模块源代码清单:#include#include#include#includeusing namespace std;#define MAX 100typedef char DataType;typedef struct node DataType data;struct node *next;LNode,*LinkList;LinkList Init_LinkList()LinkList H;H=new LNode;if(H)H-next=NULL;return H;void Destroy_LinkList(LinkList *H) LinkList p,q; p=*H; while(p) q=p; p=p-next; delete q; *H=NULL;int length_LinkList(LinkList H)LinkList p=H;int count=-1;while(p)p=p-next;count+;return count;bool Locate_LinkList(LinkList H,DataType x) LinkList p=H-next; for(p;p!=NULL;p=p-next) if(p-data=x) return true; if(p=NULL)return false;return false; bool Insert_LinkList(LinkList H) LinkList p; DataType tmp;scanf(%c,&tmp);while(tmp!=n)p=new LNode;p-data=tmp;p-next=H-next;H-next=p;scanf(%c,&tmp);return true;bool Delete_LinkList(LinkList H,DataType x) LinkList p=H-next; LinkList q=H; if(H=NULL|H-next=NULL) cout删除的结点不存在!next,q=q-next) if(p-data=x) q-next=p-next; delete p; return true; return true;void ListSort(LinkList H) LinkList first; /*为原链表剩下用于直接插入排序的节点头指针*/ LinkList t; /*临时指针变量:插入节点*/ LinkList p; /*临时指针变量*/ LinkList q; /*临时指针变量*/ first = H-next; /*原链表剩下用于直接插入排序的节点链表*/ H-next = NULL; /*只含有一个节点的链表的有序链表。*/ while (first != NULL) /*遍历剩下无序的链表*/ /*插入排序*/ for (t = first, q = H; (q!=NULL) & (q-data data); p=q, q=q-next); /*无序节点在有序链表中找插入的位置*/ /*退出for循环,就是找到了插入的位置*/ first = first-next; /*无序链表中的节点离开,以便它插入到有序链表中。*/ if (q = H) H = t; /*插在第一个节点之前*/ else p-next = t; /*p是q的前驱*/ t-next = q; /*完成插入动作*/ void Erg_LinkList(LinkList H) LinkList p;p=H-next;while(p!=NULL)printf(%c,p-data);printf( );p=p-next;printf(n); void Inter_sec(LinkList H1,LinkList H2,LinkList H3)LinkList p1,p2,p3;p1=H1-next;while(p1!=NULL)p2=H2-next;while(p2!=NULL)&(p2-data!=p1-data)p2=p2-next;if(p2!=NULL)&(p2-data=p1-data)p3=(LinkList)malloc(sizeof(LNode);p3-data=p1-data;p3-next=H3-next;H3-next=p3;p1=p1-next;void Merge_sec(LinkList H1,LinkList H2,LinkList H3)LinkList p1,p2,p3;p1=H1-next;while(p1!=NULL) p3=new LNode;p3-data=p1-data;p3-next=H3-next;H3-next=p3;p1=p1-next;p2=H2-next;while(p2!=NULL)p1=H1-next;while(p1!=NULL)&(p1-data!=p2-data) p1=p1-next;if (p1=NULL)p3=new LNode;p3-data=p2-data;p3-next=H3-next;H3-next=p3;p2=p2-next;void Errand_sec(LinkList H1,LinkList H2,LinkList H3)LinkList p1,p2,p3;p1=H1-next;while(p1!=NULL)p2=H2-next;while(p2!=NULL)&(p2-data!=p1-data)p2=p2-next;if(p2=NULL)p3=new LNode;p3-data=p1-data;p3-next=H3-next;H3-next=p3;p1=p1-next;void Repair_sec(LinkList H1,LinkList H2,LinkList H3)LinkList p1,p2,p3;p1=H1-next;p2=H2-next;while(p2!=NULL)while(p1!=NULL)if(p1-datadata) p3=new LNode; p3-data=p1-data; p3-next=H3-next; H3-next=p3;p1=p1-next;if(p1-data=p2-data) p1=p1-next; break;if(p1-datap2-data)break;p2=p2-next;bool Part_sec(LinkList H1,LinkList H2) if(length_LinkList(H1)next;while(p)x=p-data;if(!Locate_LinkList(H1,x)return false;elsep=p-next; return true;char * byte_i(int i,int l)/int count=0;char *ch=new char(l);int p=i;for(int j=0;jl;j+) chj=p%2; p=p/2;return ch;void Sub(int b,int i,int j,LinkList H)if(i=j)coutnext;for(int a=0;aj;a+)if(ba) coutdatanext;if(blank)cout;coutendl;return ;bi=0;Sub(b,i+1,j,H);bi=1;Sub(b,i+1,j,H);int main(int argc, char* argv) DataType x; LinkList H1=NULL,H2=NULL,H=NULL,H3=NULL; printf(*集合运算器*n);printf( 求集合H1和H2的交集: 1 n);printf( 求集合H1和H2的并集: 2 n);printf( 求集合H1和H2的差集: 3 n);printf( 判断集合关系: 4 n);printf( 判断元素是否属于集合H1: 5 n);printf( 求集合H2对集合H1的补集: 6 n);printf( 按其他任意键退出: n);printf(*n);printf( 杨小肥作业2013年6月20日n);H1=Init_LinkList();cout请输入集合1中的元素:endl;Insert_LinkList(H1);ListSort(H1); H2=Init_LinkList(); cout请输入集合2中的元素:endl; Insert_LinkList(H2);ListSort(H2); system(title 集合的运算);for(;) H=Init_LinkList();int c; printf(请按键选择: ); scanf(%d,&c); getchar();printf(n); switch(c)case 1:Inter_sec(H1,H2,H); if(length_LinkList(H)=0)cout集合H1和H2的交集:endl;else cout集合H1和H2的交集:endl; Erg_LinkList(H);ListSort(H); Destroy_LinkList(&H); break;case 2: Merge_sec(H1,H2,H);if(length_LinkList(H)=0)cout集合H1和H2的并集:endl;else cout集合H1和H2的并集:endl; Erg_LinkList(H);ListSort(H); Destroy_LinkList(&H); break;case 3: Errand_sec(H1,H2,H);if(length_LinkList(H)=0)cout集合H1和H2的差集:endl;else cout集合H1和H2的差集:endl; Erg_LinkLis

温馨提示

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

评论

0/150

提交评论