当前位置:文档之家› 多项式加法(C语言实现)

多项式加法(C语言实现)

多项式加法
#include <stdio.h>
#include <stdlib.h>
#define Max_Size 100
typedef struct node
{
float coef;
int expn;
struct node *next;
}PolyNode;
int CreCoeStr(float C[])
{
char flag;
int i=0;
do
{
scanf("%f",&C[i++]);
scanf("%c",&flag);
} while (flag!='#');
return(i);
}
void CreExpStr(int E[])
{
int i=0;
char flag;
do
{
scanf("%d",&E[i++]);
scanf("%c",&flag);
} while (flag!='#');
}
void InitPolyList(PolyNode **sq)
{
if((*sq=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);
(*sq)->next=NULL;
}
void CreatPolyList(PolyNode **sq,float C[],int E[],int num)
{
int i;
PolyNode *s,*r=*sq;
for(i=0;i<num;i++)
{
if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);
s->coef=C[i];
s->expn=E[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void InsertSortPoly(PolyNode **sq)
{
PolyNode *p,*q,*r,*u;
p=(*sq)->next;
(*sq)->next=NULL;
while (p)
{
r=*sq;
q=(*sq)->next;
while (q&&q->expn<=p->expn)
{
r=q;
q=q->next;
}
u=p->next;
p->next=r->next;
r->next=p;
p=u;
}
}
void DispList(PolyNode *sq)
{
PolyNode *p=sq->next;
while(p)
{
printf("(%7.2f,%d)",p->coef,p->expn);
p=p->next;
}
printf("\n");
}
PolyNode *AddPoly(PolyNode *sq_a,PolyNode *sq_b)
{
PolyNode *p_1=sq_a->next,*p_2=sq_b->next,*tc,*p,*s,*pc;
InitPolyList(&pc);
tc=pc;
while (p_1&&p_2)
{
if(p_1->expn<p_2->expn)
{
if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);
s->coef=p_1->coef;
s->expn=p_1->expn;
s->next=NULL;
tc->next=s;
tc=s;
p_1=p_1->next;
}
else if(p_1->expn>p_2->expn)
{
if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);
s->coef=p_2->coef;
s->expn=p_2->expn;
s->next=NULL;
tc->next=s;
tc=s;
p_2=p_2->next;
}
else
{
if(p_1->coef+p_2->coef)
{
if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);
s->coef=p_1->coef+p_2->coef;
s->expn=p_1->expn;
s->next=NULL;
tc->next=s;
tc=s;
}
p_1=p_1->next;
p_2=p_2->next;
}
}
if(p_1) p=p_1;
else p=p_2;
while (p)
{
if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);
s->coef=p->coef;
s->expn=p->expn;
tc->next=s;
tc=s;
p=p->next;
}
tc->next=NULL;
return pc;
}
void main()
{
PolyNode *sq_1,*sq_2,*sq_3;
float C_1[Max_Size],C_2[Max_Size];
int E_1[Max_Size],E_2[Max_Size],num_1,num_2;
printf("\n\t\t两个多项式相加运算\n");
printf("\n");
printf("\n");
printf("请输入多项式A 的各项系数(以‘#’结束): ");
num_1=CreCoeStr(C_1);
printf("\n请输入多项式A 的各项幂数(以‘#’结束): ");
CreExpStr(E_1);
printf("\n请输入多项式B 的各项系数(以‘#’结束): ");
num_2=CreCoeStr(C_2);
printf("\n请输入多项式B 的各项幂数(以‘#’结束): ");
CreExpStr(E_2);
InitPolyList(&sq_1);
InitPolyList(&sq_2);
CreatPolyList(&sq_1,C_1,E_1,num_1);
CreatPolyList(&sq_2,C_2,E_2,num_2);
printf("\n原多项式A :\n");
DispList(sq_1);
printf("\n原多项式B :\n");
DispList(sq_2);
InsertSortPoly(&sq_1);
InsertSortPoly(&sq_2);
printf("\n排列后的多项式A : \n");
DispList(sq_1);
printf("\n排列后的多项式B : \n");
DispList(sq_2);
sq_3=AddPoly(sq_1,sq_2);
printf("\n多项式相加结果: \n");
DispList(sq_3);
printf("\n");
}。

相关主题