




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上目錄1. 題目?jī)?nèi)容-22. 程序特點(diǎn)及功能-33. 總體思路-34. 詳細(xì)設(shè)計(jì)-45. 程序清單-66. 運(yùn)行結(jié)果與分析-137. 參考文獻(xiàn)-22課程設(shè)計(jì)名稱(chēng):小型特殊計(jì)算器1.設(shè)計(jì)內(nèi)容:實(shí)現(xiàn)一個(gè)特殊的計(jì)算器,可以實(shí)現(xiàn)復(fù)數(shù)、有理數(shù)、矩陣和集合的特殊計(jì)算。程序可以實(shí)現(xiàn)復(fù)數(shù)、有理數(shù)的加、減、乘、除,可以實(shí)現(xiàn)矩陣的加法、減法和乘法運(yùn)算,也可以實(shí)現(xiàn)集合的求交集、并集、子集的運(yùn)算。2.設(shè)計(jì)目的與要求:2.1設(shè)計(jì)目的1.達(dá)到熟練掌握C+語(yǔ)言的基本知識(shí)和技能; 2.基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3.能夠利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的面向?qū)ο蟪绦蛟O(shè)計(jì)問(wèn)題。2.2設(shè)
2、計(jì)要求1.要求利用面向?qū)ο蟮姆椒ㄒ约癈+的編程思想來(lái)完成系統(tǒng)的設(shè)計(jì); 2.要求在設(shè)計(jì)的過(guò)程中,建立清晰的類(lèi)層次; 3.在系統(tǒng)的設(shè)計(jì)中,至少要用到面向?qū)ο蟮囊环N機(jī)制。3.系統(tǒng)分析與設(shè)計(jì)一主要知識(shí)點(diǎn)運(yùn)算符重載增加了C+語(yǔ)言的可擴(kuò)充性。運(yùn)算符的重載實(shí)際上就是一種函數(shù)調(diào)用的形式,可以用成員函數(shù)重載運(yùn)算符,就是將運(yùn)算符重載定義為一個(gè)類(lèi)的成員函數(shù)的形式;也可以用友元函數(shù)重載。用友元重載運(yùn)算符的友元函數(shù)是獨(dú)立于類(lèi)以外的一般函數(shù)。二關(guān)鍵技術(shù)程序中每一種數(shù)據(jù)類(lèi)型用一個(gè)類(lèi)來(lái)實(shí)現(xiàn),共設(shè)計(jì)了4個(gè)類(lèi)。復(fù)數(shù)類(lèi)complex,矩陣類(lèi)matrix,有理數(shù)類(lèi)rational以及集合類(lèi)set。每一種類(lèi)都定義了相應(yīng)的運(yùn)算符重載函數(shù)
3、。具體定義如下所示:(1)類(lèi)complex類(lèi)complex中,成員變量image表示虛部,real表示實(shí)部。成員函數(shù)print()用來(lái)顯示數(shù)據(jù)。運(yùn)算符重載函數(shù)都是用友元函數(shù)來(lái)實(shí)現(xiàn)的。分別重載+、-、*、/運(yùn)算符。(2)類(lèi)matrix類(lèi)matrix中,成員變量elems用來(lái)存放矩陣的所有元素,rows表示矩陣的行,cols表示矩陣的列。成員函數(shù)SetElems()用來(lái)給矩陣中的每一個(gè)元素賦值,Disp()用來(lái)顯示矩陣中的所有元素。其它友元函數(shù)分別重載+、-、*、/運(yùn)算符。(3)類(lèi)rational類(lèi)rational中,有兩個(gè)成員變量:denominator用來(lái)表示有理數(shù)的分母,numerator表
4、示有理數(shù)的分子。有理數(shù)成員函數(shù)print()用來(lái)顯示有理數(shù),optimization()用來(lái)優(yōu)化有理數(shù)函數(shù)。友元函數(shù)real()用來(lái)將有理數(shù)轉(zhuǎn)換為實(shí)數(shù),其它友元函數(shù)分別重載+、-、*、/運(yùn)算符。(4)類(lèi)set類(lèi)set中,有兩個(gè)成員變量:elems用來(lái)存儲(chǔ)集合中的元素,card表示集合中元素的個(gè)數(shù)。成員函數(shù)print()用來(lái)輸出集合中的元素,additem()用來(lái)給集合增加元素。友元函數(shù)分別重載了&、=、!=、+、*、<、<=運(yùn)算符。程序中的運(yùn)算符重載函數(shù)都用友元函數(shù)來(lái)實(shí)現(xiàn)。 類(lèi)complex的友元函數(shù)復(fù)數(shù)的表達(dá)形式為a+bi,
5、對(duì)復(fù)數(shù)進(jìn)行運(yùn)算符重載不像對(duì)一般書(shū)進(jìn)行運(yùn)算那樣簡(jiǎn)單,它的運(yùn)輸方法如下:加法:(a+bi)+(c+di)=(a+c)+(b+d)i減法:(a+bi)-(c+di)=(a-c)+(b-d)i乘法:(a+bi)*(c-di)=(ac-bd)+(ad+bc)i除法:(a+bi)/(c+di)=(a+bi)*(c-di)/(c2+d2)重載函數(shù)將以上算法用在了函數(shù)中。 類(lèi)matrix的友元函數(shù)矩陣類(lèi)的賦值,實(shí)質(zhì)上是給二維數(shù)組賦值;矩陣相加減就是兩個(gè)行數(shù)列數(shù)相同的二維數(shù)組相加減;二維數(shù)組相乘,其實(shí)就是兩個(gè)二維數(shù)組,其中一個(gè)的行數(shù)等于另一個(gè)的列數(shù),按矩陣相乘的法
6、則進(jìn)行計(jì)算。 類(lèi)rational的友元函數(shù)對(duì)有理數(shù)類(lèi)進(jìn)行的操作有下面幾種:有理數(shù)相加:當(dāng)兩個(gè)有理數(shù)a/b和c/d相加時(shí),可得到這樣的算式:a/b+c/d=(a*d+b*c)/(b*d)有理數(shù)相減:當(dāng)兩個(gè)有理數(shù)a/b和c/d相減時(shí),得到的結(jié)果是:分子:a*d-b*c分母:b*d有理數(shù)相乘:當(dāng)兩個(gè)有理數(shù)a/b和c/d相乘時(shí),得到的結(jié)果是:分子:a*c分母:b*d有理數(shù)相除:當(dāng)兩個(gè)有理數(shù)a/b和c/d相除時(shí),得到的結(jié)果是:分子:a*d分母:b*c每次得到結(jié)果時(shí),都需要對(duì)有理數(shù)進(jìn)行優(yōu)化。 類(lèi)set的友元函數(shù)
7、集合類(lèi)的運(yùn)算符重載操作主要有以下幾種:判定某一元素是否屬于集合:此操作用重載運(yùn)算符函數(shù)&實(shí)現(xiàn),返回值只有兩種情況true或者false,取bool類(lèi)型。判斷兩個(gè)集合是否相等:判定兩個(gè)集合是否相等,需要看兩個(gè)集合中所包含的元素是否相同,并且不管順序如何。用重載運(yùn)算符=來(lái)實(shí)現(xiàn)。判斷兩個(gè)集合是否不等:是相等操作的取反,用!=來(lái)實(shí)現(xiàn)兩個(gè)集合的交集:即求出兩個(gè)集合中的公共元素,用運(yùn)算符*實(shí)現(xiàn)。兩個(gè)個(gè)集合的并集:即兩個(gè)集合相合并,合并以后去掉重復(fù)的元素,用運(yùn)算符+來(lái)實(shí)現(xiàn)。判定一個(gè)集合是否是另一個(gè)集合的子集:用運(yùn)算符<=來(lái)實(shí)現(xiàn)判定一個(gè)集合是否是另一個(gè)集合的純子集:用運(yùn)算符<實(shí)現(xiàn)三基本功能
8、要求(1)功能選擇可以用菜單來(lái)實(shí)現(xiàn)例如:請(qǐng)選擇您的計(jì)算內(nèi)容:1. 復(fù)數(shù)計(jì)算2. 有理數(shù)計(jì)算3. 矩陣計(jì)算4. 集合計(jì)算0. 退出用戶通過(guò)輸入不同的數(shù)字進(jìn)入不同的菜單。次級(jí)菜單主要顯示本程序的功能,主要的功能有加法、減法、乘法和除法以及集合的
9、求交集、求并集、求子集。(2)運(yùn)行時(shí)給出明確的提示信息。比如,輸入一個(gè)什么類(lèi)型的數(shù)據(jù)。根據(jù)用戶的輸入計(jì)算輸出結(jié)果。由于數(shù)據(jù)類(lèi)型比較多,可以一次輸入第一個(gè)復(fù)數(shù)的實(shí)部,第一個(gè)復(fù)數(shù)的虛部,再輸入第二個(gè)復(fù)數(shù)的實(shí)部、虛部。矩陣運(yùn)算需要先輸入矩陣的行數(shù)和列數(shù),然后依次輸出矩陣的第一行第一列的元素、第一行第二列的元素等等,依次類(lèi)推。有理數(shù)運(yùn)算需要一次輸入有理數(shù)的分子、分母。集合運(yùn)算需要輸入集合的元素個(gè)數(shù),然后依次輸入集合中的每一個(gè)元素。4.系統(tǒng)總體設(shè)計(jì)(確定程序功能模塊)專(zhuān)用運(yùn)算器程序有理數(shù)運(yùn)算矩陣運(yùn)算集合運(yùn)算加減乘除加減乘交集并集子集流程圖:開(kāi)始定義函數(shù)重載運(yùn)算符矩陣相加矩陣相減矩陣相乘是否符合運(yùn)算法則?
10、是,計(jì)算結(jié)束輸出錯(cuò)誤5程序清單u 程序代碼實(shí)現(xiàn)#include <iostream.h>#include <iomanip.h>/*/ 矩陣類(lèi)的聲明class matrix public:void Disp(); /顯示矩陣所有元素int matrix:operator ()(short row, short col);/重載運(yùn)算符成員函數(shù)()void SetElem(short row,short col,int val);/將元素(row,col)設(shè)置為valmatrix();matrix(short r,short c)rows= r;cols= c;elems=
11、 new introws*cols;virtual matrix();friend matrix operator +(matrix p,matrix q); /重載運(yùn)算符friend matrix operator -(matrix p,matrix q); /重載運(yùn)算符friend matrix operator *(matrix p,matrix q); /重載運(yùn)算符×private:int * elems; /存放矩陣的所有元素short cols;/矩陣的列short rows;/矩陣的行;/*/矩陣類(lèi)的各個(gè)成員函數(shù)的具體定義matrix:matrix()matrix:ma
12、trix()/*/*函數(shù)名稱(chēng):matrix:operator ()(short row, short col)功能描述:重載運(yùn)算符成員函數(shù)修改記錄:*/int matrix:operator ()(short row, short col)if(row>=1 && row<=rows && col>=1 && col<=cols)return elems(row-1)*cols + (col-1);elsereturn 0;/*/*函數(shù)名稱(chēng):matrix:SetElem(short row, short col,int v
13、al)功能描述:將元素(row,col)設(shè)置為val修改記錄:*/void matrix:SetElem(short row, short col,int val)if(row>=1 && row<=rows && col>=1 && col<=cols)elems(row-1)*cols+(col-1)= val;/*/*函數(shù)名稱(chēng):matrix:Disp()功能描述:顯示矩陣元素修改記錄:*/void matrix:Disp()for(int row=1;row<=rows;row+)for(int col=1;c
14、ol<=cols;col+)cout<<setw(2)<<(*this)(row,col)<<" "cout<<endl;/*/*函數(shù)名稱(chēng):operator +(matrix p,matrix q)修改記錄:*/matrix operator +(matrix p,matrix q)matrix m(p.rows,p.cols);if(p.rows!=q.rows | p.cols!=q.cols)return m;for(int r=1;r<=p.rows;r+)for(int c=1;c<=p.cols;
15、c+)m.SetElem(r,c,p(r,c)+q(r,c);return m;/*/*函數(shù)名稱(chēng):operator -(matrix p,matrix q)功能描述:重載運(yùn)算符-修改記錄:*/matrix operator -(matrix p,matrix q)matrix m(p.rows,p.cols);if(p.rows!=q.rows | p.cols!=q.cols)return m;for(int r=1;r<=p.rows;r+)for(int c=1;c<=p.cols;c+)m.SetElem(r,c,p(r,c)-q(r,c);return m;/*/*函數(shù)名
16、稱(chēng):operator *(matrix p,matrix q)功能描述:重載運(yùn)算符*修改記錄:*/matrix operator *(matrix p,matrix q)matrix m(p.rows,p.cols);if(p.cols!=q.rows)return m;for(int r=1;r<=p.rows;r+)for(int c=1;c<=p.cols;c+)int s=0;for(int i=1;i<=p.cols;i+)s+=p(r,i)*q(i,c);m.SetElem(r,c,s);return m;/*/void jiemian();void tuichu
17、();void matrixcompute();/*/* main函數(shù) */*/int main()jiemian();return 0; /*/* 主界面函數(shù),實(shí)現(xiàn)了界面及函數(shù)調(diào)用 */*/void jiemian()int i;cout<<endl<<endl;cout<<"-"<<endl;cout<<"* *"<<endl;cout<<"歡迎進(jìn)入用運(yùn)算符重載實(shí)現(xiàn)特殊計(jì)算器程序 "<<endl;cout<<"*
18、*"<<endl;cout<<"-"<<endl;while(i)cout<<endl<<endl;cout<<"請(qǐng)選擇您要進(jìn)行的操作:"<<endl<<endl;cout<<" 1.矩陣計(jì)算;"<<endl;cout<<" 0.退出;"<<endl;cout<<"請(qǐng)選擇按鍵(0或1):"cin>>i;cout<&
19、lt;endl;/判斷輸入,0退出if(i=0 | i=1)switch(i)case 1:matrixcompute();break;case 0:tuichu();break;elsecout<<"輸入錯(cuò)誤!"cout<<"重新輸入"<<endl; /*/* 退出函數(shù) */*/void tuichu()cout<<"-"<<endl;cout<<"* *"<<endl;cout<<"謝謝使用運(yùn)算符重載實(shí)現(xiàn)特
20、殊計(jì)算器程序,再見(jiàn)! "<<endl;cout<<"* *"<<endl;cout<<"-"<<endl;/*/* 矩陣計(jì)算函數(shù) */*/void matrixcompute()int j;cout<<"請(qǐng)選擇您的矩陣計(jì)算內(nèi)容:"<<endl<<endl;cout<<" 1.兩個(gè)矩陣相加;"<<endl;cout<<" 2.兩個(gè)矩陣相減;"<<
21、endl;cout<<" 3.兩個(gè)矩陣相乘;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"請(qǐng)選擇按鍵(0-3):"cin>>j;cout<<endl;while(j)/判斷輸入,0退出if(j>=0 && j<=3)int r1,j1,r2,j2,val;cout<<"請(qǐng)輸入第一個(gè)矩陣的行數(shù):"cin>>r1;cout<<"請(qǐng)輸
22、入第一個(gè)矩陣的列數(shù):"cin>>j1;cout<<"請(qǐng)輸入第二個(gè)矩陣的行數(shù):"cin>>r2;cout<<"請(qǐng)輸入第二個(gè)矩陣的列數(shù):"cin>>j2;matrix c1(r1,j1);matrix c2(r2,j2);matrix c3;cout<<"請(qǐng)輸入第一個(gè)矩陣的元素:"<<endl;for(int m=1;m<=r1;m+)for(int n=1;n<=j1;n+)cout<<"第"<
23、<m<<"行"<<n<<"列:"cin>>val;c1.SetElem (m,n,val);c1.Disp();cout<<"請(qǐng)輸入二個(gè)矩陣的元素:"<<endl;for(int h=1;h<=r2;h+)for( int k=1;k<=j2;k+)cout<<"第"<<h<<"行"<<k<<"列:"cin>>val
24、;c2.SetElem (h,k,val);c2.Disp();switch(j)/case1:矩陣相加case 1:c3=c1+c2;cout<<"第一個(gè)矩陣為:"<<endl;c1.Disp();cout<<"第二個(gè)矩陣為:"<<endl;c2.Disp();cout<<"第三個(gè)矩陣為:"<<endl;c3.Disp();break;case 2:c3=c1-c2;cout<<"第一個(gè)矩陣為:"<<endl;c1.Disp();cout<<"第二個(gè)矩陣為:"<<endl;c2.Disp();cout<<"第三個(gè)矩陣為:"<<endl;c3.Disp();break;case 3:c3=c1*c2;cout<<"第一個(gè)矩陣為:"<<endl;c1.Dis
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蕭山區(qū)無(wú)線門(mén)禁管理辦法
- 薪酬管理辦法整改通知書(shū)
- 蜀山區(qū)財(cái)稅費(fèi)用管理辦法
- 衡水市人防車(chē)位管理辦法
- 醫(yī)療保障政策解讀課件
- 裝修公司管理層管理辦法
- 西安城中村環(huán)境管理辦法
- 計(jì)算機(jī)使用管理辦法制度
- 證監(jiān)會(huì)不良資產(chǎn)管理辦法
- 調(diào)研類(lèi)費(fèi)用管理辦法包括
- 中國(guó)PSRAM行業(yè)市場(chǎng)供需態(tài)勢(shì)及發(fā)展前景研判報(bào)告
- 2025年數(shù)智供應(yīng)鏈案例集-商務(wù)部
- 2025年《社區(qū)居家智慧康養(yǎng)管理》課程標(biāo)準(zhǔn)(含課程思政元素)
- 加裝電梯合同解除協(xié)議書(shū)
- T/CCOA 50-2023低菌小麥粉生產(chǎn)技術(shù)規(guī)程
- 安全生產(chǎn)責(zé)任制度完整版
- 2025屆遼寧省大連市高新園區(qū)七年級(jí)數(shù)學(xué)第二學(xué)期期末考試試題含解析
- 醫(yī)師多點(diǎn)備案協(xié)議書(shū)
- 2006年江蘇高考政治真題及答案
- 志愿者社區(qū)服務(wù)責(zé)任免除及合作協(xié)議
- 視頻制作拍攝服務(wù)方案投標(biāo)文件(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論