一元多项式的计算实验报告Word文档下载推荐.docx

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

一元多项式的计算实验报告Word文档下载推荐.docx

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

一元多项式的计算实验报告Word文档下载推荐.docx

:

Node(){}

默认构造函数。

2)

Node(floatc,inte,Node*next){

coef=c;

exp=e;

Next=next;

}

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

2.

classPolynominal{

Polynominal();

Polynominal(Polynominal&

a);

//拷贝构造函数

voidGetMSG(CStringTempPloy);

//获取由对话框输入的字符串并处理

CStringOutput_Node();

//输出最后结果

voidPolyAdd(Polynominal&

a,Polynominal&

b);

//加法

voidPolySubtract(Polynominal&

//减法

voidPolyMultiply(Polynominal&

//乘法

voidPolySort();

//排序函数,用于乘法之后的按指数排序

voidOutFile();

//文本输出函数

voidOutFile(Polynominal&

b,stringch);

//重载文本输出函数

voidOpposeCoef(Polynominal&

a,Node*temp);

//系数取反,用于减法运算

NodetheList;

//头节点

ofstreamFOut;

//输出流

此类用于构造一元多项式。

包括加、减、乘各各功能函数,还有两个帮助运算的辅助函数,以及界面输入输出和文本输出函数。

成员变量有头节点和输出流。

Polynominal:

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

}

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

3)

voidPolynominal:

GetMSG(CStringTempPoly){

TempPoly.Remove(_T('

^'

));

Node*TempNode=&

inti=0;

for(i;

i<

TempPoly.GetLength();

){

CStringtemp1;

CStringtemp2;

intj=1;

if(TempPoly.GetAt(i)==_T('

-'

)){

temp1=temp1+TempPoly.GetAt(i);

i++;

}

if(TempPoly.GetAt(i)==_T('

+'

x'

)){

temp1=temp1+_T('

1'

);

while(j==1){

if(TempPoly.GetAt(i)!

=_T('

temp1=temp1+TempPoly.GetAt(i);

i++;

}

elsej=0;

i++;

if(i<

(TempPoly.GetLength()-1)&

&

TempPoly.GetAt(i)==_T('

temp2=temp2+TempPoly.GetAt(i);

if(i==(TempPoly.GetLength()-1)&

))

temp2=temp2+_T('

else{

if(i==TempPoly.GetLength()&

TempPoly.GetAt(i-1)==_T('

temp2=temp2+_T('

else{

while(i<

TempPoly.GetLength()&

TempPoly.GetAt(i)!

)&

temp2=temp2+TempPoly.GetAt(i);

i++;

}

TempNode->

Next=newNode(_ttof(temp1),_ttoi(temp2),NULL);

//链表构建

TempNode=TempNode->

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

4)

CStringPolynominal:

Output_Node(){

intfirst=0;

CStringtemp;

CStringtemp_coef;

CStringtemp_exp;

Node*TempNode=theList.Next;

for(;

TempNode!

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("

break;

default:

coef==1)//其余指数输出“X^”形式

)+temp_exp;

elsetemp=temp+temp_coef+_T("

x^"

break;

first=1;

returntemp;

输出函数,将计算所得结果输出到对话框。

5)

PolyAdd(Polynominal&

b){

Node*p,*q,*temp;

temp=&

p=a.theList.Next;

q=b.theList.Next;

while(p!

=NULL&

q!

=NULL){

if((p->

exp)>

(q->

exp)){

temp->

Next=newNode(p->

coef,p->

temp=temp->

p=p->

elseif((p->

exp)==(q->

coef+q->

q=q->

exp)<

Next=newNode(q->

coef,q->

if(q!

while(q!

if(p!

while(p!

加法函数,实现多项式的相加。

在其中需要判断各项指数的关系,已实现按指数大小关系构建链表。

6)

OpposeCoef(Polynominal&

a,Node*temp){

temp=a.theList.Next;

while(temp!

temp->

coef=-(temp->

在执行减法操作时,用此函数将被减多项式各位系数取反,之后可直接调用加法函数进行运算;

7)

PolySubtract(Polynominal&

Node*temp=NULL;

Polynominalaa=b;

OpposeCoef(aa,temp);

PolyAdd(a,aa);

减法函数。

先调用系数取反函数,再调用加法函数,可直接实现减法功能。

其中为了不改变被减多项式的各项值,在此调用拷贝构造函数创建临时对象用于计算。

8)

PolyMultiply(Polynominal&

Next=newNode((p->

coef*q->

coef),(p->

exp+q->

exp),NULL);

p=p->

q=b.theList.Next;

PolySort();

乘法函数。

按项相乘,运算完之后,再调用排序函数,实现同指数项系数相加,并按照指数大小输出。

9)

PolySort(){

Polynominaltemp;

inti=1;

floattemp_coef=0;

inttemp_exp=0;

Node*tempNode=theList.Next;

Node*tempNode2=&

Node*tempNode3=&

temp.theList;

while(i==1){

tempNode=theList.Next;

tempNode2=&

tempNode!

if(tempNode->

exp>

temp_exp)

temp_exp=tempNode->

exp;

tempNode=tempNode->

if(tempNode!

for(;

if(tempNode->

exp==temp_exp){

temp_coef=temp_coef+tempNode->

coef;

tempNode2->

Next=tempNode->

tempNode=tempNode->

else{

tempNode2=tempNode2->

tempNode3->

Next=newNode(temp_coef,temp_exp,NULL);

tempNode3=tempNode3->

temp_coef=0;

temp_exp=0;

i=0;

Node*temp2=&

Node*temp3=temp.theList.Next;

temp3!

temp2->

Next=newNode(temp3->

coef,temp3->

temp2=temp2->

temp3=temp3->

实现相乘之后的排序,是最后的链表按照指数大小排列,并且每个指数只有一项。

10)

OutFile(){

FOut.open("

PolynominalList.txt"

ofstream:

app);

intfirst=1;

Node*temp=theList.Next;

FOut<

<

"

("

;

temp=temp->

if(!

first&

temp->

0)

FOut<

FOut<

temp->

switch(temp->

case0:

break;

//指数为0则推出

case1:

FOut<

//指数为1则直接输出X

default:

<

//其余指数输出“X^”形式

first=0;

)"

FOut.close();

文本输出函数,用于两个多项式的文本输出。

11)

OutFile(Polynominal&

b,stringch){

a.OutFile();

ch;

b.OutFile();

=("

\n\n"

重载文本输出函数,用于最后结果的一次性文本输出。

3.1.类设计

表2类表

序号

类名

属性

方法

1

Node

floatcoef;

intexp;

Node*Next;

Node();

Node(floatc,inte,Node*next);

2

Polynominal

NodetheList;

ofstreamFOut;

Polynominal();

voidGetMSG(CStringTempPloy);

CStringOutput_Node();

voidPolyAdd(Polynominal&

voidPolySubtract(Polynominal&

voidPolyMultiply(Polynominal&

voidPolySort();

voidOutFile();

voidOutFile(Polynominal&

voidOpposeCoef(Polynominal&

3.2.类关系图

3.3.数据结构设计

数据成员:

ClassNode:

2.

classPolynominal

此类中theList是头节点,其成员变量Next指向新建节点,构造成链表。

3.4.关键代码与运行界面

关键代码:

#ifndefPOLYNOMINA_H

#definePOLYNOMINA_H

#include"

Node.h"

#include<

string>

afxstr.h>

fstream>

iostream>

usingnamespacestd;

#endif

函数实现:

stdafx.h"

Polynominal.h"

conio.h"

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

当前位置:首页 > 初中教育 > 学科竞赛

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

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