一元多项式的计算的源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;