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