数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx

上传人:b****5 文档编号:20413617 上传时间:2023-01-22 格式:DOCX 页数:37 大小:229.48KB
下载 相关 举报
数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx_第1页
第1页 / 共37页
数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx_第2页
第2页 / 共37页
数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx_第3页
第3页 / 共37页
数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx_第4页
第4页 / 共37页
数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx

《数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告一元多项式加减乘除精Word文档下载推荐.docx

5程序类的说明

(1)Ploy结构声明

typedefstruct//顺序表结构声明

{

inta[N];

//记录多项式

intlen;

//记录多项式的长度

}Ploy;

(2)term结构声明

typedefstruct//项的表示

{floatcoef;

//系数

intexpn;

//指数

}term;

(3)LNode结构声明

typedefstructLNode

{termdata;

//term多项式值

structLNode*next;

}LNode,*LinkList;

//两个类型名

typedefLinkListpolynomail;

//用带头结点的有序链表表示多项式

6模块分析

整个流程图如图所示:

图1

6.1创建模块

6.1.1、链式存储结构的一元多项式的创建

程序源代码:

polynomailcreatpolyn(polynomailP,intm)

{

//输入m项的系数和指数,建立表示一元多项式的有序链表P

polynomailr,q,p,s,Q;

inti;

P=(LNode*)malloc(sizeof(LNode));

r=P;

for(i=0;

i<

m;

i++)

{

s=(LNode*)malloc(sizeof(LNode));

printf("

请输入第%d项的系数和指数:

"

i+1);

scanf("

%f%d"

&

s->

data.coef,&

data.expn);

r->

next=s;

r=s;

}

next=NULL;

if(P->

next->

next!

=NULL)

for(q=P->

next;

q!

=NULL/*&

&

q->

=NULL*/;

q=q->

next)//合并同类项

for(p=q->

next,r=q;

p!

=NULL;

if(q->

data.expn==p->

data.expn)

{

q->

data.coef=q->

data.coef+p->

data.coef;

r->

next=p->

Q=p;

p=p->

free(Q);

}

else

{

r=r->

returnP;

}

6.1.2、顺序存储结构一元多项式的创建

voidGetPloy(Ploy*A)

inti,coef,ex,maxe=0;

charch;

请输入每个项的系数及对应的指数,指数为负数时标志输入结束!

\n"

);

N;

A->

a[i]=0;

%d%d"

coef,&

ex);

while(ex>

=0)

