实验一-一元多项式运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 指数
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
其中,每一项都是一个一元多项式。