C++課程設(shè)計報告--小型特殊計算器_第1頁
C++課程設(shè)計報告--小型特殊計算器_第2頁
C++課程設(shè)計報告--小型特殊計算器_第3頁
C++課程設(shè)計報告--小型特殊計算器_第4頁
C++課程設(shè)計報告--小型特殊計算器_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課程設(shè)計任務(wù)書姓 名張建文學 號5011209210班 級計算機科學與技術(shù)13-2課程名稱C+語言程序設(shè)計課程性質(zhì)設(shè)計時間 2010 年 6 月 21 日 2010 年 6月 28 日設(shè)計名稱小型特殊計算器設(shè)計要求設(shè)計思路與設(shè)計過程計劃與進度任課教師意 見說 明課程設(shè)計報告課程:面向?qū)ο蟪绦蛟O(shè)計學號: 5011209210 姓名: XXXX班級: 計算機科學學與技術(shù)13-2班 教師: 牛榮 XXX大學計算機科學與技術(shù)學院課程設(shè)計名稱:小型特殊計算器1.設(shè)計內(nèi)容:實現(xiàn)一個特殊的計算器,可以實現(xiàn)復(fù)數(shù)、有理數(shù)、矩陣和集合的特殊計算。程序可以實現(xiàn)復(fù)數(shù)、有理數(shù)的加、減、乘、除,可以實現(xiàn)矩陣的加法、減法和乘法運算,也可以實現(xiàn)集合的求交集、并集、子集的運算。2.設(shè)計目的與要求:2.1設(shè)計目的達到熟練掌握C+語言的基本知識和技能; 基本掌握面向?qū)ο蟪绦蛟O(shè)計的基本思路和方法; 能夠利用所學的基本知識和技能,解決簡單的面向?qū)ο蟪绦蛟O(shè)計問題。2.2設(shè)計要求要求利用面向?qū)ο蟮姆椒ㄒ约癈+的編程思想來完成系統(tǒng)的設(shè)計; 要求在設(shè)計的過程中,建立清晰的類層次; 在系統(tǒng)的設(shè)計中,至少要用到面向?qū)ο蟮囊环N機制。3.系統(tǒng)分析與設(shè)計3.1主要知識點運算符重載增加了C+語言的可擴充性。運算符的重載實際上就是一種函數(shù)調(diào)用的形式,可以用成員函數(shù)重載運算符,就是將運算符重載定義為一個類的成員函數(shù)的形式;也可以用友元函數(shù)重載。用友元重載運算符的友元函數(shù)是獨立于類以外的一般函數(shù)。3.2關(guān)鍵技術(shù)程序中每一種數(shù)據(jù)類型用一個類來實現(xiàn),共設(shè)計了4個類。復(fù)數(shù)類complex,矩陣類matrix,有理數(shù)類rational以及集合類set。每一種類都定義了相應(yīng)的運算符重載函數(shù)。具體定義如下所示:(1)類complex類complex中,成員變量image表示虛部,real表示實部。成員函數(shù)print()用來顯示數(shù)據(jù)。運算符重載函數(shù)都是用友元函數(shù)來實現(xiàn)的。分別重載+、-、*、/運算符。(2)類matrix類matrix中,成員變量elems用來存放矩陣的所有元素,rows表示矩陣的行,cols表示矩陣的列。成員函數(shù)SetElems()用來給矩陣中的每一個元素賦值,Disp()用來顯示矩陣中的所有元素。其它友元函數(shù)分別重載+、-、*、/運算符。(3)類rational類rational中,有兩個成員變量:denominator用來表示有理數(shù)的分母,numerator表示有理數(shù)的分子。有理數(shù)成員函數(shù)print()用來顯示有理數(shù),optimization()用來優(yōu)化有理數(shù)函數(shù)。友元函數(shù)real()用來將有理數(shù)轉(zhuǎn)換為實數(shù),其它友元函數(shù)分別重載+、-、*、/運算符。(4)類set類set中,有兩個成員變量:elems用來存儲集合中的元素,card表示集合中元素的個數(shù)。成員函數(shù)print()用來輸出集合中的元素,additem()用來給集合增加元素。友元函數(shù)分別重載了&、=、!=、+、*、=運算符。程序中的運算符重載函數(shù)都用友元函數(shù)來實現(xiàn)。 類complex的友元函數(shù)復(fù)數(shù)的表達形式為a+bi,對復(fù)數(shù)進行運算符重載不像對一般書進行運算那樣簡單,它的運輸方法如下:加法:(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ù)矩陣類的賦值,實質(zhì)上是給二維數(shù)組賦值;矩陣相加減就是兩個行數(shù)列數(shù)相同的二維數(shù)組相加減;二維數(shù)組相乘,其實就是兩個二維數(shù)組,其中一個的行數(shù)等于另一個的列數(shù),按矩陣相乘的法則進行計算。 類rational的友元函數(shù)對有理數(shù)類進行的操作有下面幾種:有理數(shù)相加:當兩個有理數(shù)a/b和c/d相加時,可得到這樣的算式:a/b+c/d=(a*d+b*c)/(b*d)有理數(shù)相減:當兩個有理數(shù)a/b和c/d相減時,得到的結(jié)果是:分子:a*d-b*c分母:b*d有理數(shù)相乘:當兩個有理數(shù)a/b和c/d相乘時,得到的結(jié)果是:分子:a*c分母:b*d有理數(shù)相除:當兩個有理數(shù)a/b和c/d相除時,得到的結(jié)果是:分子:a*d分母:b*c每次得到結(jié)果時,都需要對有理數(shù)進行優(yōu)化。 類set的友元函數(shù)集合類的運算符重載操作主要有以下幾種:判定某一元素是否屬于集合:此操作用重載運算符函數(shù)&實現(xiàn),返回值只有兩種情況true或者false,取bool類型。判斷兩個集合是否相等:判定兩個集合是否相等,需要看兩個集合中所包含的元素是否相同,并且不管順序如何。用重載運算符=來實現(xiàn)。判斷兩個集合是否不等:是相等操作的取反,用!=來實現(xiàn)兩個集合的交集:即求出兩個集合中的公共元素,用運算符*實現(xiàn)。兩個個集合的并集:即兩個集合相合并,合并以后去掉重復(fù)的元素,用運算符+來實現(xiàn)。判定一個集合是否是另一個集合的子集:用運算符=來實現(xiàn)判定一個集合是否是另一個集合的純子集:用運算符實現(xiàn)3.3基本功能要求(1)功能選擇可以用菜單來實現(xiàn)例如:請選擇您的計算內(nèi)容:1. 復(fù)數(shù)計算2. 有理數(shù)計算3. 矩陣計算4. 集合計算0. 退出用戶通過輸入不同的數(shù)字進入不同的菜單。次級菜單主要顯示本程序的功能,主要的功能有加法、減法、乘法和除法以及集合的求交集、求并集、求子集。(2)運行時給出明確的提示信息。比如,輸入一個什么類型的數(shù)據(jù)。根據(jù)用戶的輸入計算輸出結(jié)果。由于數(shù)據(jù)類型比較多,可以一次輸入第一個復(fù)數(shù)的實部,第一個復(fù)數(shù)的虛部,再輸入第二個復(fù)數(shù)的實部、虛部。矩陣運算需要先輸入矩陣的行數(shù)和列數(shù),然后依次輸出矩陣的第一行第一列的元素、第一行第二列的元素等等,依次類推。有理數(shù)運算需要一次輸入有理數(shù)的分子、分母。集合運算需要輸入集合的元素個數(shù),然后依次輸入集合中的每一個元素。4.系統(tǒng)總體設(shè)計(確定程序功能模塊)本程序的功能結(jié)構(gòu)如1所示:圖1程序功能結(jié)構(gòu)圖5.源程序代碼/*/ complex.h: interface for the complex class.#includeclass complex public:void print();complex();complex(float r,float i)real= r;image= i;virtual complex();friend complex operator + (complex a,complex b);friend complex operator - (complex a,complex b);friend complex operator * (complex a,complex b);friend complex operator / (complex a,complex b);private:float image;float real;/*/ rational.h: interface for the rational class.class rational public:void print();/輸出函數(shù)rational(int x=0,int y=0);virtual rational();friend rational operator + (rational num1,rational num2);/重載運算符+friend rational operator - (rational num1,rational num2);/重載運算符-friend rational operator * (rational num1,rational num2);/重載運算符*friend rational operator / (rational num1,rational num2);/重載運算符/friend bool operator =(rational num1,rational num2); /重載運算符=friend double real(rational x);/聲明轉(zhuǎn)換函數(shù)private:void optimization();/優(yōu)化有理數(shù)函數(shù)int denominator;/分母int numerator; /分子;/*/ matrix.h: interface for the matrix class.class matrix public:void Disp(); /顯示矩陣所有元素int matrix:operator ()(short row, short col);/重載運算符成員函數(shù)()void SetElem(short row,short col,int val);/將元素(row,col)設(shè)置為valmatrix();matrix(short r,short c)rows= r;cols= c;elems= new introws*cols;virtual matrix();friend matrix operator +(matrix p,matrix q); /重載運算符friend matrix operator -(matrix p,matrix q); /重載運算符friend matrix operator *(matrix p,matrix q); /重載運算符private:int * elems; /存放矩陣的所有元素short cols;/矩陣的列short rows;/矩陣的行;/*/ set.h: interface for the set class.#include /enum bool false,true;enum errcode noerr,overflow;/定義集合類 class set public:void print();/顯示輸出集合元素set()card=0;virtual set();errcode additem(int); /增加集合元素friend bool operator &(int,set);/聲明重載運算符&,判斷某一整數(shù)是否屬于某一集合friend bool operator =(set,set);/聲明重載運算符=,判斷兩個集合是否相等friend bool operator !=(set,set);/聲明重載運算符!=,判斷兩個集合是否不等friend set operator *(set,set);/聲明重載運算符*,求兩個集合的交friend set operator +(set,set);/聲明重載運算符+,求兩個集合的并friend bool operator (set,set);/聲明重載運算符,判斷某一集合是否為另一集合的純子集friend bool operator =(set,set);/聲明重載運算符,判斷某一集合是否為另一集合的子集private:int elems16;int card;/*/ complex.cpp: implementation of the complex class.#include #include complex.hcomplex:complex()complex:complex()/*/*函數(shù)名稱:print功能描述:顯示復(fù)數(shù)修改記錄:*/void complex:print()cout0)cout+;if(image!=0)coutimagein;/*/*函數(shù)名稱:operator +功能描述:顯示復(fù)數(shù)修改記錄:*/complex operator + (complex a,complex b)complex temp;temp.real= a.real +b.real ;temp.image= a.image +b.image ;return temp;/*/*函數(shù)名稱:operator 功能描述:顯示復(fù)數(shù)修改記錄:*/complex operator - (complex a,complex b)complex temp;temp.real= a.real -b.real ;temp.image= a.image -b.image ;return temp;/*/*函數(shù)名稱:operator *功能描述:顯示復(fù)數(shù)修改記錄:*/complex operator * (complex a,complex b)complex temp;temp.real= a.real *b.real -a.image *b.image ;temp.image =a.real *b.image +a.image *b.real ;return temp;/*/*函數(shù)名稱:operator /功能描述:顯示復(fù)數(shù)修改記錄:*/complex operator / (complex a,complex b)complex temp;float tt;tt=1/(b.real *b.real +b.image *b.image );temp.real =(a.real *b.real +a.image *b.image )*tt;temp.image =(b.real *a.image -a.real *b.image )*tt;return temp;/*/ rational.cpp: implementation of the rational class.#include #include #include rational.hrational:rational(int x,int y)numerator= x;denominator= y;optimization();/有理數(shù)優(yōu)化rational:rational()/*/*函數(shù)名稱:optimization功能描述:定義有理數(shù)優(yōu)化函數(shù)修改記錄:*/void rational:optimization()int gcd;if(numerator=0)/如果分子為零,則分母為1后返回denominator= 1;return;/取分子分母中較小的數(shù)作為公約數(shù)極限gcd= (abs(numerator)abs(denominator)?abs(numerator):abs(denominator);if(gcd=0)return;/若為0,則返回for(int i= gcd;i1;i-)/用循環(huán)找最大公約數(shù)if(numerator%i=0)& (denominator%i=0)break;numerator/=i;/i為最大公約數(shù),將分子分母整除它,重新賦值denominator/=i;/若分子分母均為負數(shù),則結(jié)果為正if(numerator0 & denominator0)numerator= -numerator;denominator= -denominator;/若分子分母只有一個為負數(shù),則調(diào)整為分子取負,分母取正else if(numerator0 | denominator0)numerator= -abs(numerator);denominator=abs(denominator);/*/*函數(shù)名稱:print功能描述:顯示復(fù)數(shù)修改記錄:*/void rational:print()coutnumerator;if(numerator!=0 & denominator!=1)cout/denominatorn;elsecoutn;/*/*函數(shù)名稱: operator +功能描述:重載運算符+修改記錄:*/rational operator + (rational num1,rational num2)rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.denominator +num1.denominator *num2.numerator ;temp.optimization ();return temp;/*/*函數(shù)名稱:operator - 功能描述:重載運算符-修改記錄:*/rational operator - (rational num1,rational num2)rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.denominator -num1.denominator *num2.numerator ;temp.optimization ();return temp;/*/*函數(shù)名稱:operator *功能描述:重載運算符*修改記錄:*/rational operator * (rational num1,rational num2)rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.numerator ;temp.optimization ();return temp;/*/*函數(shù)名稱:operator /功能描述:重載運算符/修改記錄:*/rational operator / (rational num1,rational num2)rational temp;temp.denominator =num1.denominator *num2.numerator ;temp.numerator = num1.numerator *num2.denominator ;temp.optimization ();return temp;/*/*函數(shù)名稱:operator =功能描述:重載運算符=修改記錄:*/bool operator =(rational num1,rational num2)if(num1.numerator =num2.numerator & num1.denominator =num2.denominator )return true;elsereturn false;/*/*函數(shù)名稱:print功能描述:聲明轉(zhuǎn)換函數(shù),將有理數(shù)對象轉(zhuǎn)換為實數(shù)修改記錄:*/double real(rational x)return(double(x.numerator )/(double(x.denominator );/*/ matrix.cpp: implementation of the matrix class.#include #include #include matrix.hmatrix:matrix()matrix:matrix()/*/*函數(shù)名稱:matrix:operator ()(short row, short col)功能描述:重載運算符成員函數(shù)修改記錄:*/int matrix:operator ()(short row, short col)if(row=1 & row=1 & col=1 & row=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;col=cols;col+)coutsetw(2)(*this)(row,col) ;coutendl;/*/*函數(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;c+)m.SetElem(r,c,p(r,c)+q(r,c);return m;/*/*函數(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;c+)m.SetElem(r,c,p(r,c)-q(r,c);return m;/*/*函數(shù)名稱:operator *(matrix p,matrix q)功能描述:重載運算符*修改記錄:*/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;/*/ set.cpp: implementation of the set class.#include set.hset:set()/*/*函數(shù)名稱:print功能描述:顯示復(fù)數(shù)修改記錄:*/void set:print()cout;for(int i=0;icard-1;i+)coutelemsi0)coutelemscard-1n;/*/*函數(shù)名稱:additem功能描述:增加集合元素修改記錄:*/errcode set:additem(int elem)for(int i=0;icard;i+)if(elemsi=elem)return noerr;if(card16)elemscard+=elem;return noerr;elsereturn overflow;/*/*函數(shù)名稱:operator &功能描述:聲明重載運算符&,判斷某一整數(shù)是否屬于某一集合修改記錄:*/bool operator &(int elem,set set1)for(int i=0;iset1.card ;+i)if(set1.elemsi=elem)return true;return false;/*/*函數(shù)名稱:operator =功能描述:聲明重載運算符=,判斷兩個集合是否相等修改記錄:*/bool operator =(set set1,set set2)if(set1.card !=set2.card )/兩個集合個數(shù)不等,必不相等return false;for(int i=0;iset1.card;i+)if(!(set1.elems i& set2)/調(diào)用&定義return false;return true;/*/*函數(shù)名稱:operator !=功能描述:聲明重載運算符!=,判斷兩個集合是否不等修改記錄:*/bool operator !=(set set1,set set2)if(set1= set2)return false;elsereturn true;/*/*函數(shù)名稱:operator *功能描述:聲明重載運算符*,求兩個集合的交修改記錄:*/set operator *(set set1,set set2)set res;for(int i=0;iset1.card ;i+)for(int j=0;jset2.card ;j+)if(set1.elems i=set2.elems j)res.elems res.card += set1.elems i;break;/取set1中的每一個元素判斷是否屬于set2,若屬于則加入到res中return res;/*/*函數(shù)名稱:operator +功能描述:聲明重載運算符+,求兩個集合的并修改記錄:*/set operator +(set set1,set set2)set res=set1;for(int i=0;iset2.card ;i+)res.additem (set2.elems i);/將set2中的元素追加到res中return res;/*/*函數(shù)名稱:operator 功能描述:聲明重載運算符,判斷某一集合是否為另一集合的純子集修改記錄:*/bool operator (set set1,set set2)if(set1.cardset2.card & set1=set2)return true;elsereturn false;/*/*函數(shù)名稱:operator =功能描述:聲明重載運算符,判斷某一集合是否為另一集合的子集修改記錄:*/bool operator set2.card )return false;for(int i=0;iset1.card ;i+)if(!(set1.elems i & set2)return false;return true;/*/#include #include matrix.h#include complex.h#include rational.h#include set.hvoid jiemian();void tuichu();void complexcompute();void rationalcompute();void m

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論