一元多项式的加法减法乘法的实现.docx
《一元多项式的加法减法乘法的实现.docx》由会员分享,可在线阅读,更多相关《一元多项式的加法减法乘法的实现.docx(22页珍藏版)》请在冰豆网上搜索。
一元多项式的加法减法乘法的实现
福建农林大学计算机与信息学院
课程设计报告
课程名称:
数据结构
课程设计题目:
一元多项式的加法减法乘法的实现
姓名:
系:
软件工程系
专业:
软件工程专业
年级:
2014
学号:
指导教师:
黄思先
职称:
副教授
完成起止日期:
2016.6.5-2016.7.1
2016年07月1日
福建农林大学计算机与信息学院
课程设计结果评定
评价内容
评价指标
评分权值
评定成绩
业务水平
有扎实的基础理论知识和课程知识;能正确设计实验方案;独立进行实验工作;能运用所学课程知识和技能去发现与解决实际问题
0.2
设计质量
实验正确,分析处理科学;设计结果有应用价值;图纸绘制符合国家标准,质量符合要求;计算及测试结果准确;工作中有创新意识;对前人工作有改进或突破,或有独特见解;
0.4
工作量、
工作态度
按期完成规定的任务,工作量饱满,难度较大;工作努力,遵守纪律;工作作风严谨务实
0.2
报告质量
文字通顺,技术用语准确,符号统一,编号齐全,书写工整规范,图表完备、整洁、正确;
0.2
合计
1.0
指导教师签字:
评定日期:
一、问题分析和任务定义……………………………………………1
二、程序设计内容……………………………………………………1
三、程序调试与测试…………………………………………………7
四、实验心得…………………………………………………………9
五、程序编码…………………………………………………………9
一、问题分析及任务定义
顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。
【问题描述和基本要求】设有一元多项式Am(x)和Bn(x).
Am(x)=A0+A1x1+A2x2+A3x3+…+Amxm
Bn(x)=B0+B1x1+B2x2+B3x3+…+Bnxn
请实现求M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M(x)=Am(x)×Bn(x)。
要求:
1)首先判定多项式是否稀疏
2)分别采用顺序和动态存储结构实现;
3)结果M(x)中无重复阶项和无零系数项;
4)要求输出结果的升幂和降幂两种排列情况
二、课程设计的内容
2.1函数
多项式创建函数PolyNode*Creatpoly()
多项式输出函数voidPrin_poly(PolyNode*h)
多项式升序排列函数voidInsortup(PolyNode*h)
多项式降序排列函数voidInsortdown(PolyNode*h)
多项式合并函数voidUnitePoly(PolyNode*h)
多项式相乘函数PolyNode*polymuti(PolyNode*h1,PolyNode*h2)
多项式相加函数PolyNode*addition(PolyNode*ha,PolyNode*hb)
多项式相减函数PolyNode*subduction(PolyNode*ha,PolyNode*hb)
2.2设计各个模块的流程图
(1)main()
(2)voidInsortup(PolyNode*h)
(3)voidInsortdown(PolyNode*h)
(4)PolyNode*polymuti(PolyNode*h1,PolyNode*h2)
(5)voidUnitePoly(PolyNode*h)
(6)PolyNode*addition(PolyNode*ha,PolyNode*hb)
三、程序调试与测试
相加结果
相减结果
相乘结果
四、实验心得
在本次课程设计中,我明白了理论应与实际相结合,上机练习是提高编程能力最有效的办法,这次实验提高了我编写大型程序的能力以及查阅资料并从中获得有效资料的能力。
这次课程设计加深了我对数据结构的进一步理解。
五、程序编码
实验程序:
#include
#include
#include
typedefstructNode
{
intcoef;//系数
intexp;//指数
structNode*next;
}PolyNode;
PolyNode*Creatpoly()//创建多项式的单链表
{
PolyNode*h,*p,*q;
h=(PolyNode*)malloc(sizeof(PolyNode));
p=h;
p->next=NULL;
printf("请输入多项式的系数及其指数ab,当系数输入0时停止输入\n");
q=(PolyNode*)malloc(sizeof(PolyNode));
scanf("%d%d",&q->coef,&q->exp);
while(q->coef!
=0)
{
p->next=q;
p=q;
q=(PolyNode*)malloc(sizeof(PolyNode));
scanf("%d%d",&q->coef,&q->exp);
}
p->next=NULL;
return(h);
}
voidPrin_poly(PolyNode*h)//将多项式输出函数
{
PolyNode*p;
p=h->next;
while(p!
=NULL)
{
if(p->coef>0&&p!
=h->next)
{
if(p->exp>0)
printf("+%dx^%d",p->coef,p->exp);
elseif(p->exp<0)
printf("+%dx^(%d)",p->coef,p->exp);
else
printf("+%d",p->coef);
}
elseif(p->coef<0&&p!
=h->next)
{
if(p->exp>0)
printf("%dx^%d",p->coef,p->exp);
elseif(p->exp<0)
printf("%dx^(%d)",p->coef,p->exp);
else
printf("%d",p->coef);
}
else
{
if(p->exp>0)
printf("%dx^%d",p->coef,p->exp);
elseif(p->exp<0)
printf("%dx^(%d)",p->coef,p->exp);
elseprintf("%d",p->coef);
}
p=p->next;
}
}
voidInsortup(PolyNode*h)//排序函数,使多项式中的各项按X的升幂排列
{
PolyNode*s,*p;
intt,m;
for(p=h->next;p!
=NULL;p=p->next)//类似于冒泡排序
{
for(s=h->next;s->next!
=NULL;s=s->next)
{
if(s->exp>s->next->exp)
{
t=s->exp;
m=s->coef;
s->coef=s->next->coef;
s->exp=s->next->exp;
s->next->coef=m;
s->next->exp=t;
}
}
}
}
voidInsortdown(PolyNode*h)//排序函数,使多项式中的各项按X的降幂排列
{
PolyNode*s,*p;
intt,m;
for(p=h->next;p!
=NULL;p=p->next)//类似于冒泡排序
{
for(s=h->next;s->next!
=NULL;s=s->next)
{
if(s->expnext->exp)
{
t=s->exp;
m=s->coef;
s->coef=s->next->coef;
s->exp=s->next->exp;
s->next->coef=m;
s->next->exp=t;
}
}
}
}
voidUnitePoly(PolyNode*h)//合并同类项
{
PolyNode*p1,*p2,*q1,*q2,*temp;
q1=h;
p1=q1->next;
while(p1!
=NULL)
{
p2=p1->next;
q2=p1;
while(p2!
=NULL)
{
if(p1->exp==p2->exp)
{
p1->coef=p1->coef+p2->coef;
if(p1->coef==0)
{
temp=p2;
q2->next=p2->next;
free(temp);
temp=p1;
q1->next=p1->next;
p1=q1;
free(temp);
break;
}
else
{
temp=p2;
q2->next=p2->next;
p2=p2->next;
free(temp);
}
}
else
{
q2=p2;
p2=p2->next;
}
}
q1=p1;
p1=p1->next;
}
}
PolyNode*polymuti(PolyNode*h1,PolyNode*h2)//多项式相乘
{
PolyNode*h,*p,*p1,*p2,*q;
p1=h1->next;
h=p=(PolyNode*)malloc(sizeof(PolyNode));
p->next=NULL;
while(p1)
{
p2=h2->next;
while(p2)
{
q=(PolyNode*)malloc(sizeof(PolyNode));
q->coef=p1->coef*p2->coef;
q->exp=p1->exp+p2->exp;
p->next=q;
p=q;
p2=p2->next;
}
p1=p1->next;
}
p->next=NULL;
return(h);
}
PolyNode*addition(PolyNode*ha,PolyNode*hb)//一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式ha中,并将多项式hb删除
{
PolyNode*p,*q,*pre,*temp;
intsum;
p=ha->next;
q=hb->next