

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計五</b></p><p> 題目: 嚴蔚敏習題實習4第1個:實現(xiàn)一個能進行基本稀疏矩陣運算的運算器</p><p><b> 需求分析</b></p><p> 本程序?qū)崿F(xiàn)一個基本稀疏矩陣的簡單運算,包括加、減、乘。</p><p> 執(zhí)行操作
2、前應(yīng)先創(chuàng)造要進行運算的兩個矩陣,然后再選擇進行相應(yīng)的操作。</p><p> 以三元組順序表表示稀疏矩陣,實現(xiàn)二個矩陣相加,相減,相乘的運算;稀疏矩陣的輸入形式為三元組表示,運算結(jié)果則為通常的陣列形式列出!</p><p> 首先輸入矩陣的行數(shù)和列數(shù),并判別給出的兩個矩陣和行、列數(shù)對于所要求作的運算是否相匹配??稍O(shè)矩陣的行數(shù)和列數(shù)均不超過20;</p><p>
3、 程序先給出了菜單項,用戶只需按照菜單提示進行相應(yīng)的操作就行了。</p><p><b> 測試數(shù)據(jù):</b></p><p><b> 概要設(shè)計</b></p><p> 抽象數(shù)據(jù)類型三元組的定義如下:</p><p> ADT Triple</p><p>&l
4、t;b> {</b></p><p> 數(shù)據(jù)對象:D={ai| ai(-ElemSet,i=1,2,...,n,n>=0};</p><p> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai>| ai-1,ai(- D,i=2,...,n}</p><p><b> 基本操作:略</b></p>&
5、lt;p><b> }</b></p><p> 2、基于三元組順序表表示的矩陣操作:</p><p> ?。?)創(chuàng)建三元組順序表表示的矩陣:void createMatrix(TSMatrix &A)</p><p> ?。?)初始化矩陣:void initMatrix(TSMatrix &A)</p>
6、<p> ?。?)相加:void add(TSMatrix A,TSMatrix B,TSMatrix &C)</p><p> ?。?)相減:void sub(TSMatrix A,TSMatrix &B,TSMatrix &C)</p><p> (5)找m行n列元素在A中順序表中的位置:int search(TSMatrix A,int m,in
7、t n)</p><p> ?。?)相乘;void mult(TSMatrix A,TSMatrix B,TSMatrix &C)</p><p> (7)輸入以陣列形式表示的矩陣:void print(TSMatrix A)</p><p><b> 3、主程序</b></p><p> Void mai
8、n()</p><p><b> {</b></p><p> While(true)</p><p><b> {</b></p><p> 調(diào)用相應(yīng)函數(shù)執(zhí)行相應(yīng)操作;</p><p><b> 輸出操作結(jié)果;</b></p>
9、<p><b> }</b></p><p><b> }</b></p><p> 4、本程序只有兩個模塊,調(diào)用關(guān)系簡單:</p><p><b> 詳細設(shè)計</b></p><p><b> 三元組結(jié)構(gòu)描述:</b></p&g
10、t;<p> #define MAXSIZE 20</p><p> using namespace std;</p><p> typedef struct </p><p><b> {</b></p><p><b> int row;</b></p>&
11、lt;p><b> int col;</b></p><p><b> int e;</b></p><p><b> }Triple;</b></p><p> typedef struct</p><p><b> {</b></
12、p><p> Triple date[MAXSIZE];</p><p> int m,n,len;</p><p> }TSMatrix;</p><p> void initMatrix(TSMatrix &A)</p><p><b> {</b></p><
13、;p><b> A.len=0;</b></p><p><b> A.m=0;</b></p><p><b> A.n=0;</b></p><p> for(int i=0;i<MAXSIZE;i++)</p><p><b> {<
14、/b></p><p> A.date[i].col=0;</p><p> A.date[i].e=0;</p><p> A.date[i].row=0;</p><p><b> }</b></p><p><b> }</b></p>&
15、lt;p> 各種操作函數(shù)源代碼:</p><p> void createMatrix(TSMatrix &A)</p><p><b> {</b></p><p> initMatrix(A);</p><p> cout<<"創(chuàng)建矩陣:";</p>
16、<p> cout<<"請輸入矩陣的行列值及非0元素個數(shù)\n";</p><p> cin>>A.m>>A.n>>A.len;</p><p> for(int i=0;i<A.len;i++)</p><p><b> {</b></p>
17、;<p> cout<<"請輸入第"<<i<<"個非0元素對應(yīng)的行、列、值:";</p><p> cin>>A.date[i].row;</p><p> cin>>A.date[i].col;</p><p> cin>>A.da
18、te[i].e;</p><p><b> }</b></p><p><b> }</b></p><p> void add(TSMatrix A,TSMatrix B,TSMatrix &C)//相加</p><p><b> {</b></p>
19、;<p> if(A.m==B.m&&A.n==B.n)</p><p><b> {</b></p><p> int i=0,j=0;</p><p><b> int k=0;</b></p><p><b> C.m=A.m;</b&g
20、t;</p><p><b> C.n=A.n;</b></p><p> while( i<A.len||j<B.len)</p><p><b> {</b></p><p> if(i==A.len&&j<B.len)</p><p
21、><b> {</b></p><p> C.date[k].col=B.date[j].col;</p><p> C.date[k].row=B.date[j].row;</p><p> C.date[k++].e=B.date[j].e;</p><p><b> C.len++;<
22、;/b></p><p><b> j++;</b></p><p><b> }</b></p><p> else if(i<A.len&&j==B.len)</p><p><b> {</b></p><p>
23、 C.date[k].col=A.date[i].col;</p><p> C.date[k].row=A.date[i].row;</p><p> C.date[k++].e=A.date[i].e;</p><p><b> C.len++;</b></p><p><b> i++;<
24、/b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(A.date[i].row>B.date[j].row)</p><p><
25、b> {</b></p><p> C.date[k].col=B.date[j].col;</p><p> C.date[k].row=B.date[j].row;</p><p> C.date[k++].e=B.date[j].e;</p><p><b> C.len++;</b>&
26、lt;/p><p><b> j++;</b></p><p><b> }</b></p><p> else if(A.date[i].row<B.date[j].row)</p><p><b> {</b></p><p> C.da
27、te[k].col=A.date[i].col;</p><p> C.date[k].row=A.date[i].row;</p><p> C.date[k++].e=A.date[i].e;</p><p><b> C.len++;</b></p><p><b> i++;</b>
28、</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(A.date[i].col==B.date[j].col)</p><p><b> {
29、</b></p><p> if(A.date[i].e+B.date[j].e!=0)</p><p><b> {</b></p><p> C.date[k].col=A.date[i].col;</p><p> C.date[k].row=A.date[i].row;</p>
30、<p> C.date[k++].e=A.date[i].e+B.date[j].e;</p><p><b> C.len++;</b></p><p><b> }</b></p><p><b> i++;</b></p><p><b>
31、j++;</b></p><p><b> }</b></p><p> else if(A.date[i].col>B.date[j].col)</p><p><b> {</b></p><p> C.date[k].col=B.date[j].col;</p&
32、gt;<p> C.date[k].row=B.date[j].row;</p><p> C.date[k++].e=B.date[j].e;</p><p><b> C.len++;</b></p><p><b> j++;</b></p><p><b>
33、 }</b></p><p> else if(A.date[i].col<B.date[j].col)</p><p><b> {</b></p><p> C.date[k].col=A.date[i].col;</p><p> C.date[k].row=A.date[i].row;&
34、lt;/p><p> C.date[k++].e=A.date[i].e;</p><p><b> C.len++;</b></p><p><b> i++;</b></p><p><b> }</b></p><p><b> }
35、</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {&
36、lt;/b></p><p> cout<<"不能相加!";</p><p><b> }</b></p><p><b> }</b></p><p> void sub(TSMatrix A,TSMatrix &B,TSMatrix &
37、;C)//相減</p><p><b> {</b></p><p> for(int k=0;k<B.len;k++)</p><p><b> {</b></p><p> B.date[k].e=-B.date[k].e;</p><p><b>
38、; }</b></p><p> if(A.m==B.m&&A.n==B.n)</p><p><b> {</b></p><p> add(A,B,C);</p><p><b> }</b></p><p><b> e
39、lse</b></p><p> cout<<"不能相減!";</p><p> for( k=0;k<B.len;k++)</p><p><b> {</b></p><p> B.date[k].e=-B.date[k].e;</p><
40、p><b> }</b></p><p><b> }</b></p><p> int search(TSMatrix A,int m,int n)</p><p><b> {</b></p><p> int flag=-1;</p><
41、;p> for(int i=0;i<MAXSIZE;i++)</p><p><b> {</b></p><p> if(A.date[i].row==m&&A.date[i].col==n)</p><p><b> {</b></p><p><b&g
42、t; flag=i;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> return flag;</p><p><b>
43、 }</b></p><p> void mult(TSMatrix A,TSMatrix B,TSMatrix &C)//相乘</p><p><b> {</b></p><p> int i=0,j=0;</p><p> if(A.n==B.m)</p><p&g
44、t;<b> {</b></p><p><b> C.m=A.m;</b></p><p><b> C.n=B.n;</b></p><p> for(i=0;i<A.len;i++)</p><p><b> {</b></p&
45、gt;<p> for(j=0;j<B.len;j++)</p><p><b> {</b></p><p> if(A.date[i].col==B.date[j].row)</p><p><b> {</b></p><p> int flag=search(C
46、,A.date[i].row,B.date[j].col);</p><p> if(flag==-1)</p><p><b> {</b></p><p> C.date[C.len].col=B.date[j].col;</p><p> C.date[C.len].row=A.date[i].row;&l
47、t;/p><p> C.date[C.len++].e=A.date[i].e*B.date[j].e;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> C.
48、date[flag].e=C.date[flag].e+A.date[i].e*B.date[j].e;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b
49、></p><p><b> }</b></p><p><b> else</b></p><p> {cout<<"不能相乘!"<<endl;}</p><p><b> }</b></p><p
50、> void print(TSMatrix A)</p><p><b> {</b></p><p><b> int k=0;</b></p><p><b> int i,j;</b></p><p> int M[MAXSIZE][MAXSIZE];&l
51、t;/p><p> for(i=0;i<A.m;i++)</p><p><b> {</b></p><p> for(j=0;j<A.n;j++)</p><p><b> {</b></p><p> M[i][j]=0;</p><
52、;p><b> }</b></p><p><b> }</b></p><p> while(k<A.len)</p><p><b> {</b></p><p> M[A.date[k].row-1][A.date[k].col-1]=A.date[
53、k].e;</p><p><b> k++;</b></p><p><b> }</b></p><p> for(i=0;i<A.m;i++)</p><p><b> {</b></p><p> cout<<&quo
54、t;| ";</p><p> for(j=0;j<A.n;j++)</p><p><b> {</b></p><p> cout<<M[i][j]<<" ";</p><p><b> }</b></p><
55、;p> cout<<"|"<<endl;</p><p><b> }</b></p><p><b> }</b></p><p> void showtip()</p><p><b> {</b></p&g
56、t;<p> cout<<"------------請選擇要執(zhí)行的操作--------"<<endl;</p><p> cout<<endl;</p><p> cout<<" 0---創(chuàng)建矩陣"<<endl;</p><p&
57、gt; cout<<" 1---A+B"<<endl;</p><p> cout<<" 2---A-B"<<endl;</p><p> cout<<" 3---A*B"<<end
58、l;</p><p> cout<<" 4---退出"<<endl;</p><p> cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;</p><p><b> }</b&g
59、t;</p><p><b> 主函數(shù):</b></p><p> void main()</p><p><b> {</b></p><p> TSMatrix A,B,C;</p><p> initMatrix(A);</p><p>
60、; initMatrix(B);</p><p> initMatrix(C);</p><p> showtip();</p><p><b> int i;</b></p><p><b> cin>>i;</b></p><p> while(t
61、rue)</p><p><b> {</b></p><p><b> switch(i)</b></p><p><b> {</b></p><p><b> case 0:</b></p><p> system(
62、"cls");</p><p> cout<<"創(chuàng)建矩陣A:"<<endl;</p><p> createMatrix(A);</p><p> cout<<"創(chuàng)建矩陣B:"<<endl;</p><p> createMat
63、rix(B);</p><p> showtip();</p><p><b> break;</b></p><p><b> case 1:</b></p><p> system("cls");</p><p> if(A.m==0||B.
64、m==0)</p><p><b> {</b></p><p> cout<<"未建矩陣"<<endl;</p><p><b> }</b></p><p><b> else</b></p><p&g
65、t;<b> {</b></p><p> initMatrix(C);</p><p> add(A,B,C);</p><p> if(A.m==B.m&&A.n==B.n)</p><p><b> {</b></p><p> cout&l
66、t;<"加的結(jié)果;"<<endl;</p><p><b> print(A);</b></p><p> cout<<"+"<<endl;;</p><p><b> print(B);</b></p><p>
67、; cout<<"="<<endl;</p><p><b> print(C);</b></p><p><b> }</b></p><p><b> }</b></p><p> showtip();</p>
68、;<p><b> break;</b></p><p><b> case 2:</b></p><p> system("cls");</p><p> if(A.m==0||B.m==0)</p><p><b> {</b>&
69、lt;/p><p> cout<<"未建矩陣"<<endl;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> in
70、itMatrix(C);</p><p> sub(A,B,C);</p><p> cout<<"減的結(jié)果;"<<endl;</p><p><b> print(A);</b></p><p> cout<<"+"<<en
71、dl;;</p><p><b> print(B);</b></p><p> cout<<"="<<endl;</p><p><b> print(C);</b></p><p><b> }</b></p>
72、<p> showtip();</p><p><b> break;</b></p><p><b> case 3:</b></p><p> system("cls");</p><p> if(A.m==0||B.m==0)</p>
73、<p><b> {</b></p><p> cout<<"未建矩陣"<<endl;</p><p><b> }</b></p><p><b> else</b></p><p><b> {<
74、;/b></p><p> initMatrix(C);</p><p> mult(A,B,C);</p><p> if(A.n==B.m)</p><p><b> {</b></p><p> cout<<"乘后的結(jié)果;"<<en
75、dl;</p><p><b> print(A);</b></p><p> cout<<"*"<<endl;</p><p><b> print(B);</b></p><p> cout<<"="<&l
76、t;endl;</p><p><b> print(C);</b></p><p><b> }</b></p><p><b> }</b></p><p> showtip();</p><p><b> break;</
77、b></p><p><b> case 4:</b></p><p><b> exit(0);</b></p><p><b> break;</b></p><p><b> }</b></p><p><
78、b> cin>>i;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 調(diào)試分析</b></p><p> 由于本程序涉及的函數(shù)比較多,所以開始時在函數(shù)調(diào)用上出現(xiàn)了混亂,把自己都
79、給搞糊涂了,后來經(jīng)仔細排查,最終發(fā)現(xiàn)了錯誤。</p><p> 一開始看這個題目時,感覺以前似乎做過,覺得很簡單,所以沒有進行認真分析就開始急著寫程序,寫了一點后發(fā)現(xiàn)沒思路了,怎么也寫不下出了,搞了半天結(jié)果什么也沒寫出來。所以得出經(jīng)驗,以后寫程序必須先分析好思路,然后才開始著手去寫,這樣能達到現(xiàn)半功倍的效果。</p><p> 矩陣的加和減,在表面上看似乎很相似,只要把加改減就能完成任
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--稀疏矩陣運算器
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 稀疏矩陣運算器設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 稀疏矩陣的運算
- 課程設(shè)計---稀疏矩陣加法運算器
- 稀疏矩陣的運算課程設(shè)計
- 課程設(shè)計--設(shè)計一個矩陣運算器
- 稀疏矩陣的運算課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)--稀疏矩陣課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)與課程設(shè)計---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--稀疏矩陣的操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--矩陣的加、減、乘法運算的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--大整數(shù)的運算
- 數(shù)電課程設(shè)計報告---運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-長整數(shù)加減運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--文章編輯集合運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-長整數(shù)運算
評論
0/150
提交評論