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