文档库 最新最全的文档下载
当前位置:文档库 › 一元多项式的建立与相加

一元多项式的建立与相加

# include
# include
# include
struct LNode
{
float coef;
int expn;
struct LNode *next;
}; //expn表示x的指数,coef表示对应项的系数
# define LEN sizeof(struct LNode)
# define NULL 0
void main()
{
int m,n;
struct LNode * creatpolyn(int a); //根据项数创建一元多项式
struct LNode * addpolyn(struct LNode * p1,struct LNode * p2); //两个多项式的相加
void printpolyn(struct LNode * p1);
int compare(struct LNode * p1,struct LNode * p2); //比较指数的大小,前者大返回1后者大返回-1相等返回0
struct LNode * p1,* p2;
printf("请输入第一个多项式的项数:\n");
scanf("%d",&m);
printf("输入这个多项式的各项系数与指数:\n");
p1=creatpolyn(m);
printf("请输入第二个多项式的项数:\n");
scanf("%d",&n);
printf("输入这个多项式的各项系数与指数:\n");
p2=creatpolyn(n);
printf("第一个多项式为:\n");
printpolyn(p1);
printf("第二个多项式为:\n");
printpolyn(p2);
printf("相加后的多项式为:\n");
printpolyn(addpolyn(p1,p2));
}
struct LNode * creatpolyn(int a) //输入的多项式逆序是按照指数增加排列的多项式
{ //况且一般情况下都是如此
struct LNode * p1,* p2,*la;
int n=0,i;
p1=(struct LNode *)malloc(LEN);
if(!p1) exit(NULL);
p1->next=NULL;
scanf("%f,%d",&(p1->coef),&(p1->expn));
for(i=1;i<=a;i++)
{
++n;
if(n==1)
la=p1;
else
p2->next=p1;
p2=p1;
p1=(struct LNode *)malloc(LEN);
if(!p1) exit(NULL);
p1->next=NULL;
if(i==a) break;
scanf("%f,%d",&(p1->coef),&(p1->expn));
}
return(la);
}
void printpolyn(struct LNode * p1)
{
while(p1->next!=NULL)
{
printf("%.2fx%d+",p1->coef,p1->expn);
p1=p1->next;
}
printf("%.2fx%d\n",p1->coef,p1->expn);
}
int compare(struct LNode * p1,struct LNode * p2)
{
if(p1->expn>p2->expn) return(-1);
if(p1->expnexpn) return(1);
return(0);
}
struct LNode * addpolyn(struct LNode * Pa,struct LNode * Pb)
{
struct LNode * h, *qa = Pa, *qb = Pb, *p, *q;
float sum;
h = p = (struct LNode *)malloc(sizeof(LEN));
p->next = NULL; //头指针
while (qa && qb) //p为跟随指针h固定
{
switch (compare(qa,qb))
{
case -1:
p->next = qb;
p = qb;
qb=qb->next;
break;
case 0:
sum = qa->coef + qb->coef;
if (sum != 0.0)
{
p->next = qa;
qa->coef = sum;
p = qa;
qa = qa->next;
}
else
{
q = qa;
qa = qa->next;
free(q);
}
q = qb;
qb = qb->next;
free(q);
break;
case 1:
p->next = qa;
p = qa;
qa = qa->next;
break;
}
}
if (qa) p->next = qa;
if (qb) p->next = qb; //将剩下

的多项式链入其中
q = h;
h = h->next;
free(q);
return h;
}

相关文档
相关文档 最新文档