ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:133.60KB ,
资源ID:12588023      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12588023.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一元稀疏多项式的运算.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

一元稀疏多项式的运算.docx

1、一元稀疏多项式的运算高级语言程序设计课程设计报告题目:一元稀疏多项式的运算专业:班级:姓名:指导教师:成绩:计算机与信息工程系 2014年6月20日 目 录 1 设计内容与要求 11.1设计内容 11.2主要功能与要求 12 概要设计 12.1设计思路 12.2设计思路分析 12.3主要模块和流程 23 设计过程 43.1代码分析及确定 43.2关键代码解释 84 设计结果与分析 114.1 设计结果 114.2 分析 125 参考文献 13附录:源代码 14 1 设计内容与要求1.1设计内容设计一个一元稀疏多项式简单计算器1.2主要功能与要求1输入并建立多项式2输出多项式,输出形式为整数序列

2、:n,c1,e1,c2,e2,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 3求多项式a、b的导函数4 计算多项式在x处的值5多项式a和b相加,建立多项式a+b6 多项式a和b相减,建立多项式a-b 2 概要设计2.1设计思路 1 定义线性表的动态分配顺序存储结构; 2 建立多项式存储结构,定义指针*next 3利用链表实现队列的构造。每次输入一项的系数和指数,可以输出构造的一元多项式 4演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据(滤去输入中的非法字

3、符)建立的多项式以及多项式相加的运行结果在屏幕上显示。多项式显示的格式为:c1xe1+c2xe2+cnxen2.2设计思路分析 要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为序数coef指数expn指针域next运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指

4、数项,由此得到下列运算规则: 若p-expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 若p-expn=q-expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 若p-expnq-expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。2.3主要模块和流程 1 5 2 6 3 7 4 8 9 3 设计过程3.1代码分析及确定1)元素类型、结点类型和指针类型:typedef struct Polynomial float coef; /系数 int expn; /指数 struct Polynomial

5、 *next;*Polyn,Polynomial;2) 建立一个头指针为head、项数为m的一元多项式, 建立新结点以接收数据, 调用Insert函数插入结点: Polyn CreatePolyn(Polyn head,int m) int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial); head-next=NULL; for(i=0;icoef,&p-expn); Insert(p,head); return head;3)主函数和其他函数:void main() int m,n,a,x; char flag; Poly

6、n pa=0,pb=0,pc; float ValuePolyn(Polyn head,int x) /输入x值,计算并返回多项式的值4)界面代码:printf( -n); printf( | 数字媒体技术 13级(2)班 于富洋 |n); printf( -n); printf( 欢迎使用一元稀疏多项式操作程序n); printf(请输入a的项数:); scanf(%d,&m); pa=CreatePolyn(pa,m); /建立多项式a printf(请输入b的项数:); scanf(%d,&n); pb=CreatePolyn(pb,n); /建立多项式b /输出菜单printf( *n

7、); printf( * 多项式操作程序 *n);printf( * *n); printf( * A:输出多项式a B:输出多项式b *n); printf( * *n); printf( * C:输出a的导数 D:输出b的导数 *n); printf( * *n); printf( * E:代入x的值计算a F:代入x的值计算b *n); printf( * *n); printf( * G:输出a+b H:输出a-b *n); printf( * *n); printf( * I:输出a*b J:退出程序 *n); printf( * *n);printf( *n);5)在主函数中调用子

