数据结构多项式运算器实验报告Word文档下载推荐.docx

上传人:b****1 文档编号:5759765 上传时间:2023-05-05 格式:DOCX 页数:20 大小:18.85KB
下载 相关 举报
数据结构多项式运算器实验报告Word文档下载推荐.docx_第1页
第1页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第2页
第2页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第3页
第3页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第4页
第4页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第5页
第5页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第6页
第6页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第7页
第7页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第8页
第8页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第9页
第9页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第10页
第10页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第11页
第11页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第12页
第12页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第13页
第13页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第14页
第14页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第15页
第15页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第16页
第16页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第17页
第17页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第18页
第18页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第19页
第19页 / 共20页
数据结构多项式运算器实验报告Word文档下载推荐.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构多项式运算器实验报告Word文档下载推荐.docx

《数据结构多项式运算器实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构多项式运算器实验报告Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。

数据结构多项式运算器实验报告Word文档下载推荐.docx

L.len=0;

}//InitList

voidDestroyList(LinkList&

Linkp,q;

p=L.head->

next;

while(p){

q=p->

free(p);

p=q;

}

L.tail=L.head;

}//DestroyList

voidInsLast(LinkList&

L,Links){

L.tail->

next=s;

L.tail=s;

L.len++;

}//InsLast

/*====================多项式-ADT====================*/

