1、1利用Insert()插入函数规范多项式的输入问题,进行同类项的合并和不同类项间的排序问题,使得到有序的链表,方便后续的运算2对赋值、加、减和乘运算符进行重载,赋予其新的意义,进行多项式间的四则运算。3发现函数间联系,可以减少代码的长度。巧妙利用Insert()函数和加运算符重载函数,方便乘法和减法等代码编写。二、实验成果1.输入要求按提示一次输入多项式各项的系数和指数,建立多项式。如下所示: 系数,指数:1,23,40 4(以输入系数为零的项结束创建) 创建结果为:1x2+3x4 根据自己的需要选择输入功能序号进行运算,如选择数字2进行加法运算2.输出样例 总体上各项是按照输入的方法进行输出
2、,如果指数为零只输出系数,如 果系数为零,那么该项不输出,如果系数为负数,那么两项间“+”变“-”。 以上述输入为例创建的结果为:1x2+3x4。 如果另一个多项式为:-1-2x6,那么加法运算后的结果为:-1+1x2+3x4-2x63.主要代码展示:/* c+开放实验项目* /一元符号多项式的四则运算 #include using namespace std;struct PNode PNode(double c=0,int e=-1) coef=c; expn=e; next=NULL; double coef; int expn; PNode *next;class Polynomial
3、 public: Polynomial()poly=new PNode; Polynomial(Polynomial & void Print(); Polynomial(); void Insert (PNode *temp); void CreatPoly(); Polynomial& operator = (const Polynomial & operator + (const Polynomial & operator - (Polynomial & operator * (const Polynomial & private: PNode *poly;/析构函数 Polynomia
4、l:Polynomial() PNode *pt=poly-next; while (pt) poly-next=pt- delete pt; pt=poly- delete poly; poly=NULL;/赋值运算符的重载Polynomial& Polynomial:operator = (const Polynomial &p) this-Polynomial(); poly=new PNode; PNode *pt=poly,*qt=p.poly- while(qt) PNode *s=new PNode(qt-coef,qt-expn); pt-next=s; pt=s; qt=qt
5、- return *this;/复制构造函数 Polynomial(Polynomial &p) *this=p;/遍历 void Polynomial:Print() if(poly-next=NULL) coutexpn=0) coutcoef; else coef while (pt) if(pt-0) cout else + cout while(qt&qt-expnexpn) pt=qt; qt=pt- if(qt=NULL|qt-expn temp-next=qt; else qt-coef+=temp- if(qt-coef=0) pt-next=qt- delete qt; /
6、多项式的构建函数 CreatPoly() double c; int e;系数,指数: cince; while (c) PNode *p=new PNode(c,e); Insert(p); cin/多项式的加法 operator + (const Polynomial &q) Polynomial *PC=new Polynomial; PNode *ta=poly-next,*tb=q.poly-next, *tc=PC-poly; while(ta&tb) int a=ta- int b=tb- int t=ab?1:(ba?-1:0); switch(t) case -1: PNod
7、e *s=new PNode(ta-coef,ta- tc- tc=s; ta=ta- break; case 0: double sum=ta-coef+tb- if(sum=0) ta=ta- tb=tb- else PNode *s=new PNode(sum,ta- tb=tb- case 1: PNode *s=new PNode(tb-coef,tb- tc- tc=tc- /switch /while while (ta) PNode *s=new PNode(ta- tc- tc=s; ta=ta- while (tb) PNode *s=new PNode(tb- tb=tb
8、- return *PC;/多项式的减法operator - (Polynomial & /复制取反相加 Polynomial P(p),*PC=new Polynomial; PNode *pt=P.poly- while(pt)coef=-pt- *PC=*this+P;/多项式的乘法next,*qt; for(;pt;pt=pt-next) for(qt=p.poly-qt;qt=qt- PNode *s=new PNode(pt-coef*qt-coef,pt-expn+qt- PC-Insert(s); /主函数 int main() Polynomial PA,PB,PC; int
9、 index; /-一元符号多项式的表示及运算-/ 本函数的功能列表:1.多项式的加法:2.多项式的减法:3.多项式的乘法:4.选择重建多项式:5.结束运算n依次输入PA各项系数和指数(以输入系数0项结束),建立多项式: PA.CreatPoly(); PA.Print();依次输入PB各项系数和指数(以输入系数0项结束),建立多项 PB.CreatPoly(); PB.Print();n请输入功能序号进行多项式的运算:index; while(index) switch(index) PC=PA+PB;PC=PA+PB: PC.Print(); case 2: PC=PA-PB;PC=PA-
10、PB: case 3: PC=PA*PB;PC=PA*PB: case 4: int flag;输入0修改多项式PA,其他数字保留多项式PA: cinflag; if(!flag) PA.CreatPoly(); PA.Print(); 输入0修改多项式PB,其他数字保留多项式PB: PB.CreatPoly(); PB.Print(); case 5:运算结束 return 0; /switch n是否需要继续,请再次输入选择: /while return 0;4.项目结果展示三、实践体会在此次的C+开放项目试验中,我承担了用C+实现一元符号多项式的四则运算,将所学C+知识运用实战编程中去,
11、并及时进行知识的查缺补漏,帮助我更好的掌握了C+这门语言。通过整个编程调试过程,我认识到完成一个程序的设计,必须一步一步的进行,修改程序中的Bug,以防影响后续程序的进行。不能一股脑的将程序全部写出,这样就会使得程序的调试的难度大大增加。要能够去考虑程序的每一步实现的可能性问题。如在这次试验中,关于赋值运算符的问题,普通的赋值运算符无法实现我自定义的多项式的整体复制,必须进行运算符的重载,赋予其新的意义。类似的还有加号、减号和乘号。考虑程序设计中的特殊部分的运算,像是此次项目中的头结点和尾结点等,防止程序的特殊化。要考虑程序的实用性,结合要求来对程序进行调整,返回引用值减少空间的使用,保护多项式的封装性,使得程序运行通畅和方便。在程序的基本编写结束时。还要对程序进行优化,使得程序能够尽可能的精炼,增加程序的可读性和含金量等。 总之一段好的代码一定是经过精心设计,千锤百炼,然后才能经久不衰。在此次实验项目中,我学会了一些编程的技巧,掌握了C+这门课程的主要知识,提升了自我钻研能力,希望以后能够多参与一些这样的开发项目。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1