//一元多项式 #include<stdio.h> #include<stdlib.h> typedef struct ployn{ float coef; //存放一元多项式的系数 int expn; //存放一元多项式的指数 struct ployn *next; }PolyNode,*PolyNomial; //创建一元多项式 PolyNomial CreatePolyn(){ PolyNode *p,*q,*s; PolyNode *head=NULL; int expn2; float coef2; head=(PolyNomial)malloc(sizeof(PolyNode)); if(!head) return NULL; head->coef=0; head->expn=0; head->next=NULL; do{ printf("输入系数coef"); scanf("%f",&coef2); printf("输入指数exp(输入0 0 结束)"); scanf("%d",&expn2); if((long)coef2==0&&expn2==0) break; s=(PolyNode *)malloc(sizeof(PolyNode)); if(!s) return NULL; s->expn=expn2; s->coef=coef2; q=head->next; p=head; //创建一个多项式,使多项式按照指数递减排列 while(q&&expn2<q->expn){ p=q; q=q->next; } if(q==NULL||expn2>q->expn){ p->next=s; s->next=q; }else{ q->coef+=coef2; //如果指数相同,合并同类项 } }while(1); return head; } //逆置链表 PolyNode *Reverse(PolyNomial head){ PolyNode *q,*r,*p=NULL; q=head->next; while(q){ r=q->next; q->next=p; p=q; q=r; } head->next=p; return head; } //一元多项式的相乘 PolyNode *MultiplyPolyn(PolyNomial A,PolyNomial B){ PolyNode *pa,*pb,*pc,*u,*head; int k,maxExp; float coef; head=(PolyNomial)malloc(sizeof(PolyNode)); if(!head) return NULL; head->coef=0.0; head->expn=0; head->next=NULL; if(A->next!=NULL&&B->next!=NULL) //求出两个多项式乘积最大的指数项 maxExp=A->next->expn+B->next->expn; else return head; pc=head; B=Reverse(B); //将多项式B逆置 for(k=maxExp;k>=0;k--){ pa=A->next; while(pa!=NULL&&pa->expn>k) pa=pa->next; pb=B->next; while(pb!=NULL&&pa!=NULL&&(pa->expn+pb->expn)<k) pb=pb->next; coef=0.0; while(pa!=NULL&&pb!=NULL){ if(pa->expn+pb->expn==k){ coef+=pa->coef*pb->coef; pa=pa->next; pb=pb->next; }else if(pa->expn+pb->expn>k) pa=pa->next; else pb=pb->next; } if(coef!=0.0){ u=(PolyNode *)malloc(sizeof(PolyNode)); u->coef=coef; u->expn=k; u->next=pc->next; pc->next=u; pc=u; } } B=Reverse(B); return head; } //输出一元多项式 void OutPut(PolyNomial head){ PolyNode *p=head->next; while(p){ printf("%1.1f",p->coef); if(p->expn) printf("*x^%d",p->expn); if(p->next&&p->next->coef>0) printf("+"); p=p->next; } } void main(){ PolyNomial A,B,C; A=CreatePolyn(); printf("A(x)="); OutPut(A); printf(" "); B=CreatePolyn(); printf("B(x)="); OutPut(B); printf(" "); C=MultiplyPolyn(A,B); printf("C(x)=A(x)*B(x)="); OutPut(C); printf(" "); system("pause"); }