資源描述:
《矩陣轉(zhuǎn)置及相加實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
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)置得到的與相加得到的三元組順序表及其矩陣形式。二、實(shí)驗(yàn)過程及結(jié)果一、需求分析1、將隨機(jī)生成的數(shù)定義為int型(為方便起見設(shè)定范圍為-20至20(不含0),可修改)
2、,三元組存儲(chǔ)的元素分別為非零元的行下標(biāo)、列下標(biāo)及該位置的元素值,零元不進(jìn)行存儲(chǔ)。實(shí)際上在生成稀疏矩陣時(shí)是隨機(jī)選取一些位置生成非零元然后存入三元組中。2、從鍵盤輸入矩陣的行數(shù)和列數(shù)后應(yīng)能輸出三元組順序表及相應(yīng)矩陣(按行和列排列形式輸出)。3、程序能實(shí)現(xiàn)的功能包括:①隨機(jī)產(chǎn)生稀疏矩陣;②輸出陣列形式的矩陣;③輸出三元組順序表;④將矩陣快速轉(zhuǎn)置;⑤將兩個(gè)稀疏矩陣相加生成新的矩陣。二、概要設(shè)計(jì)1、稀疏矩陣的抽象數(shù)據(jù)類型定義:ADTTSMatrix{數(shù)據(jù)對(duì)象:D={aij
3、i=1,2,…,m,j=1,2,…,n;Ai,j∈ElemSe
4、t,m和n分別稱為矩陣的行數(shù)和列數(shù)}數(shù)據(jù)關(guān)系:R={Row,Col}Row={
5、1≤i≤m,1≤j≤n-1}Col={
6、1≤i≤m-1,1≤j≤n}基本操作:CreateTSMatrix(&M)操作結(jié)果:創(chuàng)建矩陣MPrintTSMatrix(M)初始條件:矩陣M已存在操作結(jié)果:輸出矩陣M中三元組形式的非零元素PrintTSMatrix1(M)初始條件:矩陣M已存在操作結(jié)果:以陣列形式輸出矩陣UnZore(M,row,col)初始條件:矩陣M已存在操作結(jié)果:若位置(row,c
7、ol)處存在非零元素,則返回該元素存儲(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并返回}ADTTSMatrix;⒊本程序模塊結(jié)構(gòu)⑴主函數(shù)模塊voidmain(){初始化迷矩陣;創(chuàng)建矩陣并輸出;將矩陣轉(zhuǎn)置并輸出;將矩陣相加并輸出結(jié)果;}三、詳細(xì)設(shè)計(jì)1、基本數(shù)據(jù)類型操作⑴typedefintElemType;typedefstruct{
8、inti,j;ElemTypee;}Triple;//數(shù)據(jù)類型三元組typedefstruct{Tripledata[maxsize+1];//矩陣大小intmu,nu,tu;//}TSMatrix;//矩陣抽象數(shù)據(jù)類型2、參數(shù)設(shè)置:#definemaxsize10000//----------基本操作的算法描述--------------------StatusCreateTSMatrix(TSMatrix*M){//創(chuàng)建一個(gè)隨機(jī)矩陣(data[0]未用)srand((int)time(NULL));printf("Ple
9、aseInputTheLinesAndColumnsOfTheMatrix:");printf("...(矩陣的期望規(guī)格大于4*5(或5*4))...");scanf(M->mu,M->nu);for(m=0;mmu;m++){for(n=0;nnu;n++){k[m][n]=rand()%20;if(k[m][n]==0){if(rand()%2)M->data[p].e=rand()%20+1;elseM->data[p].e=rand()%20-20;M->data[p].i=m+1;M->da
10、ta[p].j=n+1;p++;}}}M->tu=p-1;//p從1開始,非零元個(gè)數(shù)剛好等于p-1returnOK;}voidPrintTSMatrix(TSMatrixM){//輸出矩陣的三元組順序表if(M.tu==0)printf("無非零元!");else{printf("該矩陣的行數(shù)為%d、列數(shù)為%d、非零元素個(gè)數(shù)為%d.非零元的坐標(biāo)及值:",M.mu,M.nu,M.tu);printf("行列元素值");for(i=1;i<=M.tu;i++){printf("%4d%4d%6d",M.d
11、ata[i].i,M.data[i].j,M.data[i].e);}printf("");}}voidPrintTSMatrix1(TSMatrixM){//輸出矩陣的陣列形式printf("陣列形式為:");for(i=1;i<=M.mu;i++){for(j=1;j<=M.n