一元符号多项式的四则运算.docx

上传人:b****2 文档编号:24516156 上传时间:2023-05-28 格式:DOCX 页数:14 大小:46.14KB
下载 相关 举报
一元符号多项式的四则运算.docx_第1页
第1页 / 共14页
一元符号多项式的四则运算.docx_第2页
第2页 / 共14页
一元符号多项式的四则运算.docx_第3页
第3页 / 共14页
一元符号多项式的四则运算.docx_第4页
第4页 / 共14页
一元符号多项式的四则运算.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

一元符号多项式的四则运算.docx

《一元符号多项式的四则运算.docx》由会员分享,可在线阅读,更多相关《一元符号多项式的四则运算.docx(14页珍藏版)》请在冰豆网上搜索。

一元符号多项式的四则运算.docx

一元符号多项式的四则运算

 

C++开放项目实验报告

题目:

一元符号多项式四则运算

姓名:

指导老师:

学号:

班级:

 

一、内容总结

1.功能要求

用所学C++知识编程实现两个一元符号多项式的加法,减法和乘法运算。

2.算法概要设计

1结点插入函数

voidInsert(PNode*temp);

2多项式的创建函数

voidCreatPoly();

3赋值运算符的重载

Polynomail&operator=(constPolynomail&p1);

4一元符号多项式的加法

Polynomail&operator+(constPolynomail&p);

5一元符号多项式的减法

Polynomail&operator-(Polynomail&p);

6一元符号多项式的乘法

Polynomail&operator*(constPolynomail&p);

3.应用技巧

1利用Insert()插入函数规范多项式的输入问题,进行同类项的合并和不同类项间的排序问题,使得到有序的链表,方便后续的运算

2对赋值、加、减和乘运算符进行重载,赋予其新的意义,进行多项式间的四则运算。

3发现函数间联系,可以减少代码的长度。

巧妙利用Insert()函数和加运算符重载函数,方便乘法和减法等代码编写。

二、实验成果

1.输入要求

按提示一次输入多项式各项的系数和指数,建立多项式。

如下所示:

系数,指数:

1,2

系数,指数:

3,4

系数,指数:

04(以输入系数为零的项结束创建)

创建结果为:

1x^2+3x^4

根据自己的需要选择输入功能序号进行运算,如选择数字2进行加法运算

2.输出样例

总体上各项是按照输入的方法进行输出,如果指数为零只输出系数,如果系数为零,那么该项不输出,如果系数为负数,那么两项间“+”变“-”。

以上述输入为例创建的结果为:

1x^2+3x^4。

如果另一个多项式为:

-1-2x^6,

那么加法运算后的结果为:

-1+1x^2+3x^4-2x^6

3.主要代码展示:

//****c++开放实验项目****

//一元符号多项式的四则运算

#include

usingnamespacestd;

structPNode{

PNode(doublec=0,inte=-1){coef=c;expn=e;next=NULL;}

doublecoef;

intexpn;

PNode*next;

};

classPolynomial{

public:

Polynomial(){poly=newPNode;}

Polynomial(Polynomial&p);

voidPrint();

~Polynomial();

voidInsert(PNode*temp);

voidCreatPoly();

Polynomial&operator=(constPolynomial&p);

Polynomial&operator+(constPolynomial&p);

Polynomial&operator-(Polynomial&p);

Polynomial&operator*(constPolynomial&p);

private:

PNode*poly;

};

//析构函数

Polynomial:

:

~Polynomial(){

PNode*pt=poly->next;

while(pt){

poly->next=pt->next;

deletept;

pt=poly->next;

}

deletepoly;

poly=NULL;

}

//赋值运算符的重载

Polynomial&Polynomial:

:

operator=(constPolynomial&p){

this->~Polynomial();

poly=newPNode;

PNode*pt=poly,*qt=p.poly->next;

while(qt){

PNode*s=newPNode(qt->coef,qt->expn);

pt->next=s;

pt=s;

qt=qt->next;

}

return*this;

}

//复制构造函数

Polynomial:

:

Polynomial(Polynomial&p){

poly=newPNode;

*this=p;

}

//遍历

voidPolynomial:

:

Print(){

if(poly->next==NULL){

cout<<"empty!

\n";

return;

}

PNode*pt=poly->next;

if(pt){

if(pt->expn==0){

cout<coef;

}

else{

cout<coef<<"x^"<expn;

}

pt=pt->next;

}

while(pt){

if(pt->expn==0){

cout<coef;

}

else{

if(pt->coef<0){

cout<coef<<"x^"<expn;

}

else{

cout<<"+"<coef<<"x^"<expn;

}

}

pt=pt->next;

}

cout<

}

//结点插入函数

voidPolynomial:

:

Insert(PNode*temp){

if(poly->next==NULL){

poly->next=temp;

return;

}

PNode*pt=poly;

PNode*qt=pt->next;

while(qt&&qt->expnexpn){

pt=qt;

qt=pt->next;

}

if(qt==NULL||qt->expn>temp->expn){

temp->next=qt;

pt->next=temp;

}

else{

qt->coef+=temp->coef;

if(qt->coef==0){

pt->next=qt->next;

deleteqt;

}

}

}

//多项式的构建函数

voidPolynomial:

:

CreatPoly(){

doublec;

inte;

cout<<"系数,指数:

";

cin>>c>>e;

while(c){

PNode*p=newPNode(c,e);

Insert(p);

cout<<"系数,指数:

";

cin>>c>>e;

}

}

