1、
设计说明
1 问题描述与功能设计
本程序要求能够实现从键盘键入两个多项式的系数、指数相关数据后,能够进行多项式输出、多项式相加、多项式相减、多项式求积的运算。
2算法
多项式的输入
调用build( )函数建立链表,将多项式每一项的系数与指数作为链表一个结点的数据,按照指示输入每一项的系数与指数时,并且将输入的结点信息按指数降序排列的方式插入到之前建立的链表中。依次输入、建立一元多项式a和b。如下图。
多项式的输出:
调用dispay( )函数将多项式链表中的结点数据按照一元多项式的格式(如:6x^5+3x^3+7x+3)输出到屏幕上。
两个多项式的
2、加法
调用add()函数直接对两个多项式的链表的结点成员的系数与指数按照数学中多项式相加的原则进行操作。相加所得的多项式存放到新建的第三个多项式中。再对第三个多项式输出即可。
两个多项式的减法
调用sub()函数对两个多项式减法运算。首先对要减的多项式的系数求反,接着调用AddPolyn()函数对处理后的多项式相加即两个多项式的相减。所得的多项式存放到新建的第三个多项式中,再对第三个多项式输出即可。
两个多项式的乘法
调用mul()函数对两个多项式进行乘法运算。根据数学知识,依次用一个多项式的每一项乘以另一个多项式的每一项,再求和、
3、合并同类项即两个多项式的乘积。当中用了多两个多项式的while循环,以确保两个多项式的每一项都得到相应的运算,每一次运算后调用Insert()函数把乘积插入到新建的链表中,以得到一个结点信息按指数降序排列的方式排列,并以合并同类项的链表。
3 函数定义
为了程序功能的顺利实现,在本程序中定义了如下函数:
函数名 功能
build() 建立节点
dispay()
4、显示多项式
add() 两多项式进行相加
sub() 两多项式进行相减
copy() 复制链表(保护原数据)
mul() 两多项式进行相乘
same() 判断输入项和已存在的是否有相同的
del()
5、 清除链表
4 界面设计
程序操作主界面:
5 编码
链表建立的函数build(Link &L,int n),该函数在多项式信息输入时按照指数降序排列建立链表,并将和已存在的相同的项和系数为零的要求重新建立。
两个多项式的减法是建立在加法的的基础上,对要减的多项式的系数求反,接着调用sub()函数对处理后的多项式相加即两个多项式的相减
void sub(Link &pc,Link pa,Link pb)
{
Link p,pt;
copy(pt,pb);
p=pt;
whil
6、e(p!=NULL)
{
(p->data).num=(-(p->data).num);
p=p->next;
}
add(pc,pa,pt);
del(pt);
}
两个多项式的乘法
void mul(Link &pc,Link pa,Link pb)
{
Link p1,p2,p,pd,newp,t;
pc=new link;
pc->next=NULL;
p1=pa->next;
p2=pb->next;
while(p1!=NULL)
{
pd=new link;
pd->next=NULL;
p=n
7、ew link;
p->next=NULL;
t=p;
while(p2)
{
newp=new link;
newp->next=NULL;
newp->data.num=p1->data.num*p2->data.num;
newp->data.index=p1->data.index+p2->data.index;
t->next=newp;
t=t->next;
p2=p2->next;
}
add(pd,pc,p);
copy(pc,pd);
p1=p1->next;
p2=pb->next;
del(p);
del(pd);
}
}}
V
11