【C語言《數(shù)據(jù)結(jié)構(gòu)》實驗報告】稀疏矩陣運算的設(shè)計與實現(xiàn)_第1頁
【C語言《數(shù)據(jù)結(jié)構(gòu)》實驗報告】稀疏矩陣運算的設(shè)計與實現(xiàn)_第2頁
【C語言《數(shù)據(jù)結(jié)構(gòu)》實驗報告】稀疏矩陣運算的設(shè)計與實現(xiàn)_第3頁
【C語言《數(shù)據(jù)結(jié)構(gòu)》實驗報告】稀疏矩陣運算的設(shè)計與實現(xiàn)_第4頁
【C語言《數(shù)據(jù)結(jié)構(gòu)》實驗報告】稀疏矩陣運算的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論