已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实 验 报 告题目:编制一个一元多项式基本运算的程序 姓名: 学号:PB110130 一、需求分析1 在通常的应用中,多项式的次数可能很高且变化很大,使得顺序存储结构的最大长度很难确定。由稀疏多项式的特点,故采用链式存储结构,可以不会带来浪费存储空间。2 程序中单链表存储,根据链表的指数域,对链表进行升序排序,可给运算带来方便。 3 程序设计是在VC6.0环境下设计的的。4 程序执行的命令为(程序主界面):二、概要设计抽象数据类型一元多项式的定义如下:1. LNode *MakeNode(double coef, int exp) 通过传入指数和系数创建一个节点,返回该节点的地址。2. void InitList(LinkList &L) 初始化,带头节点3. void PrintPolyn (LinkList L) 传入链表的指针,打印该链表4. LinkList CreatPolyn(void)/输入m项的系数和指数,建立表示一元多项式的有序链表L5. double SumPolyn(LinkList L,double x) 传入链表的指针及x值,求多项式的值。6. void DestroyPolyn (LinkList &L) 销毁多项式,去掉头节点7. void ClearPolyn (LinkList &L) 清空多项式,保留节点8. void CopyPolyn (LinkList La, LinkList &Lb) 将La位置的多项式复制到Lb位置9. void AddPolyn(LinkList L,LinkList J ,LinkList &K) 将a和b多项式相加存到c10. void MultiplyPolyn(LinkList L,LinkList J,LinkList &K) 将a和b相减存到c11. void MultiplyPolyn(LinkList L,LinkList J,LinkList &K) 将a和b多项式相乘存到c12. void OrderInsert(LinkList L,LNode *r) /根据链表的expn指数域,对链表进行升序插入。13. void DifferentialPolyn(LinkList L,LinkList &L2) 对L1求导存到L214. void IntegralPolyn(LinkList L,LinkList &L2) 对L1积分存到L22. 主程序:void main( )初始化;While(1)Switch()选择命令;处理命令;三、详细设计1. 元素类型、结点类型和指针类型 typedef struct PolyNodeint expn; /指数double coef;/系数struct PolyNode *next;LNode,*LinkList; 2几个基本操作的函数 1. LNode *MakeNode (double coef,int expn)/制造节点LNode *p;p=(LNode*)malloc(sizeof(LNode);p-coef=coef;p-expn=expn;p-next=NULL;return p;2. void OrderInsert(LinkList L,LNode *r) /根据链表的expn指数域,对链表进行升序插入if(!L)printf(error);LNode *p,*q; p=L;while(p-next&p-next-expnexpn) p=p-next; if(p-next&p-next-expn=r-expn)p-next-coef+=r-coef; if(p-next-coef=0)q=p-next; p-next=q-next;free(q);free(r); else r-next=p-next; p-next=r; 3. void AddPolyn(LinkList L,LinkList J,LinkList &K)/多项式相加if(!L|!J)printf(errorn);return;LNode *p,*q,*m;p=L-next;q=J-next;InitList(K);while(p) m=MakeNode(p-coef,p-expn); OrderInsert(K,m);p=p-next;while(q) m=MakeNode(q-coef,q-expn);OrderInsert(K,m);q=q-next;4. void MultiplyPolyn(LinkList L,LinkList J,LinkList &K)/多项式相乘 if(!L|!J) printf(error); return; LNode *p,*q,*m; p=L-next; InitList(K); while(p) q=J-next; while(q) m=MakeNode(p-coef*q-coef,p-expn+q-expn); OrderInsert(K,m); q=q-next; p=p-next; 5.LinkList CreatPolyn(void)/输入m项的系数和指数,建立表示一元多项式的有序链表L LNode *p;LinkList head;double c;int e;InitList(head);printf(输入系数、指数,系数为0时结束);while(1)scanf(%lf,&c);if(c=0) break;scanf(%d,&e);p=MakeNode(c,e); OrderInsert(head,p);return head;6.void DifferentialPolyn(LinkList L,LinkList &L2) /求导LNode *p,*r;if(!L) return;InitList(L2);r=L2;p=L-next;while(p)if(p-expn=0) r-next=MakeNode(0,0);elser-next=MakeNode(p-coef*p-expn,p-expn-1);r=r-next;p=p-next;r-next=NULL;3.主函数#define N 12void main()LinkList PN=NULL;int menu,i,j,l;double k,sum;while(1)printf(n);printf( 多项式计算器 n);printf(=n); printf( 新建-1 打印-2 复制-3n);printf( 求值-4 相加-5 相减-6n);printf( 微分-7 销毁-8 清空-9n); printf( 积分-10 相乘-11 退出-0n);printf(=n);printf( 请选择:n);scanf(%d,&menu);switch(menu)case 0:return; case 1:printf(输入新多项式的下标(0-%d):,N-1);scanf(%d,&i);Pi=CreatPolyn();break;case 2:for(i=0;iN;i+)printf( P%d = ,i);printPolyn(Pi);break;case 3:printf(输入被复制的多项式和新多项式的下标(0-%d): ,N-1);scanf(%d%d,&i,&j);CopyPolyn(Pi,Pj);break;case 4: printf(输入要求值多项式的下标(0-%d)和X值:,N-1); scanf(%d%lf,&i,&k);sum=SumPolyn(Pi,k); printf(多项式值为%lf,sum); break;case 5:printf(输入相加两项的多项式和新多项式的下标(0-%d): ,N-1);scanf(%d%d%d,&i,&j,&l);AddPolyn(Pi,Pj,Pl);break;case 6:printf(输入减两项的多项式和新多项式的下标(0-%d): ,N-1);scanf(%d%d%d,&i,&j,&l);MinusPolyn(Pi,Pj,Pl);break; case 7:printf(输入求导的多项式的下标(0-%d)和新多项式的下标(0-%d): ,N-1,N-1);scanf(%d%d,&i,&j);DifferentialPolyn(Pi,Pj);break;case 8:printf(输入被销毁多项式的下标(0-%d): ,N-1);scanf(%d,&i);DestroyPolyn(Pi);break; case 9:printf(输入被清空多项式的下标(0-%d): ,N-1);scanf(%d,&i);ClearPolyn(Pi);break;case 10:printf(输入求积分的多项式的下标(0-%d)和新多项式的下标(0-%d): ,N-1,N-1);scanf(%d%d,&i,&j);IntegralPolyn(Pi,Pj);break;case 11:printf(输入相乘两项的多项式和新多项式的下标(0-%d): ,N-1);scanf(%d%d%d,&i,&j,&l);MultiplyPolyn(Pi,Pj,Pl);break; 四、调试分析1刚开始时,忽略了一些变量参数的标识&,使调试程序时费了不少功夫。应注重确定参数的变量和属性。2在做多项式求导运算时,未考虑常数项,结果出现a*x-1,运算错误。应考虑特殊情况。3整个程序运行期间实行动态存储管理,释放无用空间;特别是通过清除函数ClearPolyn和销毁函数DestroyPolyn释放无用空间。有效地防止了在程序反复运行可能出现系统空间不够分配的现象。4.经验体
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精.品解析:2024年七年级地理下册地理期终素质测试题(原卷版)
- 大学生心理健康课程标准
- 播音与节目主持专业技能教学标准
- 农业废弃物资源化利用的循环经济模式优化研究意义
- 版权登记服务指南
- 家庭社会经济地位对儿童认知发展影响结题报告
- 针灸推拿综合试题及答案
- 语音识别全栈国产化技术实践白皮书
- 2026年河北省沧州市任丘八中中考英语模拟试卷(含详细答案解析)
- 2026年吉林市中考化学二模试卷(含答案)
- 老年黄斑变性进展护理
- SF-36健康调查量表(含excel版)
- 湖南学考高一试卷及答案
- 超星尔雅学习通《高校实验室安全基础课(实验室准入教育)》章节测试含答案
- 《民间文学》课程教学大纲
- 老年人睡眠改善策略-洞察及研究
- 医学检验试题及答案
- 2024-2025学年初中数学专项练习:费马点与加权费马点详细总结(含解析)
- OTA运营培训课件
- 2025届四川省绵阳市名校联盟英语七年级第二学期期末统考试题含答案
- CJ/T 409-2012玻璃钢化粪池技术要求
评论
0/150
提交评论