voidCreatPolyn(LinkList&

terme;

Links;

scanf("

%f,%d"

&

e.coef,&

e.expn);

while(e.coef){

MakeNode(s,e);

InsLast(L,s);

scanf("

}//CreatPolyn

创建比较简单,主要调用了MakeNode()、InsLast()两个函数。

intJudge(intn){

if(n>

19||n<

0){

printf("

存储位置选择错误!

请重新选择0-19.\n"

);

return1;

else

return0;

}//Judge

本来打算用这个函数来检查选择的存储位置是否越界,但操作起来有点困难,最后还是放弃了。

voidPrintPolyn(LinkListL){

Linkp;

p)

NULL\n"

else{

y="

if(p->

data.coef>

if(p->

data.expn==0)

printf("

%f"

p->

data.coef);

else

%fx^%d"

data.coef,p->

data.expn);

p=p->

}

else{

if(p->

printf("

+%f"

+%fx^%d"

}

next)

p=p->

\n"

}//PrintPolyn

PrintPolyn()这个函数费了点事。

主要是要考虑的情况有点多,所以函数就变长了。

先考虑是否非空,还要考虑系数的正负,是否打印加号,而且第一项如果是正的不用打印加号,还要考虑是否越界。

总之就是很复杂了。

voidPrintAll(LinkListS[]){

inti;

for(i=0;

i<

20;

i++){

%d."

i);

PrintPolyn(S[i]);

}//PrintAll

全部打印,来查看存储状态。

还是很有用的。

voidCopyPolyn(LinkListL,LinkList&

S){

Links,p;

e.coef=p->

data.coef;

e.expn=p->

data.expn;

InsLast(S,s);

p=p->

S.tail->

}//CopyPolyn

比较简单,还是调用了MakeNode()、InsLast()两个函数,与创建差不多。

intAddPolyn(LinkList&

L,LinkListP,LinkListQ){

Linka,b,c;

a=P.head->

b=Q.head->

while((a!

=NULL)&

&

(b!

=NULL)){

if(a->

data.expn<

b->

data.expn){

e.coef=a->

e.expn=a->

MakeNode(c,e);

InsLast(L,c);

a=a->

elseif(a->

data.expn>

e.coef=b->

e.expn=b->

b=b->

elseif((a->

data.coef+b->

data.coef)!

=0){

e.coef=a->

InsLast(L,c);

b=b->

elseif((a->

data.coef)==0){

a=a->

a&

!

b){

L.tail->

while(a){

a){

while(b){

e.coef=b->

return0;

}//AddPolyn

主要是分情况讨论,a、b都非空、都空,一空。

还要考虑系数相加为零时的情况。

这个开始时没有成功,当一空一非空时运行不下去,但也检查不出错误来,放到最后,我把while里面的并列的if改成if、elseif,elseif,elseif就成功了,有点想不通。

voidSubtractPolyn(LinkList&

p=Q.head->

p->

data.coef=0-p->

AddPolyn(L,P,Q);

}//SubtractPolyn

有求和了求差就简单了。

先讲一个的系数变成原来的相反数,再相加,再把它变回来。

开始时忘记了p=Q.head->

next,出了点错误。

doubleResultPolyn(LinkListL,floatx){

doubley=0;

y+=(pow(x,p->

data.expn)*p->

returny;

}//ResultPolyn

这个比较简单,不多说了。

voidMultiplyPolyn(LinkList&

Linkl,p,q;

LinkListE,F;

InitList(E);

InitList(F);

inti,j;

p=P.head->

q=Q.head->

Q.len;

for(j=0;

j<

P.len;

j++){

e.coef=p->

data.coef*q->

e.expn=p->

data.expn+q->

MakeNode(l,e);

InsLast(E,l);

AddPolyn(L,E,F);

DestroyList(E);

DestroyList(F);

CopyPolyn(L,F);

if(i!

=Q.len-1)

DestroyList(L);

q=q->

p=P.head->

}//MultiplyPolyn

这个我想的方法是创建两个临时的多项式,拿求积的一个多项式的项一次去乘另一个的项。

结果存在一个临时多项式E,将初始的L复制给F,然后E与F相加复制给L,L再赋值给F,销毁E、L。

不断销毁赋值最后完成。

注意最后一次不要销毁L。

voidPolyn_NFang(LinkList&

L,LinkListP,intn){

LinkListE;

CopyPolyn(P,E);

n;

MultiplyPolyn(L,E,P);

CopyPolyn(L,E);

=n-1)

}//Polyn_Nfang

这个也需要一个临时的多项式,还是不段销毁赋值。

有了求积的基础,这个就简单了。

voidPolyn_NDao(LinkList&

CopyPolyn(P,L);

p=L.head->

q=L.head;

L.len;

data.expn==0){

q->

next=p->

free(p);

p=q->

L.len--;

p->

data.coef=p->

data.coef*p->

data.expn=p->

data.expn-1;

q=q->

}//Polyn_Ndao

这个比较简单,就是对系数和指数的更改。

intPolyn_Ji(LinkList&

L,LinkListP){

data.expn==-1){

printf("

对不起,本程序不能实现对-1次方的积分.请重新选择.\n"

DestroyList(L);

return0;

else

data.coef/(p->

data.expn+1);

++p->

}

}//Polyn_Ji

这个还是对系数和指数的更改,主要如果是-1次方积分出现ln(),这就麻烦了。

故此,对含-1次方的多项式不进行积分。

doublePolyn_Ding(LinkListL,floata,floatb){

doublem,n;

doublee=0;

LinkListP;

InitList(P);

Polyn_Ji(P,L);

m=ResultPolyn(P,a);

n=ResultPolyn(P,b);

e=n-m;

returne;

}//Polyn_Ding

这个很简单,主要调用Polyn_Ji()和ResultPolyn()。

/*====================main====================*/

voidmain(){

intn,m,i,a,b,c;

floatx,e,f;

doubled;

LinkListS[20];

i++)

InitList(S[i]);

printf("

说明:

共有二十个多项式备用位置:

0~19。

\n菜单:

\n0\t退出\n1\t创建多项式\n2\t显示多项式\n3\t复制多项式\n4\t多项式求和\n5\t多项式求差\n6\t多项式求积\n7\t多项式n次方\n8\t多项式n阶导\n9\t多项式不定积分\n10\t多项式定积分\n11\t多项式求值\n12\t多项式项数\n13\t销毁多项式\n14\t查看存储状态\n"

请输入命令:

"

%d"

n);

while(n){

if(n>

16||n<

0)

输入命令错误!

请重新输入.\n"

switch(n){

case1:

1.请选择位置:

scanf("

m);

while(S[m].head->

next){

已占用!

请重新选择存储位置:

scanf("

CreatPolyn(S[m]);

break;

case2:

2.请选择位置:

PrintPolyn(S[m]);

case3:

3.请选择要复制的多项式的位置和复制到的位置:

%d,%d"

a,&

b);

while(S[b].head->

CopyPolyn(S[a],S[b]);

case4:

4.请输入需要求和的两个多项式位置及和放置的位置:

%d,%d,%d"

b,&

c);

while(S[c].head->

AddPolyn(S[c],S[a],S[b]);

case5:

5.请输入需要求差的两个多项式位置及差放置的位置:

SubtractPolyn(S[c],S[a],S[b]);

case6:

6.请输入需要相乘的两个多项式及存储位置:

if(!

S[a].head->

next||!

S[b].head->

多项式位置选择错误!

请重新选择.\n"

break;

MultiplyPolyn(S[c],S[a],S[b]);

case7:

7.请输入多项式的位置,n次方及存储位置:

Polyn_NFang(S[c],S[a],b);

case8:

8.请输入多项式的位置,n阶导及存储位置:

Polyn_NDao(S[c],S[a],b);

case9:

请输入需要做不定积分的多项式及存储位置:

m,&

S[m].head->

while(S[n].head->

Polyn_Ji(S[n],S[m]);

case10:

请输入需要做定积分的位置及从m积到n的值:

%d,%f,%f"

e,&

f);

d=Polyn_Ding(S[a],e,f);

y=%lf\n"

d);

case11:

11.请输入需要求值的多项式的位置及x值:

%d,%f"

x);

d=ResultPolyn(S[m],x);

case12:

12.请输入多项式的位置:

%d号项数为%d\n"

m,S[m].len);

case13:

13.请输入需要销毁的多项式的位置:

DestroyList(S[m]);

case14:

PrintAll(S);

\n0\t退出\n1\t创建多项式\n2\t显示多项式\n3\t复制多项式\n4\t多项式求和\n5\t多项式求差\n6\t多项式求积\n7\t多项式n次方\n8\t多项

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2