一、实验题目:一元多项式求和。
把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。
二、设计分析:
根据伪代码改写即可,注意记下p,q两个指针头结点的位置,可以创建一个新的链表来代替p、q指针的合并,这样可以不用再删除结点了。
三、程序代码:
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct Node{
double coef;
int exp;
struct Node*next;
}Link;
void creatLink(Link*&p,int m)
{
Link *r,*s;
int i;
p=(Link *)malloc(sizeof(Link));
r=p;
for(i=0;i<m;i++)
{
s=(Link *)malloc(sizeof(Link));
printf("输入系数和指数:");
scanf("%lf %d",&s->coef,&s->exp);
r->next=s;
r=s;
}
r->next=NULL;
}
void printLink(Link *p){
Link *s;
s=p->next;
while(s!=NULL){
printf("%.2lfX^%d",s->coef,s->exp);
s=s->next;
if(s!=NULL){
if(s->coef>=0) printf("+");
}
}
printf("\n");
}
Link* addLink(Link *&a,Link *&b){
Link *newp,*p,*q,*t,*s;
double temp;
p=a->next;
q=b->next;
newp=(Link *)malloc(sizeof(Link));
t=newp;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp){
s=(Link *)malloc(sizeof(Link));
s->coef=p->coef;
s->exp=p->exp;
t->next=s;
t=s;
p=p->next;
}else if(p->exp==q->exp){
temp=p->coef+q->coef;
if(temp!=0.0){
s=(Link *)malloc(sizeof(Link));
s->coef=temp;
s->exp=p->exp;
t->next=s;
t=s;
}
p=p->next;
q=q->next;
}else{
s=(Link *)malloc(sizeof(Link));
s->coef=q->coef;
s->exp=q->exp;
t->next=s;
t=s;
q=q->next;
}
}
if(p!=NULL) t->next=p;
else t->next=q;
return newp;
}
int main(){
Link *p1,*p2;
int L1,L2;
printf("请输入第一个多项式的项数:");
scanf("%d",&L1);
creatLink(p1,L1);
printf("请输入第二个多项式的项数:");
scanf("%d",&L2);
creatLink(p2,L2);
printf("两个一元多项式相加的结果为:");
printLink(addLink(p1,p2));
return 0;
}