求解有理方程_第1頁
求解有理方程_第2頁
求解有理方程_第3頁
求解有理方程_第4頁
求解有理方程_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

求解有理數(shù)分式方程【設(shè)計要求】設(shè)計一個Rational(有理數(shù))類,用來實現(xiàn)有理數(shù)分式方程的輸入和計算?!靖攀觥坑欣頂?shù)就是兩個整數(shù)的比率,通常表示為a/b。其中a稱為分子,b稱為分母,分母不能為0。開發(fā)Rational類的目標(biāo)就是創(chuàng)建一種類型,該類型的對象要像使用基本類型定義的對象那樣。因此,設(shè)計該類包括了兩個整型數(shù)據(jù)成員,一個作為分子,另一個作為分母。例如:有理數(shù)1/2可以使用這個類的對象r表示為r(1,2)。設(shè)計中需要考慮下列幾種情況:如何實現(xiàn)分子與分母的輸入與輸出。例如,想使用如下形式:cin<<r;1/6〃輸入cout>>r;1/6//輸出如果分子和分母有公約數(shù),應(yīng)該進(jìn)行化簡,也就是約分。例如:4/6應(yīng)表示為2/3。根據(jù)需要,有時要將1/2表示為0.5,或者將0.5表示為1/2。有理數(shù)可以進(jìn)行四則運算,例如1/4+l/2=3/4等。但希望直接像普通的加法一樣操作,例如:r1(1,4)和r2(1,2)相加得到r(3,4),算術(shù)表達(dá)是為:r=r1+r2;有理數(shù)還可以比較大小,例如:1/2和2/4是相等的,這需要為它們定義關(guān)系運算符。因此,要實現(xiàn)這些操作,就需要重載輸入/輸出流運算符、化簡有理數(shù)、將有理數(shù)轉(zhuǎn)換成實數(shù)、重載雙目運算符、關(guān)系運算符。【運行效果參考】主界面輸?程數(shù)算方理換數(shù)金理-測理有出檢有瞿■■■■1234輸?程數(shù)算方理換數(shù)金理-測理有出檢有瞿■■■■1234實現(xiàn)各種有理分?jǐn)?shù)的輸入/輸出實現(xiàn)各種有理分?jǐn)?shù)的換算L整數(shù)s用有理數(shù)表示為瀉〃2-輸入一個有理教:-5/125等抵的浮點藪是=-0-043.輸入兩個有理數(shù):3/46/7Reaults:45/28<+>-3/28<->9/14<*>7/8</>有理數(shù)3*』飛于者理裁6/??浦入一個浮點期」5會換成有理數(shù)=3方苒轉(zhuǎn)換為有理數(shù)Presseinykeytocontinue實現(xiàn)求解有理數(shù)方程下面是兩組求解實例:|解百理數(shù)方程丑/hx"=e/輸犬方程的看理數(shù)系數(shù)丑4c/de/f:1/2-3/45/6x=19/6帶分?jǐn)?shù)的解為口。牌ressanykeytocontinue—|解有理數(shù)方程m/hx+c々=e”輸犬方程的胃理數(shù)系數(shù)c/de/f:1/23/45/6x=l/6帶分?jǐn)?shù)的解為essanykeytocontinLie【關(guān)聯(lián)知識】Rational類的設(shè)計classRational{private:longnum,den;//供有理數(shù)成員函數(shù)自己使用的私有成員函數(shù)voidStandardize(void);//標(biāo)準(zhǔn)化,使其對”-''號的表達(dá)式統(tǒng)一longgcd(1ongm,longn)const; //簡化,如果輸入的有理數(shù)是公約數(shù)public://用于整數(shù)->有理數(shù)、實數(shù)->有理數(shù)的構(gòu)造函數(shù)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;//關(guān)系運算符intoperator<(Rational&x)const;intoperator<=(Rational&x)const;intoperator==(Rational&x)const;intoperator!=(Rational&x)const;intoperator>(Rational&x)const;intoperator>=(Rational&x)const;//轉(zhuǎn)換運算符:有理數(shù)->實數(shù)operatordouble(void)const;//化簡有理數(shù)voidReduce(void);//例程intGetNumerator(void)const{returnnum;}intGetDenominator(void)const {returnden;}};設(shè)計Rational類中需要考慮的幾個問題構(gòu)造函數(shù)構(gòu)造函數(shù)的設(shè)計應(yīng)能滿足如下方式創(chuàng)建對象:Rationalr(5L); //5/lRationalp;//0/1Rationals(2,3);//2/3Rationalq(5,-6);//-5/6Rationalq(.5);//1/2r(5L)和q(.5)調(diào)用不同的構(gòu)造函數(shù),所以需要使用L(1)來區(qū)別。前者表示參數(shù)是整型數(shù)據(jù),.5則為double型數(shù)據(jù)。因此,使用默認(rèn)參數(shù)的原型:Rational(longp=O,longq=1);它能滿足使用各種情況下創(chuàng)建對象的要求:Rationalr1,r2(5L),r3(4,8),r4(.75);//使用默認(rèn)參數(shù)的構(gòu)造函數(shù)Rational::Rational(1ongp,longq):num(p),den(q){if(den==0){cerr<<”AZerodenominatoriginvalid”<<endl;exit(1);}Standardize();//不允許分母為0,調(diào)用類的私有成員函數(shù),使其對''-〃號表達(dá)式統(tǒng)一Reduce();//簡化有理數(shù)函數(shù)}另一個構(gòu)造函數(shù)用來將是數(shù)換算成最接近的有理數(shù)。例如:將Rationalr(0.5)轉(zhuǎn)換為1/2//構(gòu)造函數(shù)用來將數(shù)換算成最接近的有理數(shù)Rational::Rational(doublex){doublevall,val2;vall=100000000L*x;val2=10000000L*x;num=long(vall-val2);den=90000000L;Reduce();}成員函數(shù)//私有成員函數(shù)Standardize():用來標(biāo)準(zhǔn)化,使其對”-“號的表達(dá)式統(tǒng)一voidRational::Standardize(void){if(den<0){num=-num;den=-den;}}如果輸入的有理數(shù)有公約數(shù),則需要進(jìn)行化簡。這里用gcd()成員函數(shù)完成簡化任務(wù),它被Reduce()函數(shù)調(diào)用。//私有成員函數(shù)gcd():用來簡化,如果輸入的有理數(shù)是公約數(shù)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(mn%m);}returnx;}//公有成員函數(shù),簡化有理數(shù)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;}}}//公有成員函數(shù),將有理數(shù)轉(zhuǎn)換成實數(shù)Rational::operatordouble(void)const{returndouble(num)/den;}運算符重載(1)重載流運算符-按格式構(gòu)造輸出/輸入。//*重載輸出流運算符ostream&operator<<(ostream&ostr,constRational&x){ostr<<x.num<<”/''<<x.den;returnostr;}輸入流需要保證正確的格式。首先保證分母不等于零;然后調(diào)用Standardize()和Reduce()函數(shù)調(diào)整格式。//*重載輸入流運算符istream&operator>>(istream&istr,Rational&x){charc;istr>>x.num>>c>>x.denif(x.den==0){cerr<<“AZerodenominatoriginvalid"<<endl;exit(1);}x.Standardize();x.Reduce();returnistr;}重載雙目運算符(+,-,*)如:/*重載雙目運算符+RationalRational::operator+(Rational&x)const{Rationaltemp=Rational(num*x.den+den*x.numden*x.den);temp.Reduce();returntemp;}其他運算符類似。重載"/”運算符與構(gòu)造函數(shù)同理,得到結(jié)果之后,調(diào)用Standardize()和Reduce()函數(shù)。RationalRational::operator/(Rational&x)const{Rationaltemp=Rational(num*x.den,den*x.num);temp.Standardize();temp.Reduce();returntemp;}其他運算不需要調(diào)用Standardize()函數(shù),根據(jù)計算公式很容易寫出。重載單目運算符//*重載單目運算符RationalRational::operator-(void)const{returnRational(-num,den);}重載關(guān)系運算符(>,<,>=,<=,==,!=)例如:/*重載關(guān)系運算符<intRational::operator<(Rational&x)const{return(hum*x.den<den*x.num);}其他運算符類似?!緟⒖荚O(shè)計思路與算法】設(shè)計主菜單界面首先編寫一個菜單驅(qū)動程序,輸入1-4之間的任意一個數(shù)字,即可進(jìn)入相應(yīng)選擇項。思路提示:可使用for語句和switch?case語句實現(xiàn)主菜單功能的循環(huán)選擇。部分參考代碼:voidmain(){for(;;){switch(menu_select()){case1:Y0();//輸入輸出有理數(shù)break;case2:Y1();//有理數(shù)換算break;case3:Y2();//有理數(shù)求解方程break;case4:cout<<"\1再見!\n”;return;}}}intmenu_select() //菜單選擇函數(shù){chars[2];intcn;for(inti=0;i<24;i++){cout<<"*1.檢測有理數(shù)輸入輸出.*\n”;TOC\o"1-5"\h\zcout<<"*2有理數(shù)換算. *\n";cout<<"*3解有理數(shù)方程. *\n”;cout<<"*4退出. *";cout<<endl;for(;;){gets(s);cn=atoi(s);//是為了使輸入的字符串轉(zhuǎn)變?yōu)閿?shù)字}returncn;}語句、'cn=atoi(s);”是為了使輸入的字符串轉(zhuǎn)變?yōu)閿?shù)字,以便使switch中的case語句對應(yīng)數(shù)字1-3。對于不符合要求的輸入,將被要求重新輸入。設(shè)計類Rational編寫相關(guān)功能函數(shù)例如:voidY2(){Rationalx,y,z;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論