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

下載本文檔

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

文檔簡介

課程設(shè)計(jì)任務(wù)書姓 名張建文學(xué) 號5011209210班 級計(jì)算機(jī)科學(xué)與技術(shù)13-2課程名稱C+語言程序設(shè)計(jì)課程性質(zhì)設(shè)計(jì)時(shí)間 2010 年 6 月 21 日 2010 年 6月 28 日設(shè)計(jì)名稱小型特殊計(jì)算器設(shè)計(jì)要求設(shè)計(jì)思路與設(shè)計(jì)過程計(jì)劃與進(jìn)度任課教師意 見說 明課程設(shè)計(jì)報(bào)告課程:面向?qū)ο蟪绦蛟O(shè)計(jì)學(xué)號: 5011209210 姓名: XXXX班級: 計(jì)算機(jī)科學(xué)學(xué)與技術(shù)13-2班 教師: 牛榮 XXX大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院課程設(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ì)目的達(dá)到熟練掌握C+語言的基本知識(shí)和技能; 基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 能夠利用所學(xué)的基本知識(shí)和技能,解決簡單的面向?qū)ο蟪绦蛟O(shè)計(jì)問題。2.2設(shè)計(jì)要求要求利用面向?qū)ο蟮姆椒ㄒ约癈+的編程思想來完成系統(tǒng)的設(shè)計(jì); 要求在設(shè)計(jì)的過程中,建立清晰的類層次; 在系統(tǒng)的設(shè)計(jì)中,至少要用到面向?qū)ο蟮囊环N機(jī)制。3.系統(tǒng)分析與設(shè)計(jì)3.1主要知識(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ù)。3.2關(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ù)。具體定義如下所示:(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表示有理數(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,對復(fù)數(shù)進(jìn)行運(yùn)算符重載不像對一般書進(jìn)行運(yù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ù),按矩陣相乘的法則進(jìn)行計(jì)算。 類rational的友元函數(shù)對有理數(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í),都需要對有理數(shù)進(jìn)行優(yōu)化。 類set的友元函數(shù)集合類的運(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)3.3基本功能要求(1)功能選擇可以用菜單來實(shí)現(xiàn)例如:請選擇您的計(jì)算內(nèi)容:1. 復(fù)數(shù)計(jì)算2. 有理數(shù)計(jì)算3. 矩陣計(jì)算4. 集合計(jì)算0. 退出用戶通過輸入不同的數(shù)字進(jìn)入不同的菜單。次級菜單主要顯示本程序的功能,主要的功能有加法、減法、乘法和除法以及集合的求交集、求并集、求子集。(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ì)(確定程序功能模塊)本程序的功能結(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);/重載運(yùn)算符+friend rational operator - (rational num1,rational num2);/重載運(yùn)算符-friend rational operator * (rational num1,rational num2);/重載運(yùn)算符*friend rational operator / (rational num1,rational num2);/重載運(yùn)算符/friend bool operator =(rational num1,rational num2); /重載運(yùn)算符=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);/重載運(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= 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;/矩陣的行;/*/ 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);/聲明重載運(yùn)算符&,判斷某一整數(shù)是否屬于某一集合friend bool operator =(set,set);/聲明重載運(yùn)算符=,判斷兩個(gè)集合是否相等friend bool operator !=(set,set);/聲明重載運(yùn)算符!=,判斷兩個(gè)集合是否不等friend set operator *(set,set);/聲明重載運(yùn)算符*,求兩個(gè)集合的交friend set operator +(set,set);/聲明重載運(yùn)算符+,求兩個(gè)集合的并friend bool operator (set,set);/聲明重載運(yùn)算符,判斷某一集合是否為另一集合的純子集friend bool operator =(set,set);/聲明重載運(yùn)算符,判斷某一集合是否為另一集合的子集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;/若分子分母均為負(fù)數(shù),則結(jié)果為正if(numerator0 & denominator0)numerator= -numerator;denominator= -denominator;/若分子分母只有一個(gè)為負(fù)數(shù),則調(diào)整為分子取負(fù),分母取正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 +功能描述:重載運(yùn)算符+修改記錄:*/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 - 功能描述:重載運(yùn)算符-修改記錄:*/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 *功能描述:重載運(yùn)算符*修改記錄:*/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 /功能描述:重載運(yùn)算符/修改記錄:*/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 =功能描述:重載運(yùn)算符=修改記錄:*/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í)數(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)功能描述:重載運(yùn)算符成員函數(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)功能描述:重載運(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ù)名稱: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ù)名稱: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;/*/ 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 &功能描述:聲明重載運(yùn)算符&,判斷某一整數(shù)是否屬于某一集合修改記錄:*/bool operator &(int elem,set set1)for(int i=0;iset1.card ;+i)if(set1.elemsi=elem)return true;return false;/*/*函數(shù)名稱:operator =功能描述:聲明重載運(yùn)算符=,判斷兩個(gè)集合是否相等修改記錄:*/bool operator =(set set1,set set2)if(set1.card !=set2.card )/兩個(gè)集合個(gè)數(shù)不等,必不相等return false;for(int i=0;iset1.card;i+)if(!(set1.elems i& set2)/調(diào)用&定義return false;return true;/*/*函數(shù)名稱:operator !=功能描述:聲明重載運(yùn)算符!=,判斷兩個(gè)集合是否不等修改記錄:*/bool operator !=(set set1,set set2)if(set1= set2)return false;elsereturn true;/*/*函數(shù)名稱:operator *功能描述:聲明重載運(yùn)算符*,求兩個(gè)集合的交修改記錄:*/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中的每一個(gè)元素判斷是否屬于set2,若屬于則加入到res中return res;/*/*函數(shù)名稱:operator +功能描述:聲明重載運(yùn)算符+,求兩個(gè)集合的并修改記錄:*/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 功能描述:聲明重載運(yùn)算符,判斷某一集合是否為另一集合的純子集修改記錄:*/bool operator (set set1,set set2)if(set1.cardset2.card & set1=set2)return true;elsereturn false;/*/*函數(shù)名稱:operator =功能描述:聲明重載運(yùn)算符,判斷某一集合是否為另一集合的子集修改記錄:*/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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論