数据结构课程设计--一元稀疏多项式计算器.doc_第1页
数据结构课程设计--一元稀疏多项式计算器.doc_第2页
数据结构课程设计--一元稀疏多项式计算器.doc_第3页
数据结构课程设计--一元稀疏多项式计算器.doc_第4页
数据结构课程设计--一元稀疏多项式计算器.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构实验报告 一元稀疏多项式计算器 安子烨 PB12203079实验目的实现一元多项式的简单运算功能,掌握线性表的知识,提高编程能力。 功能清单1. 一元多项式创建2. 显示一元多项式3. 复制一元多项式4. 多项式加法5. 多项式减法6. 修改一元多项式7. 删除一元多项式8. 销毁记录实验设计该多项式计算器以菜单驱动的形式实现上述各运算功能。最多可支持十条记录,分别用指针数组引导存储于十个不同的位置。以下为程序的部分源代码。#include#include#includetypedef struct LinkListdouble coef;int expn;LinkList *next;LNode;void CreatPolyn(LinkList *h)/创建多项式LinkList *q=NULL, *w=NULL, *p=NULL;double m=0; int n=0;(*h)=(LinkList *)malloc(sizeof(LinkList);(*h)-coef=0; (*h)-expn=0; (*h)-next=NULL; printf(请输入X的系数和指数,当系数为零时结束创建n); scanf(%lf%d,&m,&n);while(m!=0)q=(LinkList *)malloc(sizeof(LinkList);q-coef=m; q-expn=n; q-next=NULL;if(*h)-next=NULL)if(q-expn=(*h)-expn) (*h)-coef+=q-coef; else if(*h)-expnq-expn) q-next=(*h); *h=q; else (*h)-next=q;elsefor(w=(*h);w-next!=NULL;w=w-next) if(q-expn=w-expn) w-coef+=q-coef; break; else if(w-expnq-expn)&(w=*h) q-next=(*h); (*h)=q; break; else if(w-expnexpn)&(w-next-expnq-expn)q-next=w-next; w-next=q; break;if(w-next=NULL) if(w-expn=q-expn) w-coef+=q-coef;else if(w-expnexpn) w-next=q; printf(请输入X的系数和指数,当系数为零时结束创建n); scanf(%lf%d,&m,&n);void PrintPolyn(LinkList *p, int i)/打印多项式printf(第%d个多项式是:,i);while(p!=NULL)if(p-coef)0) printf(+%lf*X%d,p-coef,p-expn);else if(p-coef)coef,p-expn); p=p-next; printf(n);void CopyPolyn(LinkList *M, LinkList *N)/多项式复制 LinkList *p=NULL, *q=NULL, *w=NULL; (*N)=(LinkList *)malloc(sizeof(LinkList); (*N)-coef=(*M)-coef; (*N)-expn=(*M)-expn; (*N)-next=NULL; for(w=(*N),p=(*M)-next;p!=NULL;p=p-next) q=(LinkList *)malloc(sizeof(LinkList); q-coef=p-coef; q-expn=p-expn; q-next=p-next; w-next=q; w=w-next; void AddPolyn(LinkList *M, LinkList *N, LinkList *X)/多项式加法LinkList *p=NULL, *q=NULL, *w=NULL, *z=NULL;(*X)=(LinkList *)malloc(sizeof(LinkList);(*X)-coef=0; (*X)-expn=0; (*X)-next=NULL;for(p=M,q=N,w=(*X);(p!=NULL)&(q!=NULL);)z=(LinkList *)malloc(sizeof(LinkList);if(p-expnexpn)z-coef=p-coef; z-expn=p-expn; z-next=NULL;p=p-next; w-next=z; w=w-next;else if(p-expnq-expn)z-coef=q-coef; z-expn=q-expn; z-next=NULL;q=q-next; w-next=z; w=w-next;else if(p-expn=q-expn)z-coef=p-coef+q-coef; z-expn=p-expn; z-next=NULL;p=p-next; q=q-next; w-next=z; w=w-next;if(p=NULL)for(;q!=NULL;)z=(LinkList *)malloc(sizeof(LinkList); z-coef=q-coef; z-expn=q-expn; z-next=NULL; q=q-next; w-next=z; w=w-next;else if(q=NULL)for(;p!=NULL;)z=(LinkList *)malloc(sizeof(LinkList);z-coef=p-coef; z-expn=p-expn; z-next=NULL;p=p-next; w-next=z; w=w-next;for(w=(*X);w!=NULL;w=w-next)printf(%lf %dn,w-coef,w-expn);void SubtractPolyn(LinkList *M, LinkList *N, LinkList *X)/多项式减法LinkList *p=NULL, *q=NULL, *w=NULL, *z=NULL;(*X)=(LinkList *)malloc(sizeof(LinkList);(*X)-coef=0; (*X)-expn=0; (*X)-next=NULL;for(p=M,q=N,w=(*X);(p!=NULL)&(q!=NULL);)z=(LinkList *)malloc(sizeof(LinkList);if(p-expnexpn)z-coef=p-coef; z-expn=p-expn; z-next=NULL;p=p-next; w-next=z; w=w-next;else if(p-expnq-expn)z-coef=-q-coef; z-expn=q-expn; z-next=NULL;q=q-next; w-next=z; w=w-next;else if(p-expn=q-expn)z-coef=p-coef-q-coef; z-expn=p-expn; z-next=NULL;p=p-next; q=q-next; w-next=z; w=w-next;if(p=NULL)for(;q!=NULL;)z=(LinkList *)malloc(sizeof(LinkList); z-coef=-q-coef; z-expn=q-expn; z-next=NULL; q=q-next; w-next=z; w=w-next;else if(q=NULL)for(;p!=NULL;)z=(LinkList *)malloc(sizeof(LinkList);z-coef=p-coef; z-expn=p-expn; z-next=NULL;p=p-next; w-next=z; w=w-next;/*for(w=(*X);w!=NULL;w=w-next)printf(%lf %dn,w-coef,w-expn);*/void ValuePolyn(LinkList *h, double x)/多项式求值double sum=0, a=0;while(h!=NULL)a=pow(x,h-expn);sum=sum+(h-coef)*a;h=h-next;printf(所求多项式的值为%lfn,sum);void DeletePolyn(LinkList *h)LinkList *p=(*h)-next; (*h)=NULL;while(p!=NULL)free(*h);(*h)=p;p=p-next;void RevisePolyn(LinkList *h, int i)int n=0;int choose=0;double m=0;LinkList *q=NULL, *w=NULL;PrintPolyn(*h),i);printf(请输入你想执行的操作代号(添加:1;修改:2;删除:3)n);scanf(%d,&choose);switch(choose) case 1: printf(输入你想要添加项的系数和次数n); scanf(%lf%d,&m,&n); q=(LinkList *)malloc(sizeof(LinkList); q-coef=m; q-expn=n; q-next=NULL; for(w=(*h);w-next!=NULL;w=w-next) if(w-expnq-expn)&(w=*h) q-next=(*h); (*h)=q; break; else if(w-expnexpn)&(w-next-expnq-expn) q-next=w-next; w-next=q; break; if(w-expnnext=q; break; case 2: printf(输入你想要修改项的系数和次数n); scanf(%lf%d,&m,&n); for(w=(*h);w!=NULL;w=w-next) if(w-expn=n) w-coef=m; printf(未找到该项。n); break; case 3: printf(输入你想要删除项的次数n); scanf(%d,&n); for(w=(*h);w!=NULL;w=w-next) if(w-expn=n) w-coef=0; break; default: printf(输入错误,修改失败n); void main()/*int i=n=N1=N2=0;*/LinkList *p10=0,0,0,0,0,0,0,0,0,0;int i=0, j=0, k=0;int choose=0;double m=0, x=0; printf(请输入n);printf(菜单:n);printf(1 创建多项式n);printf(2 显示多项式n);printf(3 复制多项式n);printf(4 多项式求和n);printf(5 多项式求差n); printf(6 多项式求值n);printf(7 销毁多项式n);printf(8 清空所有多项式n);printf(9 修改(添加、删除、更改系数、指数)n);printf(0 退出计算器n); start:printf(请输入序号进行功能选择n); scanf(%d,&choose);while(choose!=0)switch(choose) case 1: printf(请输入你想创建多项式的位置(09)n); scanf(%d,&i); CreatPolyn(&pi); goto start; case 2: for(i=0;i=9;i+) PrintPolyn(pi,i); goto start; case 3: printf(请输入要复制的多项式的号码和目的地号码n); scanf(%d%d,&i,&j); CopyPolyn(&pi,&pj); goto start; case 4: printf(请输入要求和的两个多项式的号码以及存放结果的号码n); scanf(%d%d%d,&i,&j,&k); AddPolyn(pi,pj,&pk); goto start; case 5: printf(请输入要求差的两个多项式的号码以及存放结果的号码n); scanf(%d%d%d,&i,&j,&k); SubtractPolyn(pi,pj,&pk); goto start; case 6: printf(请输入你想求值的多项式的位置(09)n); scanf(%d,&i); printf(请输入你想要的X值n); scanf(%lf,&x); ValuePolyn(pi,x); goto start; case 7: printf(请输入你想销毁的多项式的位置(09)n); scanf(%d,&i); DeletePolyn(&pi); goto start; case 8: for(i=0;i=9;i+) DeletePolyn(&pi); goto start; case 9: printf(请输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论