一元稀疏多项式简单的计算器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.一元稀疏多项式简单的计算器(实验类型:综合型)

1)问题描述:用线性表表示一元稀疏多项式,设计一个一元多项式运算器

2)实验要求:

✧采用单链表存储结构一元稀疏多项式

✧输入并建立多项式

✧输出多项式

✧实现多项式加、减运算

3) 实现提示:以两个多项式相加为例

✧结果多项式另存

✧扫描两个相加多项式,若都未检测完:

⏹若当前被检测项指数相等,系数相加,若结果未变成0,

则将结果插入到结果多项式。

⏹若当前被检测项指数不等,则将指数较小者插入到结果

多项式。

若有一个多项式已检测完,则将另一个多项式剩余部分直接连接到结果多项式。

4.一元稀疏多项式简单的计算器(实验类型:综合型)

#include

#include

typedef struct

{

float coef;//系数int expn;//指数

} Term;

typedef struct ploynomial

{

Term term;ploynomial* next;

} ploynomial,*LinkList;

void InitList(LinkList&L)

{

//初始化链表

L= (ploynomial*)malloc(sizeof(ploynomial));//头结点L->term.coef=0.0;

L->term.expn=-1; L->next=NULL;

}

int cmp(Term a,Term b)

{

//比较结点的系数大小函数

if(a.expn>b.expn) return -1;

else if(a.expn==b.expn) return 0; else return 1;

}

void insertNode(LinkList&L,Term e)

{

//将结点插入多项式链表的适当位置,可以同时起到创建链表和多项式相加的功能

ploynomial* q=L;

while(q->next!=NULL)

{

if(cmp(q->next->term,e)<0)//如果当前结点q的下一个结点的指数大于要插入的结点的指数

q=q->next;//q指向下一个结点

else break;//此时,q.term.expn>e.expn>=q->next->term.expn }

if(q->next!=NULL&&cmp(q->next->term,e)==0) //指数相同,系数相加

{

q->next->term.coef+=e.coef;

}

else

{

ploynomial* node =(ploynomial*) malloc(sizeof(ploynomial));

node->term.coef=e.coef;

node->term.expn=e.expn;

if(q->next==NULL)

node->next=NULL; //如果q结点为尾结点,则node的

指针域设为NULL

else

node->next=q->next; //否则node的指针域指向q的下一个结点

q->next=node;//将node结点插入链表中

}

}

void CreatPolyn(LinkList&L,int m)

{

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

InitList(L);

for(int i=1; i<=m; i++)

{

printf("\n第%d项的系数和指数:",i);

scanf("%f%d",&e.coef,&e.expn);

insertNode(L,e);

}

}

void addPolyn(LinkList&L,LinkList L1,LinkList L2)

{

//用L返回L1+L2的结果

ploynomial* q;

for(q=L1->next; q!=NULL; q=q->next)

{

insertNode(L,q->term);//将L1的每一项插入到L中

}

for(q=L2->next; q!=NULL; q=q->next) //将L2的每一项插入到L 中

{

insertNode(L,q->term);

}

}

void SubtracatPolyn(LinkList&L,LinkList L1,LinkList L2)

{

//用L返回L1-L2的结果

ploynomial* q;

for(q=L1->next; q!=NULL; q=q->next)

{

insertNode(L,q->term);//将L1的每一项插入到L中

}

for(q=L2->next; q!=NULL; q=q->next)

{

q->term.coef = -(q->term.coef); //把系数变成相反数,再进行

相加操作,即为L1-L2

insertNode(L,q->term);//将L2的每一项插入到L中}

}

void multiplyPolyn(LinkList&L,LinkList L1,LinkList L2) {

//用L返回L1*L2的结果

ploynomial *p,*q;

Term term;

term.coef=0.0;

term.expn=0;

for(q=L1->next; q!=NULL; q=q->next)

{

for(p=L2->next; p!=NULL; p=p->next)

{

term.coef=(q->term.coef)*(p->term.coef);//系数相乘term.expn=(q->term.expn)+(p->term.expn);// 指数想加insertNode(L,term);

}

}

}

void derivativePolyn(LinkList&L,LinkList L1)

相关文档
最新文档