




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1、 實(shí)驗(yàn)內(nèi)容和要求1、 稀疏矩陣A,B均采用三元組表示,驗(yàn)證實(shí)現(xiàn)矩陣A快速轉(zhuǎn)置算法,設(shè)計(jì)并驗(yàn)證A,B相加得到矩陣C的算法。(1) 從鍵盤輸入矩陣的行數(shù)和列數(shù),隨機(jī)生成稀疏矩陣。(2) 設(shè)計(jì)算法將隨機(jī)生成的稀疏矩陣轉(zhuǎn)換成三元組順序表示形式存儲(chǔ)。(3) 設(shè)計(jì)算法將快速轉(zhuǎn)置得到的與相加得到的三元組順序表分別轉(zhuǎn)換成矩陣形式。(4) 輸出隨機(jī)生成的稀疏矩陣A,B及其三元組順序表、快速轉(zhuǎn)置得到的與相加得到的三元組順序表及其矩陣形式。2、 實(shí)驗(yàn)過程及結(jié)果1、 需求分析1、將隨機(jī)生成的數(shù)定義為int型(為方便起見設(shè)定范圍為-20至20(不含0),可修改),三元組存儲(chǔ)的元素分別為非零元的行下標(biāo)、列下標(biāo)及該位置
2、的元素值,零元不進(jìn)行存儲(chǔ)。實(shí)際上在生成稀疏矩陣時(shí)是隨機(jī)選取一些位置生成非零元然后存入三元組中。2、從鍵盤輸入矩陣的行數(shù)和列數(shù)后應(yīng)能輸出三元組順序表及相應(yīng)矩陣(按行和列排列形式輸出)。3、 程序能實(shí)現(xiàn)的功能包括:隨機(jī)產(chǎn)生稀疏矩陣;輸出陣列形式的矩陣;輸出三元組順序表;將矩陣快速轉(zhuǎn)置;將兩個(gè)稀疏矩陣相加生成新的矩陣。 2、 概要設(shè)計(jì)1、稀疏矩陣的抽象數(shù)據(jù)類型定義:ADT TSMatrix數(shù)據(jù)對(duì)象:D= aij|i=1,2,m,j=1,2,n;Ai,jElemSet,m和n分別稱為矩陣的行數(shù)和列數(shù)數(shù)據(jù)關(guān)系:R=Row,ColRow=|1im, 1jn-1Col =|1im-1, 1jn基本操作:Cr
3、eateTSMatrix(&M)操作結(jié)果:創(chuàng)建矩陣MPrintTSMatrix(M)初始條件:矩陣M已存在操作結(jié)果:輸出矩陣M中三元組形式的非零元素PrintTSMatrix1(M)初始條件:矩陣M已存在操作結(jié)果:以陣列形式輸出矩陣UnZore(M, row, col)初始條件:矩陣M已存在操作結(jié)果:若位置(row,col)處存在非零元素,則返回該元素存儲(chǔ)在矩陣中的序號(hào)TSMatrix_Add(M, N,&Q)初始條件:矩陣M,N已存在操作結(jié)果:將矩陣M,N相加得到Q并返回矩陣QFastTransposeSMatrix(M,&N)初始條件:矩陣M已存在操作結(jié)果:將矩陣M快速轉(zhuǎn)置得到轉(zhuǎn)置矩陣N并
4、返回ADT TSMatrix; 本程序模塊結(jié)構(gòu) 主函數(shù)模塊void main()初始化迷矩陣;創(chuàng)建矩陣并輸出;將矩陣轉(zhuǎn)置并輸出;將矩陣相加并輸出結(jié)果;三、詳細(xì)設(shè)計(jì)1、基本數(shù)據(jù)類型操作typedef int ElemType; typedef struct int i,j; ElemType e; Triple;/數(shù)據(jù)類型 三元組 typedef struct Triple datamaxsize+1;/矩陣大小 int mu,nu,tu;/ TSMatrix;/矩陣抽象數(shù)據(jù)類型2、參數(shù)設(shè)置:#define maxsize 10000/-基本操作的算法描述-Status CreateTSMatr
5、ix(TSMatrix *M)/創(chuàng)建一個(gè)隨機(jī)矩陣(data0未用)srand(int)time(NULL);printf(Please Input The Lines And Columns Of The Matrix:n);printf(.(矩陣的期望規(guī)格大于4*5(或5*4).n); scanf(M-mu,M-nu); for(m=0;mmu;m+) for(n=0;nnu;n+)kmn=rand()%20;if(kmn=0)if(rand()%2)M-datap.e=rand()%20+1;elseM-datap.e=rand()%20-20;M-datap.i=m+1;M-datap.
6、j=n+1;p+; M-tu=p-1;/p從1開始,非零元個(gè)數(shù)剛好等于p-1 return OK;void PrintTSMatrix(TSMatrix M)/輸出矩陣的三元組順序表if(M.tu=0)printf(無非零元!n);elseprintf(該矩陣的行數(shù)為%d、列數(shù)為%d、非零元素個(gè)數(shù)為%d.n非零元的坐標(biāo)及值:nn,M.mu,M.nu,M.tu);printf( 行 列 元素值n);for(i=1;i=M.tu;i+)printf(%4d%4d%6dn,M.datai.i,M.datai.j,M.datai.e);printf(n);void PrintTSMatrix1(TSM
7、atrix M)/輸出矩陣的陣列形式printf(陣列形式為:n); for(i=1;i=M.mu;i+) for(j=1;j=M.nu;j+) if (ki=i&p-j=j) printf(%4d,p-e); /data0未用,p從data1開始 p+; k+; else printf(%4d,0); printf(n); printf(n);int UnZore(TSMatrix M,int row,int col)while(order=M.tu)if(M.dataorder.i=row&M.dataorder.j=col)/order從1開始return order;order+;re
8、turn 0;Status TSMatrix_Add(TSMatrix M,TSMatrix N,TSMatrix *Q)/矩陣相加得到新的矩陣,order從1開始if(M.mu=N.mu&M.nu=N.nu)for(row=1;row=M.mu;row+)for(col=1;coldataorder.i=row;Q-dataorder.j=col;Q-dataorder.e=M.dataorder1.e+N.dataorder2.e;order+;else if(order1&(!order2)Q-dataorder.e=M.dataorder1.e;Q-dataorder.i=M.data
9、order1.i;Q-dataorder.j=M.dataorder1.j;order+;else if(!order1)&order2)Q-dataorder.e=N.dataorder2.e;Q-dataorder.i=N.dataorder2.i;Q-dataorder.j=N.dataorder2.j;order+;Q-mu=M.mu;Q-nu=M.nu;Q-tu=order-1;return OK;elseprintf(n不是同型矩陣不能進(jìn)行相加!n);return ERROR;Status FastTransposeSMatrix(TSMatrix M,TSMatrix *N)/采
10、用三元組順序表存儲(chǔ)表示,求稀疏矩陣M的轉(zhuǎn)置矩陣N N-mu=M.nu; N-nu=M.mu; N-tu=M.tu; if(N-tu) for(i=1;i=M.nu;+i) numi=0; for(t=1;t=M.tu;+t) +numM.datat.j;/求M中每一列非零元個(gè)數(shù) cpot1=1;/求第col列中第一個(gè)元素在b.data中的序號(hào) for(i=2;i=M.nu;+i) cpoti=cpoti-1+numi-1; for(p=1;pdataq.i=M.datap.j; N-dataq.j=M.datap.i; N-dataq.e=M.datap.e; +cpoti; return O
11、K; 主函數(shù)算法:void main()TSMatrix A,A1,B,C; printf(矩陣A:n); CreateTSMatrix(&A); PrintTSMatrix(A); PrintTSMatrix1(A); printf(由矩陣A轉(zhuǎn)置得矩陣A1.n); FastTransposeSMatrix(A,&A1); PrintTSMatrix(A1); PrintTSMatrix1(A1); printf(矩陣B:n); CreateTSMatrix(&B); PrintTSMatrix(B); PrintTSMatrix1(B); printf(矩陣A加矩陣B得到矩陣C.n); if
12、(TSMatrix_Add(A,B,&C)PrintTSMatrix(C);PrintTSMatrix1(C); 四、調(diào)試分析1、三元組順序表的輸出順序應(yīng)該是先按行排序再按列排序,即行主序,依次輸出。2、生成的非零元應(yīng)該有正數(shù)和負(fù)數(shù),選取在-20到20之間的數(shù)(不包括0),生成隨機(jī)數(shù)時(shí)同時(shí)隨機(jī)生成其正負(fù)號(hào),為正數(shù)時(shí)將rand()%20再加1,避免再產(chǎn)生0,為負(fù)數(shù)時(shí)將rand()%20-20。3、由于稀疏矩陣非零元個(gè)數(shù)極少,故要求矩陣規(guī)格在4*5(或5*4)以上為好,實(shí)際上生成非零元時(shí)其位置具備隨機(jī)性,其個(gè)數(shù)也具備隨機(jī)性,并不嚴(yán)格小于等于矩陣元素個(gè)數(shù)的5%,因?yàn)榭刂破潆S機(jī)位置的是通過rand()
13、%20,當(dāng)該隨機(jī)數(shù)值為0時(shí),將該位置做為非零元位置。開始時(shí)采取隨機(jī)生成位置以便控制非零元個(gè)數(shù)小于等于矩陣元素個(gè)數(shù)的5%,但是這樣就不便于將非零元按行列次序存儲(chǔ),而是誰先生成就先存儲(chǔ)誰,也無法避免出現(xiàn)重復(fù)位置的情況。4、實(shí)驗(yàn)沒有采取二維數(shù)組的方法來形成矩陣,而是直接用三元組存儲(chǔ)的,在輸出時(shí)通過for循環(huán)控制則可輸出實(shí)現(xiàn)陣列形式的矩陣。 3、 用戶說明與測(cè)試結(jié)果1、 本程序的運(yùn)行環(huán)境為windows 7(64位)操作系統(tǒng),執(zhí)行文件為矩陣.exe;2、 進(jìn)入演示程序后,即顯示對(duì)話形式的提示操作過程, (1)提出輸入矩陣的大小(2)按enter鍵輸出隨機(jī)生成的矩陣三元組順序表和整個(gè)矩陣如圖所示:(3)
14、程序自動(dòng)完成第一個(gè)矩陣的轉(zhuǎn)置并輸出;(4)提示輸入矩陣B后,用戶輸入所需矩陣的行數(shù)和列數(shù),然后程序?qū)⒆詣?dòng)完成兩個(gè)原始矩陣的相加,若不是同型矩陣則提示無法相加。如圖所示:五、附錄(源代碼及注釋)#include #include #include time.h#define maxsize 10000#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -1typedef int ElemType;typedef int Status;typedef struct int i,j; ElemType e;
15、Triple;/數(shù)據(jù)類型 三元組typedef struct Triple datamaxsize+1;/矩陣大小 int mu,nu,tu;/TSMatrix;/矩陣抽象數(shù)據(jù)類型Status CreateTSMatrix(TSMatrix *M);/創(chuàng)建矩陣void PrintTSMatrix(TSMatrix M);/輸出矩陣非零元素void PrintTSMatrix1(TSMatrix M);/以陣列形式輸出矩陣int UnZore(TSMatrix M,int row,int col);/判斷位置(row,col)是否存在非零元素Status TSMatrix_Add(TSMatri
16、x M,TSMatrix N,TSMatrix *Q);/將矩陣M,N相加得到QStatus FastTransposeSMatrix(TSMatrix M,TSMatrix *N);/快速轉(zhuǎn)置void main() TSMatrix A,A1,B,C; printf(矩陣A:n); CreateTSMatrix(&A); PrintTSMatrix(A); PrintTSMatrix1(A); printf(由矩陣A轉(zhuǎn)置得矩陣A1.n); FastTransposeSMatrix(A,&A1); PrintTSMatrix(A1); PrintTSMatrix1(A1); printf(矩陣
17、B:n); CreateTSMatrix(&B); PrintTSMatrix(B); PrintTSMatrix1(B); printf(矩陣A加矩陣B得到矩陣C.n); if(TSMatrix_Add(A,B,&C)PrintTSMatrix(C);PrintTSMatrix1(C); Status CreateTSMatrix(TSMatrix *M) int m,n,p=1,num;/data0未用,p從1開始;num為非零元個(gè)數(shù)最大值int k100100; srand(int)time(NULL);printf(Please Input The Lines And Columns
18、Of The Matrix:n);printf(.(矩陣的期望規(guī)格大于4*5(或5*4).n); printf(The Line Number:); scanf(%d,&M-mu);printf(The Column Number:); scanf(%d,&M-nu);/*for(m=1;mmu;m+) for(n=1;nnu;n+)kmn=0;num=(m*n)/20;printf(%d,num);for(p=1;pmu+1;n=rand()%M-nu+1;if(rand()%2=1)kmn=rand()%20+1;else if(rand()%2=0)kmn=rand()%20-20;fo
19、r(m=1;mmu;m+) for(n=1;nnu;n+)if(kmn!=0)M-datap.e=kmn;M-datap.i=m;M-datap.j=n;p+; */ for(m=0;mmu;m+) for(n=0;nnu;n+)kmn=rand()%20;if(kmn=0)if(rand()%2)M-datap.e=rand()%20+1;elseM-datap.e=rand()%20-20;M-datap.i=m+1;M-datap.j=n+1;p+; M-tu=p-1;/p從1開始,剛好等于非零元個(gè)數(shù)-1 return OK;void PrintTSMatrix(TSMatrix M)
20、int i;if(M.tu=0)printf(無非零元!n);elseprintf(該矩陣的行數(shù)為%d、列數(shù)為%d、非零元素個(gè)數(shù)為%d.n非零元的坐標(biāo)及值:nn,M.mu,M.nu,M.tu);printf( 行 列 元素值n);for(i=1;i=M.tu;i+)printf(%4d%4d%6dn,M.datai.i,M.datai.j,M.datai.e);printf(n);void PrintTSMatrix1(TSMatrix M) int i,j,k=0; Triple *p=M.data;p+;/data0未用,從data1開始printf(陣列形式為:n); for(i=1;i
21、=M.mu;i+) for(j=1;j=M.nu;j+) if (ki=i&p-j=j) printf(%4d,p-e); p+; k+; else printf(%4d,0); printf(n); printf(n);int UnZore(TSMatrix M,int row,int col)int order=1;/data0未用while(order=M.tu)if(M.dataorder.i=row&M.dataorder.j=col)return order;order+;return 0;Status TSMatrix_Add(TSMatrix M,TSMatrix N,TSMatrix *Q)int row,col;int order=1,order1,order2;/data0未用if(M.mu=N.mu&M.nu=N.nu)for(row=1;row=M.mu;row+)for(col=1;coldataorder.i=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中考專區(qū) 二輪專題復(fù)習(xí)課件:中國古代傳統(tǒng)文化 課件
- 2025租賃合同格式范本
- 德育考試試題及答案
- 西昌安順空分氣體有限責(zé)任公司空分工業(yè)氧氣、空分氮?dú)狻⒊溲b技術(shù)改造項(xiàng)目(噪聲和固體廢物部分)環(huán)評(píng)報(bào)告
- 德語命令式學(xué)習(xí)
- 2025合同樣本個(gè)人汽車貸款合同示范文本
- 小學(xué)數(shù)學(xué)骨干教師個(gè)人總結(jié)(9篇)
- 2025重型機(jī)械設(shè)備租賃合同
- 體育學(xué)科工作總結(jié)(5篇)
- 2025建筑設(shè)備租賃合同書
- 國開期末考試《城市管理學(xué)》機(jī)考試題及答案(第13套)
- 2分鐘雙人相聲劇本
- 脈沖編碼調(diào)制與解調(diào)實(shí)驗(yàn)報(bào)告
- 人教版五年級(jí)下冊(cè)數(shù)學(xué)找次品表格式教案設(shè)計(jì)
- EAM實(shí)施和應(yīng)用
- 《工程勘察設(shè)計(jì)收費(fèi)管理規(guī)定》計(jì)價(jià)格【2002】10號(hào)(廢止)
- 做大做強(qiáng)陽江刀剪產(chǎn)業(yè)的思考.
- 消防改造施工合同范文
- 日本玩具標(biāo)準(zhǔn)ST2016-PART3-CHEMICALPROPERTIES-中英對(duì)照
- 食堂廚房除油煙系統(tǒng)清洗項(xiàng)目招投標(biāo)書范本
- 8.關(guān)鍵作業(yè)交底制度
評(píng)論
0/150
提交評(píng)論