太晚了没时间写
随便找了个机子里面相关的,参考下就可以写了
不懂可以提问
这个是2个多项目式相乘,多项式按指数降序排列,*pPolyNode为链表指针
#include
#include
#include
typedefstruct term{
double coef;
int expn;
struct term* next;
}PolyNode ,*pPolyNode;
pPolyNode CreatePoly()
{
PolyNode *p,*q,*s,*head=NULL;
double coef;
int expn;
head=(pPolyNode)malloc( sizeof(PolyNode) );
if(head==NULL)
{
return NULL;
}
head->coef =0.0;
head->expn =0;
head->next =NULL;
scanf(“%lf“,&coef);
scanf(“%d“,&expn);
while( (long)coef !=0 && expn !=0 )
{
s = (pPolyNode)malloc(sizeof(PolyNode));
s->coef = coef;
s->expn = expn;
q=head->next ;
p=head;
while(q && expn expn)
{
p=q;
q=q->next;
}
if(q== NULL || expn > q->expn )
{
p->next =s;
s->next =q;
}
else
{
q->coef+=coef;
}
scanf(“%lf“,&coef);
scanf(“%d“,&expn);
}
return head;
}
pPolyNodeReverse(pPolyNode head)
{
PolyNode *p,*q,*t;
p=NULL;
q=head->next;
while( q!=NULL )
{
t=q->next;
q->next =p;
p=q;
q=t;
}
head->next =p;
return head;
}
pPolyNode multiply(pPolyNode A,pPolyNode B)
{
PolyNode *pa,*pb,*pc,*u,*head;
int k ,maxExp;
double coef;
head=(pPolyNode)malloc( sizeof (PolyNode) );
if(head==NULL)
{
printf(“Allocable memory fail!\n“);
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);
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) 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=(pPolyNode)malloc(sizeof(PolyNode));
u->coef =coef;
u->expn =k;
u->next =pc->next;
pc->next=u;
pc=u;
}
}
B=Reverse(B);
return head;
}
//print Poly
void Printpoly(pPolyNode 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;
}
}
int main()
{
pPolyNode A,B,C;
A=CreatePoly();
printf(“A(x)=“);
Printpoly (A);
printf(“\n“);
B=CreatePoly();
printf(“B(x)=“);
Printpoly (B);
printf(“\n“);
C=multiply(A,B);
//C=CreatePoly();
printf(“C(x)=“);
Printpoly (C);
printf(“\n“);
//getch();
return 0;
}
|