求解有理方程_第1页
求解有理方程_第2页
求解有理方程_第3页
求解有理方程_第4页
求解有理方程_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

求解有理数分式方程【设计要求】设计一个有理数类,用来实现有理数分式方程的输入和计算。【概述】有理数就是两个整数的比率,通常表示为/其中称为分子,称为分母,分母不能为。开发类的目标就是创建一种类型,该类型的对象要像使用基本类型定义的对象那样。因此,设计该类包括了两个整型数据成员,一个作为分子,另一个作为分母。例如:有理数可以使用这个类的对象表示为。设计中需要考虑下列几种情况:如何实现分子与分母的输入与输出。例如想使用如下形式cin<<r;/输/入1/6输出如果分子和分母有公约数,应该进行化简,也就是约分。例如:4/应6表示为2/。3根据需要,有时要将1/表2示为0.,5或者将0.表5示为1/。2有理数可以进行四则运算,例如等。但希望直接像普通的加法一样操作,例如1和,相加得到(,算术表达是为:有理数还可以比较大小,例如:1/和22/是4相等的,这需要为它们定义关系运算符。因此,要实现这些操作,就需要重载输入/输出流运算符、化简有理数、将有理数转换成实数、重载双目运算符、关系运算符。【运行效果参考】主界面.实现各种有理分数的输入/输出.实现各种有理分数的换算.整数5用有理数表示为鸣八.输入一个有理薮:-5/125等聂的浮点聂是.曲。4.输入前个看理数:3/46/7Reaults:45Z28<+>-3/28<->9/14<*>7/8</>有理数”4小于有理数“7.揄入一个浮点薮二.75转换成有理数:3/4再耨换为有理数。"5Pi'-essanykeytocontinue.实现求解有理数方程下面是两组求解实例:||蟀音理数方程“力乂+匚F="f赖X方程的有理数系数“bc/de/f:1/2-3/45/6x=19/fc带分数的解为:31MP1'essanukeytocontinne-|解有理数方程"bx+"(!="£输X芳和的宥理数系数“bc/de/f:1/23/45/6x=l/6带分数为解为essanykeytocontinue■■■■■■类的设计classRational{private:longnum,den;//供有理数成员函数自己使用的私有成员函数voidStandardize(void);//标准化,使其对”-“号的表达式统一longgcd(1ongm,longn)const;//简化,如果输入的有理数是公约数public://用于整数->有理数、实数->有理数的构造函数Rational(1ongp=0,longq=1);Rational(doublex);//重载输入/输出流运算符friendistream&operator>>(istream&istr,Rational&x);friendostream&operator<<(ostream&ostr,constRational&x);//双目运算符Rationaloperator+(Rational&x)const;Rationaloperator-(Rational&x)const;Rationaloperator*(Rational&x)const;Rationaloperator/(Rational&x)const;//单目运算符Rationaloperator-(void)const;//关系运算符intoperator<(Rational&x)const;intoperator<=(Rational&x)const;intoperator==(Rational&x)const;intoperator!=(Rational&x)const;intoperator>(Rational&x)const;intoperator>=(Rational&x)const;//转换运算符:有理数->实数operatordouble(void)const;//化简有理数voidReduce(void);//例程intGetNumerator(void)const{returnnum;}intGetDenominator(void)const{returnden;}};设计类中需要考虑的几个问题构造函数构造函数的设计应能满足如下方式创建对象:Rationalr(5L);//5/lRationalp;//0/1Rationals(2,3);//2/3Rationalq(5,-6);//-5/6Rationalq(.5);//1/2和调用不同的构造函数,所以需要使用来区别。前者表示参数是整型数据,则为型数据。因此使用默认参数的原型:(它能满足使用各种情况下创建对象的要求,//使用默认参数的构造函数Rational::Rational(1ongp,longq):num(p),den(q){if(den==0){cerr<<”AZerodenominatoriginvalid”<<endl;exit(1);}Standardize();//不允许分母为0,调用类的私有成员函数,使其对“-”号表达式统一Reduce();//简化有理数函数}另一个构造函数用来将是数换算成最接近的有理数。例如将转换为//构造函数用来将数换算成最接近的有理数Rational::Rational(doublex){doublevall,val2;vall=100000000L*x;val2=10000000L*x;num=long(vall-val2);den=90000000L;Reduce();}成员函数私有成员函数用来标准化,使其对””号的表达式统一voidRational::Standardize(void){if(den<0){num=-num;den=-den;}}如果输入的有理数有公约数,则需要进行化简。这里用成员函数完成简化任务,它被函数调用。私有成员函数用来简化,如果输入的有理数是公约数longRational::gcd(10ngm,longn)const{staticlongx;if(m>n){if(n==0)x=m;elsegcd(n,m%n);}else{if(m==0)x=n;elsegcd(m,n%m);}returnx;}私私公有成员函数,简化有理数voidRational::Reduce(void){longbigdivisor,tempnumerator;tempnumerator=(num<0)?-num:num;if(num==0)den=1;else{bigdivisor=gcd(tempnumerator,den);if(bigdivisor>1){num/=bigdivisor;den/=bigdivisor;}}}/公/有成员函数,将有理数转换成实数Rational::operatordouble(void)const{returndouble(num)/den;}运算符重载(1)重载流运算符-按格式构造输出/输入。/*/重载输出流运算符ostream&operator<<(ostream&ostr,constRational&x){ostr<<x.num<<”/”<<x.den;returnostr;}输入流需要保证正确的格式。首先保证分母不等于零;然后调用和函数调整格式。//*重载输入流运算符istream&operator>>(istream&istr,Rational&x){charc;istr>>x.num>>c>>x.den;if(x.den==0){cerr<<“AZerodenominatoriginvalid"<<endl;exit(1);}x.Standardize();x.Reduce();returnistr;}(2)重载双目运算符(+,-,*)如:/*重载双目运算符+RationalRational::operator+(Rational&x)const{Rationaltemp=Rational(num*x.den+den*x.num,den*x.den);temp.Reduce();returntemp;}其他运算符类似。(3重)载“/”运算符与构造函数同理,得到结果之后,调用和函数。RationalRational::operator/(Rational&x)const{Rationaltemp=Rational(num*x.den,den*x.num);temp.Standardize();temp.Reduce();returntemp;}其他运算不需要调用函数,根据计算公式很容易写出。(4)重载单目运算符//*重载单目运算符RationalRational::operator-(void)const{returnRational(-num,den);}(5重)载关系运算符(>,<,>=,<)=,==,!=例如:/*重载关系运算符<intRational::operator<(Rational&x)const{return(hum*x.den<den*x.num);}其他运算符类似。1.设计主菜单界面首先编写一个菜单驱动程序,输入1-之4间的任意一个数字,即可进入相应选择项。思路提示:可使用语句和…语句实现主菜单功能的循环选择。部分参考代码:voidmain(){for(;;){switch(menu_select()){Y0();//输入输出有理数break;Y1();//有理数换算break;Y2();//有理数求解方程break;cout<<"\t再见!\n";return;}}}intmenu_select()//菜单选择函数{chars[2];intcn;for(inti=0;i<24;i++){cout<<"*1.检测有理数输入输出.*\n";TOC\o"1-5"\h\zcout<<"*2.有理数换算.*\n";cout<<"*3.解有理数方程.*\n";cout<<"*4.退出.*";cout<<endl;for(;;){gets(s);cn=atoi(s);//是为了使输入的字符串转变为数字}returncn;}语句“cn=atoi(s);”是为了使输入的字符串转变为数字,以便使switch中的case语句对应数字1-3。对于不符合要求的输入,将被要求重新输入。设计类3.编写相关功能函数例如:voidY2(){Rationalx

温馨提示

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

评论

0/150

提交评论