




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二一 学生基本情况:专业班级:学号:姓名:二 实验题目、实验内容1、实验目的:(1)熟练掌握链表结构及有关算法的设计; (3)掌握用链表表示特定形式的数据的方法,并能编写出有关运算的算法。2、实验内容:一元多项式求和。把任意给定的两个一元多项式P(x),Q(x)输入计算机,计算它们的和并输出计算结果。三设计分析先构造两个项链表,分别存储两个多项式的系数和指数,然后将每个链表按指数的大小从小到大排列,以便于后来的合并。合并的伪代码如下:1. 工作指针p、q初始化;2. while(p存在且q存在)执行下列三种情形之一 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链接在第一个单链表的后面;当然,多项式的输出也不简单,要考虑系数是否为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)/建立项链表Linode * 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;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-next=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(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); elseif(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);printf(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,-,和数字进行处理。要考虑的问题有很多,比如说如果x的系数是1,则它前面的1不会输到字符串表达式中,同理,x的系数为1是也要特殊处理。顺着这个思路写完后别人一句话提醒了我,那就是如果指数为浮点数怎么办,后来我也想到如果系数也是浮点数那就更处理不了了。我的那个程序只能用于系数和指数是整数,而且是一位整数的。想到这里,只有改变做法,把表达式的项数的系数和指数一项一项输入,这样就很容易建立链表了。然而修改好后任不能合并,用单步执行调试,错误出在合并的那个程序里面。修改了之后有的式子跑的了,而交
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论