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

上传人:doc321 文档编号:12840988 上传时间:2021-12-06 格式:DOCX 页数:21 大小:208.37KB
返回 下载 相关 举报
一元多项式计算实验报告_1684.docx_第1页
第1页 / 共21页
一元多项式计算实验报告_1684.docx_第2页
第2页 / 共21页
一元多项式计算实验报告_1684.docx_第3页
第3页 / 共21页
一元多项式计算实验报告_1684.docx_第4页
第4页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

1、计算机学院工程实践一元多项式的计算总报告小组序号:编撰人 :年级班级:指导教师:提交日期:1. 项目组成员分工表 1 项目组成员分工2. 程序功能(程序实现的功能,功能结构图)实现功能:一元多项式的加、减、乘运算功能结构图:开始创建多项式加减乘保存结束3. 程序设计简介(包括:类及其属性和方法、类之间关系、关键代码等的说明)1.classNodepublic :Node();Node(floatNode();c,inte,Node* next);float coef; int exp; Node* Next; friend class/ 系数/ 指数/ 指向下一项的指针Polynominal

2、;节点类,储存一元多项式每一项的信息。该内含有两个构造函数,一个析构函数及存储系数、指数和 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 :Polynomina

3、l();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);/乘法

4、void PolySort();/ 排序函数,用于乘法之后的按指数排序void OutFile();/ 文本输出函数void OutFile(Polynominal&a,Polynominal &b,stringch);/ 重载文本输出函数void OpposeCoef( Polynominal&a,Node*temp);/ 系数取反,用于减法运算Node theList; ofstream FOut;/ 头节点/ 输出流;此类用于构造一元多项式。包括加、减、乘各各功能函数,还有两个帮助运算的辅助函数,以及界面输入输出和文本输出函数。成员变量有头节点和输出流。具体成员函

5、数如下:1)Polynominal :Polynominal()默认构造函数2)Polynominal :Polynominal(Polynominal&a)Node* temp =Node* tempNode = &theList;for (; temp !=NULL;)tempNode->Next = new Node(temp->coef, temp->exp,temp = temp->Next;tempNode = tempNode->Next;NULL);拷贝构造函数,用于计算时对象间的赋值,防止误改数据。3)void Polynomin

6、al :GetMSG(CString TempPoly) TempPoly.Remove(_T( '' ); Node* TempNode = &theList;intfori = 0;(i;i<TempPoly.GetLength(); )CString temp1 ;CString temp2 ;intj = 1;if( TempPoly.GetAt(i) =_T( '-')temp1 = temp1 +TempPoly.GetAt(i);i+;if( TempPoly.GetAt(i) =_T( '+')i+;if( Temp

7、Poly.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.G

8、etLength()-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( '+' ) &&a

9、mp;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)CStringPolynominal :Output_Node()intfirst = 0;CString te

10、mp;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);switch (TempNode->exp)case 0:tem

11、p = temp + temp_coef;break ;/ 指数为 0则推出case 1: if(TempNode->coef=1)/ 指数为 1则直接输出 Xtemp = temp +_T( "x" );else temp = temp + temp_coef +_T( "x" );break ;default: if (TempNode->coef = 1)/ 其余指数输出“ X”形式temp = temp + _T( "x" )+temp_exp;elsetemp = temp + temp_coef +_T( &q

12、uot;x" )+temp_exp;break ;first = 1;returntemp;输出函数,将计算所得结果输出到对话框。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 No

13、de(p->coef, p->exp,NULL);temp = temp->Next;p = p->Next;elseif(p->exp) = (q->exp)temp->Next =new Node(p->coef + q->coef, p->exp,NULL);temp = temp->Next;p = p->Next;q = q->Next;elseif(p->exp) < (q->exp)temp->Next =new Node(q->coef, q->exp,NULL);

14、temp = temp->Next;q = q->Next;if (q !=NULL)while(q !=NULL)temp->Next =new Node(q->coef, q->exp,temp = temp->Next;q = q->Next;NULL);if(p !=NULL)while (p !=NULL)temp->Next =new Node(p->coef, p->exp,temp = temp->Next;NULL);p = p->Next;加法函数,实现多项式的相加。在其中需要判断各项指数的关系,已实现

15、按指数大小关系构建链表。6)while ( temp !=NULL)temp->coef = -(temp->coef);temp = temp->Next;在执行减法操作时,用此函数将被减多项式各位系数取反,之后可直接调用加法函数进行运算;7)voidPolynominal :PolySubtract(Polynominal & a,Polynominal&b)Node* temp =NULL;Polynominalaa =b;OpposeCoef(aa, temp);PolyAdd( a, aa);减法函数。先调用系数取反函数,再调用加法函数,可直接实现减

16、法功能。其中为了不改变被减多项式的各项值,在此调用拷贝构造函数创建临时对象用于计算。8)voidPolynominal :PolyMultiply(Polynominal & a,Polynominal&b)Node *p, *q, *temp;temp = &theList;while (p !=NULL)while (q !=NULL)q = q->Next;temp = temp->Next;p = p->Next;PolySort();乘法函数。按项相乘,运算完之后,再调用排序函数,实现同指数项系数相加,并按照指数大小输出。9)voidPoly

