元稀疏多项式计算器实验报告c编写附源代码_第1页
元稀疏多项式计算器实验报告c编写附源代码_第2页
元稀疏多项式计算器实验报告c编写附源代码_第3页
元稀疏多项式计算器实验报告c编写附源代码_第4页
元稀疏多项式计算器实验报告c编写附源代码_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一元稀疏多项式计算器实验报告 级_班_年月日姓名 学号 1 实验题目 设计一个一元稀疏多项式简单计算器。 2 需求分析 本程序用VC编写,实现一元浮点系数,整数指数稀疏多项式的创建、两个一元多项式相 加、两个一元多项式相减、输出一元多项式。 输入的形式和输入值的范围: A. 输入指定的数字,以此选择两个多项式的运算方式,运算方式有两个一元多项式相加、 两个一元多项式相减。 B. 创建多项式时,需要输入此多项式,每一项的系数和指数。 输出的形式:每次输入一个完整的多项式后、每次得出多项式运算结果时,会以指定 的方式输出多项式。 程序所能达到的功能:实现一元稀疏多项式的创建、两个一元多项式相加、两

2、个 一元多项式相减、输出一元多项式。 测试数据: 输入数据: A. 出现选择两个多项式的运算方式菜单时,输入 1 (即使两个多项式相加); B. 首先输入多项式p的每一项系数和指数,当输入的指数为-5000时,表示该 多项式 输入完毕,输入的数据依次为:3, 3, 0, -5000 ; C. 其次输入多项式q的每一项系数和指数,输入数据依次为:2, 2, 0, -5000。 输出结果: 多项式q+p的结果为: 多项式为: 32 3x +2x 3 概要设计 1)为了实现上述程序功能,需要定义多项式结点的抽象数据类型: 2)class Term 数据对象: float coef; int exp;

3、 Term* link; 该数据对象为多项式一项中的系数。 该数据对象为多项式一项中的指数。 该数据对象为指向下一个多项式结点的指针。 基本操作: A. Term ( float c, int e) 初始条件:无 操作结果:初始化多项式结点对象,将 c 赋值给该结点的数据成员 coef (表示 系数), 将e赋值给该结点的数据成员exp (表示指数),将该结点的数据成员link赋值 为 0 。 ( float c, int e, Term* next) 初始条件:无 操作结果:初始化多项式结点对象,将c赋值给该结点的数据成员coef (表示系数), 将e赋值给该结点的数据成员exp (表示指数

4、),将next赋值给该结点的数据成员link ( link 表示指向下一个多项式结点的指针) 。 C. Term* InsertAfter( float c, int e) 初始条件:存在一个多项式结点 操作结果:为一个新的多项式项申请结点,并且用Term进行初始化,把this-link 赋值给新项结点的 link ;并且把该新项结点的指针赋值给 this-link ,最后返回一个指向新 项结点的指针。 D. friend ostream 该数据对象是多项式的头指针。 基本操作: A. Polynominal () 初始条件:无 操作结果:初始化多项式对象,构造一个多项式的空的单循环链表。 B

