设计一个一元多项式加法器.doc

上传人:壹****1 文档编号:558436368 上传时间:2023-10-08 格式:DOC 页数:7 大小:56.01KB
返回 下载 相关 举报
设计一个一元多项式加法器.doc_第1页
第1页 / 共7页
设计一个一元多项式加法器.doc_第2页
第2页 / 共7页
设计一个一元多项式加法器.doc_第3页
第3页 / 共7页
设计一个一元多项式加法器.doc_第4页
第4页 / 共7页
设计一个一元多项式加法器.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《设计一个一元多项式加法器.doc》由会员分享,可在线阅读,更多相关《设计一个一元多项式加法器.doc(7页珍藏版)》请在金锄头文库上搜索。

1、课程设计题目一:设计一个一元多项式加法器基本要求:(1)输入并建立多项式;(2)两个多项式相加;(3)输出多项式:n, c1, e1, c2, e2, cn , en, 其中,n是多项式项数,ci和ei分别是第 i 项的系数和指数,序列按指数降序排列。#include#includetypedef struct Polynomial float coef; int expn; struct Polynomial *next;*Polyn,Polynomial; /Polyn为结点指针类型void Insert(Polyn p,Polyn h) if(p-coef=0) free(p); /系数

2、为0的话释放结点 else Polyn q1,q2; q1=h;q2=h-next; while(q2&p-expnexpn) /查找插入位置 q1=q2; q2=q2-next; if(q2&p-expn=q2-expn) /将指数相同相合并 q2-coef+=p-coef; free(p); if(!q2-coef) /系数为0的话释放结点 q1-next=q2-next; free(q2); else /指数为新时将结点插入 p-next=q2; q1-next=p; /InsertPolyn CreatePolyn(Polyn head,int m)/建立一个头指针为head、项数为m

3、的一元多项式 int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial); head-next=NULL; for(i=0;icoef,&p-expn); Insert(p,head); /调用Insert函数插入结点 return head;/CreatePolynvoid DestroyPolyn(Polyn p)/销毁多项式p Polyn q1,q2; q1=p-next; q2=q1-next; while(q1-next) free(q1); q1=q2;/指针后移 q2=q2-next; void PrintPoly

4、n(Polyn P) Polyn q=P-next; int flag=1;/项数计数器 if(!q) /若多项式为空,输出0 putchar(0); printf(n); return; while (q) if(q-coef0&flag!=1) putchar(+); /系数大于0且不是第一项 if(q-coef!=1&q-coef!=-1)/系数非1或-1的普通情况 printf(%g,q-coef); if(q-expn=1) putchar(X); else if(q-expn) printf(X%d,q-expn); else if(q-coef=1) if(!q-expn) pu

5、tchar(1); else if(q-expn=1) putchar(X); else printf(X%d,q-expn); if(q-coef=-1) if(!q-expn) printf(-1); else if(q-expn=1) printf(-X); else printf(-X%d,q-expn); q=q-next; flag+; /while printf(n);/PrintPolynint compare(Polyn a,Polyn b) if(a&b) if(!b|a-expnb-expn) return 1; else if(!a|a-expnexpn) return

6、 -1; else return 0; else if(!a&b) return -1;/a多项式已空,但b多项式非空 else return 1;/b多项式已空,但a多项式非空/comparePolyn AddPolyn(Polyn pa,Polyn pb)/求解并建立多项式a+b,返回其头指针 Polyn qa=pa-next; Polyn qb=pb-next; Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hc-next=NULL; headc=hc; while(qa|qb) qc=(Poly

7、n)malloc(sizeof(struct Polynomial); switch(compare(qa,qb) case 1: qc-coef=qa-coef; qc-expn=qa-expn; qa=qa-next; break; case 0: qc-coef=qa-coef+qb-coef; qc-expn=qa-expn; qa=qa-next; qb=qb-next; break; case -1: qc-coef=qb-coef; qc-expn=qb-expn; qb=qb-next; break; /switch if(qc-coef!=0) qc-next=hc-next

8、; hc-next=qc; hc=qc; else free(qc);/当相加系数为0时,释放该结点 /while return headc;/AddPolynPolyn SubtractPolyn(Polyn pa,Polyn pb)/求解并建立多项式a+b,返回其头指针 Polyn h=pb; Polyn p=pb-next; Polyn pd; while(p) /将pb的系数取反 p-coef*=-1; p=p-next; pd=AddPolyn(pa,h); for(p=h-next;p;p=p-next) /恢复pb的系数 p-coef*=-1; return pd;/Subtra

9、ctPolynfloat ValuePolyn(Polyn head,float x)/输入x值,计算并返回多项式的值 Polyn p; int i; float sum=0,t; for(p=head-next;p;p=p-next) t=1; for(i=p-expn;i!=0;) if(icoef*t; return sum;/ValuePolynPolyn Derivative(Polyn head)/求解并建立a的导函数多项式,并返回其头指针 Polyn q=head-next,p1,p2,hd; hd=p1=(Polyn)malloc(sizeof(struct Polynomia

10、l);/建立头结点 hd-next=NULL; while(q) if(q-expn!=0) /该项不是常数项时 p2=(Polyn)malloc(sizeof(struct Polynomial); p2-coef=q-coef*q-expn; p2-expn=q-expn-1; p2-next=p1-next;/连接结点 p1-next=p2; p1=p2; q=q-next; return hd;/DervativePolyn MultiplyPolyn(Polyn pa,Polyn pb)/求解并建立多项式a*b,返回其头指针 Polyn hf,pf; Polyn qa=pa-next

11、; Polyn qb=pb-next; hf=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hf-next=NULL; for(;qa;qa=qa-next) for(qb=pb-next;qb;qb=qb-next) pf=(Polyn)malloc(sizeof(struct Polynomial); pf-coef=qa-coef*qb-coef; pf-expn=qa-expn+qb-expn; Insert(pf,hf);/调用Insert函数以合并指数相同的项 return hf;/MultiplyPolynvoid DevicePo

12、lyn(Polyn pa,Polyn pb)/求解并建立多项式a*b,返回其头指针 Polyn hf,pf,af,temp1,temp2,q; Polyn qa=pa-next; Polyn qb=pb-next; hf=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点,存储商 hf-next=NULL; pf=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点,存储余数 pf-next=NULL; temp1=(Polyn)malloc(sizeof(struct Polynomial); temp1-next=NULL; temp2=(Polyn)malloc(sizeof(struct Polynomial); temp2-next=NULL; temp1=AddPolyn(temp1,pa); while(qa!=NULL&qa-expn=qb-expn) temp2-next=(Polyn)malloc(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号