数据结构报告
- 格式:doc
- 大小:763.00 KB
- 文档页数:26
课程设计报告课程名称数据结构课程设计课题名称一元稀疏多项式计算器一、设计内容与设计要求 1.设计内容:1)问题描述设计一个一元稀疏多项式简单计算器。
2)基本要求一元稀疏多项式简单计算器的基本功能是: a.输入并建立多项式;b.输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en ,其中n 是多项式的项数,ci,ei ,分别是第i 项的系数和指数,序列按指数降序排列;c.多项式a 和b 相加,建立多项式a+b ;d.多项式a 和b 相减,建立多项式a-b ;e.计算多项式在x 处的值; 3)测试数据a.)72111.3()1157()1.352(91198118+++-=+-+-+x x x x x x x x ;b.;391515223923122.18.7()8.74.56()2.14.46(---+---=+-+---+-xx x x x x x x x x x xc.)1()()1(25435432+++=--++++++x x x x x x x x x x ; d.0)()(33=--++x x x x ;e. )(0)(2332x x x x x x ++=+++; 4)实现提示用带表头结点的单链表存储多项式,多项式的项数存放在头结点中。
2.设计要求:●课程设计报告规范1)需求分析a.程序的功能。
b.输入输出的要求。
2)概要设计a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。
b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
3)详细设计a.采用C语言定义相关的数据类型。
b.写出各模块的类C码算法。
c.画出各函数的调用关系图、主要函数的流程图。
4)调试分析以及设计体会a.测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。
b.程序调试中遇到的问题以及解决问题的方法。
c.课程设计过程经验教训、心得体会。
5)使用说明用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。
6)书写格式见附带说明。
7)附录a.参考书目b.源程序清单(带注释)●考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。
具体考核标准包含以下几个部分:①平时出勤(占10%)②系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)③程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)④设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。
⑤独立完成情况(占10%)。
课程验收要求①运行所设计的系统。
②回答有关问题。
③提交课程设计报告。
④提交软盘(源程序、设计报告文档)。
⑤依内容的创新程度,完善程序情况及对程序讲解情况打分。
二、进度安排附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序原代码)。
目录1.需求分析 (1)1.1程序功能 (1)1.2输入输出要求 (1)2.概要设计 (2)2.1主要程序功能模块 (2)2.2抽象数据类型 (2)3.详细设计 (3)3.1C语言定义的相关数据类型 (3)3.2模块的主要类C码算法 (3)3.3各函数模块的调用关系图 (5)3.4主要函数的流程图 (6)3.5多项式相加Add()函数的流程图 (7)4.调试分析以及设计体会 (8)4.1测试数据 (8)4.2程序调试中遇到的问题以及解决问题的方法 (9)5.课程设计心得体会 (10)6.使用说明 (11)7.附录:源程序清单(带注释) (13)一、需求分析1.1程序的功能一元稀疏多项式的简单计数器主要完成输入并建立多项式,按照幂的由低到高排列输出多项式、根据选项对两个多项式进行加减并输出结果。
另外该计算器可以任意输入X的值来求多项式的结果并输出。
1.2输入输出的要求一元稀疏多项式计数器要求从键盘输入多项式的系数和多项式的幂,实现此功能,程序采用scanf输入命令来完成输入。
输入的多项式是以带表头的链表存储的,所以输出多项式时是直接从镖头开始以降幂的形式输出。
例外,输入输出的数据可以是浮点数、整数。
二、概要设计2.1主要程序功能模块此一元稀疏多项式计数器总共用了五个大的模块来完成,其中包括创建多项式模块、输出多项式模块、多项式相加模块和多项式相减模块四个大模块,这四个模块由主函数连在一起。
其中创建多项式模块中嵌套有Deel()函数模块,多项式相减模块中嵌有多项式相加模块。
各功能模块的功能如下:Add()函数完成两个多项式相加功能,其中嵌套的compare()函数模块主要用来检测多项式的所有项是否全部参与计算,并且比较他们的指数大小;Greate()函数完成多项式的创建模块功能,与其嵌套的Deel()函数共同完成接受键盘输入的系数和幂的整理,使多项式能按降幂的序列输出;Sub()函数和Add()函数共同完成两个多项式相减的功能。
2.2抽象数据类型一元稀疏多项式主要采用单链表的数据结构对多项式进行操作,多项式的系数采用的浮点型数据,多项式的幂用整形数据定义,且都存放在结构体Polynomial 中,另外,程序使用了malloc.h的头文件,用诸如p=(Polyn)malloc(sizeof(struct Polynomial));的malloc函数来为多项式开辟存储空间,实现多项式的建立,同时为了撤销多项式,程序也采用了free(p)函数来释放存储空间。
ADT{数据对象:D={ai |1≤i≤n,n≥0,ai属于结构体类型}数据类型:R={<a,a>|属于D,i=1,…n-1}基本运算:Deel(p,h) //处理多项式,以降序排列Great(head,m)//建立多项式Print(p) //输出连表中的多项式Add(a,b)//多项式相加Sub(a,b)//多项式相减Value(head,e)//计算多项式的值}三、详细设计3.1 C语言定义的相关数据类型typedef struct Polynomial{float coef;多项式的系数int expn; 多项式的幂struct Polynomial *next;}*Polyn,Polynomial;Polyn pa=0,pb=0,pc,pd;定义多项式变量int m,n;定义多相式的项数3.2模块的主要类C码算法a.输入多项式的模块:由于多项式的建立主要是根据自己的键盘输入来建立多项式,主要是对多项式的系数和幂进行处理。
类C码算法是:if(p->coef==0) free(p);else{ Polyn q1,q2;q1=h;q2=h->next;while(q2&&p->expn<q2->expn){ q1=q2;q2=q2->next;}if(q2&&p->expn==q2->expn){q2->coef+=p->coef;free(p);if(!q2->coef){ q1->next=q2->next;free(q2);}}else{ p->next=q2;q1->next=p;}b. 多项式相加模块:while(qa||qb){qc=(Polyn)malloc(sizeof(struct Polynomial));switch(compare(qa,qb)){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->next;break;}case -1: { qc->coef=qb->coef;qc->expn=qb->expn;qb=qb->next;break;}}if(qc->coef!=0){ qc->next=hc->next;hc->next=qc;hc=qc;}else free(qc); }其中调用了compare函数,用来判断两多项式的指数大小,以完成多项式的加法运算。
c.由于加法和减法性质一样,在进行减法运算的时,直接将系数取反在进行加法运算即可完成减法运算的功能。
多项式减法运算的类C码:即:while(p){p->coef*=-1;p=p->next;}再调用:Add(pa,h)d.计算多项式在X处的值的类C码算法:for(p=head->next;p;p=p->next){t=1;for(i=p->expn;i!=0;){if(i<0){t/=x;i++;}else{t*=x;i--;}}sum+=p->coef*t;}3.3各函数模块的调用关系图3.4主要函数的流程图3.5多项式相加Add()函数的流程图:四、程序调试4.1测试数据:为了对程序进行测试,我们准备了多个多项式,尽量满足全面测试的要求。
其中多项式的系数有整型的,也有浮点型,多项式的幂有负整数也有正整数,两个多项式之间的运算有加法也有减法,结果有零也有不为零的,相信这样的测试方案已经能很好的对程序进行测试。
测试数据如下:a.)72111.3()1157()1.352(91198118+++-=+-+-+x x x x x x x x ;b.;391515223923122.18.7()8.74.56()2.14.46(---+---=+-+---+-xx x x x x x x x x x xc.)1()()1(25435432+++=--++++++x x x x x x x x x x ; d.0)()(33=--++x x x x ; e. )(0)(2332x x x x x x ++=+++测试b 组数据的正确实现界面如下:4.2程序调试中遇到的问题以及解决问题的方法1.由于对C语言的了解不是很透彻,做出了输入语句与键盘输入的不相符,导致出现死循环,例如,输入命令 scanf("%f %d",&p->coef,&p->expn);语句的系数输入和幂输入中间是用空格键隔开的,如果在用键盘输入的时候用空格键和回车键以外的符号相隔,则出现了死循环。