课程设计报告
设计名称: 数结构课程设计
设计题目: 两高次项式加法法运算
学生学号:
专业班级: 软件工程
学生姓名:
学生成绩:
指导教师(职称): (副教授)
课题工作时间: 20XX616 20XX627
软件学院课程设计务书
学生姓名
学号
专业班级
软件工程
设计题目
设计程序已实现意两高次项式加法法运算
容概: Microsoft Visual C++ 60环境运C语言编写运循环结构指针链表插入删运算等方法编写程序次调试纠错具体项式试验运行程序出结果
文献资料:
[1]尹宝林C育出版社20程序设计思想方法[M]机械工业出版社2011
[2]黄明C语言课程设计[M]电子工业出版社2009
[3]谭浩强C程序设计[M]清华学出版社2012
[4]柴欣CC++程序设计[M] 河北学出版社2009
[5]余苏宁王明福C++程序设计[M] 北京:高等教育出版社2010
设计求:
程序实现功:
1输入建立项式
2输出项式
3两项式相加输出项式
4两项式相输出积项式
工作期限:设计工作20XX年6月16日20XX年6月27日止
指导教师: 院长:
日 期:20XX年6月16日
软件学院课程设计进度安排表
学生姓名: 学号: 专业: 软件工程 班级:
起止日期
容
备注
6月16日~ 6月 17日
务书收集阅读整理相关参考文献进行纳概括总结完成项目务背景介绍部分文字容
6月18日~11月20日
系统功设计模块设计系统体系结构构建
6月21日~6月24日
功模块编码实现系统功模块调试维护
6月25日~6月26日
系统功集成系统调试测试模板求撰写课程设计项目设计报告
6月27日
课程设计项目设计分组答辩提交课程设计项目设计报告相关文档进行成绩评定
指导教师签名:
20XX年6月16日
成绩评定表
学生姓名: 学号: 专业: 软件工程 班级:
类
合计
分值
项分值
评分标准
实际分
合计分
时表现
10
10
时参加设计指导违反纪律情况
完成情况
30
20
设计务书求完成全部务完整演示设计容符合求
10
设计容进行详细完整介绍指导教师提出问题进行正确回答
报告质量
35
10
报告文字通容翔实述充分完整立正确结构严谨合理报告字数符合相关求工整规范整齐划
5
课题背景介绍清楚综述分析充分
5
设计方案合理行证严谨逻辑性强具说服力
5
符号统图表完备符合规范求
5
整设计程进行全面总结出价值结结果
5
参考文献数量2篇格式符合求正文中正确引
答辩情况
25
10
规定时间设计容进行阐述言简意明重点突出点正确条理清晰
15
规定时间准确完整流利回答教师提出问题
总评成绩: 分
指导教师: (签字)
日期:20XX 年6月 27 日
摘
摘:次课程设计中选择题目元项式加法法实现运C语言编写Microsoft Visual C++ 60环境运行元项式计算C语言设计元项式简单计算器够实现指数升序排列建立输出项式够完成两项式相加相减相运算结果输入功通设计元项式初步掌握软件开发程问题分析系统设计程序编码测试等基方法技提高综合运学理知识方法独立分析解决问题力加深常数结构理解强化逻辑思维力动手力巩固良编程惯掌握工程软件设计基方法续课程学坚实基础
关键词:C语言指针链表循环元项式
目录
摘 II
第章 课题背景 1
11 设计课题 1
12 课题背景意义 1
13课题目求 1
第二章 设计简介设计方案 2
21 设计简介 2
22设计方案 2
第三章 详细设计 4
31 存储结构 4
32设计思路分析 4
33详细设计 5
第四章 设计结果分析 9
41 测试数 9
42运行程结果 9
总结 13
参考文献 14
附录 程序源代码 15
第章 课题背景
11 设计课题
设计程序实现意两高次项式相加相运算
12 课题背景意义
数结构门实践性计算机课程想学门课程仅需掌握理知识加强机实践通次课程设计求掌握较程序设计方法相应数结构选择应算法设计实现性分析等方面中加强课程基容理解时设计方法机操作等技科学作风方面受较系统严格锻炼次课程设计次锻炼力机会
13课题目求
课程设计实践性教学中重环节某课程基础涉课程相关方面门独立课程外特殊课程课程设计学学课程更全面学应理解掌握课程相关知识数结构门重专业基础课计算机理应核心基础课程数结构课程设计求数结构逻辑特性物理表示数结构选择应算法设计实现等方面加深课程基容理解时程序设计方法机操作等基技科学作风方面受较系统严格训练
第二章 设计简介设计方案
21 设计简介
1 运动态链表结构实现元项式加法减法法运算分模块:输入模块输出模块(升幂)数处理模块(项式加减)程序模块
2 程序执行程中加入汉字提示符者清楚明白操作该程序运行程序时起简洁序操作简单明
3 程序执行时命令:
①创建两元项式
②输入第元项式项数
③次输入元项式系数指数
④相方式输入第二元项式
⑤数处理
⑥输出结果
22设计方案
1数结构设计
节省存储空间存储项式中系数非零项程序链式存储结构
2算法设计设计总体划分3模块
函数模块程序入口实现函数调
头文件模块定义类结构体
函数模块数处理实现功
3基操作:
CreatPolyn(&Pm)
操作结果:输入m项系数指数建立元项式P
DestroyPolyn(&P)初始条件:元项式P已存
操作结果:销毁元项式P
PrintPolyn(P)初始条件:元项式P已存
操作结果:印输出元项式P
ValuePolyn(Polyn headint x)
初始条件:元项式P已存
操作结果:输入x值计算返回项式值
AddPolyn(&Pa&Pb)
初始条件:元项式PaPb已存
操作结果:完成项式相加运算:PaPa+Pb销毁元项式PbSubtractPolyn(&Pa&Pb)
初始条件:元项式PaPb已存
操作结果:完成项式相减运算:PaPaPb销毁元项式PbMultiplyPolyn(&Pa&Pb)
初始条件:元项式PaPb已存
操作结果:完成项式相运算:PaPa×Pb销毁元项式Pb}ADT Polynomia
}
第三章 详细设计
31 存储结构
建立元项式计算机链表实现节省存储空间存储项式中系数非零项链表中结点存放项式系数非零项包含三域分存放该项系数指数指项式项结点指针创建元项式链表元项式运算中会出现种情况进行分析实现元项式相加相减操作
存储结构定义:
公头文件DS0h #include
#include
#include
带头结点单链表存储结构:
typedef struct Polynomial{
float coef
int expn
struct Polynomial *next
}*PolynPolynomial
32设计思路分析
解决项式相加相减相必须项式必须首先建立两项式里采链表方式存储链表结点结构体定义:
系数coef
指数expn
指针域next
运尾插法建立两单链表单链表Polyn pPolyn h分表示元项式aba+b求运算等单链表插入问题(Polyn p中结点插入单链表Polyn h中)项式结点须生成
实现处理设pq2分指单链表polyapolyb前项较pq2结点指数
列运算规:
(1)p>expn
(2)p>expnq2>expn两结点中系数相加0时修改结点q2系数
(3)p>expn>q2>expn结点p指结点应项式中项结点p插入结点q2前令指针p原链表移
建立元项式指数降序排列输出项式元项式输入存储存中够完成两项式运算输出结果简运行流程图图31
5
4
3
2
1
菜单
choose?
Printpoly()
建立项式
Addpoly()
相加
SubtractPolyn
相减
******退出******
MultiplyPolyn
相
图31 简运行流程图
结 束
开 始
33详细设计
函数
int main()
{
int mnflag0
float x
Polyn pa0pb0pcpdpepf
}
void PrintPolyn(Polyn P) 输出项式ab
Polyn AddPolyn(Polyn paPolyn pb) 求解建立项式a+b返回头指针
Polyn SubtractPolyn(Polyn paPolyn pb) 求解建立项式ab返回头指针
Polyn MultiplyPolyn(Polyn paPolyn pb) 求解建立项式a*b返回头指针
基算法
项式输入
(1)功:进行运算项式输入输出
(2)数流入:输入项式系数指数
开始
申请结点空间
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
num
输入项式项数
指针数组temp[i]中(i1~num)
输入项式项系数 x 指数 y
输出已输入项式
合类项
结束
否
否输入正确
图32 输入
(3)数流出:合类项项式
(4)程序流程图:项式输入流程图图32示
(5) 代码段:
建立头指针head项数m元项式 建立新结点接收数 调Insert函数插入结点
Polyn CreatePolyn(Polyn headint m){
int i
Polyn p
phead(Polyn)malloc(sizeof(struct Polynomial))
head>nextNULL
for(i0i
p(Polyn)malloc(sizeof(struct Polynomial))
printf(请输入第d项系数指数i+1)
scanf(f d&p>coef&p>expn)
Insert(phead) 调Insert函数插入结点
}
return head
}
项式加法
(1)功:两项式相加
(2)数流入:输入函数
(3)数流出:项式相加结果
(4)测试点:两项式否空空提示重新输入否进行运算
(5)代码段:
Polyn AddPolyn(Polyn paPolyn pb) 求解建立项式a+b返回头指针
{ Polyn qapa>next
Polyn qbpb>next
Polyn headchcqc
hc(Polyn)malloc(sizeof(struct Polynomial)) 建立头结点
hc>nextNULL
headchc
while(qa||qb)
{ qc(Polyn)malloc(sizeof(struct Polynomial))
switch(compare(qaqb))
略四case语句
}switch
if(qc>coef0)
{
qc>nexthc>next
hc>nextqc
hcqc
}
else free(qc)相加系数0时释放该结点
}while
return headc
}AddPolyn
项式法
(1)功:两项式相加
(2)数流入:输入函数
(3)数流出:项式相加结果
(4)测试点:两项式否空空提示重新输入否进行运算
(5)代码段:
Polyn MultiplyPolyn(Polyn paPolyn pb) 求解建立项式a*b返回头指针
{ Polyn hfpf
Polyn qapa>next
Polyn qbpb>next
hf(Polyn)malloc(sizeof(struct Polynomial)) 建立头结点
hf>nextNULL
for(qaqaqa>next)
{ for(qbpb>nextqbqbqb>next)
{ pf(Polyn)malloc(sizeof(struct Polynomial))
pf>coefqa>coef*qb>coef
pf>expnqa>expn+qb>expn
Insert(pfhf) 调Insert函数合指数相项
}
}
return hf
}MultiplyPolyn
第四章 设计结果分析
41 测试数
测试项式项式中项数两项三项四项项数系数指数正负测试结果正确误
1 (x3+2x4+5x7)(6x8+9x11+10x12)
2 (11x2+5x3+8x6+57x9)+(4x6+21x4+2x10)(2x10+57x9+12x6+21x4+5x3+11x2)
3 (8x10+5x8+2x2+4x8)*(2x10+6x7+8x2+5x9+38x4)(16x20+40x19+18x18+93x17+54x15+304x14+1022x12+10x11+72x10+12x9+76x6+16x4)
42运行程结果
开始界面提示开始输入数建立项式图41示
图41 开始界面
输入数输入项式系数指数图42示
图42 输入数
回车键出现菜单界面户选择中意功执行图43示
图43 菜单界面
选择功1输出项式操作结果图示图44示
图44 输出项式
选择功2两项式相加输出项式图45示
图45 项式相加
选择功3两项式相输出积项式图46示
图46 项式相
选择功4意键退出程序图47示
图47 退出程序
总结
次课程设计学期学数结构知识巩固应C++更进步解然设计程中遇困难感觉收获挺扩充知识点 通周课程设计意识学方法重性学中学会动学会学什东西指细心观察问什动手查查会问题抬头google样学手东西会更
参考文献
[1]尹宝林C育出版社20程序设计思想方法[M]机械工业出版社2011
[2]黄明C语言课程设计[M]电子工业出版社2009
[3]谭浩强C程序设计[M]清华学出版社2012
[4]柴欣CC++程序设计[M] 河北学出版社2009
[5]余苏宁王明福C++程序设计[M] 北京:高等教育出版社2010
附录 程序源代码
#include
#include
typedef struct Polynomial
{ float coef
int expn
struct Polynomial *next
}*PolynPolynomial Polyn结点指针类型
void Insert(Polyn pPolyn h)
{ if(p>coef0) free(p) 系数0话释放结点
else
{ Polyn q1q2
q1hq2h>next
while(q2&&p>expn
{ q1q2
q2q2>next
}
if(q2&&p>expnq2>expn) 指数相相合
{ q2>coef+p>coef
free(p)
if(q2>coef) 系数0话释放结点
{ q1>nextq2>next
free(q2)
}
}
else 指数新时结点插入
{ p>nextq2
q1>nextp
}
}
}Insert
Polyn CreatePolyn(Polyn headint m) 建立头指针head项数m元项式
{ int i
Polyn p
phead(Polyn)malloc(sizeof(struct Polynomial))
head>nextNULL
for(i0i
printf(请输入第d项系数指数i+1)
scanf(f d&p>coef&p>expn)
Insert(phead) 调Insert函数插入结点
}
return head
}CreatePolyn
void DestroyPolyn(Polyn p) 销毁项式p
{ Polyn q1q2
q1p>next
q2q1>next
while(q1>next)
{ free(q1)
q1q2 指针移
q2q2>next
}
}
void PrintPolyn(Polyn P)
{ Polyn qP>next
int flag1 项数计数器
if(q) 项式空输出0
{ putchar('0')
printf(\n)
return
}
while (q)
{ if(q>coef>0&&flag1) putchar('+') 系数0第项
if(q>coef1&&q>coef1) 系数非11普通情况
{ printf(gq>coef)
if(q>expn1) putchar('X')
else if(q>expn) printf(X^dq>expn)
}
else
{ if(q>coef1){
if(q>expn) putchar('1')
else if(q>expn1) putchar('X')
else printf(X^dq>expn)
}
if(q>coef1)
{ if(q>expn) printf(1)
else if(q>expn1) printf(X)
else printf(X^dq>expn)
}
}
qq>next
flag++
}while
printf(\n)
}PrintPolyn
int compare(Polyn aPolyn b)
{ if(a&&b)
{ if(b||a>expn>b>expn) return 1
else if(a||a>expnexpn) return 1
else return 0
}
else if(a&&b) return 1 a项式已空b项式非空
else return 1 b项式已空a项式非空
}compare
Polyn AddPolyn(Polyn paPolyn pb) 求解建立项式a+b返回头指针
{ Polyn qapa>next
Polyn qbpb>next
Polyn headchcqc
hc(Polyn)malloc(sizeof(struct Polynomial)) 建立头结点
hc>nextNULL
headchc
while(qa||qb)
{ qc(Polyn)malloc(sizeof(struct Polynomial))
switch(compare(qaqb))
{ case 1
{ qc>coefqa>coef
qc>expnqa>expn
qaqa>next
break
}
case 0
{
qc>coefqa>coef+qb>coef
qc>expnqa>expn
qaqa>next
qbqb>next
break
}
case 1
{
qc>coefqb>coef
qc>expnqb>expn
qbqb>next
break
}
}switch
if(qc>coef0)
{
qc>nexthc>next
hc>nextqc
hcqc
}
else free(qc)相加系数0时释放该结点
}while
return headc
}AddPolyn
Polyn MultiplyPolyn(Polyn paPolyn pb) 求解建立项式a*b返回头指针
{ Polyn hfpf
Polyn qapa>next
Polyn qbpb>next
hf(Polyn)malloc(sizeof(struct Polynomial)) 建立头结点
hf>nextNULL
for(qaqaqa>next)
{ for(qbpb>nextqbqbqb>next)
{ pf(Polyn)malloc(sizeof(struct Polynomial))
pf>coefqa>coef*qb>coef
pf>expnqa>expn+qb>expn
Insert(pfhf) 调Insert函数合指数相项
}
}
return hf
}MultiplyPolyn
int main()
{
int mnflag0
float x
Polyn pa0pb0pcpdpepf 定义式头指针papb前赋初值NULL
printf(请输入a项数)
scanf(d&m)
paCreatePolyn(pam) 建立项式a
printf(请输入b项数)
scanf(d&n)
pbCreatePolyn(pbn) 建立项式b
输出菜单
printf(********************操作提示**************************\n)
printf(\t 1输出项式ab\n)
printf(\t 2建立项式a+b\n)
printf(\t 3建立项式a*b\n)
printf(\t 4退出\n*******************************************\n)
for(flag0)
{
printf(执行操作)
scanf(d&flag)
if(flag1){
printf(项式a:)PrintPolyn(pa)
printf(项式b:)PrintPolyn(pb)continue
}
if(flag2)
{
pcAddPolyn(papb)
printf(项式a+b:)PrintPolyn(pc)
DestroyPolyn(pc)continue
}
if(flag3){
pfMultiplyPolyn(papb)
printf(项式a*b:)PrintPolyn(pf)
DestroyPolyn(pf)continue
}
if(flag4) break
if(flag<1||flag>8) printf(Error\n)continue
}for
DestroyPolyn(pa)
DestroyPolyn(pb)
return 0 }
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档