版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)實驗報告實驗題目: 稀疏矩陣運算器問題描述:有輸入界面(圖形或文字界面都可),能區(qū)分加法和轉(zhuǎn)置;能處理任意輸入的典型數(shù)據(jù)和進行出錯數(shù)據(jù)處理(例如加法,當(dāng)?shù)谝粋€矩陣和第二個矩陣的行數(shù)和列數(shù)不相等時,不能運算);必須采用三元組作存儲結(jié)構(gòu),不能采用數(shù)組等形式;輸出要求用矩陣的形式輸出(即習(xí)題集136頁的形式)。實驗?zāi)康模菏褂萌M實現(xiàn)稀疏矩陣的運算實驗內(nèi)容:寫出程序并上機調(diào)試、通過。一、需求分析1、演示程序以用戶和計算機的對話方式執(zhí)行,即在計算機終端上顯示*矩陣的加法和轉(zhuǎn)制運算器*1、稀疏矩陣的加法2、稀疏矩陣的轉(zhuǎn)置輸入要進行的項目的編號: 時輸入要進行的運算對應(yīng)的數(shù)字。當(dāng)出現(xiàn)“請輸入矩陣的
2、行數(shù)、列數(shù)和非零元個數(shù)(以空格隔開):”時輸入矩陣的行數(shù)、列數(shù)和非零元素個數(shù)。當(dāng)出現(xiàn)“請用三元組形式輸入矩陣的元素(行 列 非零元素):”時輸入矩陣中的所有非零元素的位置和值,這時將出現(xiàn)由輸入的因素所生成的矩陣a。若在輸入項目標號時輸入的是1,接著會出現(xiàn)“請輸入矩陣的行數(shù)、列數(shù)和非零元個數(shù)(以空格隔開):”,這時輸入另一個矩陣的行數(shù)、列數(shù)和非零元素個數(shù)。當(dāng)出現(xiàn)“請用三元組形式輸入矩陣的元素(行 列 非零元素):”時輸入另一個矩陣中的所有非零元素的位置和值。這時將會生成矩陣b和矩陣a+b若在輸入項目標號時輸入的是2,在出現(xiàn)矩陣a后會出現(xiàn)a的轉(zhuǎn)置矩陣。3、程序的執(zhí)行包括:(1)構(gòu)造三元組順序表存儲
3、非零元的位置和值;(2)輸入要進行的項目的編號;(3)生成矩陣a;(4)輸出矩陣a;(5)判斷要進行的運算。若為1,生成矩陣b并輸出矩陣b和矩陣a+b;若為2,輸出矩陣;(6)銷毀矩陣;(7)結(jié)束4、本實驗做一個類似于運算器的程序,實現(xiàn)矩陣的轉(zhuǎn)置和加法運算,5、輸入及輸出示例:*矩陣的加法和轉(zhuǎn)制運算器*1、稀疏矩陣的加法2、稀疏矩陣的轉(zhuǎn)置輸入要進行的項目的編號: 1請輸入矩陣的行數(shù)、列數(shù)和非零元個數(shù)(以空格隔開):5 5 2請用三元組形式輸入矩陣的元素(行 列 非零元素):1 2 63 5 19矩陣a:0 6 0 0 00 0 0 0 00 0 0 0 190 0 0 0 00 0 0 0 0
4、 請輸入矩陣的行數(shù)、列數(shù)和非零元個數(shù)(以空格隔開):5 5 51 1 31 5 92 3 83 4 113 5 6 矩陣b:3 0 0 0 90 0 8 0 00 0 0 11 60 0 0 0 0 0 0 0 0 0 a+b:3 6 0 0 90 0 8 0 0 0 0 0 11 250 0 0 0 0 0 0 0 0 0二 概要設(shè)計1基本操作本程序中,用三元組順序表作為存儲結(jié)構(gòu)。(1)、creat(tsmatrix &m)操作結(jié)果:創(chuàng)建矩陣m。(2)、addsmatrix(tsmatrix a,tsmatrix b,tsmatrix &c,int n)初始條件:矩陣a和b的行數(shù)和列數(shù)對應(yīng)相
5、等。操作結(jié)果:求矩陣a、b的和c=a+b。(3)、transposesmarix(tsmatrix *a,tsmatrix *b)初始條件:矩陣a、b已存在且a指向矩陣a,b指向矩陣b。操作結(jié)果:將a指向的矩陣轉(zhuǎn)置到b指向的矩陣。(4)、print_smatrix(tsmatrix m)初始條件:矩陣m已存在操作結(jié)果:輸出矩陣m2、模塊調(diào)用圖主程序模塊創(chuàng)建三元組順序表模塊創(chuàng)建矩陣模塊矩陣運算模塊輸出鏈表模塊銷毀矩陣模塊三 詳細設(shè)計1、每個模塊:(1) 創(chuàng)建用于存儲的三元組順序表#define maxsize 40 /假設(shè)非零元素個數(shù)的最大值為40 typedef int elemtype; t
6、ypedef struct int i,j; /非零元的行下標和列下標 elemtype e; /非零元的值 triple; typedef struct triple datamaxsize+1; int rposmaxrc+1; /各行第一個非零元在三元組的位置表 int hs,ls,fls; tsmatrix,*matrix; (2)、創(chuàng)建矩陣void creat(tsmatrix &m) int i,k; for(i=1;i=maxrc+1;i+) m.rposi=0; printf(請輸入矩陣的行數(shù)、列數(shù)和非零元個數(shù)(以空格隔開):); scanf(%d %d %d,&m.hs,&m
7、.ls,&m.fls);/將得到的m矩陣的性質(zhì)保存printf(請用三元組形式輸入矩陣的元素(行 列 非零元素):n); for(i=1;i=m.fls;i+)scanf(%d %d %d,&m.datai.i,&m.datai.j,&m.datai.e);/將m中的非零元素記錄,生成矩陣 for(i=1,k=1;i=m.hs;i+) m.rposi=k; while(m.datak.i=i & k=m.fls)k+; (3)、矩陣的運算1)矩陣加法void addsmatrix(tsmatrix a,tsmatrix b,tsmatrix &c,int n) int a,b,temp,l;
8、c.hs=a.hs;c.ls=a.ls;a=b=l=1;while(a=a.fls & b=b.fls) if(a.dataa.i=b.datab.i) if(a.dataa.jb.datab.j)c.datal=b.datab; c.datal+.e=n*b.datab+.e;elsetemp=a.dataa.e+n*b.datab.e; if(temp)c.datal=a.dataa; c.datal.e=temp; l+; a+;b+; else if(a.dataa.ib.datab.i)c.datal+=a.dataa+; else c.datal=b.datab; c.datal+
9、.e=n*b.datab+.e; while(a=a.fls)c.datal+=a.dataa+; while(bhs=a-ls;b-ls=a-hs;b-fls=a-fls;if(b-fls)q=1;for(col=1;colls;col+) for(p=1;pfls;p+)if(a-datap.j=col)b-dataq.i=a-datap.j;b-dataq.j=a-datap.i;b-dataq.e=a-datap.e;+q;(4)、輸出函數(shù)void print_smatrix(tsmatrix m) int k,l,n; matrix p; p=&m; for(k=1,n=1;khs;
10、k+) for(l=1;lls;l+) if(p-datan.i=k & p-datan.j=l) printf(%5d,p-datan.e); n+; else printf(%5d,0); printf(n); printf(n); (5)、銷毀矩陣void destory_smatrix(tsmatrix &m) m.hs=m.ls=m.fls=0; (6)、主函數(shù)void main() tsmatrix a,b,c; tsmatrix *p=&a,*q=&b;int flag,n; printf(t *矩陣的加法和轉(zhuǎn)制運算器* n);printf(t 1、稀疏矩陣的加法 n);prin
11、tf(t 2、稀疏矩陣的轉(zhuǎn)置 n);printf(輸入要進行的項目的編號:); scanf(%d,&flag); creat(a); printf(矩陣a:n); print_smatrix(a); switch(flag) case 1:creat(b);n=1;printf(矩陣b:n); print_smatrix(b); if(a.hs=b.hs & a.ls=b.ls) printf(a+b:n); addsmatrix(a,b,c,n);print_smatrix(c); else printf(錯誤!行列不一致n); break; case 2: printf(a-b:n); t
12、ransposesmarix(p,q); print_smatrix(b);break; default:printf(輸入錯誤!n); destory_smatrix(a); destory_smatrix(b);destory_smatrix(c); 2、完整函數(shù)#include #include #include #define maxsize 40 /假設(shè)非零元素個數(shù)的最大值為40 #define maxrc 20/假設(shè)矩陣的最大行數(shù)為20 typedef int elemtype; typedef struct int i,j; /非零元的行下標和列下標 elemtype e; /非
13、零元的值 triple; typedef struct triple datamaxsize+1; int rposmaxrc+1; /各行第一個非零元在三元組的位置表 int hs,ls,fls; tsmatrix,*matrix; void creat(tsmatrix &m)/創(chuàng)建矩陣 int i,k; for(i=1;i=maxrc+1;i+) m.rposi=0; printf(請輸入矩陣的行數(shù)、列數(shù)和非零元個數(shù)(以空格隔開):); scanf(%d %d %d,&m.hs,&m.ls,&m.fls);/將得到的m矩陣的性質(zhì)保存printf(請用三元組形式輸入矩陣的元素(行 列 非零
14、元素):n); for(i=1;i=m.fls;i+)scanf(%d %d %d,&m.datai.i,&m.datai.j,&m.datai.e);/將m中的非零元素記錄,生成矩陣 for(i=1,k=1;i=m.hs;i+) m.rposi=k; while(m.datak.i=i & k=m.fls)k+; void addsmatrix(tsmatrix a,tsmatrix b,tsmatrix &c,int n)/矩陣相加 int a,b,temp,l; c.hs=a.hs;c.ls=a.ls;a=b=l=1;while(a=a.fls & b=b.fls) if(a.dataa
15、.i=b.datab.i) if(a.dataa.jb.datab.j)c.datal=b.datab; c.datal+.e=n*b.datab+.e;elsetemp=a.dataa.e+n*b.datab.e; if(temp)c.datal=a.dataa; c.datal.e=temp; l+; a+;b+; else if(a.dataa.ib.datab.i)c.datal+=a.dataa+; else c.datal=b.datab; c.datal+.e=n*b.datab+.e; while(a=a.fls)c.datal+=a.dataa+; while(bhs=a-l
16、s;b-ls=a-hs;b-fls=a-fls;if(b-fls)q=1;for(col=1;colls;col+) for(p=1;pfls;p+)if(a-datap.j=col)b-dataq.i=a-datap.j;b-dataq.j=a-datap.i;b-dataq.e=a-datap.e;+q;void print_smatrix(tsmatrix m)/輸出函數(shù) int k,l,n; matrix p; p=&m; for(k=1,n=1;khs;k+) for(l=1;lls;l+) if(p-datan.i=k & p-datan.j=l) printf(%5d,p-dat
17、an.e); n+; else printf(%5d,0); printf(n); printf(n); void destory_smatrix(tsmatrix &m)/銷毀矩陣 m.hs=m.ls=m.fls=0; void main() tsmatrix a,b,c; tsmatrix *p=&a,*q=&b;int flag,n; printf(t *矩陣的加法和轉(zhuǎn)制運算器* n);printf(t 1、稀疏矩陣的加法 n);printf(t 2、稀疏矩陣的轉(zhuǎn)置 n);printf(輸入要進行的項目的編號:); scanf(%d,&flag); creat(a); printf(矩陣a:n); print_smatrix(a); switch(flag) case 1:creat(b);n=1;printf(矩陣b:n); print_smatrix(b); if(a.hs=b.hs & a.
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度2025年門面房租賃與社區(qū)配套服務(wù)合同
- 二零二五年度精裝修公寓房購買與戶外休閑設(shè)施使用合同3篇
- 二零二五版奶粉生產(chǎn)廢棄物資源化利用服務(wù)合同范本頁22篇
- 2025年度影視基地場地租賃合同及影視制作服務(wù)協(xié)議3篇
- 二零二五版電子商務(wù)SET協(xié)議安全風(fēng)險評估與風(fēng)險控制合同3篇
- 二零二五版淋浴房市場推廣與廣告投放合同3篇
- 二零二五年度EPS線條綠色建材采購合同3篇
- 二零二五版水電系統(tǒng)自動化改造與升級合同3篇
- 桶裝水供應(yīng)商與學(xué)校2025年度供需合同3篇
- 惠州2025年法務(wù)專員招聘與法律顧問及合規(guī)審查合同3篇
- 城市基礎(chǔ)設(shè)施維修計劃
- 2024山西廣播電視臺招聘專業(yè)技術(shù)崗位編制人員20人歷年高頻500題難、易錯點模擬試題附帶答案詳解
- 新材料行業(yè)系列深度報告一:新材料行業(yè)研究框架
- 人教版小學(xué)英語各冊單詞表(帶英標)
- 廣東省潮州市潮安區(qū)2023-2024學(xué)年六年級上學(xué)期期末考試數(shù)學(xué)試題
- 鄉(xiāng)村治理中正式制度與非正式制度的關(guān)系解析
- 智能護理:人工智能助力的醫(yī)療創(chuàng)新
- 國家中小學(xué)智慧教育平臺培訓(xùn)專題講座
- 5G+教育5G技術(shù)在智慧校園教育專網(wǎng)系統(tǒng)的應(yīng)用
- VI設(shè)計輔助圖形設(shè)計
- 淺談小學(xué)勞動教育的開展與探究 論文
評論
0/150
提交評論