版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业实 验 报 告题目:编制一个一元多项式基本运算的程序 姓名: 学号:PB 一、需求分析在通常的应用中,多项式的次数可能很高且变化很大,使得顺序存储结构的最大长度很难确定。由稀疏多项式的特点,故采用链式存储结构,可以不会带来浪费存储空间。程序中单链表存储,根据链表的指数域,对链表进行升序排序,可给运算带来方便。 程序设计是在VC6.0环境下设计的的。程序执行的命令为(程序主界面):二、概要设计抽象数据类型一元多项式的定义如下:LNode *MakeNode(double
2、coef, int exp) 通过传入指数和系数创建一个节点,返回该节点的地址。void InitList(LinkList &L) 初始化,带头节点void PrintPolyn (LinkList L) 传入链表的指针,打印该链表LinkList CreatPolyn(void)/输入m项的系数和指数,建立表示一元多项式的有序链表Ldouble SumPolyn(LinkList L,double x) 传入链表的指针及x值,求多项式的值。void DestroyPolyn (LinkList &L) 销毁多项式,去掉头节点void ClearPolyn (LinkList &L) 清空多
3、项式,保留节点void CopyPolyn (LinkList La, LinkList &Lb) 将La位置的多项式复制到Lb位置void AddPolyn(LinkList L,LinkList J ,LinkList &K) 将a和b多项式相加存到cvoid 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 *
4、r) /根据链表的expn指数域,对链表进行升序插入。13. void DifferentialPolyn(LinkList L,LinkList &L2) 对L1求导存到L214. void IntegralPolyn(LinkList L,LinkList &L2) 对L1积分存到L22. 主程序:void main( )初始化;While(1)Switch()选择命令;处理命令;三、详细设计元素类型、结点类型和指针类型 typedef struct PolyNodeint expn; /指数double coef;/系数struct PolyNode *next;LNode,*LinkL
5、ist; 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-
6、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); Order
7、Insert(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,
8、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 &
9、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); pri
10、ntf( 新建-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;
11、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:pri
12、ntf(输入减两项的多项式和新多项式的下标(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):
13、 ,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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字水位仪项目申请报告
- 2025年国土资源普查核仪器项目申请报告模范
- 2024-2025学年西藏那曲市巴青县三上数学期末统考试题含解析
- 军训心得体会汇编15篇
- 2025年水上加油船项目规划申请报告模板
- 2025年放射性废气处置设备项目申请报告
- 2022装修监理年终工作总结
- 去超市实习报告范文8篇
- 住房申请书模板10篇
- 演讲竞聘演讲稿范文6篇
- 2024年度共享办公空间租赁合同2篇
- 《血气分析的临床应》课件
- 2024年07月11026经济学(本)期末试题答案
- 2024年中小企业股权融资合同3篇
- 2024年01月11289中国当代文学专题期末试题答案
- 2024年四级品酒师资格认证考试题库(浓缩400题)
- 国家电投《新能源电站单位千瓦造价标准值(2024)》
- 2024年云南高中学业水平合格考历史试卷真题(含答案详解)
- 电影摄影及特殊拍摄技术(上海电影艺术职业学院)知到智慧树答案
- 山东省临沂市2023-2024学年高二上学期期末考试政治试题 含答案
- 东北三省精准教学2024-2025学年高三上学期12月联考数学试卷
评论
0/150
提交评论