一元多项式相加问题实验报告概要Word格式文档下载.docx
《一元多项式相加问题实验报告概要Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《一元多项式相加问题实验报告概要Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
当遇到输入结束标志是停止输入,而转去执行程序下面的部分。
具体函数构造为:
polynodecreat_polynode(){
polynodeA,p,q,s;
//建立这种类型的头指针,尾指针,遍历指针和动态指针
floata;
intb;
A=newpoly;
A->
next=NULL;
q=A;
p=A;
cin>
>
a;
b;
while(a!
=0||b!
=0)
{
s=newpoly;
s->
cofe=a;
exp=b;
while(q->
next)
{
if(q->
next->
exp<
b)
q=q->
next;
//遍历链表,若指数大于原链表指数,指针后移一个
else{
s->
next=q->
q->
next=s;
break;
//若不是,将结点插入指针后面
}
next==NULL)
next=p->
p->
p=s;
//q遍历到链表尾仍未插入,将结点插入最后,改变尾指针使其指向新结点
q=A;
//让q返回头指针处,以便下一次遍历链表
cin>
}
if(p!
=NULL)
returnA;
}
2.多项式相加的功能模块
此模块根据在1中建立的两个多项式进行相加运算,并存放在以C为头指针的一个新链表中。
可以采用如下方法进行设计:
设指针p,q,r分别指向描述多项式的链表A,B,C头部,比较p->
exp与q->
exp;
若p->
exp小,则做如下操作:
while(p!
=NULL&
&
q!
=NULL)//在两个指针不为空的情况下
r=newpoly;
if(p->
q->
exp)
r->
cofe=p->
cofe;
if(r->
cofe==0)
deleter;
p=p->
continue;
//若r指向的系数为,则p前进,释放r并强制执行下一次循环
exp=p->
exp;
next=s->
next=r;
s=r;
p=p->
//p指针指向的指数小,将此结点赋给r,p指针前进
exp=q->
exp,则:
else
exp==q->
cofe+q->
//若两指针指数部分相等,则系数相加赋给r
q=q->
//两指针均前进
exp>
exp,则:
cofe=q->
在两个指针中有一个为空以后,可以进行如下操作将多项式中剩余项赋到C中:
while(p==NULL&
r=newpoly;
}//若有一个多项式已经结束则把另一个多项式的值赋给新多项式
while(q==NULL&
p!
if(r!
3.多项式显示的功能模块
此模块用于多项的显示,用“系数---指数对”的形式表示表达式:
cout<
<
"
("
n->
cofe<
"
)"
;
n=n->
四.界面设计
在输入多项式时,界面提示输入(00)表示结束输入。
五.编码实现
//9u.cpp:
定义控制台应用程序的入口点。
//
#include"
stdafx.h"
#include<
iostream>
usingnamespacestd;
polynodehead_c;
elseif(q->
exp==b)
cofe=s->
deletes;
polynodecreat_polynode3(polynodehead_a,polynodehead_b){
polynodep,q,r,s;
p=head_a->
q=head_b->
head_c=newpoly;
head_c->
next=NULL;
s=head_c;
while(p!
else
while(p==NULL&
returnhead_c;
intmain()
{
polynodehead_a,head_b;
cout<
请输入第一个多项式(00结束输入):
endl;
head_a=creat_polynode();
请输入第二个多项式(结束输入):
head_b=creat_polynode();
polynodem;
polynoden;
m=creat_polynode3(head_a,head_b);
n=m->
polynodex,y;
x=head_a->
y=head_b->
["
while(x)
cout<
x->
x=x->
]"
+"
while(y)
y->
y=y->
="
if(n==NULL)
0"
while(n)
return0;
}
六.运行与测试
(1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)
(2)(1+x+x2+x3+x4+x5)+(―x3―x4)=(1+x+x2+x5)
(3)(x+x3)+(―x―x3)=0
(4)(x+x100)+(x100+x200)=(x+2x100+x200)
(5)(x+x2+x3)+0=x+x2+x3
(6)(7-5x8+11x9)+(2x+5x8-3.1x11)=(-3.1x11+11x9+2x+7)
(7)(―x3―x4)+(1+x+x2+x3+x4+x5)=(1+x+x2+x5)
(8)(―x―x3)+(x+x3)=0
(9)(x100+x200)+(x+x100)=(x+2x100+x200)
(10)0+(x+x2+x3)=(x+x2+x3)
(11)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)当不按递增顺序输入时,结果仍正确
(12)(2x+2x)+0=4x
七.实验总结
这次实验的目的主要是学会如何建立链表,通过遍历链表来进行插入,查找与删除等操作。
因为要建立三个多项式,指针较多,在初次建立时,有的指针指向出现问题,编译已过但调试出的结果不对。
通过反复检查指针指向终于发现问题所在。
这次的教训使我明白了在编写程序时要小心谨慎,避免造成不必要的麻烦。
虽然这个程序不是很大,但是因为不仔细出现的失误还是让我花了大量的时间去改正,如果程序很大的话,那后果是无法想象的,严谨的态度对我们来说至关重要!