免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
每组人数 1 实验机器编号 日期2009年 6 月 22 日 实验室名称 WM2301机房 一、 课程设计题目:一元多项式运算二、 设计内容:用C+语言编写一段程序,该程序的功能相当于一个一元多项式计算器。它能够实现按照指数降序排列建立并输出多项式,并且能够完成两个多项式的相加、相减的运算和将其结果输入的功能。三、设计实现:1根据输入创建一元多项式,并用链表实现存储。2对已创建的的两个一元多项式进行运算,该题目要实现的运算有,一元多项式加法、减法、乘法运算。3一次运算完成实现链表清空操作,可接受用户重新输入。三、 主要模块:1一元多项式的建立。2显示一元多项式。3.一元多项式加法运算。4.一元多项式减法运算。5.一元多项式乘法运算。6.一元多项式清空。四、 程序设计思想: 主要内容是对一元多项式存储结构的选择,输入多项式采用头插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;虽然一元多项式可以用顺序和链式两种存储结构表示,但顺序结构的最大长度很难确定。比如当多项式的系数较大时,此时就会浪费了巨大的存储空间,所以应该选择用链式存储结构来存储一元多项式。单链表的结构体可以用来存储多项式的系数,指数,这样便于实现任意多项式的运算。五、 主程序流程图: 开始结束根据输入创建一元多项式并存储输入一元多项式加法运算减法运算乘法运算输出结果其他运算新运算YYNN 六、 程序主界面:七、 程序运行结果: 一元多项式输入界面 加法运算减法运算 乘法运算 输出八、 体会和总结:课程设计终于做完了,虽然有些疲劳和困倦,但带给我很多的收获。数绝结构已经学了一个学期,大概三个多月了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,实际应用,已经减少了许多。对这些知识也有了更深的理解和很好的掌握。许多困惑,有许多已经通过实际操作解决了,并能够深刻认识,但也有很多没有明白。通过课程设计,明白到了原来开发一个小小的实用系统,是需要考虑到很多方面的问题的,这些都是要在实践中摸索的,这与平时做练习是不同的,但也因为平时有许多的练习基础,会使你做起程序来,更加得心应手。另外就是要把错误总结,有许多错误或者陷阱是平时自己陷进去的,因此很深刻,但也有些错误或者陷阱是自己还没有接触或者犯过的,这就应该看多些别人的总结,使自己不犯这些错误。不让自己掉进这些陷阱。这样长期总结,会对自己有很大的帮助。附录:程序源代码#include#include #includeusing namespace std;struct Nodefloat coef;/结点类型int exp;typedef Node polynomial;struct LNodepolynomial 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);void 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;/创建含有n个链表类型结点的项,即创建一个n项多项式void CreateLink(Link &L,int n)if(L!=NULL) DestroyLink(L);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-data).expdata).exp) p=p-next; /p指向指数最小的那一个 if(!JudgeIfExpSame( L, newp) newp-next=p-next; p-next=newp; else cout输入的该项指数与多项式中已存在的某项相同,请重新创建一个正确的多项式next;while(p!=NULL&(e-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; /项的系数大于0的5种情况 if(p-data).coef0) if(p-data).exp=0) coutdata).coef; else if(p-data).coef=1&(p-data).exp=1) coutdata).coef=1&(p-data).exp!=1) coutxdata).exp; else if(p-data).exp=1&(p-data).coef!=1) coutdata).coefx; else coutdata).coefxdata).exp; /项的系数小于0的5种情况 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; while(p!=NULL) if(p-data).coef0) 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).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=new 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(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; 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 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; newp-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;coutt一元多项式的运算endl;couttttttttt endl; couttttt 新建 ttt endl; couttttt 加法运算ttt endl; couttttt 减法运算ttt endl; couttttt 相乘运算ttt endl; couttttt 输出ttt endl; couttttt 清空ttt endl; couttttt 退出ttt endl; couttttttttt endl; couttendl;cout0&ichoose; switch(choose) case 1: cout请输入需要运算的第一个一元多项式的项数:n; if(CompareIfNum(n)=1) cout输入有误,请重新输入endl; Clear(); break; CreateLink(La,n); cout请输入需要运算的第二个一元多项式的项数:n; 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; cout相加后的结果为:; PrintList(L);coutendl; Clear(); DestroyLink(L); break; case 3: if(La=NULL|Lb=NULL) cout多项式创建错误,请重新选择endl; Clear(); break; PolySubstract(L,La,Lb); cout相减的两个一元多项式为:endl;coutendl;coutA的多项式为:; PrintList(La);coutendl;coutB的多项式为:; PrintList(Lb);coutendl; cout相减后的结果为:; PrintList(L);coutendl; Clear(); DestroyLink(L); break; case 4: if(La=NULL|Lb=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法院院校合作协议书
- 多功能玩偶背包创新创业项目商业计划书
- 家乡月饼DIY工坊创新创业项目商业计划书
- 操控站智能运维决策支持系统定制创新创业项目商业计划书
- 坚果质量标准创新创业项目商业计划书
- 《妇产科护理学》重点简答题(附答案)
- (四级)公共营养师考试试题及参考答案
- 初中七年级人教版数学上册第一章《有理数》课件
- 2024年成都市金牛区中医医院招聘真题
- 固废填埋场废气处理系统设计方案
- 2025年广东省集体经营性建设用地使用权租赁合同
- 2025年日本驾照必考题库及答案(可下载)
- 2025年福建省产前筛查诊断人员资质考试题库含答案详解
- 库房灯具安装施工方案
- 国企中层竞聘面试题库和答案
- 医疗风险防范知识培训课件
- 《Unit 3 Visit to the farm》(教学设计)-科普版(2024)英语三年级上册
- 宝钢作业长安全培训题库及答案解析
- 家庭暴力保证书模板
- 总监理工程师执业能力与信用评价
- 岗位技能比武汇报
评论
0/150
提交评论