您的位置:首页 > 编程语言 > C语言/C++

C语言实现一元多项式求积

2014-04-09 21:57 495 查看
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef 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("please input the Polyomial coef & exp a,b,when input 0 stop\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);
}
int main()
{
PolyNode *h1,*h2,*h;
h1=Creatpoly();
printf("the Polyomial is P1(x)=");
UnitePoly(h1);
Insort(h1);
Prin_poly(h1);
printf("\n");
h2=Creatpoly();
printf("the Polyomial is P2(x)=");
UnitePoly(h2);
Insort(h2);
Prin_poly(h2);
printf("\n");
printf("press any key to check the result\n");
getch();
printf("after multi the result is P(x)=");
h=polymuti(h1,h2);
UnitePoly(h);
Insort(h);
Prin_poly(h);
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: