一元多项式的计算实验报告

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

计算机学院

工程实践

一元多项式的计算总报告

小组序号:

编撰人:

年级班级:

指导教师:

提交日期:

1. 项目组成员分工

表 1 项目组成员分工

2. 程序功能

(程序实现的功能,功能结构图)

实现功能:一元多项式的加、减、乘运算 功能结构图:

减加创建多项式

开始

保存

结束

3. 程序设计简介

(包括:类及其属性和方法、类之间关系、关键代码等的说明)

1.

class Node

{

public:

Node();

Node(float c, int e, Node* next);

~Node(){};

float coef; //系数

int exp; //指数

Node* Next; //指向下一项的指针

friend class Polynominal;

};

节点类,储存一元多项式每一项的信息。该内含有两个构造函数,一个析构函数及存储系数、指数和Next指针等成员变量。与Polynominal是友元关系,允许Polynominal的访问。

具体成员函数如下:

1)

Node::Node(){}

默认构造函数。

2)

Node::Node(float c, int e, Node* next){

coef = c;

exp = e;

Next = next;

}

重载的自定义构造函数,用于给成员变量coef、exp和Next存入数据,Next指向传参来的next指针指向的地址,用于构造链表。

2.

class Polynominal{

public:

Polynominal();

Polynominal(Polynominal &a); //拷贝构造函数

void GetMSG(CString TempPloy); //获取由对话框输入的字符串并处理

CString Output_Node(); //输出最后结果

void PolyAdd(Polynominal &a, Polynominal &b); //加法

void PolySubtract(Polynominal &a, Polynominal &b); //减法

void PolyMultiply(Polynominal &a, Polynominal &b); //乘法

void PolySort(); //排序函数,用于乘法之后的按指数排序

void OutFile(); //文本输出函数

void OutFile(Polynominal &a, Polynominal &b, string ch); //重载文本输出函数void OpposeCoef(Polynominal &a, Node *temp); //系数取反,用于减法运算

Node theList; //头节点

ofstream FOut; //输出流

};

此类用于构造一元多项式。包括加、减、乘各各功能函数,还有两个帮助运算的辅助函数,以及界面输入输出和文本输出函数。成员变量有头节点和输出流。

具体成员函数如下:

1)

Polynominal::Polynominal(){}

默认构造函数

2)

Polynominal::Polynominal(Polynominal &a){

Node* temp = a.theList.Next;

Node* tempNode = &theList;

for (; temp != NULL;){

tempNode->Next = new Node(temp->coef, temp->exp, NULL);

temp = temp->Next;

tempNode = tempNode->Next;

}

}

拷贝构造函数,用于计算时对象间的赋值,防止误改数据。

3)

void Polynominal::GetMSG(CString TempPoly){

TempPoly.Remove(_T('^'));

Node* TempNode = &theList;

int i = 0;

for (i;i

CString temp1 ;

CString temp2 ;

int j = 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++;

}

else j=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 < TempPoly.GetLength() && TempPoly.GetAt(i) != _T('+') && TempPoly.GetAt(i) != _T('-')){

temp2 = temp2 + TempPoly.GetAt(i);

i++;

}

}

}

TempNode->Next = new Node(_ttof(temp1), _ttoi(temp2), NULL); //链表构建TempNode = TempNode->Next;

}

}

此函数用于把从对话框获取的字符串进行处理,截取出多项式各项系数和指数,并转换为float型和int型,构造一元多项式链表。

4)

CString Polynominal::Output_Node(){

int first = 0;

CString temp;

CString temp_coef;

CString temp_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);

相关文档
最新文档