8、函数代码:while(a) printf(n请选择操作:); scanf( %c,&flag); switch(flag) caseA: casea: printf(n 多项式a=); PrintPolyn(pa); break; caseB: caseb: printf(n 多项式b=); PrintPolyn(pb); break; caseC: casec: pc=Derivative(pa); printf(n 多项式a的导函数为:a=); PrintPolyn(pc); break; caseD: cased: pc=Derivative(pb); printf(n 多项式b的导函数

9、为:b=); PrintPolyn(pc); break; caseE: casee: printf(输入x的值:x=); scanf(%d,&x); printf(n x=%d时,a=%.3fn,x,ValuePolyn(pa,x); break; caseF: casef: printf(输入x的值:x=); scanf(%d,&x); printf(n x=%d时,b=%.3fn,x,ValuePolyn(pb,x); break; caseG: caseg: pc=AddPolyn(pa,pb); printf(n a+b=); PrintPolyn(pc); break; caseH

10、: caseh: pc=SubtractPolyn(pa,pb); printf(n a-b=); PrintPolyn(pc); break; caseI: casei: pc=MultiplyPolyn(pa,pb); printf(n a*b=); PrintPolyn(pc); break; caseJ: casej: printf(n 感谢使用此程序!n); DestroyPolyn(pa); DestroyPolyn(pb); a=0; break; default: printf(n 您的选择错误,请重新选择!n); 3.2关键代码解释 1 ) 这段代码主要求a-b ,利用指针返

11、回,首先将将pb的系数取反进行判断,然后恢复pb的系数输入x值,计算并返回多项式的值Polyn 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;float ValuePolyn(Polyn head,int x) /输入x值,计算并

12、返回多项式的值 Polyn p; int i,t; float sum=0; for(p=head-next;p;p=p-next) t=1; for(i=p-expn;i!=0;) if(icoef*t; return sum;2)求解并建立导函数多项式,并返回其头指针,然后判断是不是常数项,再进行数据处理。Polyn Derivative(Polyn head) /求解并建立导函数多项式,并返回其头指针 Polyn q=head-next,p1,p2,hd; hd=p1=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hd-next=NULL;

13、 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;3)求解并建立多项式a*b,返回其头指针,调用Insert函数以合并指数相同的项Polyn MultiplyPolyn(Polyn pa,Polyn pb) /求解并建立多项式a*b,返回其头指针 Polyn hf,pf; Polyn q

14、a=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;4 设计结果与分析4.1 设计结果

15、 代码正确,可以正常运行。实例:对x+2x2+3x5 与 2x2+2x2+2x2 进行运算4.2 分析 程序的运行环境是VC6.0,所以可以对代码进行较好的编写与处理,比如说可以对代码进行复制、删除、粘贴等操作(这些都优于TC)。当把代码进行调试时,遇到了很多预想不到的麻烦。1 )定义函数类型时,没有较好的选择适当的类型,进而导致结果错误。所以以后要注意:前后定义变量要统一。2 )如果要调用添加函数,修改函数,修改函数,查找函数,统计函数等要在主函数前面进行申明。否则会显示警告。3 )在运行的过程中,对于一个循环语句,遇到了返回的值始终是真,程序进如死循环,这是编写代码粗心造成的,以后必须警示

16、。4 )因为此程序是简单的一元稀疏多项式的运算,所以精确度不是要求过高,但还是得对精确度进行明确,否则结果会出现错误。 在编写程序过程中明白了很多重要的步骤以及注意事项1 编写代码前要对要求进行明确。2 作出流程图。3 对各部分进行模块化,然后编写代码。4 用最规范的、最清晰的、最容易理解的方式写程序。5 在编程中,应仔细研究编译程序给出的错误信息和警告信息,弄清楚每条信息的确切根源并予以解决。6对关键语句进行注释。 5 参考文献 1谭浩强著.C程序设计(第二版).北京:清华大学出版社,19992谭浩强编著.QBASIC语言教程.北京:电子工业出版社,19973谭浩强.C程序设计M.3版.北京

17、:清华大学出版社,20054Herbert Schildt著.戴健鹏译.C语言大全(第二版).北京:电子工业出版社,1994附录:源代码#include#include /定义多项式的项typedef struct Polynomial float coef; /系数 int expn; /指数 struct Polynomial *next;*Polyn,Polynomial;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

18、-expn expn) /查找插入位置 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; Polyn CreatePolyn(Polyn head,int m) /建立一个头指针为head、项数为m的一元多项式 int i; Polyn p; p=head=(Polyn)malloc(sizeof(st

19、ruct Polynomial); head-next=NULL; for(i=0;icoef,&p-expn); Insert(p,head); /调用Insert函数插入结点 return head;void 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 putc

20、har(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

21、(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+; printf(n);int 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多项式已空,但

22、a多项式非空Polyn 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-exp

23、n=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; if(qc-coef!=0) qc-next=hc-next; hc-next=qc; hc=qc; else free(qc); /当相加系数为0时,释放该结点 return headc;Polyn SubtractPolyn(Polyn pa,Pol

24、yn 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;float ValuePolyn(Polyn head,int x) /输入x值,计算并返回多项式的值 Polyn p; int i,t; float sum=0; for(p=head-next;p;p=p-next) t=1; for(i=p-expn;i!=0;) if(icoef*t; return sum;Polyn Derivative(Polyn head) /求解并建立导函数多项式,并返回其头指针 Polyn q=head-next,p1,p2,hd; hd=p1=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hd-next=NULL; while(q) if(q-expn!=0)

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2