




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上专心-专注-专业数学与计算机学院课程设计说明书课 程 名 称: 数据结构-课程设计 课 程 代 码: 题 目: 一元多项式的加法、减法、乘法的实现 年级/专业/班: 2009/软件工程/4 学 生 姓 名: 学 号: 开 始 时 间: 20112011 年 6 6 月 2020 日完 成 时 间: 2011 年 6 6 月 2929 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书撰写质量(45)总 分(100)精选优质文档-倾情为你奉上专心-专注-专业指导教师签名: 年 月 日精选优质文档-倾情为你奉上专心-专注-专业数 据 结
2、构 课 程 设 计 任 务 书学院名称: 数学与计算机学院 课程代码: 专 业: 软件工程 年 级: 2009级 一、设计题目一元多项式的加法、减法、乘法的实现。二、主要内容设有一元多项式Am(x)和Bn(x). Am(x)=A0+A1x1+A2x2+A3x3+ +Amxm Bn(x)=B0+B1x1+B2x2+B3x3+ +Bnxn 请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)Bn(x)。 要求: 1) 首先判定多项式是否稀疏2) 采用动态存储结构实现;3) 结果M(x)中无重复阶项和无零系数项;4) 要求输出结果的升幂和降幂两种排列
3、情况三、具体要求及应提交的材料1每个同学以自己的学号和姓名建一个文件夹,如:“1101张三”。里面应包括:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)、任务书和课程设计说明书的电子文档。2打印的课程设计说明书(注意:在封面后夹入打印的“任务书”以后再装订)。四、主要技术路线提示为把多个小功能结合成一个完整的小软件,需使用“菜单设计”技术(可以是控制台方式下的命令行形式,若能做成图形方式则更好)。精选优质文档-倾情为你奉上专心-专注-专业五、进度安排共计两周时间,建议进度安排如下:选题,应该在上机实验之前完成需求分析、概要设计可分配4学时完成详细设计可分配4学时调试和分析
4、可分配10学时。2学时的机动,可用于答辩及按教师要求修改课程设计说明书。注:只用课内上机时间一般不能完成设计任务,所以需要学生自行安排时间做补充。六、推荐参考资料(不少于3篇)1苏仕华等编著,数据结构课程设计,机械工业出版社,20072严蔚敏等编著,数据结构(C语言版),清华大学出版社,20033严蔚敏等编著,数据结构题集(C语言版),清华大学出版社,2003指导教师 签名日期 年 月 日系 主 任 审核日期 年 月 日摘摘 要要 分析了matlab,mathmatic,maple等数学软件对一元多项式的计算过程,精选优质文档-倾情为你奉上专心-专注-专业步骤后。由于这些软件比较大功能齐全,但
5、是实用性不强。因此,利用microsoft visual studio 6.0开发工具,编程实现了一元多项式的加法、减法、乘法的计算器系统,该系统具有一元多项式的加法、减法、乘法等功能。关键词:关键词:一元多项式; 软件; 计算 精选优质文档-倾情为你奉上专心-专注-专业目目 录录 1616精选优质文档-倾情为你奉上专心-专注-专业1需求分析 动态链表结构下的一元多项式的加法、减法、乘法的实现。 设有一元多项式Am(x)和Bn(x). Am(x)=A0+A1x1+A2x2+A3x3+ +Amxm Bn(x)=B0+B1x1+B2x2+B3x3+ +Bnxn 实现求M(x)= Am(x)+Bn(
6、x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)Bn(x)。(1)输入形式和输入值范围:输入的系数为float类型,输入的幂为int类型请选择:1请输入你要运算的第一个一元多项式的项数:2请输入第1项的系数和指数:系数:1指数:1请输入第2项的系数和指数:系数:1指数:2(2)输出形式请选择:5一元多项式A为:x+x2一元多项式B为:4x4+5x5+6x6(3)程序所能达到的功能1) 首先判定多项式是否稀疏; 2) 采用动态存储结构实现;精选优质文档-倾情为你奉上专心-专注-专业3) 结果M(x)中无重复阶项和无零系数项;4) 要求输出结果的升幂和降幂两种排列情况(4)测试数据
7、:包括正确地输入及其输出结果和含有错误的输入及其输出结果。正确的输入:请选择:5一元多项式A为:x+x2一元多项式B为:4x4+5x5+6x6错误的输入:请输入第1项的系数和指数:系数:1指数:1请输入第2项的系数和指数:系数:2指数:1输入的该项指数与多项式中已存在的某项相同,请重新创建一个正确的多项式请输入第1项的系数和指数:2开发及运行平台Windows 7 alienware 平台上,Microsoft Visual studio 6.0 环境下开发。所以建议用户在使用时,在windows 7 平台上使用。精选优质文档-倾情为你奉上专心-专注-专业3 3 概要设计概要设计数据类型的定义
8、:struct Nodefloat coef;/结点类型,系数int exp;/指数;typedef Node polynomial;struct LNodepolynomial data;/链表类型LNode *next;typedef LNode* Link;模块调用关系如图1所示:一元多项式相乘一元多项式输出一元多项式销毁退出一元多项式创建一元多项式相加一元多项式的四则运算一元多项式相减精选优质文档-倾情为你奉上专心-专注-专业 图 1 一元多项式计算器模块调用图 4 4 详细设计详细设计 加法模块:精选优质文档-倾情为你奉上专心-专注-专业void PolyAdd(Link &
9、pc,Link pa,Link pb) Link p1,p2,p,pd;CopyLink(p1,pa);CopyLink(p2,pb);pc=new LNode;pc-next-NULL;p-pc;p1next;p2next;while(p1不为空且p2不为空)if(p1-data.expdata.exp)then: p-next=p1;p=p-next; p1=p1-next; else if(p1-data.expp2-data.exp) then: p-next-p2; pnext;p2next; else p1-data.coefdata.coef+p2-data.coef;/指数相同
10、,系数想加 if(p1-data.coef不等于0) p-next-p1; pnext; p1next; p2next; else pd-p1; p1next; p2next;精选优质文档-倾情为你奉上专心-专注-专业 delete pd;/如果系数为0,则删除该项 if(p1!=NULL)then:p-next=p1;endifif(p2!=NULL)then : p-next=p2;endif减法模块,如图2所示: 图 2 减法模块结构图void PolySubstract(Link &pc,Link pa,Link pb)Link p,pt;CopyLink(pt,pb);pda
11、ta).coefdata).coef);/被减的多项式前加-号 pnext);PolyAdd(pc,pa,pt);/调用多项式加法运算函数开始调用多项式加法函数进行运算将多项式B进行复制取多项式B的相反数精选优质文档-倾情为你奉上专心-专注-专业DestroyLink(pt);乘法模块:如图3所示 图 3 乘法模块结构图void PolyMultiply(Link &pc,Link pa,Link pb)Link p1,p2,p,pd,newp,t;pc=new LNode;pc-next=NULL;p1=pa-next;p2=pb-next;while(p1不为空) pd=new L
12、Node; pd-next=NULL; p=new LNode; p-next=NULL; t=p; while(p2) newp=new LNode; newp-next=NULL; newp-data.coef=p1-data.coef*p2-data.coef;/系数相乘开始给出运算的两个多项式按系数相乘指数相加进行运算将运算的结果相加并输出精选优质文档-倾情为你奉上专心-专注-专业 newp-data.exp=p1-data.exp+p2-data.exp;/指数相加 t-next=newp; t=t-next; p2=p2-next; PolyAdd(pd,pc,p);/调用加法函数
13、 CopyLink(pc,pd); p1=p1-next; p2=pb-next; DestroyLink(p); DestroyLink(pd);5 调试分析(1)调试过程中遇到的问题 :独立测试各个模块的功能时发现在创建链表后和另一个进行运算后多余的存储单元没有释放而造成内存的泄漏,还有对于链表的运算时结束条件掌握不透彻导致没有按计划地去结束,比如在用For循环及While循环时没有正确地判断指针的移动与结束条件而得不到自己想要的结果。进入函数内部调试时发现有误用没有初始化的变量,还有赘余的语句扰乱了代码的健壮性。 在主函数中对各个函数的调用时没有一个清晰的思路,使程序显得很混乱,给调试造
14、成了很大困难。 对非法操作控制的不够完善,例如缺少对越界访问及其非法数据的控制机制,使程序精选优质文档-倾情为你奉上专心-专注-专业的安全性下降。(2)算法的时空分析该程序的实现是用链表实现的,所以时间复杂度和空间复杂度主要来自于链表的操作,都是O(n)。(3)经验和体会编写的程序不但要拿来使用,还要给别人查看,以便代码的维护。所以代码编写的风格尽量规范,清晰。变量要尽量少定义,结构夜采用简单的。另外,对指针的使用要小心,尽量在定义的时候就进行初始化,避免野指针,指针的使用涉及到内存的分配。6 测试结果判断稀疏,如图4所示: 图 4 判断多项式是否稀疏精选优质文档-倾情为你奉上专心-专注-专业
15、 加法运算,如图5所示: 图 5加法测试结果 减法运算,如图6所示: 图 6 减法测试结果乘法运算,如图7所示:图 7 乘法测试结果降幂升幂排序,如图8所示精选优质文档-倾情为你奉上专心-专注-专业图8降幂升幂排序测试结果 7 结论该程序基本实现了要求的顺序结构、动态链表结构下的一元多项式的加法、减法、乘法等功能。代码较为冗余,可读性较差,可以多添加一些提示语句以及注释。在这次课程设计中我又进一步地了解了数据结构中算法的核心思想的重要性,懂得了一个程序地好坏关键在于算法是否优秀,一个好的优秀的算法可以使我们的程序更加完善,安全性更高以及有更高的效率。这次设计中我发现了自己的许多不足,如对指针的
16、机制掌握的还不是很透彻,有的时候会出现指针指向错误以及空指针的错误,还有不能很好地分析自己算法地复杂度以及不能很好地使用控制机制使自己的程序流精选优质文档-倾情为你奉上专心-专注-专业畅地运行。致 谢 感谢指导老师给我的一些重要指导以及提供的资料,感谢严蔚敏编著的数据结构等资料,让我在编写代码的过程中少走了很多弯路。精选优质文档-倾情为你奉上专心-专注-专业参考文献1苏仕华等编著.数据结构课程设计.机械工业出版社.20072严蔚敏等编著.数据结构(C语言版).清华大学出版社.20033严蔚敏等编著.数据结构题集(C语言版).清华大学出版社,2003 4郑莉等 编著. C+程序设计语言(第三版)
17、.清华大学出版社,2005.06北京 5.陈清华 朱红主编. Visual C+课程设计案例精选与编程指导.东南大学出版社,2003.06,南京 6.刘振安等编著. C+程序设计课程设计.机械工业出版社,2004.08,北京精选优质文档-倾情为你奉上专心-专注-专业附 录附录1 源程序清单#include/标准输入输出流#include/使程序中可用键盘输入函数#include/使程序中可用系统标准输出函数#include/调用数学库函数using namespace std;/命名空间std内定义的所有标识符均有效struct Nodefloat coef;/结点类型,系数int exp;/
18、指数;typedef Node polynomial;struct LNode精选优质文档-倾情为你奉上专心-专注-专业polynomial data;/链表类型LNode *next;typedef LNode* Link;void CreateLink(Link &L,int n);void PrintList(Link L);void PolyAdd(Link &pc,Link pa,Link pb);void PolySubstract(Link &pc,Link pa,Link pb);void CopyLink(Link &pc,Link pa);v
19、oid PolyMultiply(Link &pc,Link pa,Link pb);int JudgeIfExpSame(Link pa,Link e);void DestroyLink(Link &L);int CompareIfNum(int i);void DestroyLink(Link &L)Link p;p=L-next;while(p) L-next=p-next; delete p; p=L-next;delete L;L=NULL;void CreateLink(Link &L,int n)if(L!=NULL)DestroyLink(L);
20、Link p,newp;L=new LNode;L-next=NULL;(L-data).exp=-1;/创建头结点p=L;for(int i=1;i=n;i+) newp=new LNode;精选优质文档-倾情为你奉上专心-专注-专业 cout请输入第i项的系数和指数:endl; cout(newp-data).coef; cout(newp-data).exp; if(newp-data.exp0) cout您输入有误,指数不允许为负值!next=NULL; p=L; if(newp-data.coef=0) cout系数为零,重新输入!next!=NULL)&(p-next-da
21、ta).expdata).exp) p=p-next; /p指向指数最小的那一个 if(!JudgeIfExpSame( L, newp) newp-next=p-next; p-next=newp; else cout输入的该项指数与多项式中已存在的某项相同,请重新创建一个正确的多项式next;while(p-next!=NULL)if(abs(p-next-data.exp-p-data.exp)1)flag=1;elseflag=0; p=p-next;if(flag)cout该多项式是稀疏的哈endl;elsecout该多项式是连续的哈next;while(p!=NULL&(e
22、-data.exp!=p-data.exp) p=p-next;if(p=NULL)return 0;else return 1;void PrintList(Link L)Link p;if(L=NULL|L-next=NULL) cout该一元多项式为空!next;精选优质文档-倾情为你奉上专心-专注-专业 if(p-data).coef0) if(p-data).exp=0) coutdata).coef;/如果指数为0则直接输出系数 else if(p-data).coef=1&(p-data).exp=1) coutdata).coef=1&(p-data).exp!
23、=1) coutxdata).exp; else if(p-data).exp=1&(p-data).coef!=1) coutdata).coefx; else coutdata).coefxdata).exp; if(p-data).coefdata).exp=0) coutdata).coef;/如果指数为0,则直接输出系数 else if(p-data.coef=-1&p-data.exp=1) coutdata.coef=-1&p-data.exp!=1) cout-xdata.exp; else if(p-data.exp=1) coutdata.coefx
24、;/如果指数为1,则输出系数倍xelse coutdata).coefxdata).exp; p=p-next; while(p!=NULL) if(p-data).coef0)/系数大于0时输出情况 if(p-data).exp=0) cout+data).coef; else if(p-data).exp=1&(p-data).coef!=1) cout+data).coefdata).exp=1&(p-data).coef=1) cout+data).coef=1&(p-data).exp!=1) cout+xdata).exp; else cout+data).
25、coefxdata).exp;精选优质文档-倾情为你奉上专心-专注-专业 if(p-data).coefdata).exp=0) coutdata).coef; else if(p-data.coef=-1&p-data.exp=1) coutdata.coef=-1&p-data.exp!=1) cout-xdata.exp; else if(p-data.exp=1) coutdata.coefx; else coutdata).coefxdata).exp; p=p-next; coutnext=NULL;r=pc;p=pa;while(p-next!=NULL) q=n
26、ew LNode; q-data.coef=p-next-data.coef; q-data.exp=p-next-data.exp; r-next=q; q-next=NULL; r=q; p=p-next;void PolyAdd(Link &pc,Link pa,Link pb) Link p1,p2,p,pd;精选优质文档-倾情为你奉上专心-专注-专业CopyLink(p1,pa);CopyLink(p2,pb);pc=new LNode;pc-next=NULL;p=pc;p1=p1-next;p2=p2-next;while(p1!=NULL&p2!=NULL)if
27、(p1-data.expdata.exp) p-next=p1; p=p-next; p1=p1-next; else if(p1-data.expp2-data.exp) p-next=p2; p=p-next; p2=p2-next; else p1-data.coef=p1-data.coef+p2-data.coef; if(p1-data.coef!=0) p-next=p1; p=p-next; p1=p1-next; p2=p2-next; else pd=p1; p1=p1-next; p2=p2-next; delete pd;/如果系数为0,则删除该项精选优质文档-倾情为你
28、奉上专心-专注-专业 if(p1!=NULL) p-next=p1;if(p2!=NULL) p-next=p2;void PolySubstract(Link &pc,Link pa,Link pb)Link p,pt;CopyLink(pt,pb);p=pt;while(p!=NULL) (p-data).coef=(-(p-data).coef);/被减的多项式前加-号 p=p-next;PolyAdd(pc,pa,pt);/调用多项式加法运算函数DestroyLink(pt);void Clear()system(pause);system(cls);/让用户重新选择void
29、PolyMultiply(Link &pc,Link pa,Link pb)Link p1,p2,p,pd,newp,t;pc=new LNode;pc-next=NULL;p1=pa-next;p2=pb-next;while(p1!=NULL)pd=new LNode; pd-next=NULL; p=new LNode; p-next=NULL;精选优质文档-倾情为你奉上专心-专注-专业 t=p; while(p2) newp=new LNode; newp-next=NULL; newp-data.coef=p1-data.coef*p2-data.coef;/系数相乘 new
30、p-data.exp=p1-data.exp+p2-data.exp;/指数相加 t-next=newp; t=t-next; p2=p2-next; PolyAdd(pd,pc,p); CopyLink(pc,pd); p1=p1-next; p2=pb-next; DestroyLink(p); DestroyLink(pd);void Menu()coutendl;coutendl;cout*一元多项式的加、减、乘运算*endl;couttttttttt endl;cout1 创建要运算的两个一元多项式tt endl;cout2 将两个一元多项式相加ttt endl;cout3 将两个一
31、元多项式相减ttt endl;cout4 将两个一元多项式相乘ttt endl;cout5 显示两个一元多项式ttt endl;cout6 销毁所创建的二个多项式tt endl;cout7 退出ttttt endl;couttttttttt endl;cout0&ichoose; switch(choose) case 1: cout请输入你要运算的第一个一元多项式的项数:n; if(CompareIfNum(n)=1) cout您的输入有误,请重新输入endl; Clear(); break; CreateLink(La,n); cout请输入你要运算的第二个一元多项式的项数:n;
32、if(CompareIfNum(n)=1) cout您的输入有误,请重新输入endl; Clear(); break; CreateLink(Lb,n); Clear(); break; case 2:精选优质文档-倾情为你奉上专心-专注-专业 if(La=NULL|Lb=NULL) cout您的多项式创建有误,请重新选择endl; Clear(); break; PolyAdd(L,La,Lb);coutendl; cout设相加的两个一元多项式为和则:endl; coutendl; coutA的多项式为:; PrintList(La);coutendl; coutB的多项式为:; PrintList(Lb); coutendl; cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件测反应教学课件
- 岗前培训的感受
- 课件模板模式设置
- 鸟类孵化过程课件
- 服装直播培训课件
- 幼儿蛋糕制作课件
- 傣族文化语言课件
- 综合扣子材料课件
- 课件最后谈收获的
- 课件最后一页的祝福语
- 2025年国家电网公司招聘岗位竞聘模拟题及答案
- 隧道施工应急预案与响应方案
- 2025年广播电视技术能手预选赛竞赛试题含答案
- 食品添加剂培训课件
- 2025年健身教练专业技能测评考试试题及答案解析
- 2025年轮椅转运的题库及答案
- 2025年山东高考化学试题及答案
- 2025-2026北师大版二年级数学上册(全册)教案设计
- 环卫人员安全知识培训课件
- 诉讼业务培训课件
- 2025青海黄南尖扎县公安局面向社会招聘警务辅助人员35人笔试参考题库附答案解析
评论
0/150
提交评论