设计一个一元多项式加法器.doc_第1页
设计一个一元多项式加法器.doc_第2页
设计一个一元多项式加法器.doc_第3页
设计一个一元多项式加法器.doc_第4页
设计一个一元多项式加法器.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计题目一:设计一个一元多项式加法器基本要求:(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); /系数为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的一元多项式 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 PrintPolyn(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) putchar(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 -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=(Polyn)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; 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;/SubtractPolynfloat 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 Polynomial);/建立头结点 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; 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 DevicePolyn(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(sizeof(struct Polynomial); temp2-next-coef=(qa-coef)/(qb-coef); temp2-next-expn=(qa-expn)-(qb-expn); Insert(temp2-next,hf); pa=SubtractPolyn(pa,MultiplyPolyn(pb,temp2); qa=pa-next; temp2-next=NULL; pf=SubtractPolyn(temp1,MultiplyPolyn(hf,pb); pb=temp1; printf(商是:); PrintPolyn(hf); printf(余数是:); PrintPolyn(pf);/DevicePolynint main() int m,n,flag=0; float x; Polyn pa=0,pb=0,pc,pd,pe,pf;/定义各式的头指针,pa与pb在使用前付初值NULL printf(请输入a的项数:); scanf(%d,&m); pa=CreatePolyn(pa,m);/建立多项式a printf(请输入b的项数:); scanf(%d,&n); pb=CreatePolyn(pb,n);/建立多项式a /输出菜单 printf(*n); printf(操作提示:nt1.输出多项式a和bnt2.建立多项式a+bnt3.建立多项式a-bn); printf(t4.计算多项式a在x处的值nt5.求多项式a的导函数nt6.建立多项式a*bn); printf(t7.建立多项式a/bnt8.退出n*n); for(;flag=0) printf(执行操作); scanf(%d,&flag); if(flag=1) printf(多项式a:);PrintPolyn(pa); printf(多项式b:);PrintPolyn(pb);continue; if(flag=2) pc=AddPolyn(pa,pb); printf(多项式a+b:);PrintPolyn(pc); DestroyPolyn(pc);continue; if(flag=3) pd=SubtractPolyn(pa,pb); printf(多项式a-b:);PrintPolyn(pd); DestroyPolyn(pd);continue; if(flag=4) printf(输入x的值:x=); scanf(%f,&x); printf(多项式a的值%gn,ValuePolyn(pa,x);continue; if(flag=5) pe=Derivative(pa); printf(多项式a的导函数:);PrintPolyn(pe); DestroyPo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论