一元稀疏多项式简单计数器论文完整版_第1页
一元稀疏多项式简单计数器论文完整版_第2页
一元稀疏多项式简单计数器论文完整版_第3页
一元稀疏多项式简单计数器论文完整版_第4页
一元稀疏多项式简单计数器论文完整版_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学院数据结构课程设计论文一元稀疏多项式简单计数器学生姓名: 学生学号: 院(系): 计算机 年级专业: 指导教师: 二一年十二月学院本科学生课程设计任务书题目设计一元稀疏多项式简单计数器1、课程设计的目的培养学生用学到的书本知识解决实际问题的能力;培养实际工作所需要的动手能力;培养学生以科学理论和工程上能力的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用;通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)基本功能要求:(1) 输入并建立多项式(2) 输出多项式

2、,输出形式为整数序列:n,c1,e1,c2,e2cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。(3) 多项式a和b相加,建立多项式a+b,输出相加的多项式。(4) 多项式a和b相减,建立多项式a-b,输出相减的多项式。用带表头结点的单链表存储多项式。测试数据:(1) (2x+5x8-3.1x11)+(7-5x8+11x9)(2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)(3)(x+x2+x3)+0(4)(x+x3)-(-x-x-3)3、主要参考文献1数据结构(C语言版),严蔚敏,清华大学出版社,20032数据

3、结构题集,严蔚敏,清华大学出版社,20053数据结构(C语言版),刘大有,高等教育出版社,20044Data Structure with C+,William FordWilliam Topp,清华大学出版社,20034、课程设计工作进度计划第1天 完成方案设计与程序框图 第2、3天 编写程序代码第4天 程序调试分析和结果第5天 课程设计报告和总结指导教师(签字)日期年 月 日教研室意见:年 月 日学生(签字): 接受任务时间: 年 月 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称设计一元稀疏多项式简单计数器评分项目分值得分评价内涵工作表现20%01学习态度6遵守各

4、项纪律,工作刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算

5、及计算机应用能力5具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计(论文)规范化程度5符合本专业相关规范或规定要求;规范化符合本文件第五条要求。10设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年月日摘要 数据结构在计算机科学中一门综合性的专业基础课,不仅是一般程序

6、设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。经过一学期的学习和几周的实验课。对知识的把握还需要从更为有目的性的程序设计来考验。本设计的设计是为了解决数学算数中多项式的相加相减问题。当然这相比于复杂的数学计算简单至极。但对于数据结构知识的巩固却很为重要。设计中主要涉及到带头指针的单链表存储的的知识。采用C语言编写,在对于多项式的存储和计算操作中大量依赖于指针和结构体。通过尾插法建立链表,指数的比较来实现结点元素的相加减。关键字 数据结构 多项式 单链表 指针 结构体 目录摘要I目录21.绪论11.1 前言11.2 问题的提出12.课程设计目的23.需求分析

7、33.1 功能分析33.2 设计思路34.概要设计44.1数据结构的选用44.2多项式的输入44.3主函数和其它函数45.流程图设计65.1函数调用关系65.2程序流程图76.程序代码87.调试运行157.1运行程序操作平台:157.2程序的载入157.3程序的编译157.4程序运行测试数据158.总结181.绪论1.1 前言 计算机是随着社会的发展应运而生,它贯穿了人们生活的方方面面。其中,在科学计算方面,由于算法的高精确和高复杂度,对于计算机的依赖不可言喻。在这里,我设计了一个一元稀疏多项式简单计数器,科学计算算不上,但作为学习性的实践,对自己却很重要。当前计算机软件技术和网络技术飞速发展

