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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告《一多项式及其运用》.docx

1、数据结构实验报告一多项式及其运用中南大学物理学院数据结构实验报告- - - - 一元多项式相加及其运用 专业班级:电信0903 时间:2010年10月18日数据结构实验报告- 一元多项式相加及其运用【问题描述】设计一个一元稀疏多项式简单计算器【基本要求】 一元稀疏多项式简单计算器的功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,cn,en,其中n是多 项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。【运用拓展】(1)计算多项式在x处的

2、值;(2)多项式a和b相乘,建立乘积多项式ab;(3)计算器的仿真友好界面。【设计思路分析】 (1)解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表。 (2)运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题 (3)设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则: 若p-expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 若p-expn=q-expn,则将两个结点中的系数相加,当和不为0时修改结点

3、p的系数。 若p-expnq-expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。【 测试数据】多项式a:6x+3x5-7.1x11多项式b: 2-5x5+11x9若计算a+b则有:(6x+3x5-7.1x11)+(2-5x5+11x9)=(-7.1x11+11x9-2x5+6x+2)等。【操作界面显示】 1:建立多项式的操作:2:输出多项式及计算x的值 3:进行运算操作: 4:结束程序:【程序代码】#include /调用输入输出函数#includetypedef struct Polynomial /定义一个Polyn结构体 flo

4、at coef; int exp; /系数指定为浮点型,指数指定为整型 struct Polynomial *next;*Polyn,Polynomial; void Insert(Polyn p,Polyn h) /查找位置插入新链节 if(p-coef=0) free(p); /p系数为0的话释放结点 else /否则查找插入位置 Polyn q1,q2; q1=h; q2=h-next; while(q2& p-exp exp) /指数较大则插前面 q1=q2; q2=q2-next; if(q2& p-exp = q2-exp) /将指数相同相合并 q2-coef += p-coef;

5、 free(p); if(!q2-coef) /系数为0的话释放结点 q1-next=q2-next; free(q2); else p-next=q2; q1-next=p; /指数为新时将结点插入 /第一个else /void 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

6、;icoef,&p-exp); Insert(p,head); /调用Insert函数插入结点 return head;void PrintPolyn(Polyn P) /输出多项式 Polyn q=P-next; int flag=1; /项数计数器 if(!q) /若多项式为空,输出0 putchar(0); printf(n); return; /void if while(q) if(q-coef0& flag!=1) putchar(+); /系数大于0且不是第一项,显示+连接 if(q-coef!=1&q-coef!=-1) /系数非1或-1时输出 printf(%g,q-coef

7、); if(q-exp=1) putchar(X); /指数为1时,直接输出X else if(q-exp) printf(X%d,q-exp); /指数不为1时,输入X格式 /while if if else if(q-coef=1) if(!q-exp) putchar(1); else if(q-exp=1) putchar(X); else printf(X%d,q-exp); /else if if(q-coef=-1) /系数为-1时,前面加上负号,其他情况与+1类似 if(!q-exp) printf(-1); else if(q-exp=1) printf(-X); else

8、printf(-X%d,q-exp); /else if if /else q=q-next; flag+; /while printf(n); /voidint compare(Polyn a,Polyn b) /两个多项式的判断 if(a&b) /若两个多项式都非空 if(!b|a-expb-exp) return 1; /b多项式已空或指数较小,返回1 else if(!a|a-expexp) return -1; /a多项式已空或指数较小,返回-1 else return 0; /a、b两多项式的指数相等,返回0 /if else if(!a&b) return -1; /a多项式已空

9、,但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);

