C語言程序資管理_第1頁
C語言程序資管理_第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余9頁可下載查看

下載本文檔

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

文檔簡介

1、課程設(shè)計(jì)任務(wù)書 學(xué)院 信息科學(xué)與工程學(xué)院 專業(yè) 電子信息工程 姓名 李尾冬 學(xué)號(hào) 0903030112 題目 小型特殊計(jì)算器 內(nèi)容及要求: 1 1 內(nèi)容與功能要求 題目運(yùn)算符重載實(shí)現(xiàn)專用運(yùn)算器: 參考提供資料中相應(yīng)內(nèi)容,以成員函數(shù)的形式重載運(yùn)算符,實(shí)現(xiàn) 2 2、軟件開發(fā)環(huán)境 Windows XpWindows Xp,Visual C+ 6.0Visual C+ 6.0 進(jìn)度安排: 第 15 周 星期一:設(shè)計(jì)任務(wù)分析和總體設(shè)計(jì) 星期二:軟件算法和流程設(shè)計(jì) 星期三、四、五:軟件編碼實(shí)現(xiàn) 第 1616 周 周一:軟件總體調(diào)試 周二:軟件運(yùn)行分析 周三:答辯、驗(yàn)收程序 周四:答辯、驗(yàn)收程序 周五:書寫

2、課程設(shè)計(jì)報(bào)告,提交 指導(dǎo)教師(簽字): 學(xué)院院長(簽字): 年 月曰 年 月曰 目錄 1. 題目內(nèi)容 - 2 2. 程序特點(diǎn)及功能 - 3 3. 總體思路 - 3 4. 詳細(xì)設(shè)計(jì) - 4 5. - 程序清單 5 6. 運(yùn)行結(jié)果與分析 - 17 7. 參考文獻(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ì)目的 達(dá)到熟練掌握 C+ 語言的基本知識(shí)和技能; 基

3、本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 能夠利用所學(xué)的基本知識(shí)和技能,解決簡單的面向?qū)ο蟪绦蛟O(shè)計(jì)問題。 2.2 設(shè)計(jì)要求 要求利用面向?qū)ο蟮姆椒ㄒ约?C+ 的編程思想來完成系統(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è)類

4、來實(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è)元素賦值,

5、Disp()用來顯示 矩陣中的所有元素。其它友元函數(shù)分別重載 +、-、*、/運(yùn)算符。 ( 3)類 rational 類 rational 中,有兩個(gè)成員變量:denominator 用來表示有理數(shù)的分母, numerator 表示有理數(shù)的分子。有理數(shù)成員函數(shù) prin t()用來顯示有理數(shù),optimizati on()用來優(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()用來輸出集合中

6、的元素,additem()用來給集合增加元素。友元 函數(shù)分別重載了 &、=、!=、+、*、=運(yùn)算符。 程序中的運(yùn)算符重載函數(shù)都用友元函數(shù)來實(shí)現(xiàn)。 類 complex 的友元函數(shù) 復(fù)數(shù)的表達(dá)形式為 a+bi,對(duì)復(fù)數(shù)進(jìn)行運(yùn)算符重載不像對(duì)一般書進(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 除法: 22 (a+bi)/(c+di)=(a+bi)*(c-di)/(c 2+d2) 重載函數(shù)將以上算法用在了函數(shù)中。

7、 類 matrix 的友元函數(shù) 矩陣類的賦值,實(shí)質(zhì)上是給二維數(shù)組賦值;矩陣相加減就是兩個(gè)行數(shù)列數(shù)相同的二維 數(shù)組相加減;二維數(shù)組相乘,其實(shí)就是兩個(gè)二維數(shù)組,其中一個(gè)的行數(shù)等于另一個(gè)的 列數(shù),按矩陣相乘的法則進(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é)果是: 分子:

8、 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ù) 集合類的運(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è)集合中的公共

9、元素,用運(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) 例如: 請(qǐng)選擇您的計(jì)算內(nèi)容: 1. 復(fù)數(shù)計(jì)算 2. 有理數(shù)計(jì)算 3. 矩陣計(jì)算 4. 集合計(jì)算 0.退出 用戶通過輸入不同的數(shù)字進(jìn)入不同的菜單。次級(jí)菜單主要顯示本程序的功能,主 要的功能有加法、減法、乘法和除法以及集合的求交集、求并集、求子集。 (2) 運(yùn)行時(shí)給出明確的提示信息。 比如,輸入一個(gè)什么類型的數(shù)據(jù)。根據(jù)用戶的

10、輸入計(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ì)(確定程序功能模塊) 5 程序清單 程序代碼實(shí)現(xiàn) #i nclude #in elude * / 矩陣類的聲明 class matrix public: void Disp() 。 /顯示矩陣所有元素 int matrix:operator

11、 ()(short row, short col)。 /重載運(yùn)算符成員函數(shù) () void SetElem(short row,short col,int val)。 /將元素 (row,col) 設(shè)置為 val matrix() 。 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) 。 fri

