一元多项式的相加减.docx

上传人:b****6 文档编号:13141710 上传时间:2023-06-11 格式:DOCX 页数:15 大小:34.84KB
下载 相关 举报
一元多项式的相加减.docx_第1页
第1页 / 共15页
一元多项式的相加减.docx_第2页
第2页 / 共15页
一元多项式的相加减.docx_第3页
第3页 / 共15页
一元多项式的相加减.docx_第4页
第4页 / 共15页
一元多项式的相加减.docx_第5页
第5页 / 共15页
一元多项式的相加减.docx_第6页
第6页 / 共15页
一元多项式的相加减.docx_第7页
第7页 / 共15页
一元多项式的相加减.docx_第8页
第8页 / 共15页
一元多项式的相加减.docx_第9页
第9页 / 共15页
一元多项式的相加减.docx_第10页
第10页 / 共15页
一元多项式的相加减.docx_第11页
第11页 / 共15页
一元多项式的相加减.docx_第12页
第12页 / 共15页
一元多项式的相加减.docx_第13页
第13页 / 共15页
一元多项式的相加减.docx_第14页
第14页 / 共15页
一元多项式的相加减.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

一元多项式的相加减.docx

《一元多项式的相加减.docx》由会员分享,可在线阅读,更多相关《一元多项式的相加减.docx(15页珍藏版)》请在冰点文库上搜索。

一元多项式的相加减.docx

一元多项式的相加减

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

一、实验目的

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)对应多项式的各对系数和指数,建立相应的一元多项式

5、测试结果参考下图

多项式相减

多项式相乘

六、源代码

1.多项式的相减

#include

#include

typedefstruct{

floatcoef;//系数

intexpn;//指数

}ElemType;

typedefstructLNode{//结点类型

ElemTypedata;

structLNode*next;

}*LinkList;

voidMakeNode(LinkList&s,ElemTypee){

//生成结点

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

s->data=e;

}

voidInsAfter(LinkListp,LinkLists){

//插入结点

s->next=p->next;

p->next=s;

}

