数据结构课程设计报告一元稀疏多项式计算器.docx

上传人:b****5 文档编号:4556897 上传时间:2022-12-06 格式:DOCX 页数:9 大小:16.79KB
下载 相关 举报
数据结构课程设计报告一元稀疏多项式计算器.docx_第1页
第1页 / 共9页
数据结构课程设计报告一元稀疏多项式计算器.docx_第2页
第2页 / 共9页
数据结构课程设计报告一元稀疏多项式计算器.docx_第3页
第3页 / 共9页
数据结构课程设计报告一元稀疏多项式计算器.docx_第4页
第4页 / 共9页
数据结构课程设计报告一元稀疏多项式计算器.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告一元稀疏多项式计算器.docx

《数据结构课程设计报告一元稀疏多项式计算器.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告一元稀疏多项式计算器.docx(9页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告一元稀疏多项式计算器.docx

数据结构课程设计报告一元稀疏多项式计算器

课程设计报告

1.需求分析

【问题描述】

设计一个一元稀疏多项式简单计算器.

【基本要求】

一元稀疏多项式基本功能包括:

1)输入并建立多项式;

2)输出多项式,输出形式为整数序列:

n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;

3)多项式a和b相加,建立多项式a+b;

4)多项式a和b相减,建立多项式a-b;

【测试数据】

1)(2x+5x8-3.1x11)+(11x9-5x8+7)=(-3.1x11+11x8+2x+7)

2)(-1.2x9+6x-3+4.4x2-x)-(7.8x15+4.4x2-6x-3)=(-7.8x15-1.2x9+12x-3-x)

3)(x5+x4+x3+x2+x+1)-(-x4-x3)=(x5+x2+x+1)

4)(x3+x)-(-x3-x)=0

5)(x100+x)+(x200+x100)=(x200+2x100+x)

6)(x3+x2+x)+0=x3+x2+x

7)互换上述测试数据中的前后两个多项式.

2.概要设计

ADTPolynomial{

数据对象:

D={ai|ai?

TermSet,i=1,2,…,m,m≥0,TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}

数据对象:

R1={|ai,ai-1?

D,且ai-1中的指数值小于ai中的指数,i=2,…,m}

基本操作:

CreatePolyn(void)

Result:

指数由大到小输入m项的系数和指数,建立一元多项式p

PrintPoly(LNodeHead)

Result:

输出一元多项式

AddPoly(LNodeH1,LNodeH2)

Condition:

一元多项式pa,pb已存在

Result:

完成多项式相加运算,即pa=pa+pb,并销毁一元多项式pb.

SubtractPoly(LNodeH1,LNodeH2)

Condition:

一元多项式pa,pb已存在

Result:

完成多项式相减运算,即pa=pa-pb,并销毁一元多项式pb.

}ADTPolynomial

3.详细设计

【数据类型定义】

typedefstructnode{

intexpn,coef;

structnode*next;

}Nodetype,*LNode;//定义结点类型

【函数原型定义】

LNodeCreatePolyn(void);

VoidPrintPoly(LNodeHead);

LNodeAddPolyn(LNodeH1,LNodeH2);

LNodeSubPolyn(LNodeH1,LNodeH2);

【核心算法描述】

CreatePolyn()

LNodeCreatePolyn(void)//创建表达式

