1、数据结构课程设计一元多项式长 沙 学 院课程设计说明书题目一元多项式运算系(部)计算机科学与技术系专业(班级)软件工程6班姓名邹 胤 屏学号2010022615指导教师魏歌起止日期2011.09.06-2011.09.16课程设计任务书课程名称:数据结构与算法设计题目:一元多项式计算问题已知技术参数和设计要求:问题描述:设计一个稀疏多项式简单计算器基本要求:(1)输入并分别建立多项式A和B(2)输入输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数降序排列(3)完成两个多项式的相加、相减,并将结果输出;测试数据:(1)
2、A+B A= 3x14-8x8+6x2+2 B=2x10+4x8+-6x2 (2) A-B A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7(3) A+B A=x3+x1 B=-x3-x1(4) A+B A=0 B=x7+x5+x3+x1(5) A-B A=100x100+50x50+20x20+x B=10x100+10x50+10x20+x选作内容:(1).多项式在x=1时的运算结果(2)求多项式A和B的乘积设计工作量:40课时工作计划:见课表指导教师签名:日期:教研室主任签名: 日期:系主任签名: 日期:长沙学院课程设计鉴定表姓名邹胤屏学号20100226
3、15专业软件工程班级六班设计题目图书预定系统指导教师付细楚指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;摘要 这是我第一次接触关于数据结构的程序设计,这一次有三个可选择,而我选择了一元多次项式的计算器来作为我这次的任务。输入多个或一个多项式后,一元多项式有两两进行相加、相减、相乘,还有把它按次幂的升或降进行排列输出。我做的主界面很普通,按0-4来选择这些功能,如果选择没有在这个范围了,你就可以是否重新选择。这次主要运
4、用了链表存储结构,这样可以很方便的计算一元多项式的基本运算。这次设计还用到了C+和C语言的相关知识,在主函数中可以通过调用来完成运算。关键字:数据结构、C+、C语言、链表、一元多项式运算目录第1章 需求分析61.1 问题描述61.2 基本要求61.3 测试数据61.4 选作内容6第2章 系统分析72.1 功能模板设计72.1.1多项式创建72.1.2 主菜单722 编码8第3章. 运行效果图93. 1 创建多项式A.B93.2 主菜单93.3 输出多项式A B 103.4 多项式A+B103.5 多项式A-B103.6 多项式在X处的值103.7 退出10总结 11参考文献 12附录A源程代码
5、13 第1章. 需求分析1.1 问题描述:设计一个稀疏多项式简单计算器1.2 基本要求: (1) 输入并分别建立多项式A和B。 (2) 输入输出多项式,输出形式为整数序列: n,c1,e1,c2,e2, 其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数降序排列。(3)完成两个多项式的相加、相减,并将结果输出。1.3 测试数据:(1)A+B A=3x14-8x8+6x2+2; B=2x10+4x8-6x2(2) A-B A=11x14+3x10+2x8+10x6+5 ; B=2x14+3x8+5x6+7(3) A+B A=x3+x1 ; B=-x3-x1(4) A+B A=0 ;
6、 B=x7+x5+x3+x1(5)A-B A=100x100+50x50+20x20+x ; B=10x100+10x50+10x20+x1.4 选作内容:(1)多项式在x=1时的运算结果;(2)求多项式A和B的乘积第二章. 系统分析21 功能模块设计 2.1.1 多项式创建 文字说明:先输入多项式的项数,再用for循环把多项式的系数和指数一一输入,在输入的时候调用void Insert(node * p,node * h)来进行排序(降幂)并且把相同的项数合并。2.1.2 主菜单 文字说明:如图所示,选择0-4来操作系统功能.22 编码/A*B时while(s-next) /系数取反 s-c
7、oef*=(-1); s=s-next; /创建多项式中相同次幂时合并if(!q2-coef)/系数为0的话释放结点 q1-next=q2-next; deleteq2; else /指数为新时将结点插入 p-next=q2; q1-next=p; 第三章.运行效果图图3.1 创建多项式A.B图3.2 主菜单图3.3 输出多项式A.B 图3.4 多项式A+B 图3. 5 多项式A-B 图3.6 多项式在X处的值 图3.7 退出 总结这一次课程设计我从一开始就没有用心去做,一想到网上有,我就没有了原来做这个的心了,其实一开始我也是从网上搞了这样的一篇下来,但老师说不可以,我又重新做,我做了好久都
8、没有做出来,后来我又把我的书,网上下载的资料看,就这样我又学到了不少知识,如果我没有去查找相应的资料有话,我是做不出来的。也因为如此,我体会了到了凡事要自己动手,不劳而获的东西永远都不是自己的,只有经过自己的努力得到的才会属于自己。这一次让我更加了解了链表,以前不会在输入时排序的,通过这次我了解了。希望我能在这一次后能个更上一层楼,不再想着从别个地方来不劳而获,加油。参考文献1 王挺,周会平,贾丽丽,徐锡山C+程序设计M 北京:清华大学 出版社2 严蔚敏,吴伟民,数据结构(C语言版) 北京:清华大学 出版社3 李跟强,倪飞舟,钟志水,郭清溥 数据结构(C+版)(第二版)习题解答用实训指导 中国
9、水利水电出版社附录A源程代码#includestruct node int coef; /系数 int expn; /指数 node * next;/void Insert(node * p,node * h) if(p-coef=0) deletep; /系数为0的话释放结点 else node * q1;node * q2; q1=h;q2=h-next; while(q2&p-expnexpn)/查找插入位置 q1=q2; q2=q2-next; if(q2&p-expn=q2-expn)/将指数相同相合并 q2-coef+=p-coef; deletep; if(!q2-coef)/系
10、数为0的话释放结点 q1-next=q2-next; deleteq2; else /指数为新时将结点插入 p-next=q2; q1-next=p; /Insert/建立一个头指针为head、项数为m的一元多项式node * createlist(node * head) int i;int m; node * p; p=head=new node; head-next=NULL; coutm; coutendl; for(i=0;im;i+) p=new node;/建立新结点以接收数据 cout请输入第i+1项的系数与指数:p-coef; cinp-expn; Insert(p,head
11、); /调用Insert函数插入结点 return head;void outprintlist(node * head)/输出多项式链表 node * cur=head-next-next; coutnext-coefXnext-expn; while(cur) if(cur-coef)0) coutexpn!=0) & (cur-expn!=1) coutcoefXexpn; else if(cur-expn=0) coutcoef; else coutcoefcoefexpn!=0) & (cur-expn!=1) coutcoefXexpn; else if(cur-expn=0) c
12、outcoef; else coutcoefnext; coutexpnq2-expn) return 1; else if(!q1|q1-expnexpn) return -1; else return 0; else if(!q1&q2) return -1;/q1多项式已空,但q2多项式非空 else return 1;/q2多项式已空,但q1多项式非空/多项式的加法A+Bnode * addlist(node * q1,node * q2) q1=q1-next; q2=q2-next; node * head,* tail,* temp; tail=new node; tail-ne
13、xt=NULL; head=tail; while(q1|q2) temp=new node; switch(compare(q1,q2) case 1: temp-coef=q1-coef; temp-expn=q1-expn; q1=q1-next; break; case 0: temp-coef=(q1-coef)+(q2-coef); temp-expn=q1-expn; q1=q1-next; q2=q2-next; break; case -1: temp-coef=q2-coef; temp-expn=q2-expn; q2=q2-next; break; if(temp-co
14、ef=0) deletetemp; else temp-next=tail-next; tail-next=temp; tail=temp; return head;/多项式的减法A-Bnode * Subtractlist(node * q1,node * q2) node * s=q2; node * s1; if(s=NULL) coutnext) /系数取反 s-coef*=(-1); s=s-next; s1=addlist(q1,s); return s1;/输入x值,计算并返回多项式的值float Valuelist(node * head,float x) node * p;
15、int i; float sum=0,t; for(p=head-next;p;p=p-next) t=1; for(i=p-expn;i!=0;) if(icoef*t; return sum;/ValuePolynint main() int flag=0,g=0; float x; node * A=NULL, * B=NULL, * pc,* pd,* pe;/定义各式的头指针,pa与pb在使用前付初值NULL coutendl; cout建立多项式An;coutendl; A=createlist(A);/建立多项式A cout建立多项式B.endl;coutendl; B=crea
16、telist(B);/建立多项式B /输出菜单 cout*一元多项式的运算*endl; cout* *endl; cout*- 操作提示 -*endl; cout* *endl; cout*-0.退出功能系统-*endl; cout* *endl; cout* 1.输出多项式A和B *endl; cout* 2.建立多项式A+B *endl; cout* 3.建立多项式A-B *endl; cout* *endl; cout*-4.计算多项式A在x处的值-*endl; cout* *endl; cout*一元多项式的运算*endl; while(g=0) coutflag; coutendl;
17、 switch(flag) case 1: cout多项式A:endl;outprintlist(A); cout多项式B:endl;outprintlist(B); coutendl; break; case 2: pc=addlist(A,B); cout多项式A+B:endl; outprintlist(pc); coutendl; break; case 3: pd=Subtractlist(A,B); cout多项式A-B:endl; outprintlist(pd); coutendl; break; case 4: coutx; cout输入x的值后多项式A的值是: ; coutValuelist(A,x); coutendl; break; if(flag=0) break; coutendl; if(flag4) int i=0; coutendl; cout!你输入的操作有错噢!endl; cout-endl; cout *重新输入*-1endl; cout *不重新输入*-0endl; cout-endl; cout 请选择: i; coutendl; if(i=1) g=0; else g=1; coutendl; return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1