intcompare(ElemTypee1,ElemTypee2){

//比较

if(e1.expn>e2.expn)

return1;

elseif(e1.expn

return-1;

return0;

}

voidOrderInsert(LinkList&L,ElemTypee,int(*compare)(ElemType,ElemType)){

//有序插入

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

while(q){

intn=compare(e,q->data);

if(n<0){

MakeNode(s,e);

InsAfter(p,s);break;

}

elseif(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);//最大,放在最后一个位置

}

}

voidInitList(LinkList&L){

//初始化

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

L->next=NULL;

}

voidSetCurElem(LinkList&p,ElemTypee){//设置结点

p->data.coef=e.coef;

p->data.expn=e.expn;

}

voidCreatePolyn(LinkList&L,intm){

InitList(L);

ElemTypee;

e.coef=0.0;

e.expn=-1;

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

printf("请输入%d对多项式的值:

\n",m);

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

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

OrderInsert(L,e,compare);

}

}

voidshow(LinkListL){

//输出方法

LinkListp=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");

}

voidListDestroy(LinkList&L){

//销毁

LinkListp=L,q;

while(p){

q=p;

p=p->next;

free(q);

}

}

voidsubtract(LinkListL1,LinkListL2,LinkList&L3){

//多项式相减

ElemTypee;

InitList(L3);

e.coef=0.0;

e.expn=-1;

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

LinkListp1=L1->next,p2=L2->next,q;//r1始终指向新建链表的尾部,p1和p2表示当前结点

while(p2)

{

p2->data.coef=-p2->data.coef;

p2=p2->next;

}

p2=L2->next;

while(p1&&p2){

intn=compare(p1->data,p2->data);

switch(n){

case-1:

{OrderInsert(L3,p1->data,compare);p1=p1->next;break;}//L1中的值小,插入之

case1:

{OrderInsert(L3,p2->data,compare);p2=p2->next;break;}//L2中的值小,插入之

case0:

{//相同

e.coef=p1->data.coef+p2->data.coef;

e.expn=p1->data.expn;

if(e.coef!

=0){OrderInsert(L3,e,compare);}

p1=p1->next;p2=p2->next;

break;

}

}

}

if(p1)

{OrderInsert(L3,p1->data,compare);p1=p1->next;}//添加L1

elseif(p2)

{OrderInsert(L3,p2->data,compare);p2=p2->next;}//添加L2

}

LinkListFindThan(LinkListX,LinkListL)

{

LinkListTmp;

Tmp=L;

while(Tmp->next!

=NULL&&Tmp->next->data.expn>=X->data.expn){

Tmp=Tmp->next;

}

returnTmp;

}

intmain(){

LinkListL1,L2,L3,L4;

intm,n;

printf("请输入多项式P(X)的项数:

");

scanf("%d",&m);

CreatePolyn(L1,m);

printf("多项式P(X)为:

\n");

show(L1);

printf("请输入多项式Q(X)的项数:

");

scanf("%d",&n);

CreatePolyn(L2,n);

printf("多项式Q(X)为:

\n");

show(L2);

subtract(L1,L2,L3);

printf("多项式P(X)-Q(X)为:

\n");

show(L3);

return0;

}

2.多项式的相乘

#include

#include

typedefstruct{

floatcoef;//系数

intexpn;//指数

}ElemType;

typedefstructLNode{//结点类型

ElemTypedata;

structLNode*next;

}*LinkList;

voidMakeNode(LinkList&s,ElemTypee){

//生成结点

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

s->data=e;

}

voidInsAfter(LinkListp,LinkLists){

//插入结点

s->next=p->next;

p->next=s;

}

intcompare(ElemTypee1,ElemTypee2){

//比较

if(e1.expn>e2.expn)

return1;

elseif(e1.expn

return-1;

return0;

}

voidOrderInsert(LinkList&L,ElemTypee,int(*compare)(ElemType,ElemType)){

//有序插入

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

while(q){

intn=compare(e,q->data);

if(n<0){

MakeNode(s,e);

InsAfter(p,s);break;

}

elseif(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);//最大,放在最后一个位置

}

}

voidInitList(LinkList&L){

//初始化

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

L->next=NULL;

}

voidSetCurElem(LinkList&p,ElemTypee){//设置结点

p->data.coef=e.coef;

p->data.expn=e.expn;

}

voidCreatePolyn(LinkList&L,intm){

InitList(L);

ElemTypee;

e.coef=0.0;

e.expn=-1;

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

printf("请输入%d对多项式的值:

\n",m);

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

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

OrderInsert(L,e,compare);

}

}

voidshow(LinkListL){

//输出方法

LinkListp=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");

}

voidListDestroy(LinkList&L){

//销毁

LinkListp=L,q;

while(p){

q=p;

p=p->next;

free(q);

}

}

voidMultiply(LinkListL1,LinkListL2,LinkList&L3){

//多项式相乘

ElemTypee;

InitList(L3);

e.coef=0.0;

e.expn=-1;

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

LinkListp1=L1->next,p2=L2->next,q;//r1始终指向新建链表的尾部,p1和p2表示当前结点

while(p1){

p2=L2->next;

while(p2){

e.coef=p1->data.coef*p2->data.coef;

e.expn=p1->data.expn+p2->data.expn;

OrderInsert(L3,e,compare);

p2=p2->next;

}

p1=p1->next;

}}

intmain(){

LinkListL1,L2,L3;

intm,n;

printf("请输入多项式P(X)的项数:

");

scanf("%d",&m);

CreatePolyn(L1,m);

printf("多项式P(X)为:

\n");

show(L1);

printf("请输入多项式Q(X)的项数:

");

scanf("%d",&n);

CreatePolyn(L2,n);

printf("多项式Q(X)为:

\n");

show(L2);

Multiply(L1,L2,L3);

printf("多项式P(X)*Q(X)为:

\n");

show(L3);

return0;

}

 

7、分析总结

本程序从源代码开始经过多次调试,一开始创建多项式并没有遇到什么问题,但是减法开始遇到问题,好在经过调试和反复检验后问题都得以解决,在多项式相加的基础上修改,相减和相乘就容易得多。

相减主要是整体把另一个多项式前加一个负号,总的运算还是和相加一样。

而相乘,需要两个循环,一个多项式中的一个单项式与第二个多项式中的各个单项式相乘,再回上去第一个多项式的第二个单项式与第二个多项式中的各个单项式相乘,如此循环。

全部相乘完毕之后,形成第三个多项式,还要比较各系数进行合并,这个操作在之前多项式相加中用到过,可以调用函数。

相减与相乘的一个共同点是都要比较各系数进行合并,用case循环。

这与课堂听讲,自学与练习相辅相成,锻炼了个人学习的能力。

 

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2