一元多项式的计算的源程序

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

#include

#include

typedef struct

{ float coef; //系数

int expn; //指数

}term;

typedef struct LNode

{ term data; //term多项式值

struct LNode *next;

}LNode,*LinkList;

typedef LinkList polynomail;

/*比较指数*/

int cmp(term a,term b)

{ if(a.expn>b.expn) return 1;

if(a.expn==b.expn) return 0;

if(a.expn

else exit(-2);

}

/*又小到大排列*/

void arrange1(polynomail pa)

{ polynomail h=pa,p,q,r;

if(pa==NULL) exit(-2);

for(p=pa;p->next!=NULL;p=p->next); r=p;

for(h=pa;h->next!=r;)//大的沉底

{ for(p=h;p->next!=r&&p!=r;p=p->next)

if(cmp(p->next->data,p->next->next->data)==1)

{ q=p->next->next;

p->next->next=q->next;

q->next=p->next;

p->next=q;

}

r=p;//r指向参与比较的最后一个,不断向前移动} }

/*由大到小排序*/

void arrange2(polynomail pa)

{ polynomail h=pa,p,q,r;

if(pa==NULL) exit(-2);

for(p=pa;p->next!=NULL;p=p->next); r=p;

for(h=pa;h->next!=r;)//小的沉底

{ for(p=h;p->next!=r&&p!=r;p=p->next)

if(cmp(p->next->next->data,p->next->data)==1)

{ q=p->next->next;

p->next->next=q->next;

q->next=p->next;

p->next=q;

}

r=p;//r指向参与比较的最后一个,不断向前移动

} }

/*打印多项式,求项数*/

int printpolyn(polynomail P)

{ int i;

polynomail q;

if(P==NULL) printf("无项!\n");

else if(P->next==NULL) printf("Y=0\n");

else

{ printf("该多项式为Y=");q=P->next;i=1;

if(q->data.coef!=0&&q->data.expn!=0)

{ printf("%.2fX^%d",q->data.coef,q->data.expn); i++; } if(q->data.expn==0&&q->data.coef!=0)

printf("%.2f",q->data.coef);//打印第一项

q=q->next;

if(q==NULL)

{printf("\n");return 1;}

while(1)//while中,打印剩下项中系数非零的项,{ if(q->data.coef!=0&&q->data.expn!=0)

{ if(q->data.coef>0) printf("+");

printf("%.2fX^%d",q->data.coef,q->data.expn); i++;

}

if(q->data.expn==0&&q->data.coef!=0)

{ if(q->data.coef>0) printf("+");

printf("%f",q->data.coef);

}

q=q->next;

if(q==NULL)

{ printf("\n"); break; }

}

}

return 1;

}

/*1、创建并初始化多项式链表*/

polynomail creatpolyn(polynomail P,int m)

{ polynomail r,q,p,s,Q;

int i;

P=(LNode*)malloc(sizeof(LNode));

r=P;

for(i=0;i

{ s=(LNode*)malloc(sizeof(LNode));

printf("请输入第%d项的系数和指数:",i+1);

scanf("%f%d",&s->data.coef,&s->data.expn);

r->next=s; r=s;

}

r->next=NULL;

if(P->next->next!=NULL)

{ for(q=P->next;q!=NULL/*&&q->next!=NULL*/;q=q->next)//合并同类项for(p=q->next,r=q;p!=NULL;)

if(q->data.expn==p->data.expn)

{ q->data.coef=q->data.coef+p->data.coef;

r->next=p->next;

Q=p;p=p->next;

free(Q);

}

else

{ r=r->next;

p=p->next;

}

}

return P;

}

/*2、两多项式相加*/

polynomail addpolyn(polynomail pa,polynomail pb)

{ polynomail s,newp,q,p,r;int j;

p=pa->next;q=pb->next;

newp=(LNode*)malloc(sizeof(LNode));

r=newp;

while(p&&q)

{ s=(LNode*)malloc(sizeof(LNode));

switch(cmp(p->data,q->data))

{case -1: s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s; r=s;

p=p->next;

break;

case 0: s->data.coef=p->data.coef+q->data.coef;

if(s->data.coef!=0.0)

{ s->data.expn=p->data.expn;

r->next=s;

r=s;

}

p=p->next;

q=q->next;

break;

case 1: s->data.coef=q->data.coef;

相关文档
最新文档