欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构多项式运算器实验报告.docx

    • 资源ID:3149604       资源大小:18.85KB        全文页数:20页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构多项式运算器实验报告.docx

    1、数据结构多项式运算器实验报告多项式运算器实验问题 本实验主要实现对多项式的创建存储、显示、复制、求和、求差、求积、n次方、n阶导、不定积分、定积分、求值、项数、销毁。储存结构typedef struct float coef; int expn;term,ElemType;typedef struct LNode ElemType data; struct LNode *next;*Link;typedef struct Link head,tail; int len;LinkList;主要使用链表存储多项式。算法思想使用链表的处理方法。程序结构#include#include#include

    2、#includetypedef struct float coef; int expn;term,ElemType;typedef struct LNode ElemType data; struct LNode *next;*Link;typedef struct Link head,tail; int len;LinkList;/*=链表-ADT=*/void MakeNode(Link &p,ElemType e) p=(Link)malloc(sizeof(struct LNode); if(!p) exit(1); p-data=e; p-next=NULL;/MakeNodevoi

    3、d InitList(LinkList &L) L.head=L.tail=(Link)malloc(sizeof(LNode); if(!L.head) exit(1); L.head-next=NULL; L.len=0;/InitListvoid DestroyList(LinkList &L) Link p,q; p=L.head-next; while(p) q=p-next; free(p); p=q; L.head-next=NULL; L.tail=L.head; L.len=0;/DestroyListvoid InsLast(LinkList &L,Link s) L.ta

    4、il-next=s; L.tail=s; L.len+; L.tail-next=NULL;/InsLast/*=多项式-ADT=*/void CreatPolyn(LinkList &L) term e; Link s; scanf(%f,%d,&e.coef,&e.expn); while(e.coef) MakeNode(s,e); InsLast(L,s); scanf(%f,%d,&e.coef,&e.expn); /CreatPolyn创建比较简单,主要调用了MakeNode()、InsLast()两个函数。int Judge(int n) if(n19|nnext; if(!p)

    5、 printf(NULLn); else printf(y=); if(p-data.coef0) if(p-data.expn=0) printf(%f,p-data.coef); else printf(%fx%d,p-data.coef,p-data.expn); p=p-next; else if(p-data.expn=0) printf(%f,p-data.coef); else printf(%fx%d,p-data.coef,p-data.expn); p=p-next; while(p) if(p-data.coef0) if(p-data.expn=0) printf(+%

    6、f,p-data.coef); else printf(+%fx%d,p-data.coef,p-data.expn); p=p-next; else if(p-data.expn=0) printf(%f,p-data.coef); else printf(%fx%d,p-data.coef,p-data.expn); if(p-next) p=p-next; printf(n); /PrintPolynPrintPolyn()这个函数费了点事。主要是要考虑的情况有点多,所以函数就变长了。先考虑是否非空,还要考虑系数的正负,是否打印加号,而且第一项如果是正的不用打印加号,还要考虑是否越界。总

    7、之就是很复杂了。void PrintAll(LinkList S) int i; for(i=0;inext; while(p) e.coef=p-data.coef; e.expn=p-data.expn; MakeNode(s,e); InsLast(S,s); p=p-next; S.tail-next=NULL;/CopyPolyn比较简单,还是调用了MakeNode()、InsLast()两个函数,与创建差不多。int AddPolyn(LinkList &L,LinkList P,LinkList Q) Link a,b,c; term e; a=P.head-next; b=Q.

    8、head-next; while(a!=NULL)&(b!=NULL) if(a-data.expndata.expn) e.coef=a-data.coef; e.expn=a-data.expn; MakeNode(c,e); InsLast(L,c); a=a-next; else if(a-data.expnb-data.expn) e.coef=b-data.coef; e.expn=b-data.expn; MakeNode(c,e); InsLast(L,c); b=b-next; else if(a-data.coef+b-data.coef)!=0) e.coef=a-dat

    9、a.coef+b-data.coef; e.expn=a-data.expn; MakeNode(c,e); InsLast(L,c); a=a-next; b=b-next; else if(a-data.coef+b-data.coef)=0) a=a-next; b=b-next; if(!a&!b) L.tail-next=NULL; return 0; if(!b) while(a) e.coef=a-data.coef; e.expn=a-data.expn; MakeNode(c,e); InsLast(L,c); a=a-next; if(!a) while(b) e.coef

    10、=b-data.coef; e.expn=b-data.expn; MakeNode(c,e); InsLast(L,c); b=b-next; return 0;/AddPolyn主要是分情况讨论,a、b都非空、都空,一空。还要考虑系数相加为零时的情况。这个开始时没有成功,当一空一非空时运行不下去,但也检查不出错误来,放到最后,我把while里面的并列的if改成if、else if,else if,else if就成功了,有点想不通。void SubtractPolyn(LinkList &L,LinkList P,LinkList Q) Link p; p=Q.head-next; whi

    11、le(p) p-data.coef=0-p-data.coef; p=p-next; AddPolyn(L,P,Q); p=Q.head-next; while(p) p-data.coef=0-p-data.coef; p=p-next; /SubtractPolyn有求和了求差就简单了。先讲一个的系数变成原来的相反数,再相加,再把它变回来。开始时忘记了p=Q.head-next,出了点错误。double ResultPolyn(LinkList L,float x) Link p; double y=0; p=L.head-next; while(p) y+=(pow(x,p-data.e

    12、xpn)*p-data.coef); p=p-next; return y;/ResultPolyn这个比较简单,不多说了。void MultiplyPolyn(LinkList &L,LinkList P,LinkList Q) Link l,p,q; LinkList E,F; InitList(E); InitList(F); int i,j; term e; p=P.head-next; q=Q.head-next; for(i=0;iQ.len;i+) for(j=0;jdata.coef*q-data.coef; e.expn=p-data.expn+q-data.expn; Ma

    13、keNode(l,e); InsLast(E,l); p=p-next; AddPolyn(L,E,F); DestroyList(E); DestroyList(F); CopyPolyn(L,F); if(i!=Q.len-1) DestroyList(L); q=q-next; p=P.head-next; /MultiplyPolyn这个我想的方法是创建两个临时的多项式,拿求积的一个多项式的项一次去乘另一个的项。结果存在一个临时多项式E,将初始的L复制给F,然后E与F相加复制给L,L再赋值给F,销毁E、L。不断销毁赋值最后完成。注意最后一次不要销毁L。void Polyn_NFang(

    14、LinkList &L,LinkList P,int n) int i; LinkList E; InitList(E); CopyPolyn(P,E); for(i=0;in;i+) MultiplyPolyn(L,E,P); DestroyList(E); CopyPolyn(L,E); if(i!=n-1) DestroyList(L); /Polyn_Nfang这个也需要一个临时的多项式,还是不段销毁赋值。有了求积的基础,这个就简单了。void Polyn_NDao(LinkList &L,LinkList P,int n) Link p,q; int i,j; CopyPolyn(P

    15、,L); for(i=0;inext; q=L.head; for(j=0;jdata.expn=0) q-next=p-next; free(p); p=q-next; L.len-; p-data.coef=p-data.coef*p-data.expn; p-data.expn=p-data.expn-1; p=p-next; q=q-next; /Polyn_Ndao这个比较简单,就是对系数和指数的更改。int Polyn_Ji(LinkList &L,LinkList P) Link p; int i; CopyPolyn(P,L); p=L.head-next; for(i=0;i

    16、data.expn=-1) printf(对不起,本程序不能实现对-1次方的积分.请重新选择.n); DestroyList(L); return 0; else p=p-next; for(i=0;idata.coef=p-data.coef/(p-data.expn+1); +p-data.expn; p=p-next; return 0;/Polyn_Ji这个还是对系数和指数的更改,主要如果是-1次方积分出现ln(),这就麻烦了。故此,对含-1次方的多项式不进行积分。double Polyn_Ding(LinkList L,float a,float b) double m,n; dou

    17、ble e=0; LinkList P; InitList(P); Polyn_Ji(P,L); m=ResultPolyn(P,a); n=ResultPolyn(P,b); e=n-m; return e;/Polyn_Ding这个很简单,主要调用Polyn_Ji()和ResultPolyn()。/*=main=*/void main() int n,m,i,a,b,c; float x,e,f; double d; LinkList S20; for(i=0;i16|nnext) printf(已占用!请重新选择存储位置:); scanf(%d,&m); CreatPolyn(Sm);

    18、break; case 2: printf(2.请选择位置:); scanf(%d,&m); PrintPolyn(Sm); break; case 3: printf(3.请选择要复制的多项式的位置和复制到的位置:); scanf(%d,%d,&a,&b); while(Sb.head-next) printf(已占用!请重新选择存储位置:); scanf(%d,&b); CopyPolyn(Sa,Sb); break; case 4: printf(4.请输入需要求和的两个多项式位置及和放置的位置:); scanf(%d,%d,%d,&a,&b,&c); while(Sc.head-nex

    19、t) printf(已占用!请重新选择存储位置:); scanf(%d,&c); AddPolyn(Sc,Sa,Sb); break; case 5: printf(5.请输入需要求差的两个多项式位置及差放置的位置:); scanf(%d,%d,%d,&a,&b,&c); while(Sc.head-next) printf(已占用!请重新选择存储位置:n); scanf(%d,&c); SubtractPolyn(Sc,Sa,Sb); break; case 6: printf(6.请输入需要相乘的两个多项式及存储位置:); scanf(%d,%d,%d,&a,&b,&c); if(!Sa.

    20、head-next|!Sb.head-next) printf(多项式位置选择错误!请重新选择.n); break; while(Sc.head-next) printf(已占用!请重新选择存储位置:); scanf(%d,&c); MultiplyPolyn(Sc,Sa,Sb); break; case 7: printf(7.请输入多项式的位置,n次方及存储位置:); scanf(%d,%d,%d,&a,&b,&c); if(!Sa.head-next) printf(多项式位置选择错误!请重新选择.n); break; while(Sc.head-next) printf(已占用!请重新

    21、选择存储位置:); scanf(%d,&c); Polyn_NFang(Sc,Sa,b); break; case 8: printf(8.请输入多项式的位置,n阶导及存储位置:); scanf(%d,%d,%d,&a,&b,&c); if(!Sa.head-next) printf(多项式位置选择错误!请重新选择.n); break; while(Sc.head-next) printf(已占用!请重新选择存储位置:); scanf(%d,&c); Polyn_NDao(Sc,Sa,b); break; case 9: printf(请输入需要做不定积分的多项式及存储位置:); scanf(

    22、%d,%d,&m,&n); if(!Sm.head-next) printf(多项式位置选择错误!请重新选择.n); break; while(Sn.head-next) printf(已占用!请重新选择存储位置:); scanf(%d,&n); Polyn_Ji(Sn,Sm); break; case 10: printf(请输入需要做定积分的位置及从m积到n的值:); scanf(%d,%f,%f,&a,&e,&f); if(!Sa.head-next) printf(多项式位置选择错误!请重新选择.n); break; d=Polyn_Ding(Sa,e,f); printf(y=%lf

    23、n,d); break; case 11: printf(11.请输入需要求值的多项式的位置及x值:); scanf(%d,%f,&m,&x); if(!Sm.head-next) printf(多项式位置选择错误!请重新选择.n); break; d=ResultPolyn(Sm,x); printf(y=%lfn,d); break; case 12: printf(12.请输入多项式的位置:); scanf(%d,&m); printf(%d号项数为%dn,m,Sm.len); break; case 13: printf(13.请输入需要销毁的多项式的位置:); scanf(%d,&m); DestroyList(Sm); break; case 14: PrintAll(S); break; printf(n); printf(说明:共有二十个多项式备用位置:019。n菜单:n0t退出n1t创建多项式n2t显示多项式n3t复制多项式n4t多项式求和n5t多项式求差n6t多项式求积n7t多项式n次方n8t多项


    注意事项

    本文(数据结构多项式运算器实验报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开