{

if(ex>

maxe)

maxe=ex;

if(A->

a[ex]!

{

printf("

你输入的项已经存在,是否更新原数据?

(Y/N)"

cin>

>

ch;

if(ch=='

Y'

||ch=='

y'

{

A->

a[ex]=coef;

printf("

更新成功,请继续输入!

}

else

请继续输入!

;

}

else

A->

scanf("

A->

len=maxe;

return;

}

 

6.2一元多项式的加法

6.2.1链式存储两多项式相加

polynomailaddpolyn(polynomailpa,polynomailpb)

//完成多项式相加运算,即:

Pa=Pa+Pb

polynomails,newp,q,p,r;

intj;

p=pa->

q=pb->

newp=(LNode*)malloc(sizeof(LNode));

r=newp;

while(p&

q)

switch(cmp(p->

data,q->

data))

case-1:

s->

data.coef=p->

s->

data.expn=p->

data.expn;

r->

r=s;

p=p->

break;

case0:

data.coef+q->

if(s->

data.coef!

=0.0)

{

s->

r->

r=s;

}

q=q->

break;

case1:

data.expn=q->

}//switch

}//while

6.2.2顺序存储的多项式相加

voidADD(PloyA,PloyB,Ploy*M)

/*多项式A与多项式B相加,得到多项式M*/

intla=A.len,lb=B.len,i;

M->

len=la>

lb?

la:

lb;

=la&

=lb;

M->

a[i]=A.a[i]+B.a[i];

while(i<

=la)

a[i]=A.a[i];

i++;

=lb)

a[i]=B.a[i];

return;

6.3一元多项式相减

6.3.1链式存储的多项式相减

/*3、两多项式相减*/

polynomailsubpolyn(polynomailpa,polynomailpb)

//完成多项式相减运算,即:

Pa=Pa-Pb

polynomails,newp,q,p,r,Q;

p=p->

case0:

data.coef-q->

{s->

r=s;

data.coef=-q->

q=q->

while(p)

while(q)

if(newp->

=NULL&

newp->

=NULL)//合并同类项

for(q=newp->

next)

Q=p;

free(Q);

else

{r=r->

p=p->

升序1,降序2\n"

选择:

%d"

j);

if(j==1)

arrange1(newp);

else

arrange2(newp);

returnnewp;

6.3.2顺序存储的多项式相减

voidSUB(PloyA,PloyB,Ploy*M)

/*多项式A与多项式B相减(A-B),得到多项式M*/

a[i]=A.a[i]-B.a[i];

=la){M->

i++;

=lb){M->

a[i]=0-B.a[i];

6.4一元多项式相乘

6.4.1链式存储的多项式相乘

polynomailmulpolyn(polynomailpa,polynomailpb)

//完成多项式相乘运算,即:

Pa=Pa*Pb

inti=20,j;

for(p=pa->

for(q=pb->

{

s=(LNode*)malloc(sizeof(LNode));

data.coef*q->

data.expn+q->

arrange1(newp);

arrange2(newp);

for(;

i!

=0;

i--)

for(q=newp->

for(p=q;

p->

if(q->

{

q->

r=p->

p->

free(r);

}

returnnewp;

6.4.2顺序存储多项式相乘

voidMUL(PloyA,PloyB,Ploy*M)

/*多项式A与多项式B相乘,得到多项式M*/

inti,j;

=A.len+B.len+1;

i++)M->

=A.len;

for(j=0;

j<

=B.len;

j++)

M->

a[i+j]+=A.a[i]*B.a[j];

len=A.len+B.len;

6.5一元多项式输出结果按项的指数排序

6.5.1链式由小到大排序

图6.6.1链式升序流程图

voidarrange1(polynomailpa)

{polynomailh=pa,p,q,r;

if(pa==NULL)exit(-2);

for(p=pa;

next);

r=p;

for(h=pa;

h->

=r;

)//大的沉底

{for(p=h;

=r&

if(cmp(p->

data,p->

data)==1)

{q=p->

p->

next=q->

q->

next=q;

//r指向参与比较的最后一个,不断向前移动

}}

6.5.2链式由大到小排序

图6.6.2链式降序流程图

voidarrange2(polynomailpa)

)//小的沉底

6.5.3顺序由大到小排序

voidPrintPloy1(PloyA)//降序输出顺序一元多项式

%dx^%d"

A.a[A.len],A.len);

for(i=A.len-1;

i>

=1;

if(A.a[i]==0);

elseif(A.a[i]==1)printf("

+x^%d"

i);

elseif(A.a[i]==-1)printf("

-x^%d"

if(A.a[i]>

0)

+%dx^%d"

A.a[i],i);

-%dx^%d"

-A.a[i],i);

if(A.a[0]==0);

elseif(A.a[0]>

printf("

+%d"

A.a[0]);

//打印x的0次项

-%d"

-A.a[0]);

6.5.4顺序由小到大排序

voidPrintPloy2(PloyA)//升序输出顺序一元多项式

inti=0;

while(A.a[i]==0)

++i;

if(i==0)

A.a[i]);

if(A.a[i]==1)

x^%d"

elseif(A.a[i]==-1)

-x^%d"

%dx^%d"

for(++i;

elseif(A.a[i]==1)

+x^%d"

elseif(A.a[i]==-1)

-x^%d"

elseif(A.a[i]>

1)

+%dx^%d"

elseif(A.a[i]<

-1)

-%dx^%d"

6.6一元多项式运算系统实现

6.6.1主菜单系统

voidMenu()

************一元多项式的基本运算系统************\n"

1、一元多项式顺序存储的子系统请按1\n"

2、一元多项式链式存储的基本运算请按2\n"

3、退出系统请按3\n"

************************************************\n"

请输入你想进行的操作号:

intn;

n);

while(n!

=1&

n!

=2&

=3)

对不起,你的输入不正确,请重新输入!

switch(n)

case1:

if(n==1)

shunxu();

break;

case2:

if(n==2)

link();

case3:

if(n==3)

已成功退出该系统,谢谢你的使用!

exit(-2);

6.6.2顺序子系统

voidMenushunxu()

********一元多项式顺序存储的基本运算********\n"

1、更新两个多项式一元多项式请按1\n"

2、两多项式相加得一新多项式请按2\n"

3、两多项式相减得一新多项式请按3\n"

4、两多项式相乘得一新多项式请按4\n"

5、退出该子系统,返回主菜单请按5\n"

6、退出该系统请按6\n"

********************************************\n"

voidshunxu()//一元多项式顺序存储的实现

PloyA,B,M;

intn,m;

进入顺序存储一元多项式运算子系统\n"

请输入多项式A:

GetPloy(&

A);

请输入多项式B:

B);

输出两个一元多项式A、B,降幂输出请按1,升幂输出请按2!

cin>

while(m<

1&

m>

m)

你输入的输出新创一元多项式的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1