




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年度工作总结汇报
- 7 汤姆 · 索亚历险记(节选) (教学设计)2023-2024学年-部编版语文六年级下册
- 三年级上美术教学设计-天外来客-苏少版
- 2024-2025学年高中历史 第一单元 古代中国经济的基本结构与特点 第1课 发达的古代农业(3)教学教学设计 新人教版必修2
- 2024-2025学年高中地理上学期第5周《自然界的水循环和水资源合理利用》教学设计 新人教版必修1
- 10《古诗三首》(教案)-2024-2025学年语文六年级下册统编版
- 2024川教版信息技术七年级上册第二单元第二节《制作在线宣传手册第二节(在线协作 选素材)》教案及教学设计
- 2《学做“快乐鸟”》教学设计-2023-2024学年道德与法治二年级下册统编版(五四制)
- 上海市理工大学附属中学2024年-学年高二体育上学期第2周 第1课教学设计
- 《第三单元 综合运用机器人 2 机器人工程日志》教学设计-2023-2024学年川教版信息技术(2019)六年级下册
- 一、长方体和正方体表面涂色的
- GPS施工放样测量记录表
- DBJ∕T45-099-2020 城镇道路沥青路面施工技术规范
- [龙湖地产]薪酬体系报告(全部图表说明)
- 主动脉夹层护理查房-PPT课件
- 零星工程施工组织设计方案
- 人教版七年级下册第五章53《平行线的性质》说课稿
- 8251芯片(课堂PPT)
- 江苏省电力公司电网生产业务外包管理办法(试行)
- 湿法炼锌电解车间设计论文
- 森林培育学复习提纲
评论
0/150
提交评论