一元多项式计算实验报告.docx

上传人:b****0 文档编号:571751 上传时间:2022-10-11 格式:DOCX 页数:26 大小:157.62KB
下载 相关 举报
一元多项式计算实验报告.docx_第1页
第1页 / 共26页
一元多项式计算实验报告.docx_第2页
第2页 / 共26页
一元多项式计算实验报告.docx_第3页
第3页 / 共26页
一元多项式计算实验报告.docx_第4页
第4页 / 共26页
一元多项式计算实验报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

一元多项式计算实验报告.docx

《一元多项式计算实验报告.docx》由会员分享,可在线阅读,更多相关《一元多项式计算实验报告.docx(26页珍藏版)》请在冰豆网上搜索。

一元多项式计算实验报告.docx

一元多项式计算实验报告

 

计算机学院

工程实践

一元多项式的计算

总报告

 

小组序号:

编撰人:

年级班级:

指导教师:

提交日期:

 

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;i

CStringtemp1;

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)

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1