5、. Polynominal () 初始条件:存在一个多项式对象 操作结果:当多项式对象的生命周期结束后,释放其所占用的内 存空间。 C. void AddTerms(istream 初始条件:存在一个多项式对象 操作结果:让用户输入多项式的每一项,构造单循环链表。 D. void Output(ostream 初始条件:存在一个多项式对象 操作结果:调用Term类上重载的 操作,输出多项式的每一项。 E. void PolyAdd(Polynominal 初始条件:存在两个多项式对象 操作结果:将this指针所指向的多项式与r多项式相加,相加的结果存放在 this所指向的多项式中。 F. vo

6、id OpposeCoef(); 初始条件:存在一个多项式对象 操作结果:将this指针所指向的多项式每一项的系数取反。 PolySubtract(Polynominal 初始条件:存在两个多项式对象 操作结果:调用OpposeCoef函数,将r多项式的每一项系数取反;再调用 PolyAdd函数,将r与this指针所指向的多项式相加,即得到this指针所指 向多项式减去r多项式的结果。 H. friend ostream 初始条件:存在一个多项式对象 操作结果:调用AddTerms函数,将一个输入流对象返回 J . frie nd Poly no mi nal 初始条件:存在两个多项式对象 操

7、作结果:调用PolyAdd函数,实现多项式的相加 K. frie nd 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 Polynominal -Term* theL

8、ist; +Po lynomin al (); +Po lynomin al (); +void AddTerms(istrea m +void Output(ostrea m +void PolyAdd(Poly nomi nal +void PolySubtract(Polynominal +void OpposeCoef(); +frie nd ostream +frie nd istream +frie nd Polynominal +frie nd Polynominal 程序包含11个函数: CD主函数mai n() 多项式结点初始化函数Term (float c, i nt e)

9、; 多项式结点初始化函数Term (float c, i nt e, Term* next); 新申请结点后,将其插入this指针指向的结点后 Term* In sertAfter(float c, i nt e); 多项式构造函数Poly no mi nal (); 多项式析构函数Poly nomi nal (); 让用户输入多项式的每一项,构造单循环链表 输出多项式的每一项 将两个多项式相加 将两个多项式相减 void AddTerms(istrea m void Output(ostream void PolyAdd(Polynominal void PolySubtract(Polyn

10、ominal 将一个多项式的每一项系数取反void OpposeCoef(); 程序包含5个运算符及操作符重载: friend ostream friend Polynominal friend Poly no mi nal friend ostream qAhead = qAhead 调用 InsertAfter 函数,将p项插入 到q多项式中; 入数字选择执行不同的功能。 输 输入1,使用多项式q+多项式p功能 输入2,使用多项式q-多项式p功能; 输入其他数字,则提示输入错误,需要重新输入数字选择功能,直至输入的数字为 为止。 输入其他数字后,输出的画面如下: 您输入的数据有误,请输入1

11、或者2,请重新输入数字 输入1,使用多项式q+多项式p功能; 输入2,使用多项式q-多项式p功能; 输入1后,输出画面如下: 俞入藝项衣 项中的系数和指数 EXPJ ; 当输入指数为T囲0时榊入结束 此时请降幕输入多项式的各项系数和指数,当输入的指数为-5000时,结束该多项式的输 入,进入下一个多项式的输入阶段,输出画面如下: 辂護麴牡谿S?系数和指数(z,;当输人指数为卫恤时输入结束 此时请降幕输入多项式的各项系数和指数,当输入的指数为-5000时,结束该多项式的输 入,接着会打印输出多项式的相加的结果。并且输出: 请问是否还需要继续进行多项式计算?请输入y或n ( y-继续,n-退出)

12、此时输入y则继续进行多项式计算,画面回到功能选择菜单,输入n则退出程序 输入2时,操作步骤和上面的类似。 7 测试结果 按照下面的多项式进行测试,并且输入时互换两个多项式,把程序得出的运算结果和人 工计算结果对比,程序运算结果全部正确 8 6 8 6 1) +5x +2x)+( 11x +7)=( +5x +11x +2x+7 ) 6 6 2) +( 11x +7)=( +11x -2x+7 ) -3 3) +6x )-( +=() 54324352 4) (x +x +x +x +x+1)+(-x -x )=( x +x +x+1) -3-3 5) (x+x )+(-x-x)=0 10020

13、0 100200 100 、 6) (x +x)+( x+x )=( x +2x +x) 3 23 2 7) (x +x +x)+0=x +x +x 程序源代码: #include using namespace std; #include #include const int N=-5000; void main() char selection_y_n; int selection_number; do Polynominal p,q; cout 请选择两个多项式需要进行的运算 endl; cout1. 多项式 q+ 多项式 pendl; cout2. 多项式 q- 多项式 pselect

14、ion_number; while(selection_number!=1) 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=q+p; cout 多项式 q+p 的结果为:

15、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=next

16、; Term* Term:InsertAfter(float c, int e) link=new Term(c,e,link); return link; / 重载 ,让其输出多项式的一项; ostream if= 1 else if=-1 else out; switch case 0: break; case 1: outX;break; default: outXAlink=theList; Polynominal:Polynominal() Term* temp=theList-link; while(temp!=theList) theList-link=temp-link; de

17、lete temp; temp=theList-link; delete theList; void Polynominal:AddTerms(std:istream float c; int e; while(1) cout 请输入多项式一项中的系数和指数(coef, exp );当输入指数为 N 时输入结束 ce; if(e=N) break; temp=temp-InsertAfter(c,e); istream return in; void Polynominal:Output(ostream /first 用来判断输出的多项式是否为第一项, first=1 为第一项,否则不是第一项

18、。 Term* temp=theList-link; if(temp-coef=0) out 多项式为: 0endl; else out 多项式为: link) if(!first first=0; outexp) (p-exp) /跳过 q-exp 小的项。 outnendl; ostream q=qAhead-link; while(p-exp!=N) /对多项式 r 进行遍历,直至处理完其所有节点。 qAhead=q; q=q-link; if(q-exp) = (p-exp) /多项式指数相等时处理模块。 q-coef=(q-coef)+(p-coef); if(q-coef)=0) qAhead-link=q-link; delete q; q=q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论