课程设计报告.docx
- 文档编号:2241890
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:28
- 大小:149.18KB
课程设计报告.docx
《课程设计报告.docx》由会员分享,可在线阅读,更多相关《课程设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
课程设计报告
课程设计报告书
班级:
2012级计算机科学与技术姓名:
章金平学号:
02124007
完成日期:
2014年9月
一:
课程设计题目
一元多项式计算
二:
课程设计内容
1、能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加,并将结果输出。
2、将任意给出的n次多项式建成单链表结构,结点的结构为系数、指数、指针,然后实现多项式求和运算。
3、良好的用户界面,对于错误的输入,要能给出信息提示。
三:
进度安排
1、2014年9月13日,自由分组,布置任务
2、2014年9月14日,小组成员相互讨论,分工合作,查阅资料,编写源程序并调试
3、2014年9月15-19日,完成模块联编并进行测试
4、2014年9月20-21日,成果验收,完成设计报告
四:
基本要求
1、用C语言实现一元多项式计算
2、利用单链表实现一元多项式的计算存储
3、完成设计任务并书写课程设计报告
目录
一需求分析………………………………1
二概要设计………………………………2
三详细设计………………………………3
四调试分析………………………………4
五用户使用说明…………………………5
六测试结果………………………………6
七课程设计总结…………………………7
八附录……………………………………8
1.需求分析
(a)该程序能实现任意输入两个一元多项式,无论一元多项式的指数如何排列和是否有同类项,都能先将其化简排序后,在实现两个多项式相加的功能。
(b)在这里我们运用单链表来存放一元多项式,先用typedefstruct定义了一个新类型datatype,再typedefstructNode来申明结点,在其中定义了datatypedata_1,data_1可以访问一元多项式系数和指数。
structNode*next指向下一个结点的指针,用尾插法建立一元多项式的单链表。
输入一元多项式时系数和指数用0作为终止符。
(c)通过选择排序,将单链表中的多项式指数由高到低排序,再将单链表中的多项式指数相同的合并同类项,得到化简后的一元多项式。
最后调用pc=add_list(pa,pb);实现两个多项式相加。
2.概要设计
1、本程序中用到的所有抽象数据类型
typedefstruct
{
intcff;//系数
intexp;//指数
}datatype;
typedefstructNode
{
datatypedata_1;//定义datatype的一个变量
structNode*next;
}listnode;//自定义struct数据类型为linklist,而不是定义linklist,所以不能在这里定义pa,pb
typedeflistnode*linklist;
linklistcreate_list()
voidSelect_sort(linklistl)
voidmerge_list(linklistl)
linklistadd_list(linklistl_fir,linklistl_sec)
voidresult_out(linklistp)
voidfree_list(linklistp)
系数cff
指数exp
下一个结点指针next
2、存储结构
3、模块划分
(a)主程序(b)建立单链表(c)输入一元多项式,排序合并(d)两个多项式相加
A(x)=5*x^4-3*x^3+3*x^2+1*x^1;B(x)=6*x^5+4*x^3-3*x^2+1*x^1;
相加后的一元多项式为:
C(x)=6*x^5+5*x^4+1*x^3+2*x^1;
4、主程序的流程
(a)请输入第一个多项式各项系数和指数<以数字0结束>;
(b)排序化简后的第一个多项式;
(c)请输入第二个多项式各项系数和指数<以数字0结束>;
(d)排序化简后的第二个多项式;
(e)两个一元多项式相加的结果。
3.详细设计
1、根据一元多项式相加法则,对于任意两个多项式所有指数相同的,对应系数相加,若系数相加后不为0,则构成一元多项式其中一项。
对于指数不同的,则分别复制到单链表中。
2、系统流程图
4.调试分析
(1)通过多次程序调试,我们很快的发现程序并不完善,对异常处理不到位。
当程序采用指数升幂排序时,该程序就不能实现两个多项式相加操作后指数的排序问题。
于是我们分析问题,采用了指数降幂排序,很快解决了问题。
(2)在这里我们用到了选择排序:
时间复杂度O(n*n);空间复杂度O
(1)
(3)我们每个小组在一起查询资料,讨论问题,通过分工合作来完成这次任务。
在这里我们掌握了单链表的基本操作和一些排序算法,对大二和大一学习的知识有了很好的巩固。
同时我们还学会了用C语言编程,进一步加深自己对C语言知识理解,并且将知识与实践相结合。
5.用户使用说明
6.测试结果
7.附录
#include
#include
typedefstruct
{
intcff;//系数
intexp;//指数
}datatype;
typedefstructNode
{
datatypedata_1;//定义datatype的一个变量
structNode*next;
}listnode;//自定义struct数据类型为linklist,而不是定义linklist,所以不能在这里定义pa,pb
typedeflistnode*linklist;
linklistcreate_list()//创建带头结点的链表,返回头结点,尾插法
{
linklisthead=(linklist)malloc(sizeof(listnode));
linklistp,r;
intxs;
intzs;
r=head;
while(scanf("%d%d",&xs,&zs)&&xs!
=0&&zs!
=0)//系数和指数输入00表示结束
{
p=(linklist)malloc(sizeof(listnode));
p->data_1.cff=xs;
p->data_1.exp=zs;
r->next=p;
r=p;
}
r->next=NULL;
return(head);
}
voidSelect_sort(linklistl)//选择排序,将单链表中的多项式指数由高到低排序
{
linklistp,r,q;
r=l->next;//指向单链表的第一个结点
p=(linklist)malloc(sizeof(listnode));
while(r!
=NULL)
{
q=r->next;
while(q!
=NULL)
{
if(q->data_1.exp>r->data_1.exp)
{
p->data_1.cff=r->data_1.cff;
p->data_1.exp=r->data_1.exp;
r->data_1.cff=q->data_1.cff;
r->data_1.exp=q->data_1.exp;
q->data_1.cff=p->data_1.cff;
q->data_1.exp=p->data_1.exp;
}
q=q->next;
}
r=r->next;
}
}
voidmerge_list(linklistl)//将单链表中的多项式指数相同的合并同类项,注意单链表中的多项式必须已经按指数由高到低排好序
{
linklistr,q,p;
r=l;
while(r!
=NULL&&r->next!
=NULL)
{
q=r->next;
while(q->next!
=NULL&&q!
=NULL&&(q->data_1.exp==q->next->data_1.exp))
{
p=q->next;
q->data_1.cff+=p->data_1.cff;
q->next=p->next;
free(p);
}
r=r->next;
}
r=l;//将l重新赋给r,查找多项式指数相同的合并同类项后,系数为0的项
while(r!
=NULL&&r->next!
=NULL)
{
if(r->next->data_1.cff==0)
{
q=r->next;
r->next=q->next;
free(q);
}
elser=r->next;
}
}
linklistadd_list(linklistl_fir,linklistl_sec)//将单链表一中的多项式与单链表二中的多项式相加后并将结果存放在单链表三中
{
linklisthead=(linklist)malloc(sizeof(listnode));
linklistp,q,r,s;
r=head;
p=l_fir->next;
q=l_sec->next;
while(p!
=NULL&&q!
=NULL)//单链表一和单链表二中均有数据
{
s=(linklist)malloc(sizeof(listnode));
if(p->data_1.exp==q->data_1.exp)
{
s->data_1.cff=p->data_1.cff+q->data_1.cff;
s->data_1.exp=p->data_1.exp;
p=p->next;
q=q->next;
}
elseif(p->data_1.exp>q->data_1.exp)
{
s->data_1.cff=p->data_1.cff;
s->data_1.exp=p->data_1.exp;
p=p->next;
}
elseif(p->data_1.exp
{
s->data_1.cff=q->data_1.cff;
s->data_1.exp=q->data_1.exp;
q=q->next;
}
r->next=s;
r=s;
}
while(p!
=NULL)//仅单链表一中有数据
{
s=(linklist)malloc(sizeof(listnode));
s->data_1.cff=p->data_1.cff;
s->data_1.exp=p->data_1.exp;
p=p->next;
r->next=s;
r=s;
}
while(q!
=NULL)//仅单链表二中有数据
{
s=(linklist)malloc(sizeof(listnode));
s->data_1.cff=q->data_1.cff;
s->data_1.exp=q->data_1.exp;
q=q->next;
r->next=s;
r=s;
}
r->next=NULL;
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告