8、,软件系统日趋大型化、复杂化。因此社会对软件开发者日出了比以往更高的要求。相应的系统要求也有了很大的提高。本系统用C语言作为程序语言,设计出的系统功能完善,操作方便灵活。1.2 问题的提出 一元稀疏多项式简单计数器基本功能要求:(1)输入并建立多项式(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。(3)多项式a和b相加,建立多项式a+b,输出相加的多项式。(4)多项式a和b相减,建立多项式a-b,输出相减的多项式。用带表头结点的单链表存储多项式。2.课程设计目的使我们进一步理解和掌握课堂上

9、所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。使我们掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。使我们掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。熟练掌握数据结构这门课程,掌握线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用。 进一步熟悉抽象数据类型的定义和实现、如何利用数组的动态分酚实现顺序结构、继承的实现方式。学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、想念结构及基相应的算法并初步掌握算法的时间分析和空间分析的技术。基本掌握程序设

10、计的基本思路和方法。利用所学的基本知识和技能,解决简单的程序设计问题各算法描述培养我们的数据抽象能力。3.需求分析3.1 功能分析 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。3.2 设计思路采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。为实现处理,社p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项。 若p->expn<q->expn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 若p->expn=

11、q->expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。4.概要设计4.1数据结构的选用typedef struct Polynomial float coef; /系数 int expn; /指数 struct Polynomial *next;*Polyn,Polynomial;4.2多项式的输入 Polyn CreatePolyn(Polyn head,int m) . for(i=0;i<m;i+) p=(

12、Polyn)malloc(sizeof(struct Polynomial); printf("请输入第%d项的系数与指数:",i+1); scanf("%f %d",&p->coef,&p->expn); Insert(p,head); return head;4.3主函数和其它函数 void main() int m,n,a,x; char flag; Polyn pa=0,pb=0,pc; void DestroyPolyn(Polyn p) void PrintPolyn(Polyn P)int compare(Pol

13、yn a,Polyn b)Polyn AddPolyn(Polyn pa,Polyn pb)Polyn SubtractPolyn(Polyn pa,Polyn pb)5.流程图设计5.1函数调用关系5.2程序流程图6.程序代码include<stdio.h>#include<malloc.h>typedef struct Polynomial/项的表示 float coef; /系数 int expn; /指数 struct Polynomial *next; /指针域*Polyn,Polynomial; /Polyn为结点指针类型void Insert(Polyn

14、p,Polyn h) /插入或者合并 if(p->coef=0) free(p); /系数为0的话释放结点 else Polyn q1,q2; q1=h;q2=h->next; while(q2&&p->expn<q2->expn) /查找插入位置p与h项一次比较指数 q1=q2; q2=q2->next; if(q2&&p->expn=q2->expn) /将指数相同相合并 q2->coef+=p->coef; free(p); if(!q2->coef) /系数为0的话释放结点 q1->

15、next=q2->next; free(q2); else /指数为新时将结点插入即p->expn>q2expn情况 p->next=q2; q1->next=p; /InsertPolyn CreatePolyn(Polyn head,int m)/建立一个头指针为head、项数为m的一元多项式 int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial); head->next=NULL; for(i=0;i<m;i+) p=(Polyn)malloc(sizeof(struct Po

16、lynomial); /建立新结点以接收数据 printf("请输入第%d项的系数与指数:",i+1); scanf("%f %d",&p->coef,&p->expn); Insert(p,head); /调用Insert函数插入结点 return head;/CreatePolynvoid DestroyPolyn(Polyn p) /销毁多项式p Polyn q1,q2; q1=p->next; q2=q1->next; while(q1->next) free(q1); /释放q1 q1=q2;/指针

17、后移,循环继续释放,直至销毁 q2=q2->next; void PrintPolyn(Polyn P) /输出多项式 Polyn q=P->next; int flag=1; /项数计数器 if(!q) /若多项式为空,输出0 putchar('0'); printf("n"); return; while (q) if(q->coef>0&&flag!=1) putchar('+'); /系数大于0且不是第一项 if(q->coef!=1&&q->coef!=-1)/系数

18、非1或-1的普通情况 printf("%g",q->coef); if(q->expn=1) putchar('X');/系数为1的情况 else if(q->expn) printf("X%d",q->expn); else if(q->coef=1) if(!q->expn) putchar('1'); else if(q->expn=1) putchar('X'); else printf("X%d",q->expn); if(q-&

19、gt;coef=-1) if(!q->expn) printf("-1"); else if(q->expn=1) printf("-X"); else printf("-X%d",q->expn); # q=q->next; flag+; /while printf("n");/PrintPolynint compare(Polyn a,Polyn b) if(a&&b) if(!b|a->expn>b->expn) return 1; else if(!

20、a|a->expn<b->expn) return -1; else return 0; else if(!a&&b) return -1;/a多项式已空,但b多项式非空 else return 1;/b多项式已空,但a多项式非空/comparePolyn AddPolyn(Polyn pa,Polyn pb)/求解并建立多项式a+b,返回其头指针 Polyn qa=pa->next; Polyn qb=pb->next; Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial);/

