高阶多项式合并同类项程序c语言,c语言实现两多项式相乘并排序合并同类项.doc...

#includetypedef struct Node

{

int coef;//系数

int exp;//指数

struct Node *next;

}PolyNode;

PolyNode *Creatpoly()//创建多项式的单链表

{

PolyNode *h,*p,*q;

h=(PolyNode *)malloc(sizeof(PolyNode));

p=h;

p->next=NULL;

printf("请输入多项式的系数及其指数a,b,当系数输入0时停止输入\n");

q=(PolyNode *)malloc(sizeof(PolyNode));

scanf("%d,%d",&q->coef,&q->exp);

while(q->coef!=0)

{

p->next=q;

p=q;

q=(PolyNode *)malloc(sizeof(PolyNode));

scanf("%d,%d",&q->coef,&q->exp);

}

p->next=NULL;

return(h);

}

void Prin_poly(PolyNode *h)//将多项式输出函数

{

PolyNode *p;

p=h->next;

while(p!=NULL)

{

if(p->coef>0&&p!=h->next)

{

if(p->exp>0)

printf("+%dx^%d",p->coef,p->exp);

else if(p->exp<0)

printf("+%dx^(%d)",p->coef,p->exp);

else

printf("+%d",p->coef);

}

else if(p->coef<0&&p!=h->next)

{

if(p->exp>0)

printf("%dx^%d",p->coef,p->exp);

else if(p->exp<0)

printf("%dx^(%d)",p->coef,p->exp);

else

printf("%d",p->coef);

}

else

{

if(p->exp>0)

printf("%dx^%d",p->coef,p->exp);

else if(p->exp<0)

printf("%dx^(%d)",p->coef,p->exp);

else

printf("%d",p->coef);

}

p=p->next;

}

}

void Insort(PolyNode *h)//排序函数,使多项式中的各项按X的升幂排列

{

PolyNode *s,*p;

int t,m;

for(p=h->next;p!=NULL;p=p->next)//类似于冒泡排序

{

for(s=h->next;s->next!=NULL;s=s->next)

{

if(s->exp>s->next->exp)

{

t=s->exp;

m=s->coef;

s->coef=s->next->coef;

s->exp=s->next->exp;

s->next->coef=m;

s->next->exp=t;

}

}

}

}

void UnitePoly(PolyNode *h)//合并同类项

{

PolyNode *p1,*p2,*q1,*q2,*temp;

q1=h;

p1=q1->next;

while(p1!=NULL)

{

p2=p1->next;

q2=p1;

while(p2!=NULL)

{

if(p1->exp==p2->exp)

{

p1->coef=p1->coef+p2->coef;

if(p1->coef==0)

{

temp=p2;

q2->next=p2->next;

free(temp);

temp=p1;

q1->next=p1->next;

p1=q1;

free(temp);

break;

}

else

{

temp=p2;

q2->next=p2->next;

p2=p2->next;

free(temp);

}

}

else

{

q2=p2;

p2=p2->next;

}

}

q1=p1;

p1=p1->next;

}

}

PolyNode *polymuti(PolyNode *h1,PolyNode *h2)//多项式相乘

{

PolyNode *h,*p,*p1,*p2,*q;

p1=h1->next;

h=p=(PolyNode *)malloc(sizeof(PolyNode));

p->next=NULL;

while(p1)

{

p2=h2->next;

while(p2)

{

q=(PolyNode *)malloc(sizeof(PolyNode));

q->coef=p1->coef*p2->coef;

q->exp=p1->exp+p2->exp;

p->next=q;

p=q;

p2=p2->next;

}

p1=p1->next;

}

p->next=NULL;

return(h);

}

main()

{

PolyNode *h1,*h2,*h;

h1=Creatpoly();

printf("该多项式为P1(x)=");

UnitePoly(h1);

Insort(h1);

Prin_poly(h1);

printf("\n");

h2=Creatpoly();

printf("该多项式为P2(x)=");

UnitePoly(h2);

Insort(h2);

Prin_poly(h2);

printf("\n");

printf("按任意键查看两多项式相乘结果\n");

getch();

printf("相乘后的多项式为P(x)=");

h=polymuti(h1,h2);

UnitePoly(h);

Insort(h);

Prin_poly(h);

printf("\n");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值