实验一-一元多项式运算

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

实验一-一元多项式运算

实验一一元多项式的运算

1.问题定义及需求分析

1.1课题目的和任务

问题描述:设计一个一元多项式简单计算器。

实验要求:

1)采用顺序表或链表等数据结构。

2)输入并建立多项式。

3)输出运算结果的多项式。

1.2数据形式

输入数据形式:通过键盘输入。

输入值的范围:多项式的项数和指数的输入数据为int型,输入值范围

为-32768至32767;多项式系数的输入值范围为float型,范围为

1.2e-38至3.4e+38。

输出数据形式:输出到显示器。

1.3程序功能

实现两个一元多项式之间的加法、减法和乘法运算。

1.4测试数据

4 //第一个多项式的项数

1 4 //第一项的系数和指数

3 3 //第二项的系数和指数

-2 2 //第三项的系数和指数

6 0 //第四项的系数和指数

5 //第二个多项式的项数

-3 5 //第一项的系数和指数

2 2 //第二项的系数和指数

-6 0 //第三项的系数和指数

-1 -1 //第四项的系数和指数

1.2 -2 //第五项的系数和指数

2.概要设计

2.1抽象数据类型

需要定义一个多项式类型的数据类型,里面包含一个int型的指数和一个float型的系数,再定义一个多项式节点,里面包含一个多项式

类型的数据,和一个指向下一个节点的指针。通过对多项式节点的操作,实现对输入数据的运算。

2.2

开始

输入第一个

多项式的项

创建多项式

CreatPolyn()

输入第二个

多项式的项

创建多项式

CreatPolyn()

输出第一个

多项式

PrintPolyn()

选择操作

Menu()

加法运算AddPolyn()

减法运算

SubtractPolyn()

乘法运算

MultiplyPolyn()

输出运算后

的多项式

PrintPolyn()

结束

输出第一个

多项式

PrintPolyn()

1加法运算

2减法运算

3乘法运算

3.详细设计

3.1存储结构实现

多项式结构体:

typedef struct{

float coef;

int expn;

}Poly;

typedef struct LNode{

Poly data;

struct LNode* next;

}LNode,*LinkList;

多项式类型的定义:

typedef LinkList polynomial;

3.2负责模块的伪码算法

(1)int MultiplyPolyn(polynomial& a,polynomial& b){//多项式相乘 if(a,b中均没有项){return 0;}

c=(polynomial)malloc(sizeof(LNode));//开辟一个c储存相乘结果 c->next=NULL;

ha=a->next;//ha为a中的项

hb=b->next;//hb为b中的项

for(;hb不空;下一项){//将a中第一项与b中所有项相乘

ha的系数*hb的系数;

ha的指数*hb的指数;

开辟一个新节点E,将数据存入,并把E连到c后

}

Sort(c);//对c中多项式排序

ha=ha->next;//ha指向下一个项

while(ha!=NULL){//将a中第二项与b中所有项相乘,存入d,然后将c和d相加得到新的c,再以此对a中其余各项做相同操作,最终得到乘法运算后的c

hb=b->next;//hb为b的第一项

d=(polynomial)malloc(sizeof(LNode));//开辟一个d储存相乘结果

d->next=NULL;

for(;hb不空;下一项){//将a中第一项与b中所有项相乘 ha的系数*hb的系数;

ha的指数*hb的指数;

开辟一个新节点E,将数据存入,并把E连到d后;

}

Sort(d);//对d中多项式排序

ha=ha->next;//ha 指向下一项

AddPolyn(c,d);//将c ,d 相加得到新的c

}

t=a;

a=c;//a 指向运算结果

DestroyPolyn(b);//销毁初始的两个多项式

DestroyPolyn(t);

}

(2)void DestroyPolyn(polynomial& L){//销毁多项式

while(L!=NULL){

p=L;

L=L->next;//指向后一项

free(p);

}

}

(3)void Sort(polynomial& L){//对多项式的指数进行冒泡排序 for(多项式长度){

for(j=L;j->next->next!=NULL;j=j->next){

if(j->next 指数 next->next 指数){//将大的冒到前面 p=j->next;

q=j->next->next;

p->next=q->next;

q->next=p;

j->next=q;

}

}

}

}

4. 调试分析

4.1问题分析与解决方法

(1)多项式相乘

对于多项式相乘,考虑到两个一元多项式的相乘,可以利用两个一元多项式相加的算法来实现,因为乘法运算可以分解为一系列的加法运算,所以只需循环执行加法运算,就可以完成多项式的相乘。例如A (x )和B (x )为一元多项式,则有:

()()()

()()11121n i

e e e n n

e i i M x A x B x A x b x b x b x b A x x ==⨯⎡⎤=⨯+++⎣⎦=∑L

其中,每一项都是一个一元多项式。

相关文档
最新文档