版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> 課程設(shè)計(jì)說明書</b></p><p><b> 目 錄</b></p><p><b> 1 問題描述1</b></p><p><b> 2 需求分析1&
2、lt;/b></p><p><b> 3 總體設(shè)計(jì)2</b></p><p> 3.1 Matrix結(jié)構(gòu)的定義2</p><p> 3.2 系統(tǒng)流程圖3</p><p><b> 4 詳細(xì)設(shè)計(jì)4</b></p><p> 4.1 “菜單”界面4&l
3、t;/p><p> 4.2 建立矩陣4</p><p> 4.3 顯示矩陣6</p><p> 4.4 矩陣的轉(zhuǎn)置7</p><p> 4.5 矩陣的加法運(yùn)算8</p><p> 4.6 矩陣的減法運(yùn)算9</p><p> 4.7 矩陣的乘法運(yùn)算9</p>&l
4、t;p><b> 5 程序運(yùn)行11</b></p><p> 5.1 輸入矩陣11</p><p> 5.2 矩陣轉(zhuǎn)置11</p><p> 5.3 矩陣加法12</p><p> 5.4 矩陣減法12</p><p> 5.5 矩陣乘法12</p>&
5、lt;p> 5.6 退出及錯(cuò)誤提示13</p><p><b> 6 總結(jié)13</b></p><p><b> 參考文獻(xiàn)14</b></p><p><b> 1 問題描述</b></p><p> 題目內(nèi)容:設(shè)計(jì)稀疏矩陣運(yùn)算系統(tǒng)實(shí)現(xiàn)兩個(gè)稀疏矩陣的加法、
6、減法、乘法以及轉(zhuǎn)置操作。</p><p><b> 基本要求:</b></p><p> 存儲結(jié)構(gòu)選擇三元組存儲方式;</p><p> 實(shí)現(xiàn)一個(gè)稀疏矩陣的轉(zhuǎn)置運(yùn)算;</p><p> 實(shí)現(xiàn)兩個(gè)稀疏矩陣的加法運(yùn)算;</p><p> 實(shí)現(xiàn)兩個(gè)稀疏矩陣的減法運(yùn)算;</p>
7、<p> 實(shí)現(xiàn)兩個(gè)稀疏矩陣的乘法運(yùn)算。</p><p> 設(shè)計(jì)目的:通過本次課程設(shè)計(jì),了解稀疏矩陣的一些基本運(yùn)算操作,并通過 相關(guān)的程序代碼實(shí)現(xiàn)。</p><p><b> 2 需求分析</b></p><p> 經(jīng)過本次的課程設(shè)計(jì),我認(rèn)為稀疏矩陣運(yùn)算系統(tǒng)主要實(shí)現(xiàn)的功能如下:</p><p>
8、; 建立矩陣:只有先建立了矩陣,才能夠?qū)仃囘M(jìn)行運(yùn)算操作,包括建立矩陣A和矩陣B;</p><p> 轉(zhuǎn)置運(yùn)算操作:對矩陣A或者矩陣B進(jìn)行轉(zhuǎn)置運(yùn)算,輸出相應(yīng)的轉(zhuǎn)置矩陣;</p><p> 四則運(yùn)算操作:該步驟由兩個(gè)矩陣同時(shí)參與,對其進(jìn)行加法運(yùn)算(A+B)、減法運(yùn)算(A-B)以及乘法運(yùn)算(A*B和B*A);</p><p> 退出:當(dāng)做完矩陣的運(yùn)算操作之后,就
9、可以點(diǎn)擊它退出該界面。</p><p> 在這次設(shè)計(jì)中用到了一些變量和函數(shù),例如:void Display(Matrix M);int Max(int i,int j);Matrix Zero(Matrix M)等,下面會做進(jìn)一步詳細(xì)的介紹。</p><p><b> 3 總體設(shè)計(jì)</b></p><p> 3.1 Matrix結(jié)構(gòu)的定義
10、</p><p> struct Matrix{</p><p> int H;//矩陣的行數(shù)</p><p> int L;//矩陣的列數(shù)</p><p> int fly;//矩陣中的非零元個(gè)數(shù)</p><p> int zhi[Maxsize][Maxsize];//非零元值[所在行][所在列
11、]</p><p><b> }; </b></p><p><b> 操作集合:</b></p><p> Matrix Enter(Matrix M);//建立矩陣M</p><p> void Display(Matrix M);//顯示矩陣M</p><p
12、> void Transpose(Matrix M);//M矩陣的轉(zhuǎn)置</p><p> void Add(Matrix M,Matrix N);//求和運(yùn)算 A+B</p><p> void Sub(Matrix M,Matrix N);//求差運(yùn)算 A-B</p><p> void Multi(Matrix M,Matrix N);//
13、求積運(yùn)算 A*B</p><p> int Max(int i,int j);//求最大值</p><p> Matrix Zero(Matrix M);//矩陣所有元素賦值為0</p><p><b> 3.2 系統(tǒng)流程圖</b></p><p> 該運(yùn)算系統(tǒng)的系統(tǒng)流程圖如圖1所示:</p>
14、<p><b> 圖1 系統(tǒng)流程圖</b></p><p><b> 4 詳細(xì)設(shè)計(jì)</b></p><p> 4.1 “菜單”界面</p><p> 進(jìn)入稀疏矩陣運(yùn)算系統(tǒng)后的“菜單”界面如圖2所示。</p><p> 圖2 “菜單”界面</p><p>
15、;<b> 4.2 建立矩陣</b></p><p> 矩陣在建立之后才能夠進(jìn)行運(yùn)算操作,建立矩陣A和矩陣B,調(diào)用函數(shù)Enter(M),首先根據(jù)所輸入的矩陣M的行數(shù)H和列數(shù)L,建立H*L的矩陣M,并且調(diào)用函數(shù)Zero(M)將其所有元素均賦值為0;其次再根據(jù)所輸入矩陣M的非零元個(gè)數(shù)fly做循環(huán)控制變量,按提示輸入非零元所在的行h和列l(wèi)以及非零元的值,如果輸入的行h或者列l(wèi)大于矩陣M的行H或
16、列L,則提示輸入錯(cuò)誤;最后將非零元的值保存在矩陣M中的相應(yīng)位置。程序如下:</p><p> Matrix Enter(Matrix M)//建立矩陣</p><p><b> {</b></p><p> cout<<"請輸入矩陣的行數(shù)和列數(shù):";</p><p> cin&g
17、t;>M.H>>M.L;</p><p> cout<<"請輸入矩陣的非零元個(gè)數(shù):";</p><p> cin>>M.fly;</p><p> cout<<endl;</p><p> if(M.fly>(M.H*M.L))</p>&l
18、t;p><b> {</b></p><p> cout<<"非零元個(gè)數(shù)多于矩陣元素總數(shù),請重新輸入!"<<endl;</p><p> cout<<"請重新輸入矩陣的非零元個(gè)數(shù):";</p><p> cin>>M.fly;</p>
19、;<p><b> }</b></p><p> M=Zero(M);</p><p><b> int h;</b></p><p><b> int l;</b></p><p> for(int n=1;n<=M.fly;n++)//輸入非
20、零元所在的行、列和值</p><p><b> {</b></p><p> cout<<"請輸入第"<<n<<"個(gè)非零元所在的行和列:";</p><p> cin>>h>>l;</p><p> if(h>
21、;M.H||l>M.L)//行列輸入錯(cuò)誤提示</p><p><b> {</b></p><p> cout<<"行列輸入錯(cuò)誤,請重新輸入:"<<endl;</p><p> cout<<"請重新輸入第"<<n<<"個(gè)
22、非零元所在的行和列:";</p><p> cin>>h>>l;</p><p><b> }</b></p><p> cout<<"請輸入該非零元的值:";</p><p> cin>>M.zhi[h][l];</p>
23、<p> cout<<endl;</p><p><b> }</b></p><p><b> return M;</b></p><p><b> }</b></p><p> 注:該函數(shù)中調(diào)用的Zero()函數(shù)的功能為將矩陣M根據(jù)行數(shù)H和
24、列數(shù)L把所有的元素賦值為0,代碼如下:</p><p> Matrix Zero(Matrix M)//矩陣所有元素賦值為0</p><p><b> {</b></p><p> for(int i=1;i<=M.H;i++)</p><p> for(int j=1;j<=M.L;j++)&
25、lt;/p><p> M.zhi[i][j]=0;</p><p><b> return M;</b></p><p><b> }</b></p><p><b> 4.3 顯示矩陣</b></p><p> 建立好矩陣以后,為了驗(yàn)證所建立的矩
26、陣是否成功,以及在后期運(yùn)算時(shí)矩陣的顯示,設(shè)計(jì)該函數(shù),能更直觀的看到輸入以及輸出的矩陣,代碼如下:</p><p> void Display(Matrix M)//顯示矩陣</p><p><b> {</b></p><p> int count=0;</p><p> cout<<"矩
27、陣為:"<<endl;</p><p> for(int i=1;i<=M.H;i++)</p><p> for(int j=1;j<=M.L;j++)</p><p><b> {</b></p><p> printf("%-4d",M.zhi[i][j
28、]);</p><p><b> count++;</b></p><p> if(count==M.L)</p><p><b> {</b></p><p> cout<<endl;</p><p><b> count=0;</b&
29、gt;</p><p><b> }</b></p><p><b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p><b> 4.4 矩陣的轉(zhuǎn)置</b&
30、gt;</p><p> 該函數(shù)實(shí)現(xiàn)的是矩陣A或矩陣B的轉(zhuǎn)置操作,通過對矩陣的行和列進(jìn)行調(diào)換,利用for()循環(huán)語句實(shí)現(xiàn)對矩陣A或矩陣B的轉(zhuǎn)置,其代碼如下:</p><p> void Transpose(Matrix M)//矩陣轉(zhuǎn)置</p><p><b> {</b></p><p><b>
31、C.H=M.L;</b></p><p><b> C.L=M.H;</b></p><p> cout<<"原來的";</p><p> Display(M);</p><p> for(int i=1;i<=M.L;i++)</p><p&
32、gt; for(int j=1;j<=M.H;j++)</p><p><b> {</b></p><p> C.zhi[i][j]=M.zhi[j][i];</p><p><b> }</b></p><p> cout<<"轉(zhuǎn)置后的";<
33、/p><p> Display(C);</p><p><b> }</b></p><p> 4.5 矩陣的加法運(yùn)算</p><p> 實(shí)現(xiàn)兩個(gè)矩陣之間的加法運(yùn)算,即A+B,其代碼如下:</p><p> void Add(Matrix M,Matrix N)//A+B</p&g
34、t;<p><b> {</b></p><p> int n1=Max(M.H,N.H);</p><p> int n2=Max(M.L,N.L);</p><p><b> C.H=n1;</b></p><p><b> C.L=n2;</b>&
35、lt;/p><p> C=Zero(C);</p><p> for(int i=1;i<=n1;i++)</p><p> for(int j=1;j<=n2;j++)</p><p><b> {</b></p><p> C.zhi[i][j]=M.zhi[i][j]+N.
36、zhi[i][j];</p><p><b> }</b></p><p> cout<<" A+B 的運(yùn)算結(jié)果";</p><p> Display(C);</p><p><b> }</b></p><p> 4.6 矩陣的減法
37、運(yùn)算</p><p> 實(shí)現(xiàn)兩個(gè)矩陣之間的減法運(yùn)算,即A-B,其代碼如下:</p><p> void Sub(Matrix M,Matrix N)//A-B</p><p><b> {</b></p><p> int n1=Max(M.H,N.H);</p><p> int
38、n2=Max(M.L,N.L);</p><p><b> C.H=n1;</b></p><p><b> C.L=n2;</b></p><p> C=Zero(C);</p><p> for(int i=1;i<=n1;i++)</p><p> fo
39、r(int j=1;j<=n2;j++)</p><p><b> {</b></p><p> C.zhi[i][j]=M.zhi[i][j]-N.zhi[i][j];</p><p><b> }</b></p><p> cout<<" A-B 的運(yùn)算結(jié)果&
40、quot;;</p><p> Display(C);</p><p><b> }</b></p><p> 4.7 矩陣的乘法運(yùn)算</p><p> 實(shí)現(xiàn)兩個(gè)矩陣之間的乘法運(yùn)算,即A*B,如果矩陣A的列數(shù)和矩陣B的行數(shù)不相同,則無法進(jìn)行乘法運(yùn)算,系統(tǒng)會提示錯(cuò)誤,其代碼如下:</p><p
41、> void Multi(Matrix M,Matrix N)//A*B</p><p><b> {</b></p><p> if(M.L!=N.H)</p><p><b> {</b></p><p> cout<<"矩陣A的列數(shù)和矩陣B的行數(shù)不相同,
42、無法進(jìn)行乘法運(yùn)算!\n";</p><p><b> }</b></p><p><b> else</b></p><p> if(M.L==N.H)</p><p><b> {</b></p><p><b> C.H
43、=M.H;</b></p><p><b> C.L=N.L;</b></p><p> C=Zero(C);</p><p> for(int i=1;i<=Maxsize;i++)</p><p> for(int j=1;j<=Maxsize;j++)</p><
44、p> for(int k=1;k<=Maxsize;k++)</p><p><b> {</b></p><p> C.zhi[i][j]+=M.zhi[i][k]*N.zhi[k][j];</p><p><b> }</b></p><p> cout<<&q
45、uot;運(yùn)算結(jié)果";</p><p> Display(C);</p><p><b> }</b></p><p><b> }</b></p><p><b> 5 程序運(yùn)行</b></p><p><b> 5.1 輸
46、入矩陣</b></p><p> 運(yùn)行該運(yùn)算系統(tǒng),進(jìn)入“菜單”選項(xiàng)以后,輸入“1”,選擇“輸入矩陣A”,運(yùn)算結(jié)果如圖3所示;輸入“2”,選擇“輸入矩陣B”,運(yùn)算結(jié)果如圖4所示:</p><p> 圖3 輸入矩陣A 圖4 輸入矩陣B </p><p><b> 5.2 矩陣轉(zhuǎn)置
47、</b></p><p> 輸入矩陣A和矩陣B以后,在“菜單”提示下,輸入“3”,進(jìn)行矩陣A的轉(zhuǎn)置,運(yùn)算結(jié)果如圖5所示;輸入“4”,進(jìn)行矩陣B的轉(zhuǎn)置,運(yùn)算結(jié)果如圖6所示:</p><p> 圖5 矩陣A的轉(zhuǎn)置 圖6 矩陣B的轉(zhuǎn)置
48、 </p><p><b> 5.3 矩陣加法</b></p><p> 在“菜單”提示下,輸入“5”,進(jìn)行兩個(gè)矩陣的加法運(yùn)算,即A+B,運(yùn)算結(jié)果如圖7所示:</p><p><b> 圖7 矩陣加法</b></p><p><b> 5.4 矩陣減法<
49、/b></p><p> 在“菜單”提示下,輸入“6”,進(jìn)行兩個(gè)矩陣的加法運(yùn)算,即A-B,運(yùn)算結(jié)果如圖8所示:</p><p><b> 圖8 矩陣減法</b></p><p><b> 5.5 矩陣乘法</b></p><p> 在“菜單”提示下,輸入“7”,進(jìn)行兩個(gè)矩陣的第一種乘法
50、運(yùn)算,即A*B,運(yùn)算結(jié)果如圖9所示;輸入“8”,進(jìn)行兩個(gè)矩陣的第二種乘法運(yùn)算,即B*A,運(yùn)算結(jié)果如圖10所示:</p><p> 圖9 矩陣乘法1(A*B) 圖10 矩陣乘法2(B*A) </p><p> 5.6 退出及錯(cuò)誤提示 </p><p> 算法在運(yùn)行時(shí)還有退出及錯(cuò)誤提示功能,在“菜單”提示下,輸入“0”則退
51、出系統(tǒng),如圖11所示;若輸入0-8以外的數(shù)字,則會出現(xiàn)錯(cuò)誤提示,如圖12所示:</p><p> 圖11 退出 圖12 錯(cuò)誤提示 </p><p><b> 6 總結(jié)</b></p><p> 通過對數(shù)據(jù)結(jié)構(gòu)這門課的學(xué)習(xí),我了解到:“數(shù)據(jù)結(jié)構(gòu)”在計(jì)算機(jī)科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課
52、。而我們現(xiàn)在所學(xué)的數(shù)據(jù)結(jié)構(gòu)是C語言版的,是建立在C語言基礎(chǔ)之上的,若是C語言基礎(chǔ)知識不牢固,要想學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程是有一定的困難的。所以在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這門課程的時(shí)候,也順便復(fù)習(xí)了C語言的相關(guān)內(nèi)容,加深了我對C語言的理解和應(yīng)用,并且也深深體會到了數(shù)據(jù)結(jié)構(gòu)這門課程的重要性。</p><p> 在本次課程設(shè)計(jì)過程中,我體會到自己所學(xué)的東西太少了,很多都不知道,也遇到了不少實(shí)際問題,使我發(fā)現(xiàn)了在學(xué)習(xí)過程中的不足。這次
53、課程設(shè)計(jì),我本來打算做的是MFC可視化的人機(jī)友好界面,但是由于在程序設(shè)計(jì)以及運(yùn)行時(shí)出現(xiàn)了太多目前無法解決的問題,只好退而求其次,應(yīng)用了DOS界面來完成本次課程設(shè)計(jì)。在代碼設(shè)計(jì)時(shí),也出現(xiàn)了一些基本的C語言語法錯(cuò)誤,如函數(shù)的嵌套定義等,在老師和同學(xué)的幫助下都一一解決了,這也反映了我C語言基礎(chǔ)知識的不扎實(shí),以后應(yīng)在學(xué)習(xí)過程中加強(qiáng)這方面的學(xué)習(xí)。</p><p> 通過本次課程設(shè)計(jì),我對數(shù)據(jù)結(jié)構(gòu)這門課有了進(jìn)一步的理解。數(shù)
54、據(jù)結(jié)構(gòu)這門課最主要的內(nèi)容在于算法思想,而程序編寫次之。在編寫程序時(shí),如果算法思想</p><p> 是正確的,那么這個(gè)程序就已經(jīng)成功了一多半。算法思想在數(shù)據(jù)結(jié)構(gòu)中占有重要地位,如果說C語言是數(shù)據(jù)結(jié)構(gòu)這座程序大廈的根基的話,那么算法思想就是構(gòu)成大廈的一磚一瓦,再好的根基離了磚瓦也構(gòu)不成大廈。所以,要想學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程,平時(shí)不只要加強(qiáng)程序的編寫,更要多思考算法思想,加強(qiáng)對算法思想的鍛煉和理解。</p>
55、;<p> 本次課程設(shè)計(jì)得到了老師和很多同學(xué)的幫助,在此一并表示感謝。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]秦鋒.數(shù)據(jù)結(jié)構(gòu)(C語言版).北京:清華大學(xué)出版社,2011</p><p> [2]溫秀梅,丁學(xué)均.Visual C++面向?qū)ο蟪绦蛟O(shè)計(jì).北京:清華大學(xué)出版社,2009</p&g
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)與課程設(shè)計(jì)---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 稀疏矩陣的運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--稀疏矩陣的操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--稀疏矩陣運(yùn)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-稀疏矩陣實(shí)現(xiàn)與應(yīng)用
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)論文----稀疏矩陣的轉(zhuǎn)置
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告--稀疏矩陣運(yùn)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--稀疏矩陣運(yùn)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 稀疏矩陣運(yùn)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 稀疏矩陣運(yùn)算器設(shè)計(jì)
- 稀疏矩陣的轉(zhuǎn)置論文-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)論文
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--基本稀疏矩陣運(yùn)算的運(yùn)算器
- 數(shù)據(jù)結(jié)構(gòu)-矩陣相關(guān)操作的課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-圖的鄰接矩陣
- 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告(稀疏矩陣)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
評論
0/150
提交評論