一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx

上传人:b****8 文档编号:22450331 上传时间:2023-02-04 格式:DOCX 页数:16 大小:349.01KB
下载 相关 举报
一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx_第1页
第1页 / 共16页
一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx_第2页
第2页 / 共16页
一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx_第3页
第3页 / 共16页
一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx_第4页
第4页 / 共16页
一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx

《一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。

一元稀疏多项式实验报告罗忠霖Word格式文档下载.docx

(1)输入并建立多项式;

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

n,c1,e1,c2,,en,期中n为多项式的项数,ci和ei分别为第i

项的系数和指数,系列按指数的降序排列;

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

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

3.程序代码

#include<

stdio.h>

stdlib.h>

malloc.h>

typedefstructlist

{

floatxishu;

//某项的系数

intzhishu;

//某项的指数

structlist*next;

}*linklist;

voidcaidan(void);

voidxianshi(linklist);

linklistdx_built(int);

linklistdx_jia(linklist,linklist);

linklistdx_jian(linklist,linklist);

linklistsort(linklisthead);

main()

inti,a,b;

linklistpa,pb,pc1,pc2;

caidan();

do

{

printf("

\n"

);

请选择你想要的功能0--4\n"

scanf("

%d"

&

i);

switch(i)

{

case1:

printf("

请输入多项式A的项数:

a);

pa=dx_built(a);

pa=sort(pa);

请输入多项式B的项数:

b);

pb=dx_built(b);

pb=sort(pb);

break;

case2:

多项式A与B的和为:

"

pc1=dx_jia(pa,pb);

xianshi(pc1);

case3:

多项式A与B的差为:

pc2=dx_jian(pa,pb);

xianshi(pc2);

case4:

多项式A="

xianshi(pa);

printf("

多项式B="

xianshi(pb);

case0:

break;

}

}while(i!

=0);

你选择了退出操作,欢迎使用!

system("

pause"

//系统暂停,按任意键键继续

flushall();

cls"

}

voidcaidan(void)

{

//定义菜单函数

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

\t一元稀疏多项式计算器\t\n"

0.退出程序\n"

1.建立多项式\n"

2.多项式加法\n"

3.多项式减法\n"

4.多项式输出\n"

}//caidan

linklistdx_built(intm)

//创建多项式

inti;

linklisthead,p;

head=(structlist*)malloc(sizeof(structlist));

head->

next=NULL;

for(i=1;

i<

=m;

i++)

p=(structlist*)malloc(sizeof(structlist));

(dx,%d)="

i);

scanf("

%f%d"

p->

xishu,&

zhishu);

if(p->

xishu==0)//系数为0的时候,删掉该节点

free(p);

else//系数不为0的时候

{

p->

next=head->

next;

next=p;

}

returnhead;

linklistsort(linklisthead)

//指数按降序排列

linklistp,q,tail,s;

tail=NULL;

while(head->

next!

=tail)

{

p=head;

q=p->

next;

while(q->

next->

zhishu<

q->

zhishu)

{

s=q->

p->

next=q->

q->

next=q;

q=s;

}

p=p->

q=q->

tail=q;

}

voidxianshi(linklisthead)

linklistq=head->

intflag=0;

//项数计数器

if(!

q)

{//若多项式为空,输出0

0\n"

return;

}

while(q)

if(q->

xishu>

0&

&

flag!

=0)putchar('

+'

//系数大于0且不是第一项

if(q->

xishu!

=1&

=-1)

{//系数非1或-1的普通情况

%.f"

q->

xishu);

zhishu==1)putchar('

X'

elseif(q->

zhishu)printf("

X^%d"

else

xishu==1)

zhishu)putchar('

1'

elseprintf("

xishu==-1)

-1"

zhishu==1)printf("

-X"

-X^%d"

q=q->

flag++;

linklistdx_jia(linklistpa,linklistpb)

/*多项式相加*/

linklistp=pa->

next,q=pb->

next,pc,tail,s;

//pc用来存储两个多项式的和

pc=tail=(structlist*)malloc(sizeof(structlist));

while(p!

=NULL&

q!

=NULL)

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

if(p->

zhishu>

zhishu)//p指数大,则存入pc,p然后后移

{

s->

xishu=p->

xishu;

s->

zhishu=p->

zhishu;

tail->

next=s;

tail=s;

p=p->

{if(p->

zhishu<

zhishu)//q指数大,则存入pc,q然后后移

{

s->

xishu=q->

zhishu=q->

tail->

tail=s;

q=q->

else//指数相等时

{if(p->

xishu+q->

xishu==0)//系数和为0则不存入pc中,p.q都后移

{

p=p->

q=q->

}

else//系数和不为0,则存入pc中,q,p后移

s->

xishu+q->

xishu;

tail->

next=s;

tail=s;

p=p->

q=q->

if(p==NULL)//p多项式比q短的时候,把q剩余的部分接到pc

tail->

else//q多项式比p短的时候,把p剩余的部分接到pc

next=p;

returnpc;

linklistdx_jian(linklistpa,linklistpb)

/*多项式相减*/

//pc用来存储两个多项式的差

zhishu)//q指数大,则把q是系数前加-1再存入pc,q然后后移

xishu=-(q->

xishu-q->

xishu==0)//系数差为0则不存入pc中,p.q都后移

else//系数差不为0,则存入pc中,q,p后移

xishu-q->

if(p==NULL)//p多项式比q短的时候,把q剩余的部分接到pc

三.实验使用环境(本实验所使用的平台和相关的软件)

MicrosoftVisualC++6.0

四.实验步骤和调试过程(实验步骤测试数据设计测试结果分析)

测试结果:

五.实验小结(实验过程中遇到的问题及解决过程.实验体会和收获)

1.在编写一元稀疏多项式程序代码的时候,为了实现这个程序,我采取了模块化设

计,针对每个功能,我使用一个函数去实现它;

2.在建立多项式的时候,我使用了单向链表去实现,在建立的时候,我把系数为0时候,这个节点给删掉,if(p->

然而我我这个函数还有个不足的地方,就是当指数相同,系数不同的时候,我没考虑到把它合并,这我以后会改进;

2.在主函数里,我采用了调用函数的方式,使界面简洁,但是我刚开始的时候没有准确地调用函数,程序运行失败,并且我把排序函数插入到现实函数里,导致了一个未知的错误,程序失败了,后来我把排序函数加到了建立的地方,printf("

3,这个程序我花了最多时间的地方就是加法算法,我使用了三条链,pa.pb,pc,我把和的结果给存放在pc中,当和为0的时候我不存入pc,if(p->

并且我还考虑了当两个多项式项数不相等的时候,用了一下这条语句去实现if(p==NULL)//p多项式比q短的时候,把q剩余的部分接到pc

,但是我刚开始的时候,if(p->

next==NULL),这个加法没有成功,最后发现了这个错误,运行成功;

4.我在编写这个程序的时候,很好地复习了c语言的知识,并且能够对链表这个章节的知识有很好的巩固;

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

当前位置:首页 > 解决方案 > 学习计划

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

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