这个程序是我们课设题目,只实现了一元多项式的相加,然后对(addpoly )实现相加的函数修改一下,很简单就能达到相减的目的.
代码如下:
#include "stdio.h"
#include "malloc.h"
typedef struct polynode
{
int coef;
int expn;
struct polynode *next;
} *pnode;
pnode createpoly()
{
int a,n,i=1;
pnode head,s,p;
printf("输入一元多项式(以0,0标志结束):n");
printf("要求:1.按幂从大到小次序输入各节点n");
printf(" 2.没有两个节点具有相同的幂:n");
head=(pnode) malloc (sizeof (struct polynode ));
head->next=NULL;
p=head;
do
{
printf("第%d次->系数,幂:",i++);
scanf("%d,%d",&a,&n);
if (a!=0 || n!=0)
{
s=(pnode) malloc ( sizeof (struct polynode));
s->coef=a; s->expn=n; s->next=NULL;
p->next=s; p=s;
}
}
while (a!=0 || n!=0);
printf("n");
return (head);
}
void printpoly(pnode head)
{
int first=1;
head=head->next;
while (head!=NULL)
{
if (first)
{
if (head->expn==1)
printf("%dx",head->coef);
else if (head->expn==0)
printf("%d",head->coef);
else
printf("%dx^%d",head->coef,head->expn);
first=0;
}
else
{
if (head->expn==1)
printf("%+dx",head->coef);
else if (head->expn==0)
printf("%+d",head->coef);
else
printf("%+dx^%d",head->coef,head->expn);
}
head=head->next;
}
printf("n");
}
pnode addpoly(pnode pa,pnode pb)
{
int n;
pnode pc,s,p;
pa=pa->next;
pb=pb->next;
pc=(pnode) malloc (sizeof (struct polynode));
pc->next=NULL;p=pc;
while (pa!=NULL && pb!=NULL)
{
if (pa->expn>pb->expn)
{
s= (pnode) malloc (sizeof (struct polynode));
s->coef=pa->coef; s->expn=pa->expn;
s->next=NULL; p->next=s; p=s;
pa=pa->next;
}
else if (pa->expnexpn)
{
s=(pnode) malloc (sizeof (struct polynode));
s->coef=pb->coef; s->expn=pb->expn;
s->next=NULL; p->next=s; p=s;
pb=pb->next;
}
else
{
n=pa->coef+pb->coef;
if (n!=0)
{
s=(pnode) malloc (sizeof (struct polynode));
s->coef=n; s->expn=pb->expn; s->next=NULL;
p->next=s; p=s;
}
pa=pa->next; pb=pb->next;
}
}
while (pa!=NULL)
{
s=(pnode) malloc (sizeof (struct polynode));
s->coef=pa->coef; s->expn=pa->expn;
s->next=NULL; p->next=s;
p=s; pa=pa->next;
}
while (pb!=NULL)
{
s= (pnode) malloc (sizeof (struct polynode ));
s->coef=pb->coef; s->expn=pb->expn;
s->next=NULL; p->next=s;
p=s; pb=pb->next;
}
return(pc);
}
main()
{
pnode poly1,poly2,poly3;
printf("建立第一个一元多项式=>n");
poly1=createpoly();
printf("建立第二个一元多项式=>n");
poly2=createpoly();
poly3=addpoly(poly1,poly2);
printf("第一个一元多项式为:");
printpoly (poly1);
printf("第二个一元多项式为:");
printpoly(poly2);
printf("相加后一元多项式为:");
printpoly(poly3);
}