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