实验报告——2一元稀疏多项式计算器.doc

上传人:仙人指路1688 文档编号:2396547 上传时间:2023-02-17 格式:DOC 页数:12 大小:138KB
返回 下载 相关 举报
实验报告——2一元稀疏多项式计算器.doc_第1页
第1页 / 共12页
实验报告——2一元稀疏多项式计算器.doc_第2页
第2页 / 共12页
实验报告——2一元稀疏多项式计算器.doc_第3页
第3页 / 共12页
实验报告——2一元稀疏多项式计算器.doc_第4页
第4页 / 共12页
实验报告——2一元稀疏多项式计算器.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《实验报告——2一元稀疏多项式计算器.doc》由会员分享,可在线阅读,更多相关《实验报告——2一元稀疏多项式计算器.doc(12页珍藏版)》请在三一办公上搜索。

1、华北水利水电学院 一元稀疏多项式计算器 实验报告20102011学年 第 一 学期 09 级 计算机科学与技术 专业班级: 2009119 学号: 200911902 姓名: 万婷婷 一、 实验目的设计一个医院稀疏多项式简单计算器熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用二、 实验要求a) 输入并建立多项式b) 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。c) 多项式a和b相加,建立多项式a+b,输出相加的多项式。d) 多项式a和b相减,建立多项式a-b,输出

2、相减的多项式。用带表头结点的单链表存储多项式。测试数据:(1) (2x+5x8-3.1x11)+(7-5x8+11x9)(2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)(3)(1+x+x2 +x3 +x4 +x5 )+( -x3- x4)(4)(x+x2+x3)+0(5)(x+x3)-(-x-x-3)(6) (x+x2 +x3 )+0三、实验内容主要算法设计typedef struct Nodefloat coef;int index;struct Node *next;LinkList;本程序涉及到多项式的建立、多项式的输出、两个多项式的相加减。用带

3、头结点的单链表存储多项式;程序中共定义了5个函数:void Insert(LinkList *p,LinkList *h)/把节点p插入到链表h中LinkList *Creat_L(LinkList *head,int m)/创建一个链表,项数为mvoid Printf(LinkList *L)LinkList *ADDlist(LinkList *head,LinkList *pb)LinkList *MinusList(LinkList *head,LinkList *pb)四、程序源代码#include#include#include#includetypedef struct Node

4、float coef;int index;struct Node *next;LinkList;void Insert(LinkList *p,LinkList *h)/把节点p插入到链表h中 LinkList *q1,*q2; int flag=0; q1=h; if(p-coef=0) free(p); else if(q1-next=NULL) q1-next=p; else q2=q1-next; while(flag=0) if(p-indexindex) if(q2-next=NULL) q2-next=p; flag=1; else q1=q2; q2=q2-next; else

5、 if(p-indexq2-index) p-next=q2; q1-next=p; flag=1; else q2-coef=p-coef+q2-coef; if(q2-coef=0) q1-next=q2-next; free(q2); flag=1; free(p); LinkList *Creat_L(LinkList *head,int m)/创建一个链表,项数为m int i;LinkList *q;head=(LinkList *)malloc(sizeof(LinkList);head-next=NULL;for(i=1;inext=NULL;printf(请输入第%d项的系数

6、和指数:,i);scanf(%f,%d,&q-coef,&q-index);Insert(q,head);return head;void Printf(LinkList *L) LinkList *p,*q,*pa;int i=0;p=L-next;q=L-next;if(p=NULL)printf(0n);return; while(p)p=p-next;i+;printf(%d,i);while(q)printf(%g,q-coef);printf(%d,q-index); q=q-next;LinkList *ADDlist(LinkList *head,LinkList *pb)Li

7、nkList *pc;int flag=0;while(flag=0)if(pb-next=NULL)flag=1;elsepb=pb-next;pc=(LinkList *)malloc(sizeof(LinkList);pc-coef=pb-coef;pc-index=pb-index;pc-next=NULL;Insert(pc,head); return head; LinkList *MinusList(LinkList *head,LinkList *pb)LinkList *pc;int flag=0;while(flag=0)if(pb-next=NULL)flag=1;els

8、epb=pb-next;pc=(LinkList *)malloc(sizeof(LinkList);pc-coef=-pb-coef;pc-index=pb-index;pc-next=NULL;Insert(pc,head); return head;void main() int i,m,n; LinkList *pa=0,*pb=0,*pc; while(1) system(cls); printf(.欢迎使用一元稀疏多项式计算器.n); printf( 请输入多项式a的项数:); scanf(%d,&m); pa=Creat_L(pa,m); printf( 请输入多项式b的项数:)

9、; scanf(%d,&n); pb=Creat_L(pb,n);printf(.欢迎使用一元稀疏多项式计算器.n);printf( 0.退出系统 n);printf( 1.输出多项式a n);printf( 2.输出多项式b n);printf( 3.输出多项式a+b n);printf( 4.输出多项式a-b n); while(1)printf(n 请选择操作:);scanf(%d,&i);switch(i)case 0:return;case 1:printf( 输出多项式a的整数序列为:); Printf(pa); break;case 2 :printf( 输出多项式b的整数序列为

10、:);Printf(pb);break;case 3: pc=ADDlist(pa,pb);printf( 输出多项式a+b的整数序列为:);Printf(pc);break;case 4:pc=MinusList(pa,pb);printf( 输出多项式a-b的整数序列为:);Printf(pc);break;default:printf(n 输入有误,请重新输入:n); 五、运行结果六、小结(不少于100字) 虽然数据结构是一门公认的比较难的课程,自己学起来也觉得有些吃力,但在本次课程设计之前,我系统地把教科书复习了一遍,大大加深了对各种数据结构的理解,运用起来更加自如。不断地翻阅各种参考书,以及在老师和同学的帮助下,基本上考虑到了所有的边界情况,反复测试各种类型的数据,强化程序的健壮性,最终顺利完成了本次课程设计。 虽然课程设计做的不够完善,但在设计的过程中受益匪浅,通过查资料等学到了很多以前不知道或不太会应用的知识,对单向链表的使用有了更深刻的了解和掌握,因为多项式的计算要求用单向链表来实现,所以在做课程设计之前通过网上找资料,查参考书及问辅导老师等对单向链表的使用比以前掌握的更加到位,并且能够灵活运用,通篇几乎用的都是单向链表,这是受益的一大重点。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号