




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗质量年终工作总结
- 2026届四川省德阳市中学江县九年级化学第一学期期末考试试题含解析
- 区药事质控年度工作总结
- 江苏省南京溧水区2026届九上化学期中质量检测试题含解析
- 字节跳动新人培训体系概览
- 北京十二中学2026届九年级化学第一学期期中教学质量检测模拟试题含解析
- 中医刮痧疗法培训
- 学校教师培训成果汇报
- 金孔雀舞动教学
- 2026届甘肃泾川县英语九上期末预测试题含解析
- 室内装饰测量放线专项方案
- 基于移动互联网的智慧观光巴士服务平台
- 一文了解华为MTL流程和LTC流程z1222
- 医院护理品管圈:提高新生儿喂养后体位摆放执行率
- 弹簧-锥形弹簧的计算
- 肾主生殖理论及肾性不孕
- 【家庭教育的不足对小学生心理健康的影响问题探讨6500字(论文)】
- 青少年软件编程(Scratch)三级考试题库(变量 克隆 画笔)
- 注浆加固技术课件
- 国家开放大学《现代汉语专题》章节自测参考答案
- 锅炉煮炉方案
评论
0/150
提交评论