1、一元多项式计算实验报告计算机学院工程实践一元多项式的计算 总 报 告小组序号:编 撰 人:年 级 班 级:指导教师:提交日期:1. 项目组成员分工表 1 项目组成员分工2. 程序功能(程序实现的功能,功能结构图)实现功能:一元多项式的加、减、乘运算功能结构图:3. 程序设计简介(包括:类及其属性和方法、类之间关系、关键代码等的说明)1. class Nodepublic: Node(); Node(float c, int e, Node* next); Node(); float coef; /系数 int exp; /指数 Node* Next; /指向下一项的指针 friend clas
2、s 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 Polynominalpubli
3、c: 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 P
4、olySort(); /排序函数,用于乘法之后的按指数排序 void OutFile(); /文本输出函数 void OutFile(Polynominal &a, Polynominal &b, string ch); /重载文本输出函数 void OpposeCoef(Polynominal &a, Node *temp); /系数取反,用于减法运算 Node theList; /头节点 ofstream FOut; /输出流; 此类用于构造一元多项式。包括加、减、乘各各功能函数,还有两个帮助运算的辅助函数,以及界面输入输出和文本输出函数。成员变量有头节点和输出流。 具体成员函数如下:1)
5、 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:Get
6、MSG(CString TempPoly) TempPoly.Remove(_T(); Node* TempNode = &theList; int i = 0; for (i;iTempPoly.GetLength(); ) 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 = t
7、emp1 +_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
8、 = TempPoly.GetLength() & TempPoly.GetAt(i-1) = _T(x) temp2 = temp2 + _T(1); else while (i Next = new Node(_ttof(temp1), _ttoi(temp2), NULL); /链表构建 TempNode = TempNode-Next; 此函数用于把从对话框获取的字符串进行处理,截取出多项式各项系数和指数,并转换为float型和int型,构造一元多项式链表。4) CString Polynominal:Output_Node() int first = 0; CString temp;
9、 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); switch (TempNode-exp) case 0:temp = temp + tem
10、p_coef; break; /指数为0则推出 case 1:if (TempNode-coef=1) /指数为1则直接输出X temp = temp + _T(x); else temp = temp + temp_coef + _T(x); break; default:if (TempNode-coef = 1) /其余指数输出“X”形式 temp = temp + _T(x)+temp_exp; else temp = temp + temp_coef + _T(x)+temp_exp; break; first = 1; return temp; 输出函数,将计算所得结果输出到对话框
11、。5) void Polynominal: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 = new Node(p-coef, p-exp, NULL); temp = temp-Next; p = p-Next; else if (p-exp) = (q-exp) temp-Next = ne
12、w Node(p-coef + q-coef, p-exp, NULL); temp = temp-Next; p = p-Next; q = q-Next; else if (p-exp) exp) temp-Next = new Node(q-coef, q-exp, NULL); temp = temp-Next; q = q-Next; if (q != NULL) while (q != NULL) temp-Next = new Node(q-coef, q-exp, NULL); temp = temp-Next; q = q-Next; if (p != NULL) while
13、 (p != NULL) temp-Next = new Node(p-coef, p-exp, NULL); temp = temp-Next; p = p-Next; 加法函数,实现多项式的相加。在其中需要判断各项指数的关系,已实现按指数大小关系构建链表。6) void Polynominal:OpposeCoef(Polynominal &a, Node *temp) temp = a.theList.Next; while (temp != NULL) temp-coef = -(temp-coef); temp = temp-Next; 在执行减法操作时,用此函数将被减多项式各位系数取反,之后可直接调用加法函数进行运算;7) void Polynominal:PolySubtract(Polynominal &a, Polynominal &b)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1