1 / 16
文档名称:

一元稀疏多项式计算器实验.docx

格式:docx   大小:25KB   页数:16页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

一元稀疏多项式计算器实验.docx

上传人:菲菲 2022/11/27 文件大小:25 KB

下载得到文件列表

一元稀疏多项式计算器实验.docx

相关文档

文档介绍

文档介绍:该【一元稀疏多项式计算器实验 】是由【菲菲】上传分享,文档一共【16】页,该文档可以免费在线阅读,需要了解更多关于【一元稀疏多项式计算器实验 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计数器预****报告
姓名:刘茂
学号2220
一、实验要求
输入并成立多项式;
输出多项式,输出形式为整数序列:n,c1,e1,c2,e2cn,en,此中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序摆列;
多项式a和b相加,成立多项式a+b;
多项式a和b相减,成立多项式a-b。
(5)多项式求值;
(6)多项式求导;
(7)求多项式的乘积。
二、测试数据:
1、(2x+5x^^11)+(7-5x^8+11x^9)=^11+11x^9+2x+7);
2、(6x^-3-x+^^9+^9)-(-6x^-3+^2-x^2+^15
)=^^9+12x^-3-x);
3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5);
4、(x+x^3)+(-x-x^3)=0;
5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200);
6、(x+x^2+x^3)+0=x+x^2+x^3.
7、交换上述测试数据中的前后两个多项式。
三、思路剖析
用带表头结点的单链表储存多项式。
本程序要求输入并成立多项式,可以降幂显示出多项式,实现多项式相加相
减的计算问题,输出结果。
采纳链表的方式储存链表,定义结点构造体。运用尾差法成立两条单链表,以单链表polynp和polynh分别表示两个一元多项式a和b。
为实现办理,设p、q分别指向单链表polya和polyb的目前项,比较p、q结点的指数项。
①若p->expn<q->expn,则结点p所指的结点应是“和多项式”中的一项,
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
令指针p后移。
②若p->expn=q->expn,则将两个结点中的系数相加,当和不为
结点p的系数。

