一元多项式相加,多项式相加
#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 的和。要求:分别输入两个多项式的各个系数和指数。要求程序输出多项式的和。