一元多项式求和.doc

上传人:豆**** 文档编号:34415155 上传时间:2022-08-16 格式:DOC 页数:6 大小:62.50KB
返回 下载 相关 举报
一元多项式求和.doc_第1页
第1页 / 共6页
一元多项式求和.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《一元多项式求和.doc》由会员分享,可在线阅读,更多相关《一元多项式求和.doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、如有侵权,请联系网站删除,仅供学习与交流一元多项式求和【精品文档】第 6 页实验二一 学生基本情况:专业班级:学号:姓名:二 实验题目、实验内容1、实验目的:(1)熟练掌握链表结构及有关算法的设计; (3)掌握用链表表示特定形式的数据的方法,并能编写出有关运算的算法。2、实验内容:一元多项式求和。把任意给定的两个一元多项式P(x),Q(x)输入计算机,计算它们的和并输出计算结果。三设计分析先构造两个项链表,分别存储两个多项式的系数和指数,然后将每个链表按指数的大小从小到大排列,以便于后来的合并。合并的伪代码如下:1. 工作指针p、q初始化;2. while(p存在且q存在)执行下列三种情形之一

2、 2.1 如果p-expexp,则指针p后移; 2.2 如果p-expq-exp,则 2.2.1 将结点q插入到结点p之前; 2.2.2 指针q指向原指结点的下一个结点; 2.3 如果p-exp=q-exp,则 2.3.1 p-coef =p-coef+q-coef; 2.3.2 如果p-coef =0,则执行下列操作,否则,指针p后移; 2.3.2.1 删除结点p; 2.3.2.2 使指针p指向它原指结点的下一个结点; 2.3.3 删除结点q; 2.3.4 使指针q指向它原指结点的下一个结点; 3. 如果q不为空,将结点q链接在第一个单链表的后面;当然,多项式的输出也不简单,要考虑系数是否为

3、1,为1时x前的系数不显示,指数是否为1,为1时也不显示。还有最前面的项如果系数为正,则不显示+号。四源程序代码#include#include#define M 50typedef struct node/项节点float coef;/系数float exp;/指数 node * next;/下一节点Linode;void Initlinode(Linode * &L)/初始化L=(Linode * )malloc(sizeof(Linode);L-coef=L-exp=0;L-next=NULL;void Createlinode(Linode * &L,int n)/建立项链表Linod

4、e * p,* s=L;int i;for(i=0;icoef),&(p-exp);s-next=p;p-next=NULL;s=p;void Destroylinode(Linode * &L)/销毁链表Linode * p=L,* s=L-next;while(s!=NULL)free(p);p=s;s=s-next;free(p);bool Sort(Linode * &L)/排序Linode * p, * pre,* q;if(L-next=NULL)return 0;p=L-next-next;L-next-next=NULL;while(p!=NULL)q=p-next;pre=L

5、;while(pre-next!=NULL&pre-next-expexp)pre=pre-next;p-next=pre-next;pre-next=p;p=q;return 1;bool Plus(Linode * &A,Linode * &B)/合并多项式Linode * p=A-next, * q=B-next,* r=A,* s;if(q=NULL)return 0;while(p!=NULL&q!=NULL)s=q-next;if(p-expexp)while(p!=NULL&p-expexp)p=p-next;r=r-next;if(p!=NULL&p-expq-exp) r-n

6、ext=q;q-next=p;r=q;q=s;if(s!=NULL)s=s-next;if(p!=NULL&q!=NULL&p-exp=q-exp)p-coef=p-coef+q-coef;if(p-coef=0)r-next=p-next;free(p);p=r-next;elsep=p-next;r=r-next;free(q);q=s;if(q!=NULL)r-next=q;return 1;void Displinode(Linode * &L)Linode * p=L-next;while(p!=NULL)if(p-exp=0)printf(%.4f,p-coef);else if(

7、p=L-next&p-coef=0)if(p-coef=1)if(p-exp=1)printf(x);elseprintf(x%.2f,p-exp);else if(p-exp=1)printf(%.4fx,p-coef);elseprintf(%.4fx%.2f,p-coef,p-exp);elseif(p-coef=0)if(p-coef=1)if(p-exp=1)printf(+x);elseprintf(+x%.2f,p-exp);elseif(p-exp=1)printf(+%.4fx,p-coef);elseprintf(+%.4fx%.2f,p-coef,p-exp); else

8、if(p-coef=-1)if(p-exp=1)printf(-x);elseprintf(-x%.2f,p-exp);elseif(p-exp=-1)printf(%.4fx,p-coef);elseprintf(%.4fx%.2f,p-coef,p-exp);p=p-next;printf(n);void main()int m,n;Linode* A;Linode* B;Initlinode(A);Initlinode(B);printf(输入P(x)的项数:);scanf(%d,&m);Createlinode(A,m);if(Sort(A)=1)printf(排序成功n);print

9、f(P(x)=);Displinode(A);printf(输入Q(x)的项数:);scanf(%d,&n);Createlinode(B,n);if(Sort(B)=1)printf(排序成功n);printf(Q(x)=);Displinode(B);if(Plus(A,B)=1)printf(表达式为F(x)=);Displinode(A);Destroylinode(A);五测试用例(尽量覆盖所有分支)六实验总结 对于这个实验,我最开始的想法是输入字符串,然后将字符串拆分成几个项存入链表中,然后再排序,合并。用到了switch语句,对+号,x,-,和数字进行处理。要考虑的问题有很多,比

10、如说如果x的系数是1,则它前面的1不会输到字符串表达式中,同理,x的系数为1是也要特殊处理。顺着这个思路写完后别人一句话提醒了我,那就是如果指数为浮点数怎么办,后来我也想到如果系数也是浮点数那就更处理不了了。我的那个程序只能用于系数和指数是整数,而且是一位整数的。想到这里,只有改变做法,把表达式的项数的系数和指数一项一项输入,这样就很容易建立链表了。然而修改好后任不能合并,用单步执行调试,错误出在合并的那个程序里面。修改了之后有的式子跑的了,而交换位置之后就出错了。再调试,还是出现在合并的那个程序,还是指针的问题,后来终于发现如果p-nextq-next这句的问题,如果p=NULL,那么p-next显然没有意义,所以老是出错,最后加了些限定条件,终于也就成功了。这次试验我学到的不仅是链表,更重要的是指针,相信以后遇到类似的错误可以很快的处理。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