17、nominal :PolySort()Polynominal temp;inti = 1;floattemp_coef = 0;inttemp_exp = 0;Node* tempNode = theList.Next;Node* tempNode2 = &theList;Node* tempNode3 = &temp.theList;while (i = 1)tempNode = theList.Next;tempNode2 = &theList;for (; tempNode !=NULL;)if(tempNode->exp > temp_exp)tem

18、p_exp = tempNode->exp;tempNode = tempNode->Next;tempNode = theList.Next;if(tempNode !=NULL)for (; tempNode !=NULL;)if(tempNode->exp = temp_exp)temp_coef = temp_coef + tempNode->coef;tempNode2->Next = tempNode->Next;tempNode = tempNode->Next;else tempNode = tempNode->Next;temp

19、Node2 = tempNode2->Next;tempNode3->Next = new Node(temp_coef, temp_exp, NULL); tempNode3 = tempNode3->Next;temp_coef = 0;temp_exp = 0;else i = 0;Node* temp2 = &theList;for (; temp3 !=NULL;)temp2->Next =new Node(temp3->coef, temp3->exp,NULL);temp2 = temp2->Next;temp3 = temp3-

20、>Next;实现相乘之后的排序,是最后的链表按照指数大小排列,并且每个指数只有一项。10)voidPolynominal :OutFile()FOut.open( "PolynominalList.txt",ofstream :app);intfirst = 1;Node* temp = theList.Next;FOut << " ( "for (; temp !=NULL; temp = temp->Next)if(!first&&temp->coef > 0)FOut << "

21、;+" ;FOut << temp->coef;switch (temp->exp)case 0: break ;/ 指数为 0则推出case 1:FOut <<"x" ;break ;/ 指数为 1则直接输出 Xdefault:FOut <<"x" << temp->exp;break ;/ 其余指数输出“first = 0;X”形式FOut << " ) "FOut.close();文本输出函数,用于两个多项式的文本输出。11)voidPoly

22、nominal :OutFile(Polynominal &a,Polynominal & b,stringFOut.open( "PolynominalList.txt",ofstream :app);intfirst = 1;ch)a.OutFile();FOut << ch;b.OutFile();FOut << " = ( "for (; temp !=NULL; temp = temp->Next)if(!first&&temp->coef > 0)FOut <&l

23、t; "+" ;FOut << temp->coef;switch (temp->exp)case 0: break ;/ 指数为 0则推出case 1:FOut <<"x" ;break ;/ 指数为 1则直接输出 Xdefault:FOut <<"x" << temp->exp;break ;/ 其余指数输出“first = 0;X”形式FOut << " ) "FOut << "nn"FOut.clo

24、se();重载文本输出函数,用于最后结果的一次性文本输出。3.1. 类设计表 2类表序号类名属性方法1Nodefloatcoef;Node();intexp;Node(floatc,int e,Node* next);Node* Next;2PolynominalNode theList;Polynominal();ofstream FOut;Polynominal(Polynominal&a);void GetMSG(CString TempPloy);CString Output_Node();voidPolyAdd( Polynominal&a,Polynominal&a

25、mp;b);voidPolySubtract(Polynominal&a, Polynominal&b);voidPolyMultiply(Polynominal&a, Polynominal&b);voidPolySort();voidOutFile();voidOutFile(Polynominal&a, Polynominal&b, stringch);void OpposeCoef( Polynominal &a, Node*temp);3.2. 类关系图友元classclass NodePolynominal3.3. 数据结构设

