一元多项式计算实验报告.docx
《一元多项式计算实验报告.docx》由会员分享,可在线阅读,更多相关《一元多项式计算实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
一元多项式计算实验报告
计算机学院
工程实践
一元多项式的计算
总报告
小组序号:
编撰人:
年级班级:
指导教师:
提交日期:
1.项目组成员分工
表1项目组成员分工
2.程序功能
(程序实现的功能,功能结构图)
实现功能:
一元多项式的加、减、乘运算
功能结构图:
3.程序设计简介
(包括:
类及其属性和方法、类之间关系、关键代码等的说明)
1.
classNode
{
public:
Node();
Node(floatc,inte,Node*next);
~Node(){};
floatcoef;//系数
intexp;//指数
Node*Next;//指向下一项的指针
friendclassPolynominal;
};
节点类,储存一元多项式每一项的信息。
该内含有两个构造函数,一个析构函数及存储系数、指数和Next指针等成员变量。
与Polynominal是友元关系,允许Polynominal的访问。
具体成员函数如下:
1)
Node:
:
Node(){}
默认构造函数。
2)
Node:
:
Node(floatc,inte,Node*next){
coef=c;
exp=e;
Next=next;
}
重载的自定义构造函数,用于给成员变量coef、exp和Next存入数据,Next指向传参来的next指针指向的地址,用于构造链表。
2.
classPolynominal{
public:
Polynominal();
Polynominal(Polynominal&a);//拷贝构造函数
voidGetMSG(CStringTempPloy);//获取由对话框输入的字符串并处理
CStringOutput_Node();//输出最后结果
voidPolyAdd(Polynominal&a,Polynominal&b);//加法
voidPolySubtract(Polynominal&a,Polynominal&b);//减法
voidPolyMultiply(Polynominal&a,Polynominal&b);//乘法
voidPolySort();//排序函数,用于乘法之后的按指数排序
voidOutFile();//文本输出函数
voidOutFile(Polynominal&a,Polynominal&b,stringch);//重载文本输出函数
voidOpposeCoef(Polynominal&a,Node*temp);//系数取反,用于减法运算
NodetheList;//头节点
ofstreamFOut;//输出流
};
此类用于构造一元多项式。
包括加、减、乘各各功能函数,还有两个帮助运算的辅助函数,以及界面输入输出和文本输出函数。
成员变量有头节点和输出流。
具体成员函数如下:
1)
Polynominal:
:
Polynominal(){}
默认构造函数
2)
Polynominal:
:
Polynominal(Polynominal&a){
Node*temp=a.theList.Next;
Node*tempNode=&theList;
for(;temp!
=NULL;){
tempNode->Next=newNode(temp->coef,temp->exp,NULL);
temp=temp->Next;
tempNode=tempNode->Next;
}
}
拷贝构造函数,用于计算时对象间的赋值,防止误改数据。
3)
voidPolynominal:
:
GetMSG(CStringTempPoly){
TempPoly.Remove(_T('^'));
Node*TempNode=&theList;
inti=0;
for(i;iCStringtemp1;
CStringtemp2;
intj=1;
if(TempPoly.GetAt(i)==_T('-')){
temp1=temp1+TempPoly.GetAt(i);
i++;
}
if(TempPoly.GetAt(i)==_T('+')){
i++;
}
if(TempPoly.GetAt(i)==_T('x')){
temp1=temp1+_T('1');
}
while(j==1){
if(TempPoly.GetAt(i)!
=_T('x')){
temp1=temp1+TempPoly.GetAt(i);
i++;
}
elsej=0;
}
i++;
if(i<(TempPoly.GetLength()-1)&&TempPoly.GetAt(i)==_T('-')){
temp2=temp2+TempPoly.GetAt(i);
i++;
}
if(i==(TempPoly.GetLength()-1)&&TempPoly.GetAt(i)==_T('x'))
temp2=temp2+_T('1');
else{
if(i==TempPoly.GetLength()&&TempPoly.GetAt(i-1)==_T('x'))
temp2=temp2+_T('1');
else{
while(i=_T('+')&&TempPoly.GetAt(i)!
=_T('-')){
temp2=temp2+TempPoly.GetAt(i);
i++;
}
}
}
TempNode->Next=newNode(_ttof(temp1),_ttoi(temp2),NULL);//链表构建
TempNode=TempNode->Next;
}
}
此函数用于把从对话框获取的字符串进行处理,截取出多项式各项系数和指数,并转换为float型和int型,构造一元多项式链表。
4)
CStringPolynominal:
:
Output_Node(){
intfirst=0;
CStringtemp;
CStringtemp_coef;
CStringtemp_exp;
Node*TempNode=theList.Next;
for(;TempNode!
=NULL;TempNode=TempNode->Next){
if(first==1&&TempNode->coef>0)temp=temp+_T("+");
temp_coef.Format(_T("%g"),TempNode->coef);
temp_exp.Format(_T("%d"),TempNode->exp);
switch(TempNode->exp){
case0:
temp=temp+temp_coef;break;//指数为0则推出
case1:
if(TempNode->coef==1)//指数为1则直接输出X
temp=temp+_T("x");
elsetemp=temp+temp_coef+_T("x");
break;
default:
if(TempNode->coef==1)//其余指数输出“X^”形式
temp=temp+_T("x")+temp_exp;
elsetemp=temp+temp_coef+_T("x^")+temp_exp;
break;
}
first=1;
}
returntemp;
}
输出函数,将计算所得结果输出到对话框。
5)
voidPolynominal:
:
PolyAdd(Polynominal&a,Polynominal&b){
Node*p,*q,*temp;
temp=&theList;
p=a.theList.Next;
q=b.theList.Next;
while(p!
=NULL&&q!
=NULL){
if((p->exp)>(q->exp)){
temp->Next=newNode(p->coef,p->exp,NULL);
temp=temp->Next;
p=p->Next;
}
elseif((p->exp)==(q->exp)){
temp->Next=newNode(p->coef+q->coef,p->exp,NULL);
temp=temp->Next;
p=p->Next;
q=q->Next;
}
elseif((p->exp)<(q->exp)){
temp->Next=newNode(q->coef,q->exp,NULL);
temp=temp->Next;
q=q->Next;
}
}
if(q!
=NULL){
while(q!
=NULL){
temp->Next=newNode(q->coef,q->exp,NULL);
temp=temp->Next;
q=q->Next;
}
}
if(p!
=NULL){
while(p!
=NULL){
temp->Next=newNode(p->coef,p->exp,NULL);
temp=temp->Next;
p=p->Next;
}
}
}
加法函数,实现多项式的相加。
在其中需要判断各项指数的关系,已实现按指数大小关系构建链表。
6)
voidPolynominal:
:
OpposeCoef(Polynominal&a,Node*temp){
temp=a.theList.Next;
while(temp!
=NULL){
temp->coef=-(temp->coef);
temp=temp->Next;
}
}
在执行减法操作时,用此函数将被减多项式各位系数取反,之后可直接调用加法函数进行运算;
7)
voidPolynominal:
:
PolySubtract(Polynominal&a,Polynominal&b)