一元符号多项式的四则运算讲解.docx
- 文档编号:5347836
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:12
- 大小:60.09KB
一元符号多项式的四则运算讲解.docx
《一元符号多项式的四则运算讲解.docx》由会员分享,可在线阅读,更多相关《一元符号多项式的四则运算讲解.docx(12页珍藏版)》请在冰豆网上搜索。
一元符号多项式的四则运算讲解
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<
}
else{
cout<
}
pt=pt->next;
}
while(pt){
if(pt->expn==0){
cout<
}
else{
if(pt->coef<0){
cout<
}
else{
cout<<"+"<
}
}
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->expn 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++这门课程的主要知识,提升了自我钻研能力,希望以后能够多参与一些这样的开发项目。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一元 符号 多项式 四则运算 讲解