26、计数据成员:1.Class Node:float coef; int exp; Node* Next;/ 系数/ 指数/ 指向下一项的指针2.class PolynominalNode theList;ofstream FOut;/ 头节点/ 输出流此类中theList是头节点,其成员变量Next 指向新建节点,构造成链表。3.4. 关键代码与运行界面关键代码:#ifndefPOLYNOMINA_H#definePOLYNOMINA_H#include"Node.h"#include<string>#include<afxstr.h>#include

27、<fstream>#include<iostream>usingnamespacestd;classPolynominal public:Polynominal();Polynominal( Polynominal &a);void GetMSG(CString TempPloy);CString Output_Node();/ 拷贝构造函数/ 获取由对话框输入的字符串并处理/ 输出最后结果voidPolyAdd( Polynominal &a,Polynominal &b);/ 加法voidPolySubtract(Polynominal &a

28、mp;a,Polynominal &b);/减法voidPolyMultiply(Polynominal &a,Polynominal &b);/乘法voidPolySort();/排序函数,用于乘法之后的按指数排序voidOutFile();/ 文本输出函数voidOutFile( Polynominal &a,Polynominal &b, stringch);/ 重载文本输出函数voidOpposeCoef( Polynominal&a, Node*temp);/ 系数取反,用于减法运算Node theList;/ 头节点ofstream

29、FOut;/ 输出流;#endif函数实现:#include"stdafx.h"#include"Polynominal.h"#include"conio.h"Polynominal :Polynominal()Polynominal :Polynominal(Polynominal & a)Node* temp =Node* tempNode = &theList;for (; temp !=NULL;)tempNode->Next = new Node(temp->coef, temp->exp,

30、temp = temp->Next;tempNode = tempNode->Next;NULL);voidPolynominal :GetMSG(CString TempPoly) TempPoly.Remove(_T( '' );Node* TempNode = &theList;intfori = 0;(i;i<TempPoly.GetLength(); )CString temp1 ;CString temp2 ;intj = 1;if( TempPoly.GetAt(i) =_T( '-')temp1 = temp1 +Tem

31、pPoly.GetAt(i);i+;if( TempPoly.GetAt(i) =_T( '+')i+;if( TempPoly.GetAt(i) = temp1 = temp1 + _T( '1'_T( 'x' );) )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

32、( '-')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

33、.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;CStringPolynominal :Output_Node()intfirst = 0;CString temp;CS

34、tring 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"),Tem

35、pNode->exp);switch (TempNode->exp)case 0:temp = temp + temp_coef;break ;/ 指数为 0则推出case 1: if(TempNode->coef=1)/ 指数为 1则直接输出 Xtemp = temp +_T( "x" );else temp = temp + temp_coef +_T( "x" );break ;default : if(TempNode->coef = 1)/ 其余指数输出“ X”形式temp = temp +_T( "x&quo

36、t; )+temp_exp;else temp = temp + temp_coef +_T( "x" )+temp_exp;break ;first = 1;returntemp;voidPolynominal :PolyAdd(Polynominal &a,Polynominal & b)Node *p, *q, *temp;temp = &theList;whileif(p !=NULL&& q !=NULL)(p->exp) > (q->exp)temp->Next =new Node(p->co

37、ef, p->exp,temp = temp->Next;p = p->Next;NULL);elseif(p->exp) = (q->exp)temp->Next =new Node(p->coef + q->coef, p->exp,temp = temp->Next;p = p->Next;q = q->Next;NULL);elseif(p->exp) < (q->exp)temp = temp->Next;q = q->Next;if(q !=NULL)while (q !=NULL

38、)temp->Next =new Node(q->coef, q->exp,temp = temp->Next;q = q->Next;NULL);if(p !=NULL)while (p !=NULL)temp->Next =new Node(p->coef, p->exp,temp = temp->Next;p = p->Next;NULL);voidPolynominal :OpposeCoef( Polynominal &a,Node * temp)while ( temp !=NULL)temp->coef = -(temp->coef);temp = temp->Next;voidPolynominal :PolySubtract( Node* temp = NULL; Poly

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1