




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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ì)名稱:小型特殊計(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+語言的基本知識(shí)和技能; 2.基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3.能夠利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的面向?qū)ο蟪绦蛟O(shè)計(jì)問題。2.2設(shè)
2、計(jì)要求1.要求利用面向?qū)ο蟮姆椒ㄒ约癈+的編程思想來完成系統(tǒng)的設(shè)計(jì); 2.要求在設(shè)計(jì)的過程中,建立清晰的類層次; 3.在系統(tǒng)的設(shè)計(jì)中,至少要用到面向?qū)ο蟮囊环N機(jī)制。3.系統(tǒng)分析與設(shè)計(jì)一主要知識(shí)點(diǎn)運(yùn)算符重載增加了C+語言的可擴(kuò)充性。運(yùn)算符的重載實(shí)際上就是一種函數(shù)調(diào)用的形式,可以用成員函數(shù)重載運(yùn)算符,就是將運(yùn)算符重載定義為一個(gè)類的成員函數(shù)的形式;也可以用友元函數(shù)重載。用友元重載運(yùn)算符的友元函數(shù)是獨(dú)立于類以外的一般函數(shù)。二關(guān)鍵技術(shù)程序中每一種數(shù)據(jù)類型用一個(gè)類來實(shí)現(xiàn),共設(shè)計(jì)了4個(gè)類。復(fù)數(shù)類complex,矩陣類matrix,有理數(shù)類rational以及集合類set。每一種類都定義了相應(yīng)的運(yùn)算符重載函數(shù)
3、。具體定義如下所示:(1)類complex類complex中,成員變量image表示虛部,real表示實(shí)部。成員函數(shù)print()用來顯示數(shù)據(jù)。運(yùn)算符重載函數(shù)都是用友元函數(shù)來實(shí)現(xiàn)的。分別重載+、-、*、/運(yùn)算符。(2)類matrix類matrix中,成員變量elems用來存放矩陣的所有元素,rows表示矩陣的行,cols表示矩陣的列。成員函數(shù)SetElems()用來給矩陣中的每一個(gè)元素賦值,Disp()用來顯示矩陣中的所有元素。其它友元函數(shù)分別重載+、-、*、/運(yùn)算符。(3)類rational類rational中,有兩個(gè)成員變量:denominator用來表示有理數(shù)的分母,numerator表
4、示有理數(shù)的分子。有理數(shù)成員函數(shù)print()用來顯示有理數(shù),optimization()用來優(yōu)化有理數(shù)函數(shù)。友元函數(shù)real()用來將有理數(shù)轉(zhuǎn)換為實(shí)數(shù),其它友元函數(shù)分別重載+、-、*、/運(yùn)算符。(4)類set類set中,有兩個(gè)成員變量:elems用來存儲(chǔ)集合中的元素,card表示集合中元素的個(gè)數(shù)。成員函數(shù)print()用來輸出集合中的元素,additem()用來給集合增加元素。友元函數(shù)分別重載了&、=、!=、+、*、<、<=運(yùn)算符。程序中的運(yùn)算符重載函數(shù)都用友元函數(shù)來實(shí)現(xiàn)。 類complex的友元函數(shù)復(fù)數(shù)的表達(dá)形式為a+bi,
5、對(duì)復(fù)數(shù)進(jìn)行運(yùn)算符重載不像對(duì)一般書進(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ù)中。 類matrix的友元函數(shù)矩陣類的賦值,實(shí)質(zhì)上是給二維數(shù)組賦值;矩陣相加減就是兩個(gè)行數(shù)列數(shù)相同的二維數(shù)組相加減;二維數(shù)組相乘,其實(shí)就是兩個(gè)二維數(shù)組,其中一個(gè)的行數(shù)等于另一個(gè)的列數(shù),按矩陣相乘的法
6、則進(jìn)行計(jì)算。 類rational的友元函數(shù)對(duì)有理數(shù)類進(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)化。 類set的友元函數(shù)
7、集合類的運(yùn)算符重載操作主要有以下幾種:判定某一元素是否屬于集合:此操作用重載運(yùn)算符函數(shù)&實(shí)現(xiàn),返回值只有兩種情況true或者false,取bool類型。判斷兩個(gè)集合是否相等:判定兩個(gè)集合是否相等,需要看兩個(gè)集合中所包含的元素是否相同,并且不管順序如何。用重載運(yùn)算符=來實(shí)現(xiàn)。判斷兩個(gè)集合是否不等:是相等操作的取反,用!=來實(shí)現(xiàn)兩個(gè)集合的交集:即求出兩個(gè)集合中的公共元素,用運(yùn)算符*實(shí)現(xiàn)。兩個(gè)個(gè)集合的并集:即兩個(gè)集合相合并,合并以后去掉重復(fù)的元素,用運(yùn)算符+來實(shí)現(xiàn)。判定一個(gè)集合是否是另一個(gè)集合的子集:用運(yùn)算符<=來實(shí)現(xiàn)判定一個(gè)集合是否是另一個(gè)集合的純子集:用運(yùn)算符<實(shí)現(xiàn)三基本功能
8、要求(1)功能選擇可以用菜單來實(shí)現(xiàn)例如:請(qǐng)選擇您的計(jì)算內(nèi)容:1. 復(fù)數(shù)計(jì)算2. 有理數(shù)計(jì)算3. 矩陣計(jì)算4. 集合計(jì)算0. 退出用戶通過輸入不同的數(shù)字進(jìn)入不同的菜單。次級(jí)菜單主要顯示本程序的功能,主要的功能有加法、減法、乘法和除法以及集合的
9、求交集、求并集、求子集。(2)運(yùn)行時(shí)給出明確的提示信息。比如,輸入一個(gè)什么類型的數(shù)據(jù)。根據(jù)用戶的輸入計(jì)算輸出結(jié)果。由于數(shù)據(jù)類型比較多,可以一次輸入第一個(gè)復(fù)數(shù)的實(shí)部,第一個(gè)復(fù)數(shù)的虛部,再輸入第二個(gè)復(fù)數(shù)的實(shí)部、虛部。矩陣運(yùn)算需要先輸入矩陣的行數(shù)和列數(shù),然后依次輸出矩陣的第一行第一列的元素、第一行第二列的元素等等,依次類推。有理數(shù)運(yùn)算需要一次輸入有理數(shù)的分子、分母。集合運(yùn)算需要輸入集合的元素個(gè)數(shù),然后依次輸入集合中的每一個(gè)元素。4.系統(tǒng)總體設(shè)計(jì)(確定程序功能模塊)專用運(yùn)算器程序有理數(shù)運(yùn)算矩陣運(yùn)算集合運(yùn)算加減乘除加減乘交集并集子集流程圖:開始定義函數(shù)重載運(yùn)算符矩陣相加矩陣相減矩陣相乘是否符合運(yùn)算法則?
10、是,計(jì)算結(jié)束輸出錯(cuò)誤5程序清單u 程序代碼實(shí)現(xiàn)#include <iostream.h>#include <iomanip.h>/*/ 矩陣類的聲明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;/矩陣的行;/*/矩陣類的各個(gè)成員函數(shù)的具體定義matrix:matrix()matrix:ma
12、trix()/*/*函數(shù)名稱: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ù)名稱: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ù)名稱: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ù)名稱: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ù)名稱: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、稱: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ì)算器程序,再見! "<<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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 批發(fā)業(yè)務(wù)中的版權(quán)合作與版權(quán)輸出考核試卷
- 其他調(diào)味品發(fā)酵制品制造考核試卷
- 智能照明在博物館展品照明中的應(yīng)用考核試卷
- 企業(yè)知識(shí)管理與知識(shí)分享考核試卷
- 年金保險(xiǎn)投資渠道選擇考核試卷
- 有機(jī)肥料在育苗中的應(yīng)用考核試卷
- 冰球場(chǎng)冰面修整與保養(yǎng)考核試卷
- 智能無人機(jī)飛行控制系統(tǒng)考核試卷
- 小學(xué)生簡(jiǎn)單律動(dòng)課件圖片
- 廣州鋪位租賃合同范本
- 《自相矛盾》說課課件
- 企業(yè)內(nèi)部控制調(diào)查表
- 事故應(yīng)急池管理規(guī)定規(guī)定
- 機(jī)械基礎(chǔ)全冊(cè)教案
- 頸肩腰腿痛的注射治療課件整理-002
- 健身俱樂部經(jīng)營(yíng)和管理教學(xué)課件
- 《發(fā)展?jié)h語》-高級(jí)綜合Ⅰ-9高薪養(yǎng)廉與緣木求魚課件
- 微格教學(xué)講解-課件
- 電力公司備品備件管理制度
- 現(xiàn)金流量表編制案例
- 部編版二年級(jí)道德與法治下冊(cè)《學(xué)習(xí)有方法》教案及教學(xué)反思
評(píng)論
0/150
提交評(píng)論