0时改正
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
③若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p以前,且令指针q在本来的链表上后移。
四、实验程序
头文件
#include<>
#include<>
#include<>
定义多项式的项
typedefstructPolynomial{
floatcoef;
intexpn;
structPolynomial*next;
}*Polyn,Polynomial;
voidInsert(Polynp,Polynh){
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
if(p->coef==0)free(p);//

系数为

0的话开释结点
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
else
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
{
Polynq1,q2;
q1=h;
q2=h->next;
while(q2&&p->expn<q2->expn)
{//查找插入地点
q1=q2;
q2=q2->next;
}
if(q2&&p->expn==q2->expn)
{//将指数同样相归并
q2->coef+=p->coef;
free(p);
if(!q2->coef)
{//系数为0的话开释结点
q1->next=q2->next;
free(q2);
}
}
else
{//指数为新时将结点插入
p->next=q2;
q1->next=p;
}
}
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
}
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
PolynCreatePolyn(Polynhead,intm){
成立一个头指针为head、项数为m的一元多项式
inti;
Polynp;
p=head=(Polyn)malloc(sizeof(structPolynomial));
head->next=NULL;
for(i=0;i<m;i++)
{
p=(Polyn)malloc(sizeof(structPolynomial));//成立新结点以接收数据
printf("请输入第%d项的系数与指数:",i+1);
scanf("%f%d",&p->coef,&p->expn);
Insert(p,head);//调用Insert函数插入结点
}
returnhead;
}
voidDestroyPolyn(Polynp){
销毁多项式pPolynq1,q2;q1=p->next;q2=q1->next;while(q1->next)
{
free(q1);
q1=q2;
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
q2=q2->next;
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
}
}
voidPrintPolyn(PolynP){
Polynq=P->next;
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
intflag=1;//
if(!q)

项数计数器
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
{//若多项式为空,输出0putchar('0');
printf("\n");
return;
}
while(q)
{
if(q->coef>0&&flag!=1)putchar('+');//系数大于0且不是第一项
if(q->coef!=1&&q->coef!=-1)
{//系数非1或-1的一般状况
printf("%g",q->coef);
if(q->expn==1)putchar('X');
elseif(q->expn)printf("X^%d",q->expn);
}
else
{
if(q->coef==1)
{
if(!q->expn)putchar('1');
elseif(q->expn==1)putchar('X');
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
elseprintf("X^%d",q->expn);
}
if(q->coef==-1)
{
if(!q->expn)printf("-1");
elseif(q->expn==1)printf("-X");
elseprintf("-X^%d",q->expn);
}
}
q=q->next;
flag++;
}
printf("\n");
}
intcompare(Polyna,Polynb){
if(a&&b)
{
if(!b||a->expn>b->expn)return1;
elseif(!a||a->expn<b->expn)return-1;
elsereturn0;
}
elseif(!a&&b)return-1;//a多项式已空,但b多项式非空
elsereturn1;//b多项式已空,但a多项式非空
}
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
PolynAddPolyn(Polynpa,Polynpb){//求解并成立多项式a+b,返回其头指针
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
Polynqa=pa->next;
Polynqb=pb->next;
Polynheadc,hc,qc;
hc=(Polyn)malloc(sizeof(structPolynomial));//成立头结点
hc->next=NULL;
headc=hc;
while(qa||qb)
{
qc=(Polyn)malloc(sizeof(structPolynomial));
switch(compare(qa,qb)){
case1:
{
qc->coef=qa->coef;
qc->expn=qa->expn;
qa=qa->next;
break;
}
case0:
{
qc->coef=qa->coef+qb->coef;
qc->expn=qa->expn;
qa=qa->next;
qb=qb->next;
break;
}
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
case-1:
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
{
qc->coef=qb->coef;
qc->expn=qb->expn;
qb=qb->next;
break;
}
}
if(qc->coef!=0)
{
qc->next=hc->next;
hc->next=qc;
hc=qc;
}
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
elsefree(qc);//

当相加系数为

0时,开释该结点
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
}
returnheadc;
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
}
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
PolynSubtractPolyn(Polynpa,Polynpb){//

求解并成立多项式

a-b,返回其头指针
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
Polynh=pb;
Polynp=pb->next;
Polynpd;
while(p)
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
{//



pb

的系数取反
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
p->coef*=-1;
p=p->next;
}
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
pd=AddPolyn(pa,h);
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
for(p=h->next;p;p=p->next)

//

恢复

pb的系数
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
p->coef*=-1;
returnpd;
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
}
intValuePolyn(Polynhead,intx){
输入x值,计算并返回多项式的值
Polynp;
inti;
intsum=0,t;
for(p=head->next;p;p=p->next)
{
t=1;
for(i=p->expn;i!=0;)
{
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
if(i<0){t/=x;i++;}//

指数小于

0,进行除法
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
else{t*=x;i--;}//

指数大于

0,进行乘法
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
}
sum+=p->coef*t;
}
returnsum;
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
}
PolynDerivative(Polynhead){
求解并成立导函数多项式,并返回其头指针
Polynq=head->next,p1,p2,hd;
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
hd=p1=(Polyn)malloc(sizeof(structPolynomial));//成立头结点
hd->next=NULL;
while(q)
{
if(q->expn!=0)
{//该项不是常数项时
p2=(Polyn)malloc(sizeof(structPolynomial));
p2->coef=q->coef*q->expn;
p2->expn=q->expn-1;
p2->next=p1->next;//连结结点
p1->next=p2;
p1=p2;
}
q=q->next;
}
returnhd;
}
PolynMultiplyPolyn(Polynpa,Polynpb){
求解并成立多项式a*b,返回其头指针
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
Polynhf,pf;
Polynqa=pa->next;
Polynqb=pb->next;
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验
hf=(Polyn)malloc(sizeof(structPolynomial));//
hf->next=NULL;
for(;qa;qa=qa->next)
{

成立头结点
一元稀少多项式计算器实验
一元稀少多项式计算器实验
一元稀少多项式计算器实验