课程设计报告
设计名称: 数结构课程设计
设计题目: 意两高次项式加法法运算
学生学号:
专业班级: 软件工程班
学生姓名:
学生成绩:
指导教师(职称):
课题工作时间:
说明:
1报告中务书进度表指导教师课程设计开始前填写发学生
2学生成绩指导教师根学生设计情况出项分值总评成绩
3学生必须参加课程设计答辩环节参加答辩者成绩律格处理答辩指导教师实施
4报告正文字数般应少3000字指导教师根门综合设计情况行规定
5时表现成绩低6分学生取消答辩资格项综合设计成绩格处理
软件学院课程设计务书
学生姓名
学号
专业班级
设计题目
意两高次项式加法法运算
容概:
c++语言数结构思想解决意两高次项式加法法运算数输入方面根元高次项式特征左右开始项指数系数序输入运单链表动态链表等关键技术实现设计数结构应节省存储空间程序运行时间应少功开发环境:Visual C++ 60学深入解C++掌握C++功数结构功
文献资料:
[1] 韩利凯李军 数结构[M] 浙江:浙江学出版社2013
[2] 苏仕华 数结构课程设计[M] 北京:机械工业出版社 2009
[3] 耿国华 数结构C语言描述[M] 北京:高等教育出版社2011
[4] 严蔚敏陈文博 数结构算法教程[M] 北京 清华学出版社2010
设计求:
设计程序实现意两高次项式加法法运算
(1)设计数结构应节省存储空间
(2)程序运行时间应少
工作期限:设计工作20XX年6月16日20XX年6月27日止
指导教师: 院长:
日 期:20XX年6月16日
软件学院课程设计进度安排表
学生姓名: 学号: 专业: 软件工程 班级: 20XX级X班
起止日期
容
备注
6月16日~ 6月 17日
务书收集阅读整理相关参考文献进行纳概括总结完成项目务背景介绍部分文字容
6月18日~11月20日
系统功设计模块设计系统体系结构构建
6月21日~6月24日
功模块编码实现系统功模块调试维护
6月25日~6月26日
系统功集成系统调试测试模板求撰写课程设计项目设计报告
6月27日
课程设计项目设计分组答辩提交课程设计项目设计报告相关文档进行成绩评定
指导教师签名:
20XX年6月16日
成绩评定表
学生姓名: 学号: 专业: 软件工程 班级: 2012级4班
类
合计
分值
项分值
评分标准
实际分
合计分
时表现
10
10
时参加设计指导违反纪律情况
完成情况
30
20
设计务书求完成全部务完整演示设计容符合求
10
设计容进行详细完整介绍指导教师提出问题进行正确回答
报告质量
35
10
报告文字通容翔实述充分完整立正确结构严谨合理报告字数符合相关求工整规范整齐划
5
课题背景介绍清楚综述分析充分
5
设计方案合理行证严谨逻辑性强具说服力
5
符号统图表完备符合规范求
5
整设计程进行全面总结出价值结结果
5
参考文献数量2篇格式符合求正文中正确引
答辩情况
25
10
规定时间设计容进行阐述言简意明重点突出点正确条理清晰
15
规定时间准确完整流利回答教师提出问题
总评成绩: 分
指导教师: (签字)
日期:20XX 年6月 27 日
摘
摘:意两高次项式加法法运算设计数结构应节省存储空间程序运行时间应少数输入方面根元高次项式特征左右开始项指数系数序输入相项式项数未知选择什样存储方式课程设计中尤重程序通调试运行初步实现设计目标适完善应商业中解决实际问题
关键词:高次项式 加法 法 存储方式
目 录
摘 VI
第章 课题背景 1
11 需求分析 1
12 程序目 1
13 解决问题 1
14 设计思路 1
15 程序运行台 1
16 性求 2
第二章 设计简介设计方案述 3
21设计简介 3
22 数结构选择 3
23解决方案 3
24 程序模块间层次(调)关系 4
25 户说明 4
第三章 详细设计 5
31 算法思想 5
32 面针程序专门定义数结构类型 5
33 结构图 6
34 算法描述 6
第四章 设计结果分析 11
41 程序调试 11
42 时间空间复杂度计算 12
43 错误分析 13
44 存足策编程体会 13
总结 14
参考文献 15
附录:程序源代码 16
第章 课题背景
11 需求分析
日常生活开支额数字者倍数计算需计算器帮助学时简单计算器高中简单计算器已满足需求然现计算器价格较便宜种功操作便时需种功计算器实现够通手设计开发出需计算程序非常意义
方便算出意两高次项式加法法特编写程序该程序设计数结构应节省存储空间程序运行时间应少
12 程序目
设计程序实现意两高次项式加法法运算设计数结构应节省存储空间程序运行时间应少
13 解决问题
1 样实现两项式法?
2 相指数相项什方法合?
3 什数结构满足节省存储空间求?
4 什方法输出表达式?
14 设计思路
题目出设计程序应达功设计程序满足两点数输入方面根元高次项式特征左右开始项指数系数序输入里留意问题相项式项数未知选择什样存储方式 课程设计中尤重程序坏评定
15 程序运行台
该程序Visual C++60制做Visual C++ 60运行该程序具体操作:开Visual C++ 60菜单栏里点文件→开工作区→找
cpp1dsw文件→开者资源理器中双击该文件时VC++60会动开载入该系统相关资源
16 性求
1系统易操作性
开发系统应操作简单学生受电脑水限制
2系统具维护性
系统设计范围较广数库中信息需定期修改系统运作更系统数简单功进行简单维护调整
3该系统够开发硬件系统中运行会外部系统面做修改
第二章 设计简介设计方案述
21设计简介
设计题目 设计程序实现意两高次项式加法法运算
目:求熟练掌握C++语言基知识编辑技基掌握结构化程序设计基思路方法数结构
求:
1设计数结构应节省存储空间
2程序运行时间应少
22 数结构选择
程序选择数结构单链表原:
链表定义:
(1) 链表限具相数类型数元素集合D{aii12…n}ai数元素
(2) 数元素间关系R{
(3) 数元素ai 存储器中占意连续连续物理存储区域
动态链表:
需插入数元素时时动态申请存储空间结点放定义数组中删数元素时释放该数元素占空间根表实际需时动态分配存储空间存储表中数元素
单链表限具相数类型数元素组成链表该链表结点指针域带头结点单链表单链表第结点前加类型结点目链表致描述
程序解决两项式相加相问题项式项数身确定相项式含指数相问题时需合合中项没需删然浪费存空间基点采链表
链表具动态生成灵活添加删结点特点节省存储空间
23解决方案
1首先进行需求分析搞清楚系统功务
2然总体设计中确定模块结构划分功模块软件功需求分配划分单元模块确定模块间联系确定数结构文件结构数库模式确定测试方法策略
3详细设计中模块确定采算法选择适工具表达算法程(流程图)描述模块详细程确定模块采数结构模块接口细节系统部模块接口
4根分析编写C++语言代码
24 程序模块间层次(调)关系
执行函数时先调creat 生成相项式存储两动态链表中然调print 函数输出两项式继续执行相函数相调置空函数相链表删然检验否指数相项果没调print函数输出结果否调执行合函数指数项相合调print函数输出结果
25 户说明
(1)出意两高次项式需项式左右次输入系数值指数值输入指数值1 时结束(程序设计缺陷系数指数输入结束前系数值便输入影响运算结果)
(2)程序中指数系数定义整型表达式中系数值指数值超出整型范围
(3)输入正数直接输入负数加负号指数选择1
第三章 详细设计
31 算法思想
算法思想:
(1):首先两已知项式指数系数存放指定链表中执行法运算法运算程f(x)式中第项g(x)式项相f(x)式第二项g(x) 式项相次直f(x)式项g(x) 式完止相指数系数存刚开始建F(x)链表中
(2):F(x) 链表中果指数相项需合合时结果放前项中项删里需F(x) 链表中项遍里发挥指针作首先定义3指针xyzxy 指首元素结点z 指第二结点z 结点中指数项x 结点指数项较果指针z 移相z 结点系数加x 然z 结点空间释放指针z 移直指针z 指空指针x 移项令z 指x 项然述步骤次执行直x 指空结束里指针y z 前驱结点作合结点空间释放结点空间结点前两项链接起程序核心部分全部运while 循环语句实现界面通switchcase等语句控制
32 面针程序专门定义数结构类型
结点数类型:
typedef struct node{ 定义节点类型
float coef
int expn
struct node * next
}PLOY
数结构设计思想:
链表中结点存放项式系数非0 项包含三域分存放该项系数指数指项式结点指针
项式链表结点结构图31示:
系数 指数 指针
coef
expn
next
图 31 链表结点
例:项式4x^8+7x^235x^单链表表示图32示
图32 单链表表示
33 结构图
整体结构图图33示:
输入意两高次项式系数指数值
输入值分存储两动态链表中
输出两相项式
相结果存入F(x)链表
存放相项式项系数指数链表置空
指数相项合
输出结果
图 33 整体结构图
34 算法描述
(1) 设指针pq 分指AB 首元素结点p>coef q>coefp>exp+q>exp令指针p 移
(2)q>next 空时指针p 移位指针q 继续B 链表第项开始执行p>coef q>coefp>exp 加q>exp执行次指针p 移
(3)重复(1)(2)步直p>next 空结束出结果存入C 链表
合时两指针指C 链表指针作指针前驱指针样合释放容易前结点链接
综合分析两高次项式相算法:
PLOY *byPLOY(PLOY *head1PLOY *head2) 项式相
{
PLOY *inpt*res*pre
int flag0
res(PLOY *)malloc(sizeof(PLOY)) 创建链表头
res>nextNULL
head1head1>next
prehead2
while(flag0)
{
if(pre>nextNULL)
{
prehead2现指空时跳出循环
head1head1>next
continue
}
if(head1NULL)
{
flag1现指空时跳出循环
continue
}
prepre>next
inpt(PLOY *)malloc(sizeof(PLOY))创建新链节
inpt>coefpre>coef*head1>coef
inpt>expnpre>expn+head1>expn
inpt>nextNULL
insert(resinpt)前g(x)链节插入y(x)中
}
return res
}
尾插法生成项式链表算法:
PLOY *creat(char ch)输入项式
{
PLOY *head*inpt
float x
int y
head(PLOY *)malloc(sizeof(PLOY)) 创建链表头
head>nextNULL
printf(请输入项式c(格式:系数 指数0 0 结束)\nch)
scanf(f d&x&y)
while(x0)
{
inpt(PLOY *)malloc(sizeof(PLOY)) 创建新链节
inpt>coefx
inpt>expny
inpt>nextNULL
insert(headinpt) 然查找位置插入新链节
printf(请输入项式c项(0 0 结束)\nch)
scanf(f d&x&y)
}
return head
}
输出函数:
void print(PLOY *fun) 输出项式
{
PLOY *printing
int flag0
printingfun>next 正印链节
if(fun>nextNULL) 果函数空印0
{
printf(0\n)
return
}
while(flag0)
{
if(printing>coef>0&&fun>nextprinting)
printf(+) 正数时印+号
if(printing>coef1)果1印系数
else if(printing>coef1)
printf() 果1印号行
else
printf(fprinting>coef)余情况印
if(printing>expn0)
printf(x^dprinting>expn)果指数0印指数项
else if((printing>coef1)||(printing>coef1))
printf(1)
if(printing>nextNULL)
flag1 果现链节没结束
else
printingprinting>next
}
printf(\n)
}
题目功求数结构求编写算法程序模块代码
第四章 设计结果分析
41 程序调试
1 VC环境调试程序进入界面图41示:
图41进入界面
2 降幂输入第项式数图42示:
图42升降幂输入数
3 升幂输入第二项式数图43示:
图43升降幂输入数
4 运行结果正确图44示:
图44 运行结果
42 时间空间复杂度计算
项式A n 项项式B m 项两项式相时m*n 接检验否类项检查方法项(m*n)时间复杂度O(m*n+(m*n))算法基动态链表建成算法空间性均较
43 错误分析
(1) 语句面漏分号者该加分号方加分号者忘记括号通编译时指出改正错误
(2)程序执行合指数相项时出现错误调试发现执行完第次while 循环指c 链表指针e 存储空间中导致法判断while 循环仔细检查发现合时e 指针指结点释放没指定新结点指针e 移位样解决问题
(3)关时间空间复杂度计算太会问学互联网查资料解决问题
44 存足策编程体会
掌握知识限程序编起点难
通编写系统体会系统应该作整体系统具牵发动全身特性某模块错误导致系统模块功丧失甚崩溃时编程时应该模块编写模块实现功样调试时候方便检查程序写完真正结束需断调试断修改程序中错误编程中出现致命错误:程序中定义函数忘记引导致编译出现重错误时仔细排查终找问题
次编程收获:仔细研究函数定义出现定义中形参缺少者实参形参形式符出现错误
总结
系统实现意两高次项式加法法运算设计数结构应节省存储空间程序运行时间应少
通设计实验数结构中链表知识重新温遍够独立设计东西学会设计实验程时基步骤基够条理解决问题
课程设计中数结构中学链表链表具动态生成灵活添加删结点特点节省存储空间正符合题目求仅灵活链表弄清楚关链表作受益非浅
课程设计中遇问题前没发现问题涉方面c 语言基础学数结构知识实中学期学理知识实践联系起开发项目中渐渐成长然知识运熟练相信滴水穿石成长起发现问题提出问题解决问题足处出发寻找新学方
通次课程设计发现足学知识面漏洞希通弥补发现漏洞提高专业知识水设计程中解决问题方法明白学会更效学会耽误太时间学会解决问题般方法:老师学请教助网络等等
感谢学校提供良环境机房学时感谢老师指导帮助感谢高年级哥哥姐姐鼓励逐渐信心感谢帮助学帮助耐心指导信心完成次作业信心希家互相帮助进步更学知识更加丰富编程生涯提升
参考文献
[1] 韩利凯李军 数结构[M] 浙江:浙江学出版社2013
[2] 苏仕华 数结构课程设计[M] 北京:机械工业出版社 2009
[3] 耿国华 数结构C语言描述[M] 北京:高等教育出版社2011
[4] 严蔚敏陈文博 数结构算法教程[M] 北京 清华学出版社2010
附录:程序源代码
#include
#include
typedef struct node{ 定义节点类型
float coef
int expn
struct node * next
}PLOY
void start()户选择界面
{
printf(************************************\n)
printf( 意两高次项式相加相\n)
printf(************************************\n)
printf(请选择操作\n)
printf(1两高次项式相加\n)
printf(2两高次项式相\n)
printf(0退出\n)
}
void insert(PLOY *headPLOY *inpt) 查找位置插入新链节程序
{
PLOY *pre*now
int signal0
prehead pre定义现前链节
if(pre>nextNULL) {pre>nextinpt}
else {nowpre>next
while(signal0) {
if(inpt>expn
{
if(now>nextNULL) {
now>nextinpt
signal1
}
else {
prenow
nowpre>next
}
}
else
if(inpt>expn>now>expn) 果发现现链节插入连接前面
{
inpt>nextnow
pre>nextinpt
signal1
}
else
{
now>coefnow>coef+inpt>coef
signal1
free(inpt) 前链节相等指数
if(now>coef0) {
pre>nextnow>next
free(now)
}
}
}
}
}
PLOY *creat(char ch)输入项式
{
PLOY *head*inpt
float x
int y
head(PLOY *)malloc(sizeof(PLOY)) 创建链表头
head>nextNULL
printf(请输入高次项式c(格式:系数 指数0 0 结束)\nch)
scanf(f d&x&y)
while(x0)
{
inpt(PLOY *)malloc(sizeof(PLOY)) 创建新链节
inpt>coefx
inpt>expny
inpt>nextNULL
insert(headinpt) 然查找位置插入新链节
printf(请输入高次项式c项(0 0 结束)\nch)
scanf(f d&x&y)
}
return head
}
PLOY *addPLOY(PLOY *headPLOY *pre)项式相加
{
PLOY *inpt
int flag0
while(flag0)
{
if(pre>nextNULL)
flag1现指空时跳出循环
else
{
prepre>next
inpt(PLOY *)malloc(sizeof(PLOY))创建新链节
inpt>coefpre>coef
inpt>expnpre>expn
inpt>nextNULL
insert(headinpt)
}否前g(x)链节插入y(x)中
}
return head
}
PLOY *byPLOY(PLOY *head1PLOY *head2)项式相
{
PLOY *inpt*res*pre
int flag0
res(PLOY *)malloc(sizeof(PLOY))创建链表头
res>nextNULL
head1head1>next
prehead2
while(flag0)
{
if(pre>nextNULL)
{
prehead2现指空时跳出循环
head1head1>next
continue
}
if(head1NULL)
{
flag1现指空时跳出循环
continue
}
prepre>next
inpt(PLOY *)malloc(sizeof(PLOY))创建新链节
inpt>coefpre>coef*head1>coef
inpt>expnpre>expn+head1>expn
inpt>nextNULL
insert(resinpt)前g(x)链节插入y(x)中
}
return res
}
void print(PLOY *fun) 输出项式
{
PLOY *printing
int flag0
printingfun>next 正印链节
if(fun>nextNULL) 果函数空印0
{
printf(0\n)
return
}
while(flag0)
{
if(printing>coef>0&&fun>nextprinting)
printf(+) 正数时印+号
if(printing>coef1)果1印系数
else if(printing>coef1)
printf() 果1印号行
else
printf(fprinting>coef)余情况印
if(printing>expn0) printf(x^dprinting>expn)果指数0印指数项
else if((printing>coef1)||(printing>coef1))
printf(1)
if(printing>nextNULL)
flag1 果现链节没结束
else
printingprinting>next
}
printf(\n)
}
void main()
{
PLOY *f*g
int sign1 操作选择
start() 界面函数
while(sign0)
{
scanf(d&sign)
switch(sign)
{
case 0
break退出
case 1
{
printf(选择操作项式相加\n)
fcreat('f') 输入项式f(x)
printf(f(x))
print(f)
gcreat('g') 输入项式g(x)
printf(g(x))
print(g)
printf(F(x)f(x)+g(x))
faddPLOY(fg) 两项式相加
print(f)
sign1复位标志
start()回复户选择界面
break
}
case 2
{
printf(选择操作项式相\n)
fcreat('f') 输入项式f(x)
printf(f(x))
print(f)
gcreat('g')输入项式g(x)
printf(g(x))
print(g)
printf(F(x)f(x)*g(x))
fbyPLOY(fg)两项式相加
print(f)
sign1复位标志
start()回复户选择界面
break
}
default
{
printf(输入误请重新选择操作\n) 选择错误返回选择界面
start()
break
}
}
}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档