//多项式的加法

Polynomial&Polynomial:

:

operator+(constPolynomial&q){

Polynomial*PC=newPolynomial;

PNode*ta=poly->next,*tb=q.poly->next,*tc=PC->poly;

while(ta&&tb){

inta=ta->expn;

intb=tb->expn;

intt=a>b?

1:

(b>a?

-1:

0);

switch(t){

case-1:

{

PNode*s=newPNode(ta->coef,ta->expn);

tc->next=s;

tc=s;

ta=ta->next;

break;

}

case0:

{

doublesum=ta->coef+tb->coef;

if(sum==0){

ta=ta->next;

tb=tb->next;

}

else{

PNode*s=newPNode(sum,ta->expn);

tc->next=s;

tc=s;

ta=ta->next;

tb=tb->next;

}

break;

}

case1:

{

PNode*s=newPNode(tb->coef,tb->expn);

tc->next=s;

tc=tc->next;

tb=tb->next;

break;

}

}//switch

}//while

while(ta){

PNode*s=newPNode(ta->coef,ta->expn);

tc->next=s;

tc=s;

ta=ta->next;

}

while(tb){

PNode*s=newPNode(tb->coef,tb->expn);

tc->next=s;

tc=s;

tb=tb->next;

}

return*PC;

}

//多项式的减法

Polynomial&Polynomial:

:

operator-(Polynomial&p){

//复制取反相加

PolynomialP(p),*PC=newPolynomial;

PNode*pt=P.poly->next;

while(pt){

pt->coef=-pt->coef;

pt=pt->next;

}

*PC=*this+P;

return*PC;

}

//多项式的乘法

Polynomial&Polynomial:

:

operator*(constPolynomial&p){

Polynomial*PC=newPolynomial;

PNode*pt=poly->next,*qt;

for(;pt;pt=pt->next){

for(qt=p.poly->next;qt;qt=qt->next){

PNode*s=newPNode(pt->coef*qt->coef,pt->expn+qt->expn);

PC->Insert(s);

}

}

return*PC;

}

//主函数

intmain(){

PolynomialPA,PB,PC;

intindex;

cout<<"//------一元符号多项式的表示及运算------//"<

cout<<"本函数的功能列表:

"<

cout<<"1.多项式的加法:

"<

cout<<"2.多项式的减法:

"<

cout<<"3.多项式的乘法:

"<

cout<<"4.选择重建多项式:

"<

cout<<"5.结束运算\n"<

cout<<"依次输入PA各项系数和指数(以输入系数0项结束),建立多项

式:

"<

PA.CreatPoly();

PA.Print();

cout<<"依次输入PB各项系数和指数(以输入系数0项结束),建立多项

式:

"<

PB.CreatPoly();

PB.Print();

cout<<"\n请输入功能序号进行多项式的运算:

";

cin>>index;

while(index){

switch(index){

case1:

{

PC=PA+PB;

cout<<"PC=PA+PB:

";

PC.Print();

break;

}

case2:

{

PC=PA-PB;

cout<<"PC=PA-PB:

";

PC.Print();

break;

}

case3:

{

PC=PA*PB;

cout<<"PC=PA*PB:

";

PC.Print();

break;

}

case4:

{

intflag;

cout<<"输入0修改多项式PA,其他数字保留多项式PA:

";

cin>>flag;

if(!

flag){

PA.CreatPoly();

PA.Print();

}

cout<<"输入0修改多项式PB,其他数字保留多项式PB:

";

cin>>flag;

if(!

flag){

PB.CreatPoly();

PB.Print();

}

break;

}

case5:

{

cout<<"运算结束"<

return0;

}

}//switch

cout<<"\n是否需要继续,请再次输入选择:

";

cin>>index;

}//while

return0;

}

4.项目结果展示

三、实践体会

在此次的C++开放项目试验中,我承担了用C++实现一元符号多项式的四则运算,将所学C++知识运用实战编程中去,并及时进行知识的查缺补漏,帮助我更好的掌握了C++这门语言。

通过整个编程调试过程,我认识到完成一个程序的设计,必须一步一步的进行,修改程序中的Bug,以防影响后续程序的进行。

不能一股脑的将程序全部写出,这样就会使得程序的调试的难度大大增加。

要能够去考虑程序的每一步实现的可能性问题。

如在这次试验中,关于赋值运算符的问题,普通的赋值运算符无法实现我自定义的多项式的整体复制,必须进行运算符的重载,赋予其新的意义。

类似的还有加号、减号和乘号。

考虑程序设计中的特殊部分的运算,像是此次项目中的头结点和尾结点等,防止程序的特殊化。

要考虑程序的实用性,结合要求来对程序进行调整,返回引用值减少空间的使用,保护多项式的封装性,使得程序运行通畅和方便。

在程序的基本编写结束时。

还要对程序进行优化,使得程序能够尽可能的精炼,增加程序的可读性和含金量等。

总之一段好的代码一定是经过精心设计,千锤百炼,然后才能经久不衰。

在此次实验项目中,我学会了一些编程的技巧,掌握了C++这门课程的主要知识,提升了自我钻研能力,希望以后能够多参与一些这样的开发项目。

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

当前位置:首页 > 人文社科 > 教育学心理学

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

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