下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一元稀疏多项式计算器实验报告级_班_年月日姓名 学号 1 实验题目设计一个一元稀疏多项式简单计算器。2 需求分析本程序用VC编写,实现一元浮点系数,整数指数稀疏多项式的创建、两个一元多项式相 加、两个一元多项式相减、输出一元多项式。 输入的形式和输入值的范围:A. 输入指定的数字,以此选择两个多项式的运算方式,运算方式有两个一元多项式相加、 两个一元多项式相减。B. 创建多项式时,需要输入此多项式,每一项的系数和指数。 输出的形式:每次输入一个完整的多项式后、每次得出多项式运算结果时,会以指定 的方式输出多项式。 程序所能达到的功能:实现一元稀疏多项式的创建、两个一元多项式相加、两个 一元多项
2、式相减、输出一元多项式。 测试数据: 输入数据:A. 出现选择两个多项式的运算方式菜单时,输入 1 (即使两个多项式相加);B. 首先输入多项式p的每一项系数和指数,当输入的指数为-5000时,表示该 多项式 输入完毕,输入的数据依次为:3, 3, 0, -5000 ;C. 其次输入多项式q的每一项系数和指数,输入数据依次为:2, 2, 0, -5000。 输出结果:多项式q+p的结果为: 多项式为:323x +2x3 概要设计1)为了实现上述程序功能,需要定义多项式结点的抽象数据类型:2)class Term数据对象:float coef; int exp; Term* link;该数据对象
3、为多项式一项中的系数。 该数据对象为多项式一项中的指数。该数据对象为指向下一个多项式结点的指针。基本操作:A. Term ( float c, int e)初始条件:无操作结果:初始化多项式结点对象,将 c 赋值给该结点的数据成员 coef (表示 系数), 将e赋值给该结点的数据成员exp (表示指数),将该结点的数据成员link赋值 为 0 。( float c, int e, Term* next) 初始条件:无操作结果:初始化多项式结点对象,将c赋值给该结点的数据成员coef (表示系数), 将e赋值给该结点的数据成员exp (表示指数),将next赋值给该结点的数据成员link (
4、link 表示指向下一个多项式结点的指针) 。C. Term* InsertAfter( float c, int e)初始条件:存在一个多项式结点操作结果:为一个新的多项式项申请结点,并且用Term进行初始化,把this-link 赋值给新项结点的 link ;并且把该新项结点的指针赋值给 this-link ,最后返回一个指向新 项结点的指针。D. friend ostream & operator (ostream &, const Term &) 初始条件:存在一个多项式结点操作结果:输出一个多项式结点中存放的该项的系数和指数,输出格式为coef Xfp,其中coef为该结点所存储的系
5、数,exp为该结点所存储的指数。3) 多项式 的抽象数据类型如下:class Polynominal 数据对象:Term* theList;该数据对象是多项式的头指针。基本操作:A. Polynominal () 初始条件:无 操作结果:初始化多项式对象,构造一个多项式的空的单循环链表。B. Polynominal ()初始条件:存在一个多项式对象 操作结果:当多项式对象的生命周期结束后,释放其所占用的内 存空间。C. void AddTerms(istream& in); 初始条件:存在一个多项式对象操作结果:让用户输入多项式的每一项,构造单循环链表。D. void Output(ostre
6、am& out) const ;初始条件:存在一个多项式对象操作结果:调用Term类上重载的 操作,输出多项式的每一项。E. void PolyAdd(Polynominal& r);初始条件:存在两个多项式对象 操作结果:将this指针所指向的多项式与r多项式相加,相加的结果存放在 this所指向的多项式中。F. void OpposeCoef();初始条件:存在一个多项式对象 操作结果:将this指针所指向的多项式每一项的系数取反。PolySubtract(Polynominal& r);初始条件:存在两个多项式对象操作结果:调用OpposeCoef函数,将r多项式的每一项系数取反;再调用
7、 PolyAdd函数,将r与this指针所指向的多项式相加,即得到this指针所指 向多项式减去r多项式的结果。H. friend ostream & operator (istream& ,Ponominal &);初始条件:存在一个多项式对象操作结果:调用AddTerms函数,将一个输入流对象返回J . frie nd Poly no mi nal & operator +(Po lynominal &, Poly no mi nal &);初始条件:存在两个多项式对象操作结果:调用PolyAdd函数,实现多项式的相加K. frie nd Poly no mi nal & operator
8、 -(Poly no mi nal &, Poly no mi nal &);初始条件:存在两个多项式对象操作结果:调用OpposeCoe和olyAdd函数,实现多项式的相减4) 综上所述,程序中的类图如图1所示Term-float coef;-int exp;-Term* link;+Term (float c, int e);+Term (float c, int e, Term* n ext);+Term* In sertAfter(float c, i nt e);-friend ostream & operator(ostream &,const Term &);Polynomina
9、l-Term* theList;+Po lynomin al ();+Po lynomin al ();+void AddTerms(istrea m& in);+void Output(ostrea m& out)c on st;+void PolyAdd(Poly nomi nal& r);+void PolySubtract(Polynominal& r);+void OpposeCoef();+frie nd ostream & operator(ostream &,const Polynominal &);+frie nd istream & operator(istream& ,P
10、o nominal &);+frie nd Polynominal& operator +(Po nominal &,Po nominal &);+frie nd Polynominal& operator -(Po nominal &,Po lynominal &);程序包含11个函数:CD主函数mai n() 多项式结点初始化函数Term (float c, i nt e); 多项式结点初始化函数Term (float c, i nt e, Term* next); 新申请结点后,将其插入this指针指向的结点后Term* In sertAfter(float c, i nt e); 多项
11、式构造函数Poly no mi nal (); 多项式析构函数Poly nomi nal (); 让用户输入多项式的每一项,构造单循环链表 输出多项式的每一项 将两个多项式相加 将两个多项式相减void AddTerms(istrea m& in);void Output(ostream & out)c on st;void PolyAdd(Polynominal& r);void PolySubtract(Polynominal& r);将一个多项式的每一项系数取反void OpposeCoef();程序包含5个运算符及操作符重载:friend ostream & operator(istr
12、eam& ,Po lynominal &);friend Polynominal& operator +(Po lynominal &,Po lynominal &); friend Poly no mi nal & operator -(Poly no mi nal & ,Poly no mi nal &); friend ostream & operatorlink;qAhead = qAhead 调用InsertAfter 函数,将p项插入到q多项式中;入数字选择执行不同的功能。输输入1,使用多项式q+多项式p功能输入2,使用多项式q-多项式p功能;输入其他数字,则提示输入错误,需要重新
13、输入数字选择功能,直至输入的数字为 为止。输入其他数字后,输出的画面如下:您输入的数据有误,请输入1或者2,请重新输入数字 输入1,使用多项式q+多项式p功能;输入2,使用多项式q-多项式p功能;输入1后,输出画面如下:俞入藝项衣 项中的系数和指数EXPJ ;当输入指数为T囲0时榊入结束此时请降幕输入多项式的各项系数和指数,当输入的指数为-5000时,结束该多项式的输 入,进入下一个多项式的输入阶段,输出画面如下:辂護麴牡谿S?系数和指数(z,;当输人指数为卫恤时输入结束此时请降幕输入多项式的各项系数和指数,当输入的指数为-5000时,结束该多项式的输 入,接着会打印输出多项式的相加的结果。并
14、且输出:请问是否还需要继续进行多项式计算?请输入y或n ( y-继续,n-退出)此时输入y则继续进行多项式计算,画面回到功能选择菜单,输入n则退出程序输入2时,操作步骤和上面的类似。7 测试结果按照下面的多项式进行测试,并且输入时互换两个多项式,把程序得出的运算结果和人 工计算结果对比,程序运算结果全部正确8 6 8 61) +5x +2x)+( 11x +7)=( +5x +11x +2x+7 )6 62) +( 11x +7)=( +11x -2x+7 )-33) +6x )-( +=()543243524) (x +x +x +x +x+1)+(-x -x )=( x +x +x+1)-
15、3-35) (x+x )+(-x-x)=0100200 100200 100 、6) (x +x)+( x+x )=( x +2x +x)3 23 27) (x +x +x)+0=x +x +x程序源代码:#includeusing namespace std;#include#includeconst int N=-5000;void main()char selection_y_n;int selection_number;doPolynominal p,q;cout 请选择两个多项式需要进行的运算 endl;cout1. 多项式 q+ 多项式 pendl;cout2. 多项式 q- 多项
16、式 pselection_number;while(selection_number!=1)&(selection_number!=2)endl;cout 您输入的数据有误,请输入 1 或者 2,请重新输入数字cout 请选择两个多项式需要进行的运算 endl;cout1. 多项式 q+ 多项式 pendl;cout2. 多项式 q- 多项式 pendlselection_number;cout 请输入两个需要计算的多项式 endl;cout 请按降幂输入多项式 pp;coutp;cout 请按降幂输入多项式 qq;coutq;switch (selection_number)case 1:q
17、=q+p;cout 多项式 q+p 的结果为: endl; coutq;break;case 2:q=q-p;cout 多项式 q-p 的结果为: endl; coutq;break;y 或 n ( y-继续,n-退出)endl;coutselection_y_n;while(selection_y_n=y);getchar();getchar();/ 以下是 Term 类的成员函数及友元函数的实现Term:Term(float c, int e)coef=c;exp=e;link=0;Term:Term(float c, int e, Term *next)coef=c;exp=e;link
18、=next;Term* Term:InsertAfter(float c, int e)link=new Term(c,e,link);/ 重载 ,让其输出多项式的一项;return link;ostream &operator (ostream & out,const Term& single)/ 该模块不输出系数为 0。if=0)return out;if= 1 & !=0); else if=-1 & !=0) out-;elseout;switchcase 0: break;case 1: outX;break;default: outXAlink=theList;Polynomina
19、l:Polynominal()Term* temp=theList-link;while(temp!=theList)theList-link=temp-link;delete temp;temp=theList-link;delete theList;void Polynominal:AddTerms(std:istream & in) / 该函数功能为输入多项式的每一项,直至当输 入指数为 N 时输入结束Term* temp=theList;float c;int e;while(1)cout 请输入多项式一项中的系数和指数(coef, exp );当输入指数为 N 时输入结束ce;if(e=N)break;temp=temp-InsertAfter(c,e);istream& operator (istream& in ,Polynominal &x)(in);return in;void Polynominal:Output(ostream& out)constint first=1; /first 用来判断输出的多项式是否为第一项, first=1 为第一项,否则不是第一项。Term* temp=theLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客户服务礼仪与沟通技巧培训模板
- 甘肃省民勤县2026年初三下-第三次月考(5月)语文试题试卷含解析
- 环境保护行动实施与责任承诺函3篇范文
- 公共安全事情紧急预案编制手册
- 网络信息处理守秘承诺书(4篇)
- (正式版)DB22∕T 2803-2017 《春玉米籽粒机收生产技术规程》
- 2026年思维可视化工具在学科教学中的应用策略
- 2024届中职高三单招英语二轮复习数词习题(含答案)
- 国庆长假节后复工质量培训
- 快手可以自己挂协议书
- 消防供水设施课件
- 市场监督管理行政处罚程序规定解读
- 函数的零点与方程的解(说课课件)
- GB/T 29061-2012建筑玻璃用功能膜
- GB/T 10128-2007金属材料室温扭转试验方法
- FZ/T 94005-1991刚性剑杆织机
- 无机材料工艺学-陶瓷2-原料
- 安全阀培训-课件
- 海洋生态学课件一
- DBJ50-T-365-2020 海绵城市建设项目评价标准
- 周口市医疗保障门诊特定药品保险申请表
评论
0/150
提交评论