结束的一元多项式Word文档下载推荐.docx
- 文档编号:6545942
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:32
- 大小:278.52KB
结束的一元多项式Word文档下载推荐.docx
《结束的一元多项式Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《结束的一元多项式Word文档下载推荐.docx(32页珍藏版)》请在冰点文库上搜索。
B(X)=100X+200X2+300X200
这两个多项式相加结果应为:
C(X)=101X+202X2-3X100+300X200
2.多项式相加的功能模块
此模块根据在1中建立的两个多项式进行相加的运算,并存放在以C为头指针的一个新链表中。
可以采用如下的方法进行设计:
设指针p、q、r分别指向描述多项式的链表A、B、C头部,p指针按照A中结点顺序一个一个地移动,每移动一个结点,就通过q指针的移动来寻找B中是否有与p->
exp相同的。
(1)如果有,在C中合适的位置(注意多项式存储是按照指数递增有序的)建立新结点,并做如下赋值操作:
r->
coef=p->
coef+q->
coef;
exp=p->
exp+q->
exp;
p->
flag=1;
q->
/*标志子项已参与过运算*/
p=p->
next;
q=head_b;
(2)如果没有,在C中合适的位置建立新结点,并做如下赋值操作:
r->
p->
p=p->
q=head_b;
注意:
当A、B中可以相加的两项系数和为0的时候,在C中就不用分配新的空间来进行存储了。
3.多项式显示的功能模块
此模块用于多项式的显示,程序可以使用图形界面,通过调整指数应该出现的坐标位置来表示指数形式,如X+2X2-3X100的形式,也可以使用文本界面,用“系数-指数对”的形式表示表达式,如(1,1)、(2,2)、(-3,100)。
四.界面设计
注意提示用户每一步操作输入的格式和限制。
指导用户按照正确的格式输入数据。
i!
=1&
&
=2
2
1
流程图
1、输入正确的数时,结果如图
2、输入结果错误时,加入输入的为字符串结果如图
五.编码实现
//sgiysn.cpp:
定义控制台应用程序的入口点。
#include"
stdafx.h"
#include<
iostream>
usingnamespacestd;
structnode
{floatcoef;
//系数域
floatexp;
//指数域
intflag;
//运算过的标志
node*next;
//指针域,指向下一个系数不为的子项
};
node*putlist()//模块一、输入并建立多项式的功能模块,利用两个局部变量建立链表,当输入的值都为时,返回的是head=NULL空指针
{floatx;
floaty;
node*head,*temp,*temp1,*head1;
node*tail;
head1=NULL;
cout<
<
"
系数X--指数Y(输入的系数和指数都为时,录入多项式结束):
endl;
cin>
>
x>
y;
if(x==0&
y==0)
returnhead1;
else
{temp=newnode;
temp->
coef=x;
exp=y;
head=temp;
tail=temp;
}//建立第一个结点
{tail->
next=NULL;
returnhead;
}
//如何输入第二个结点为空则返回head,里面有一个结点
else
{if(y>
(tail->
exp))
{temp=newnode;
exp=y;
tail->
next=temp;
tail=temp;
}//如果输入的第二结点的指数比第一个大时,先建立一个结点temp,尾指针tail再指向temp,再用tail=temp
else
{if(y==(tail->
tail->
coef=tail->
coef+x;
//如果第二个结点的指数和第一个相等时,把此对应的系数直接加到前一个结点的系数
{temp1=newnode;
temp1->
temp1->
next=tail;
head=temp1;
}//如果输入的第二结点的指数比第一个小时,先建立一个结点temp,temp指向尾指针tail,再用head=temp
}//最后令tiil->
next指向空
floatm;
floatn;
m>
n;
if(m==0&
n==0)
{while(m!
=0||n!
=0)
{node*cur=head;
node*pre=NULL;
node*newp=NULL;
while((cur!
=NULL)&
(cur->
exp<
n))
{{pre=cur;
cur=cur->
if(cur!
=NULL&
cur->
exp==n)
{cur->
coef=cur->
coef+m;
}
{newp=newnode;
newp->
coef=m;
exp=n;
if(pre==NULL)
{newp->
next=cur;
head=newp;
{pre->
next=newp;
}//建立一个一元多项式
node*addlist(node*A,node*B)//一元多项式相加模块
{node*pandq;
node*p,*q,*pq,*pq1;
pandq=NULL;
p=A;
q=B;
//把链表A和B付给移动指针p和q,同时保护链表A和B的完整
while(p&
q)//当两个链表都不空时
{
if(p->
exp==q->
exp&
flag!
=1)//如果指针p和q指向的结点的指数域相等时
{if(pandq==NULL)//把所求结果以链表的方式输出
{pandq=newnode;
pandq->
pandq->
flag=1;
q->
pq=pandq;
p=p->
q=q->
{pq1=newnode;
pq1->
pq->
next=pq1;
pq=pq1;
}//p,q指数相等的时候
{if((p->
exp)<
(q->
exp)&
(p->
=1))
{if(pandq==NULL)
{pandq=newnode;
pandq->
p->
pq=pandq;
p->
pq->
pq=pq1;
}//p的指数小于q的指数时
else
if(q->
=1)
{if(pandq==NULL)
coef=q->
exp=q->
q->
q->
}//p的指数大于q的指数时
}
}
node*pandq1=NULL;
node*pq2,*pq3;
if(p==NULL)
{if(q==NULL)
{if(pq!
=NULL)
{pq->
returnpandq;
}
returnpandq;
{p=q;
while(p!
{if(pandq1==NULL)
{pandq1=newnode;
pandq1->
pandq1->
pq2=pandq1;
{pq3=newnode;
pq3->
pq2->
next=pq3;
pq2=pq3;
{while(p!
if(pandq!
next=pandq1;
pq2->
{
returnpandq1;
node*mullist(node*A,node*B)
q)
{if(pandq==NULL)
coef-q->
coef=-(q->
coef);
returnpandq;
}
returnpandq;
{p=q;
while(p!
{
if(pandq1==NULL)
coef=-(p->
a"
voidputout(node*m)
{node*n,*p;
if(m==NULL)
{cout<
("
0<
"
)"
}
n=m;
p=m;
inti=0;
while(n)
{i++;
n=n->
};
intj=0;
while(p)
{if(p->
coef==0)
{j++;
p=p->
p=p->
if(i==j)
cout<
{while(m)
if(m->
m=m->
{cout<
m->
coef<
int_tmain(intargc,_TCHAR*argv[])
{intj;
1----创建并显示一元多项式A和B,计算一元多项式A和B的和并显示和"
2----结束程序"
j;
while(j)
{fflush(stdin);
if(j==1)
{node*A;
A=putlist();
A系数--指数:
putout(A);
node*B;
B=putlist();
B系数--指数:
putout(B);
inti;
1---两个实数做加法"
2---两个实数做减法"
i;
while(i)
{if(i==1)
{node*C;
C=addlist(A,B);
合并之后系数--指数:
putout(C);
break;
{if(i==2)
{node*C;
C=mullist(A,B);
两个多项式想减之后系数--指数:
break;
{cin.clear();
cout<
加减不清楚请重新输入"
if(j==2)
return0;
cin.clear();
输入的有误,重新输入"
cin>
六.运行与测试
1.测试以下数据,比较结果:
(1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)
(2)(x+x3)+(-x–x3)=0
(3)(x+x2+x3)+0=x+x2+x3
(4)(1+x+x2+x3+x4+x5)+(―x3―x4)=(1+x+x2+x5)
(5)(x+x100)+(x100+x200)=(x+2x100+x200)
(6)(6x-3-x+4.4x2-1.2x9)-(―6x―3-+5.4x2-x2+7.8x15)=(―7.8x15―1.2x9+12x―3―x)
多项式的减法
2.不按指数递增的顺序输入多项式,验证程序的健壮性和容错性。
若不按递增的顺序输入多项式,程序会自动进行按指数从低到高排序。
七.实验完成后的思考
1、通过本次实验熟练掌握了链表的使用方法,把一元多项式通过链表的方式进行加减运算,实现了结果。
2、通过这次实验,同时我也认识到C++和数据结构的不同,和相同,思路更加清楚这两者怎么联系,同时也意识到变成理论和实践结合是非常重要的,细节问题也不容忽视,例如if语句里面的判断等要用“==”等细节问题。
程序设计风格也有所提高,整体的结构、程序的完整性健壮性也加强了。
例如:
在开始的界面选择继续程序还是退出程序时,如果输入的是字符串,利用cin.clear()可以解决此问题。
3、实验不足之处是多项式输出时,只是输出系数和指数,没有按照数学上的书写方式输出。
实验人:
秦文杰
实验完成日期:
2011年10月23日
实验报告提交日期:
2011年10月30
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结束 一元 多项式
![提示](https://static.bingdoc.com/images/bang_tan.gif)