多项式加法(C语言实现)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多项式加法
#include
#include
#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 { 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 { 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);