21、建立头结点 hc->next=NULL; headc=hc; while(qa|qb) qc=(Polyn)malloc(sizeof(struct Polynomial); switch(compare(qa,qb)/调用compare返回值 case 1: qc->coef=qa->coef; qc->expn=qa->expn; qa=qa->next; break; case 0: qc->coef=qa->coef+qb->coef; qc->expn=qa->expn; qa=qa->next; qb=qb-&

22、gt;next; break; case -1: qc->coef=qb->coef; qc->expn=qb->expn; qb=qb->next; break; /switch if(qc->coef!=0) qc->next=hc->next; hc->next=qc; hc=qc; else free(qc);/当相加系数为0时,释放该结点 /while return headc;/AddPolynPolyn SubtractPolyn(Polyn pa,Polyn pb)/求解并建立多项式a-b,返回其头指针 Polyn h=pb

23、; Polyn p=pb->next; Polyn pd; while(p) /将pb的系数取反 p->coef*=-1; p=p->next; pd=AddPolyn(pa,h); for(p=h->next;p;p=p->next) /恢复pb的系数 p->coef*=-1; return pd;/SubtractPolynint main()/主函数 int m,n,flag=0; float x; Polyn pa=0,pb=0,pc,pd,pe,pf;/定义各式的头指针,pa与pb在使用前付初值NULL printf("请输入a的项数:&

24、quot;); scanf("%d",&m); pa=CreatePolyn(pa,m);/建立多项式a printf("请输入b的项数:"); scanf("%d",&n); pb=CreatePolyn(pb,n);/建立多项式a /输出菜单 printf("*n"); printf("操作提示:nt1.输出多项式a和bnt2.建立多项式a+bnt3.建立多项式a-bnt4.退出n"); for(;flag=0) printf("执行操作"); scanf

25、("%d",&flag); if(flag=1)/输出多项式 printf("多项式a:");PrintPolyn(pa); printf("多项式b:");PrintPolyn(pb);continue; if(flag=2)/多项式相加 pc=AddPolyn(pa,pb); /调用函数,实现相加 printf("多项式a+b:");PrintPolyn(pc); DestroyPolyn(pc);continue; if(flag=3)/多项式相减 pd=SubtractPolyn(pa,pb); p

26、rintf("多项式a-b:");PrintPolyn(pd); DestroyPolyn(pd);continue; if(flag=4) break; /结束循环,退出 DestroyPolyn(pa);/销毁多项式,释放内存 DestroyPolyn(pb); return 0; 7.调试运行7.1运行程序操作平台:硬件要求:PC机一台软件要求:windows XP以上操作系统 VC+软件7.2程序的载入7.3程序的编译7.4程序运行测试数据(1) (2x+5x8-3.1x11)+(7-5x8+11x9)(2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+

27、5.4x2+7.8x15)(3)(x+x2+x3)+0(4)(x+x3)-(-x-x-3)8.总结 这次课程设计是对数据结构掌握的一次很有分量的测试。确实自己在这次课程设计中认识到自己很多的不足。想了很多,思考了很多。对于知识的把握和编程的经验自己真的是差的太远。 编程是个细致活。不温不火,不急不躁。在五天的编程过程中,这点深有体会。想法太成熟,笔快容易失误;知识太生疏,笔慢错误多。当然,不能强求不出现错误。在编程过程要善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。经验丰富的人在错误出现时,能很快的判断出错误的所在,并改之;经验少的人,则往往要花费大量的时间和气力。我相信老师说的,很多程序的编写都有灵感的参与,下次再次看自己程序的时候,也许不能很好的明白当初某些地方的初衷。因此,在编程中,在思想灵感爆发的时候,最好的做法就是在旁边写上注释。这次设计自己就走了很多弯路,程序一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论