版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实验报告一元稀疏多项式计算器 安子烨 PB12203079实验目的实现一元多项式的简单运算功能,掌握线性表的知识,提高编程能力。功能清单1. 一元多项式创建2. 显示一元多项式3. 复制一元多项式4. 多项式加法5. 多项式减法6. 修改一元多项式7. 删除一元多项式8. 销毁记录实验设计该多项式计算器以菜单驱动的形式实现上述各运算功能。最多可支持十条记录,分别用指针数组引导存储于十个不同的位置。以下为程序的部分源代码。#include<stdio.h>#include<math.h>#include<stdlib.h>typedef struct
2、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"
3、;,&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)->expn>q->expn) q->next=(*h); *h=q; else (*h)->next=q;elsefor(w=(*h);w->next!=NULL;w
4、=w->next) if(q->expn=w->expn) w->coef+=q->coef; break; else if(w->expn>q->expn)&&(w=*h) q->next=(*h); (*h)=q; break; else if(w->expn<q->expn)&&(w->next->expn>q->expn)q->next=w->next; w->next=q; break;if(w->next=NULL) if(w-&g
5、t;expn=q->expn) w->coef+=q->coef;else if(w->expn<q->expn) 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
6、%d",p->coef,p->expn);else if(p->coef)<0) printf("%lf*X%d",p->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; (
7、*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
8、*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->expn<q->expn)z->coef=p->coef; z->expn=p->expn; z->next
9、=NULL;p=p->next; w->next=z; w=w->next;else if(p->expn>q->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;
10、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-
11、>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(Li
12、nkList);(*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->expn<q->expn)z->coef=p->coef; z->expn=p->expn; z->next=NULL;p=p->next; w->next=z; w=w->next;else if(p->expn>
13、;q->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=
14、(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
15、=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)Link
16、List *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: print
17、f("输入你想要添加项的系数和次数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->expn>q->expn)&&(w=*h) q->next=(*h); (*h)=q; break; else if(w->expn<q-&
18、gt;expn)&&(w->next->expn>q->expn) q->next=w->next; w->next=q; break; if(w->expn<n) w->next=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("
19、;未找到该项。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 choos
20、e=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&q
21、uot;);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:
22、 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,&a
23、mp;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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西抚州金控基金管理有限公司职业经理人招聘2人(公共基础知识)综合能力测试题附答案
- 2025年桦甸市总工会公开招聘工会社会工作者(6人)备考题库附答案
- 2025广东东莞理工学院第二批招聘聘用人员19人考试模拟卷附答案
- 2025年哈尔滨道里区安静社区卫生服务中心招聘1人(公共基础知识)测试题附答案
- 2026新疆生产建设兵团第十师一八八团连队(社区)跟班“两委”后备力量招聘6人笔试备考试题及答案解析
- 2026山东重工集团有限公司社会招聘笔试备考题库及答案解析
- 职场简约商务风年终述职报告【演示文档课件】
- 2026德钦县公开(特招)治安联防人员(7人)笔试备考题库及答案解析
- 2026内蒙古鄂尔多斯职业学院汽车工程系招聘笔试模拟试题及答案解析
- 上海烟草集团有限责任公司2026年应届生招聘笔试模拟试题及答案解析
- 无人机吊运培训课件
- 沈阳市行道树栽植现状分析与发展对策
- 2026年中国马术行业发展现状调查、竞争格局分析及未来前景预测报告
- 电力市场基础知识面试题及高频考点
- 健康体检重要异常结果管理专家共识2025
- 2026届四川省成都市树德实验中学物理九上期末调研试题含解析
- TCNAS50-2025成人吞咽障碍患者口服给药护理学习解读课件
- 工程概算编制方案
- 2026年全球美容与个人护理趋势预测报告-英敏特-202510
- 2025至2030全球及中国供应链的区块链行业项目调研及市场前景预测评估报告
- 2025内蒙古通辽市扎鲁特旗巨日合镇人民政府招聘护林员9人考试参考试题及答案解析
评论
0/150
提交评论