10、 /开辟地址空间 switch(compare(qa,qb) /判断多项式a和b case 1: qc-coef=qa-coef; /输入a多项式 qc-exp=qa-exp; qa=qa-next; break; case 0: qc-coef=qa-coef+qb-coef; /指数相等时系数相加 qc-exp=qa-exp; qa=qa-next; qb=qb-next; break; case -1: qc-coef=qb-coef; /输入b多项式 qc-exp=qb-exp; qb=qb-next; break; /switch if(qc-coef!=0) /当相加系数不为0,加

11、入该结点 qc-next=hc-next; hc-next=qc; hc=qc; else free(qc); /当相加系数为0时,释放该结点 /while return headc;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; /while pd=AddPolyn(pa,h); for(p=h-next;p;p=p-next) /恢复pb的系数 p-coef*=-1

12、; return pd; /SubtractPolynPolyn 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-coe

13、f=qa-coef*qb-coef; pf-exp=qa-exp+qb-exp; Insert(pf,hf); /调用Insert函数以合并指数相同的项 /for for /for return hf;/MultiplyPolynfloat 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-exp;i!=0;) if(icoef*t; /计算求和 /for return sum; /ValuePolynvoid

14、 DestroyPolyn(Polyn p) /销毁多项式p Polyn q1,q2; q1=p-next; q2=q1-next; while(q1-next) /删除q1的元素直至q1为空 free(q1); q1=q2; q2=q2-next; /DestroyPolynvoid main() int m,n,a,x;char flag; Polyn pa=0,pb=0,pc; printf( -n); printf( 欢迎使用一元多项式及其运用操作程序n); printf( -n); printf(请输入多项式a的项数:); scanf(%d,&m); pa=CreatePolyn(p

15、a,m); /建立多项式a printf(请输入多项式b的项数:); scanf(%d,&n); pb=CreatePolyn(pb,n); /建立多项式b /输出菜单 printf( *n); printf( * 一元稀疏多项式简单计算器 *n); printf( * *n); printf( * A:输出多项式a B:输出多项式b *n); printf( * *n); printf( * C:同时输出多项式a和b *n); printf( * *n); printf( * D:代入x的值计算a E:代入x的值计算b *n); printf( * *n); printf( * F:代人x的

16、值同时计算a和b *n); printf( * *n); printf( * G:输出a+b H:输出a-b *n); printf( * *n); printf( * I:输出a*b J:退出 *n); printf( * *n); printf( *n); while(a) printf(n请选择操作:); /提示选择操作 scanf( %c,&flag); /输入选择 switch(flag) /输入大小写都可以判断 caseA: casea: printf(n 多项式a=); /输出多项式a PrintPolyn(pa); /调用输出函数显示 break; /跳出 caseB: cas

17、eb: printf(n 多项式b=); /输出多项式b PrintPolyn(pb); break; caseC: casec: printf(n 多项式a=); /输出多项式a和b PrintPolyn(pa); printf(n 多项式b=); PrintPolyn(pb); break; caseD: cased: printf(输入x的值:x=); /输入x值后计算a scanf(%d,&x); printf(n x=%d时,a=%.3fn,x,ValuePolyn(pa,x); break; caseE: casee: printf(输入x的值:x=); /输入x值后计算b sca

18、nf(%d,&x); printf(n x=%d时,b=%.3fn,x,ValuePolyn(pb,x); break; caseF: casef: printf(输入x的值:x=); /输入x值后计算a和b scanf(%d,&x); printf(n x=%d时,a=%.3fn,x,ValuePolyn(pa,x); printf(n x=%d时,b=%.3fn,x,ValuePolyn(pb,x); break; caseG: caseg: pc=AddPolyn(pa,pb); /输出a+b,用新多项式显示 printf(n a+b=); PrintPolyn(pc); break;

19、caseH: caseh: pc=SubtractPolyn(pa,pb); /输出a-b,用新多项式显示 printf(n a-b=); PrintPolyn(pc); break; caseI: casei: pc=MultiplyPolyn(pa,pb); /输出a*b,用新多项式显示 printf(n a*b=); PrintPolyn(pc); break; caseJ: casej: printf(n 感谢使用此程序!n); /退出该程序 DestroyPolyn(pa); /删除多项式a DestroyPolyn(pb); /删除多项式b a=0; /暂停显示界面,用户选择关闭 break; default: printf(n 您的选择错误,请重新选择!n); /swich /while/main

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1