12、end matrix operator *(matrix p,matrix q) 。 private: int * elems。 /存放矩陣的所有元素 short cols。 /矩陣的列 short rows。 /矩陣的行 /矩陣類的各個(gè)成員函數(shù)的具體定義 matrix:matrix() matrix:matrix() /* 函數(shù)名稱: matrix:operator ()(short row, short col) 功能描述: 重載運(yùn)算符成員函數(shù) 修改記錄: */ int matrix:operator ()(short row, short col) if(row=1 & row=

13、1 & col=1 & row=1 & col=cols) elems(row-1)*cols+(col-1)= val 。 */ /* 函數(shù)名稱: matrix:Disp() 功能描述: 顯示矩陣元素 修改記錄: */ void matrix:Disp() for(i nt row=1 。 row=rows。 row+) for(int col=1 。 col=cols。 col+) coutsetw(2)(*this)(row,col) 。 coutendl。 I* /* 函數(shù)名稱: operator +(matrix p,matrix q) 功能描述: 重載運(yùn)算符

14、 修改記錄: */ 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,m

15、atrix 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。 I* /* 函數(shù)名稱: operator *(matrix p,matrix q) 功能描述: 重載運(yùn)算符 * 修改記錄: matrix operator *(matrix p,matrix q) matrix m(p.rows,p.cols)。 if(

16、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。 I* */ void jiemian() 。 void tuichu()。 void matrixcompute() 。 int main() */ */ /* main 函數(shù) */ jiemian() 。 return 0。 /* 主界面函數(shù),實(shí)現(xiàn)了界面及函數(shù)調(diào)用

17、*/ /*/ void jiemian() int i 。 coutendlendl。 cout - endl 。 cout* *endl。 cout 歡 迎 進(jìn) 入 用 運(yùn) 算 符 重 載 實(shí) 現(xiàn) 特 殊 計(jì) 算 器 程 序 endl。 cout* *endl。 cout - endl 。 while(i) coutendlendl。 coutvv請(qǐng)選擇您要進(jìn)行的操作:e ndlvve ndl cout 1.矩陣計(jì)算; endl。 cout 0.退出; i。 coutvvendl。 /判斷輸入, 0 退出 if(i=0 | i=1) switch(i) case 1: matrixcompu

18、te()。 break。 case 0: tuichu()。 break。 else coutvv輸入錯(cuò)誤!。 coutvv重新輸入endl。 * /* 退出函數(shù) */ void tuichu() cout - endl 。 cout* *endl。 cout 謝 謝 使 用 運(yùn) 算 符 重 載 實(shí) 現(xiàn) 特 殊 計(jì) 算 器 程 序 , 再 見 ! endl。 cout* *endl。 endl 。 void matrixcompute() int j 。 cout請(qǐng)選擇您的矩陣計(jì)算內(nèi)容:e ndle ndl。 cout 1.兩個(gè)矩陣相加; endl。 cout 2.兩個(gè)矩陣相減; endl。

19、cout 3.兩個(gè)矩陣相乘; endl。 cout 0.返回主界面; j 。 cout=0 & jr1。 cout請(qǐng)輸入第一個(gè)矩陣的列數(shù):。 cinj1。 cout請(qǐng)輸入第二個(gè)矩陣的行數(shù):。 cinr2。 coutvv請(qǐng)輸入第二個(gè)矩陣的列數(shù):。 cinj2。 matrix c1(r1,j1) 。 matrix c2(r2,j2) 。 matrix c3。 coutvv請(qǐng)輸入第一個(gè)矩陣的元素:e ndl。 for(int m=1 。 m=r1。 m+) for(int n=1 。 nv=j1。 n+) coutvv第vvmvv行*val。 c1.SetElem (m,n,val)。cout /* 矩陣計(jì)算函數(shù) */ c1.Disp()。 cout請(qǐng)輸入二個(gè)矩陣的元素:e ndl。 for(int h=1。h=r2。 h+) for( int k=1 。 kval。 c2.Se

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論