版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实验报告 一元稀疏多项式计算器 安子烨 PB12203079实验目的实现一元多项式的简单运算功能,掌握线性表的知识,提高编程能力。 功能清单1. 一元多项式创立2. 显示一元多项式3. 复制一元多项式4. 多项式加法5. 多项式减法6. 修改一元多项式7. 删除一元多项式8. 销毁记录实验设计该多项式计算器以菜单驱动的形式实现上述各运算功能。最多可支持十条记录,分别用指针数组引导存储于十个不同的位置。以下为程序的局部源代码。#include<stdio.h>#include<math.h>#include<stdlib.h>typedef struc
2、t 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&qu
3、ot;,&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
4、;w=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-
5、>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
6、*X%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)/多项式加法LinkLis
8、t *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->ne
9、xt=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;
11、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(
12、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=NULL;p=p->next; w->next=z; w=w->next;else if(p->expn&
13、gt;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;)
14、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;
15、 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)Li
16、nkList *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;删除:3n");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: f
22、or(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,&
23、;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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023北京丰台高一(上)期末英语试卷含答案
- 基于系统动力学的电信企业投资决策优化:理论、模型与实践
- 2025年跨境电商平台入驻合同协议
- 2025年汽车销售咨询合同协议合同
- 采购2025年电子设备供货合同协议合同三篇
- 采购2025年食品原材料供应链合作合同协议合同二篇
- 2025年考研英语模拟考试合同协议合同
- 2025年建材行业加盟合同协议合同
- 2025年加盟建筑工程承包协议合同
- 采购2025年农产品深加工合同协议合同二篇
- 辽海版综合实践活动七年级上册同步课件教案81用好电子小帮手之活动一电子产品走近你我他
- 离职员工不损害公司声誉保证书
- 3.8 第1课时弧长的计算 浙教版数学九年级上册课件
- 初中语+文+第9课《从百草园到三味书屋》课件+统编版语文七年级上册
- Compiere-ERP中文环境的操作流程
- 2024年共青团入团积极分子团校结业考试试题库及答案
- 高标准农田改造提升建设项目投标方案(技术标)
- 市政设施养护维修服务规范(TZSZX002-2022)
- MOOC 创业团队建设与管理-首都经济贸易大学 中国大学慕课答案
- 居民死亡医学证明模板
- 大学英语口语演讲课件
评论
0/150
提交评论