一元多项式的相加减

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

实验一一元多项式的表示和相减、相乘

一、实验目的

1.掌握链表的存储方式

2.掌握一元多项式的存储及运算。

二、实验内容

已知一元多项式P(x)和Q(x)已存在,求P(x)-Q(x)和P(x)* Q(x)并输出。

要求:

1.通过键盘随机输入两多项式P(x)和Q(x)的内容。

2.输出结果要有P(x)和Q(x)的以及它们的差P(x)-Q(x)和乘积P(x)* Q(x)。

三、实验步骤:

1.创建一元多项P(x)和Q(x)。

2.求P(x)-Q(x),P(x)* Q(x)。

3.输出P(x)、Q(x)、P(x)-Q(x),P(x)* Q(x)。

四、算法说明

首先,定义一元多项式的存储方式,然后从键盘输入P(x)和Q(x)对应多项式的各对系数和指数,建立相应的一元多项式

五、测试结果参考下图

多项式相减

多项式相乘

六、源代码

1.多项式的相减

# include

# include

typedef struct{

float coef; //系数

int expn; //指数

}ElemType;

typedef struct LNode{ //结点类型

ElemType data;

struct LNode *next;

}*LinkList;

void MakeNode(LinkList &s,ElemType e){ //生成结点

s=(LinkList)malloc(sizeof(LNode));

s->data=e;

}

void InsAfter(LinkList p,LinkList s){

//插入结点

s->next=p->next;

p->next=s;

}

int compare(ElemType e1,ElemType e2){

//比较

if(e1.expn>e2.expn)

return 1;

else if(e1.expn

return -1;

return 0;

}

void OrderInsert(LinkList &L,ElemType e,int(*compare)(ElemType,ElemType)){

//有序插入

LinkList p=L,q=p->next,s;

while(q){

int n=compare(e,q->data);

if(n<0){

MakeNode(s,e);

InsAfter(p,s);break;

}

else if(n==0)

{

q->data.coef=q->data.coef+e.coef;

if(q->data.coef==0){p->next=q->next;free(q);}

break;

}

p=p->next;q=p->next;

}

if(q==NULL)

{

MakeNode(s,e);

InsAfter(p,s); //最大,放在最后一个位置

}

}

void InitList(LinkList &L){

//初始化

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;

}

void SetCurElem(LinkList &p,ElemType e){ //设置结点p->data.coef=e.coef;

p->data.expn=e.expn;

}

void CreatePolyn(LinkList &L,int m){

InitList(L);

ElemType e;

e.coef=0.0;

e.expn=-1;

SetCurElem(L,e);//设置头结点的数据元素

printf("请输入%d对多项式的值:\n",m);

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

scanf("%f%d",&e.coef,&e.expn); //输入值

OrderInsert(L,e,compare);

}

}

void show(LinkList L){

//输出方法

LinkList p=L->next;

if(p){ //第一个输出

printf("%.2fX^%d",p->data.coef,p->data.expn);

p=p->next;

}

while(p){

if(p->data.coef>0)

printf("+");

printf("%.2fX^%d",p->data.coef,p->data.expn);

p=p->next;

}

printf("\n");

}

void ListDestroy(LinkList &L){

//销毁

LinkList p=L,q;

while(p){

q=p;

p=p->next;

free(q);

}

}

void subtract(LinkList L1,LinkList L2,LinkList &L3){ //多项式相减

ElemType e;

InitList(L3);

e.coef=0.0;

相关文档
最新文档