一元多项式相加,多项式相加
#include<stdlib.h>
#include<stdio.h>
typedef struct pnode
{
float coef; //系数域
int exp; //指数域
struct pnode *next; //指针域
}PolyNode;
PolyNode *PolyAdd(PolyNode *A,PolyNode *B)
{
int i,j,k;
float x;
PolyNode *q1,*q2,*ptr,*q; /*q1指向A,q2指向B,ptr保存两个式子相加结果*/
q1=A;
q2=B;
q=malloc(sizeof(PolyNode));
q->coef=0;
q->exp=-1;
q->next=NULL;
ptr=q;
q1=q1->next;
q2=q2->next;
while((q1!=NULL)&&(q2!=NULL)) //当两个多项式都没有合并结束的时候
{
if(q1->exp==q2->exp) //两个多项式系数相等的时候
{
x=q1->coef+q2->coef;
if(x!=0) //将保存相加的这项保存到ptr中
{
q->next=malloc(sizeof(PolyNode));
q=q->next;
q->coef=x;
q->exp=q1->exp;
}
q1=q1->next;
q2=q2->next;
}
else //指数不想等的时候,将指数小的放在和多项式子中
{
q=malloc(sizeof(PolyNode));
q=q->next;
if(q1->exp>q2->exp)
{
q->coef=q2->coef;
q->exp=q2->exp;
q2=q2->next;
}
else
{
q->coef=q1->coef;
q->exp=q1->exp;
q1=q1->next;
}
}
}
//当A多项式子有剩余的时候将剩余的项合并在和多项式中
while(q1!=NULL)
{
q->next=malloc(sizeof(PolyNode));
q=q->next;
q->coef=q1->coef;
q->exp=q1->exp;
q1=q1->next;
}
//当B多项式子有剩余的时候将剩余的项合并在和多项式中
while(q2!=NULL)
{
q->next=malloc(sizeof(PolyNode));
q=q->next;
q->coef=q2->coef;
q->exp=q2->exp;
q2=q2->next;
}
q->next=NULL;
return ptr;
}
PolyNode *Create()
{
float q;
int n,i;
PolyNode *head,*s,*r;
head=malloc(sizeof(PolyNode));
r=head;
r->coef=-1;
r->exp=0;
r->next=NULL;
i=1;
printf("请输入第%d项系数和指数:\n",i);
scanf("%f%d",&q,&n);
while(n!=-1)
{
s=malloc(sizeof(PolyNode));
s->coef=q;
s->exp=n;
r->next=s;
r=s;
i++;
printf("请输入第%d项系数和指数:\n",i);
scanf("%f %d",&q,&n);
}
r->next=NULL;
return head;
}
void Print(PolyNode *q)
{
PolyNode *p;
p=q->next;
while(p!=NULL)
{
printf("%5.1f^%d",p->coef,p->exp);
p=p->next;
if(p!=NULL)
{
printf("+");
}
}
printf("\n");
}
int main()
{
PolyNode *A,*B,*C;
A=Create();
B=Create();
C=PolyAdd(A,B);
Print(A);
Print(B);
Print(C);
}
问题说明
求两个一元多项式 A(x) = a0 + a1x + a2x2 + … + anxn 和 B(x) = b0 + b1x + b2x2 + … + bmxm 的和。要求:分别输入两个多项式的各个系数和指数。要求程序输出多项式的和。