{

LNodeHead,p,pre,pree;

intx,z;

Head=(LNode)malloc(sizeof(Nodetype));

Head->next=NULL;

printf("当你输入的系数为0时,输入将结束!

\n");

printf("请输入第一项系数:

");

scanf("%d",&x);

if(x==0)

{

p=(LNode)malloc(sizeof(LNode));

p->coef=0;

p->expn=0;

Head->next=p;

p->next=NULL;

}

while(x!

=0)

{

printf("请输入指数:

");

scanf("%d",&z);

p=(LNode)malloc(sizeof(Nodetype));

p->coef=x;

p->expn=z;

pre=Head;

while(pre->next&&pre->next->expn>=z)//原有项指数大于插入项

{

pree=pre;

pre=pre->next;

}

p->next=pre->next;//插入项

pre->next=p;

if(pre->expn==p->expn)//原有项指数等于插入项

{

pre->coef+=p->coef;

pre->next=p->next;

free(p);

}

if(pre->coef==0)//系数为0

{

pree->next=pre->next;

free(pre);

}

printf("请输入系数:

");

scanf("%d",&x);

}

if(Head->next==NULL)//多项式空

{

pre=(LNode)malloc(sizeof(LNode));

pre->coef=0;

pre->expn=0;

pre->next=Head->next;

Head->next=pre;

}

returnHead;

}

PrintPolyn()

voidPrintPolyn(LNodeHead)//输出表达式

{

LNodepre;

pre=Head->next;

if(pre->expn==0)//指数为0

printf("%d",pre->coef);

else

printf("%d*X(%d)",pre->coef,pre->expn);

pre=pre->next;

while(pre)//系数不为0

{

if(pre->expn==0)//指数为0

{

if(pre->coef>0)

printf("+%d",pre->coef);

elseif(pre->coef<0)

printf("%d",pre->coef);

}

else//指数不为0

{

if(pre->coef>0)

printf("+%d*X(%d)",pre->coef,pre->expn);

elseif(pre->coef<0)

printf("%d*X(%d)",pre->coef,pre->expn);

}

pre=pre->next;//遍历每一项

}

printf("\n");

}

AddPolyn()

LNodeAddPolyn(LNodeH1,LNodeH2)//表达式相加

{

LNodeH3,p1,p2,p3,pre;//p1第一个多项式的项,prep的前一项

H3=(LNode)malloc(sizeof(LNode));

H3->next=NULL;//建立一个空的多项式

p1=H1->next;//第一个多项式的第一项

p2=H2->next;

pre=H3;//

while(p1&&p2)

{

if(p1->expn>p2->expn)//第一个多项式的项的指数大于第二个的

{

p3=(LNode)malloc(sizeof(LNode));

p3->expn=p1->expn;

p3->coef=p1->coef;

p3->next=pre->next;

pre->next=p3;

pre=p3;

p1=p1->next;

}

elseif(p1->expnexpn)//第一个多项式的项的指数小于第二个的

{

p3=(LNode)malloc(sizeof(LNode));

p3->expn=p2->expn;

p3->coef=p2->coef;

p3->next=pre->next;

pre->next=p3;

pre=p3;

p2=p2->next;

}

elseif(p1->coef+p2->coef!

=0)//相加为不0,指数相同系数相加

{

p3=(LNode)malloc(sizeof(LNode));

p3->expn=p1->expn;

p3->coef=p1->coef+p2->coef;

p3->next=pre->next;

pre->next=p3;

pre=p3;

p1=p1->next;

p2=p2->next;

}

else//相加为0

{

p1=p1->next;

p2=p2->next;

}

}

while(p2)

{

p3=(LNode)malloc(sizeof(LNode));

p3->expn=p2->expn;

p3->coef=p2->coef;

p3->next=pre->next;

pre->next=p3;

pre=p3;

p2=p2->next;

}

while(p1)

{

p3=(LNode)malloc(sizeof(LNode));

p3->expn=p1->expn;

p3->coef=p1->coef;

p3->next=pre->next;

pre->next=p3;

pre=p3;

p1=p1->next;

}

returnH3;

}

Substract()

LNodeSubstractPolyn(LNodeH1,LNodeH2)//表达式相减

{//让系数变负,代入加法

LNodeH3,pre;

pre=H2->next;

while(pre)

{

pre->coef=-pre->coef;

pre=pre->next;

}

H3=AddPolyn(H1,H2);

pre=H2->next;

while(pre)

{

pre->coef=-pre->coef;

pre=pre->next;

}

returnH3;

}

【函数调用关系】

main()调用CreatePoly(),PrintPoly(),AddPoly(),scanf()函数输入,printf()函数输出。

4.运行记录

5.总结

首次做课程设计的题目,小激动,小紧张,编程的基础比较差,所以把第二章学习的内容仔仔细细的看完了一遍,但还不够,在老师问我问题时,我才发现我对next的理解出错了,对for语句也不太熟悉,所以找了好几个同学请教,终于理解多了一层,不容易啊。

下次要是还有机会做课程设计的话,一定要给自己多些时间,来把程序研究透,这跟实习一样,对编程技能很有提高效果,在过程中碰到不理解或不熟悉的地方就会翻课本,找课件,查资料,也学会了一些以前很不熟悉的函数的使用与作用。

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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