数据结构课程设计报告一元多项式的计算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计报告题目:一元多项式计算
院(系):计算机与信息科学学院
专业:软件工程
班级:软件1202班
学号:02 05 40
姓名:陈潇潇刘敏易庆鹏
指导教师:***
2013年12月
目录
一、课程设计介绍 ........................ 错误!未定义书签。
1.1课程设计目的 (3)
1.2课程设计内容 (3)
1.2课程设计要求 (3)
二、需求设计 ............................ 错误!未定义书签。
2.1课设题目粗略分析 (3)
2.2原理图介绍........................... 错误!未定义书签。
2.2.1 功能模块图....................... 错误!未定义书签。
2.2.2 流程图分析 (4)
三、需求分析 ............................. 错误!未定义书签。
3.1存储结构 (5)
3.2算法描述 (6)
四、调试与分析 ........................... 错误!未定义书签。(1)调试过程 ........................... 错误!未定义书签。(2)程序执行过程....................... 错误!未定义书签。参考文献................................. 错误!未定义书签。总结..................................... 错误!未定义书签。附录(关键部分程序清单)............... 错误!未定义书签。
一、课程设计介绍
1.1课程设计目的
⑴熟悉使用c语言编码程序,解决实际问题;
⑵了解数据结构与算法的设计方法,具备初步的独立分析和设计能力。
⑶初步掌握软件开发过程的分析能力,系统设计,程序编码,测试等基本能力。
⑷提高综合运用的能力,运用所学理论知识与独立分析能力。
1.2课程设计内容
一元多项式计算
任务:⑴能够按照指数降序排列建立并输出多项式
⑵能够完成两个多项式的相加,并将结果输入
⑶在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法
1.3课程设计要求
⑴学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。
⑵学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。
⑶课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序30小时。
⑷课程设计在期末考试之前交。最好一起上交。
⑸同班同学之间最好不要相同。源代码可以打印,但是下面模块要求的内容必须手写。
二、需求设计
2.1 课设题目粗略分析
建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果
2.2 流程图分析
1、输入输出
(1)功能:将要进行运算的多项式输入输出。
(2)数据流入:要输入的多项式的系数与指数。
(3)数据流出:合并同类项后的多项式。
(4)程序流程图:多项式输入流程图如图1所示。
(5)测试要点:输入的多项式是否正确,若输入错误则重新输入
图表1
2、多项式的加法
(1)功能:将两多项式相加。
(2)数据流入:输入函数。
(3)数据流出:多项式相加后的结果。
(4)程序流程图:多项式的加法流程图如图2所示。
(5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。
图表 1
三、需求分析
3.1 存储结构
一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。
3.2 算法描述
#include
#include
typedef struct Polynomial{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial; //Polyn为结点指针类型void Insert(Polyn p,Polyn h){
if(p->coef==0) free(p); //系数为0的话释放结点
else{
Polyn q1,q2;
q1=h;q2=h->next;
while(q2&&p->expn
q1=q2;
q2=q2->next;
}
if(q2&&p->expn==q2->expn){ //将指数相同相合并
q2->coef+=p->coef;
free(p);
if(!q2->coef){ //系数为0的话释放结点
q1->next=q2->next;
free(q2);
}
}
else{ //指数为新时将结点插入 p->next=q2;
q1->next=p;
}