數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告矩陣的運(yùn)算.doc_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告矩陣的運(yùn)算.doc_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告矩陣的運(yùn)算.doc_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告矩陣的運(yùn)算.doc_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告矩陣的運(yùn)算.doc_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

荊楚理工學(xué)院課程設(shè)計(jì)成果 學(xué)院:_荊楚理工學(xué)院_ 班 級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)本一班 學(xué)生姓名: 沈猛 學(xué) 號(hào): 2012404010145 設(shè)計(jì)地點(diǎn)(單位)_ _設(shè)計(jì)題目:_矩陣的轉(zhuǎn)置、加減和相乘_ 完成日期: 2013 年 12 月 30 日 指導(dǎo)教師評(píng)語(yǔ): _ _ _ _ 成績(jī)(五級(jí)記分制):_ 教師簽名:_ _目 錄1 問(wèn)題描述12 需求分析13 概要設(shè)計(jì)131抽象數(shù)據(jù)類(lèi)型定義132模塊劃分24 詳細(xì)設(shè)計(jì)241數(shù)據(jù)類(lèi)型的定義342主要模塊的算法描述35 測(cè)試分析96 課程設(shè)計(jì)總結(jié)11參考文獻(xiàn)12附錄 全部代碼131 問(wèn)題描述采用十字鏈表存儲(chǔ)的稀疏矩陣,完成矩陣轉(zhuǎn)置、加減和相乘功能。2 需求分析(1)先用do-while語(yǔ)句選擇要操作的程序:1、矩陣的相加,2、矩陣的相乘,3、矩陣轉(zhuǎn)置。(2)輸入你想要操作的程序再用switch選擇:轉(zhuǎn)置函數(shù)void NormalTSMatrix(TSMatrix M,TSMatrix &T) ;加法函數(shù)void SeqAdd(TSMatrix a, TSMatrix b,TSMatrix &c);乘法函數(shù)void multsmatrix(TSMatrix M,TSMatrix N,TSMatrix &T);(3)在調(diào)用以上函數(shù)時(shí)先要建立三元數(shù)組輸入函數(shù)void InitTSM(TSMatrix *M)和矩陣的輸出函數(shù)void ShowTSM(TSMatrix M)。3 概要設(shè)計(jì)31抽象數(shù)據(jù)類(lèi)型定義ADT Array數(shù)據(jù)對(duì)象:D=aj1j2jn|n(0)稱(chēng)為數(shù)組的維數(shù),bi是數(shù)組第i維的長(zhǎng)度,ji是數(shù)組元素的第i 維下標(biāo),aj1j2jnElemSet, ji=0, ,bi-1, i=1,2, ,n數(shù)據(jù)關(guān)系:R=R1,R2, ,RnRi=|0jkbk-1,1kn且ki, 0jibi-2,aj1.ji.jn,aj1ji+1jnD, i=2, ,n 基本操作: InitArray( &A, n, bound1, , boundn ) 操作結(jié)果:若維數(shù)n和各維長(zhǎng)度合法,則構(gòu)造相應(yīng)的數(shù)組A,并返回OK。 DestroyArray( &A ) 操作結(jié)果:銷(xiāo)毀數(shù)組A。 Value( A, &e, index1, , indexn ) 初始條件:A是n維數(shù)組,e為元素變量,隨后是n個(gè)下標(biāo)值。 操作結(jié)果:若各下標(biāo)不越界,則e賦值為所指定的A的元素值,并返回OK。 Assign( &A, e, index1, , indexn ) 初始條件:A是n維數(shù)組,e為元素變量,隨后是n個(gè)下標(biāo)值。 操作結(jié)果:若下標(biāo)不越界,則將e的值賦給所指定的A的元素,并返回OK。ADT Array32模塊劃分本程序包括三個(gè)模塊:(1)主程序模塊void main()矩陣的相加矩陣的相乘矩陣的轉(zhuǎn)置(2)相加模塊實(shí)現(xiàn)矩陣的相加(3)相乘模塊實(shí)現(xiàn)矩陣的相乘(4)轉(zhuǎn)置模塊實(shí)現(xiàn)矩陣的轉(zhuǎn)置4 詳細(xì)設(shè)計(jì)41數(shù)據(jù)類(lèi)型的定義#define MAXSIZE 1000typedef struct int e; int i,j;Triple; /*三元組類(lèi)型定義*/typedef struct Triple dataMAXSIZE+1; int mu,nu,tu;TSMatrix; /*三元組順序表類(lèi)型定義*/42主要模塊的算法描述(1) 主函數(shù) 圖1 主函數(shù)輸入int i,進(jìn)行switch選擇:當(dāng)輸入時(shí)1時(shí)操作1即進(jìn)行矩陣的加法,同理輸入時(shí)2和3時(shí)進(jìn)行的是矩陣的乘法和轉(zhuǎn)置;輸入是其他數(shù)時(shí)不進(jìn)行任何操作只輸出的是“choose error” 。(2) 建立十元數(shù)組矩陣圖2 建立十元數(shù)組矩陣首先輸入矩陣行數(shù),列數(shù),非零元素的個(gè)數(shù),然后進(jìn)行for循環(huán),在循環(huán)中請(qǐng)輸入元素所在行,列,值在判斷m=0|nM-mu|nM-nu是否成立,若成立則輸出input error!,若不成立則執(zhí)行M-datai.i=m; M-datai.j=n;M-datai.e=e。(3) 輸出矩陣圖3 輸出矩陣先是for語(yǔ)句控制輸出的格式,再用兩個(gè)for語(yǔ)句控制矩陣的行和列在等二個(gè)for語(yǔ)句中用if語(yǔ)句判斷M.datat.i=m&M.datat.j=n若成立則printf(%dt,M.datat.e);t+;否則printf(0t),即在矩陣中沒(méi)有數(shù)的地方輸出0。(4)矩陣的加法圖4 矩陣加法首先進(jìn)行是while(i=a.tu & j=b.tu)循環(huán),在此循環(huán)中分別判斷兩矩陣的行相等和不相等,列的相等和不相等時(shí)要分別執(zhí)行不同的語(yǔ)句即a的行號(hào)等于b的行號(hào)和a的列號(hào)等于b的列號(hào)時(shí)此時(shí)將他們的數(shù)據(jù)直接相加;a的行號(hào)等于b的行號(hào)和a的列號(hào)小于b的列號(hào)時(shí)相加后的值等于列號(hào)更小的矩陣中對(duì)應(yīng)元素的值;如果a的列號(hào)大于b的列號(hào)且行號(hào)相等,則相加后的值等于列號(hào)更小的矩陣中對(duì)應(yīng)元素的值;如果a的行號(hào)小于b的行號(hào)且列號(hào)相等,則相加后的值等于行號(hào)更小的矩陣中對(duì)應(yīng)元素的值;如果a的行號(hào)大于b的行號(hào)且列號(hào)相等,則相加后的值等于行號(hào)更小的矩陣中對(duì)應(yīng)元素的值。然后執(zhí)行while(i=a.tu)和while(jdataQn.e=*(Qe+(i-1)*N.nu+j);T-dataQn.i=i; T-dataQn.j=j;。(6)矩陣的轉(zhuǎn)置圖6 矩陣的轉(zhuǎn)置先把矩陣M的行數(shù)和列數(shù)分別賦給轉(zhuǎn)置后矩陣T的列數(shù)和行數(shù),元素個(gè)數(shù)不變;然后再找出矩陣的M的i列元素,得到矩陣T的i行元素,直至全部轉(zhuǎn)置完。5 測(cè)試分析測(cè)試數(shù)據(jù)及結(jié)果如下:圖7矩陣的加法測(cè)試分析結(jié)果根據(jù)矩陣加法測(cè)試結(jié)果分析可知:矩陣的加法是要比較矩陣A的行和列與矩陣B行和列分別之間大小,來(lái)執(zhí)行不同的語(yǔ)句。圖8 矩陣乘法測(cè)試分析結(jié)果根據(jù)矩陣乘法測(cè)試結(jié)果分析可知:首先要判斷矩陣的列數(shù)是否與矩陣的行數(shù)相等,如果若相等則執(zhí)行乘法相關(guān)語(yǔ)句,否則不能進(jìn)行乘法語(yǔ)句。 圖9 矩陣轉(zhuǎn)置測(cè)試分析結(jié)果根據(jù)矩陣轉(zhuǎn)置測(cè)試結(jié)果分析:只要你輸入的矩陣是對(duì)的則就能轉(zhuǎn)置。但注意不要超過(guò)MAXSIZE的值。6 課程設(shè)計(jì)總結(jié)通過(guò)這次課程設(shè)計(jì)使我充分的理解了用三元數(shù)組實(shí)現(xiàn)稀疏矩陣的加法,乘法,轉(zhuǎn)置。雖然此次的程序不是很完備,但是總體還是一個(gè)比較能體現(xiàn)數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)能力的程序了,當(dāng)然只是相對(duì)于我這個(gè)初學(xué)者來(lái)說(shuō)。在剛開(kāi)始編程的時(shí)候,我感到很吃力,不知如何去編寫(xiě)源程序,后來(lái)柳老師叫我們?nèi)タ创祟}目要用到那些知識(shí)和去上網(wǎng)搜索相關(guān)程序,此后經(jīng)過(guò)一個(gè)星期的努力終于編好了源程序,可是不能運(yùn)行,我們這小組經(jīng)過(guò)反復(fù)的討論都沒(méi)找出錯(cuò)誤,此時(shí)我們只好請(qǐng)教柳老師,老師一看就發(fā)現(xiàn)了問(wèn)題原來(lái)我們定義的MAXSIZE 的值溢出了。其余的問(wèn)題不大,只是程序不夠完美。所以我們又對(duì)程序進(jìn)行改進(jìn)直至完成。在此我非常要感謝的是我的指導(dǎo)老師柳小文老師,感謝老師的細(xì)心認(rèn)真的輔導(dǎo),讓我對(duì)數(shù)據(jù)結(jié)構(gòu)這門(mén)課程有了一定的研究。參考文獻(xiàn)教學(xué)參考書(shū)1李素若.數(shù)據(jù)結(jié)構(gòu).北京:化學(xué)工業(yè)出版社,2009.參考資料:1 朱蓉,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書(shū)2嚴(yán)蔚敏 吳偉民,.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版),1999,清華大學(xué)出版社;3嚴(yán)蔚敏 吳偉民,.數(shù)據(jù)結(jié)構(gòu)題集(C語(yǔ)言版),1999,清華大學(xué)出版社;4徐孝凱,數(shù)據(jù)結(jié)構(gòu)課程實(shí)驗(yàn),2002,清華大學(xué)出版社;5孟佳娜 胡瀟琨,算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)與習(xí)題,2004,機(jī)械工業(yè)出版社;附錄 全部代碼#includestdio.h#include stdlib.h#includemalloc.h#define MAXSIZE 1000typedef struct int e; int i,j;Triple; /*三元組類(lèi)型定義*/typedef struct Triple dataMAXSIZE+1; int mu,nu,tu;TSMatrix; /*三元組順序表類(lèi)型定義*/void InitTSM(TSMatrix *M); /函數(shù)聲明void ShowTSM(TSMatrix M);void NormalTSMatrix(TSMatrix M,TSMatrix *T) ;void SeqAdd(TSMatrix a,TSMatrix b,TSMatrix *c);void multsmatrix(TSMatrix M,TSMatrix N,TSMatrix *T);void main() /主函數(shù) int i; TSMatrix sm,sm1,sm2,sm3,tsm; do printf(*n); printf(請(qǐng)選擇你想要的操作n);printf(); printf(1 矩陣相加); printf(2 矩陣相乘); printf(3 轉(zhuǎn)置n); scanf(%d,&i); switch(i) case 1: system(cls); printf(請(qǐng)創(chuàng)建A矩陣n); InitTSM(&sm1); ShowTSM(sm1); printf(請(qǐng)創(chuàng)建B矩陣n); InitTSM(&sm2); ShowTSM(sm2); printf(A加上B為:n); SeqAdd(sm1,sm2,&sm3); printf(*n); ShowTSM(sm3); break; case 2: system(cls); printf(請(qǐng)創(chuàng)建A矩陣n); InitTSM(&sm1); ShowTSM(sm1); printf(請(qǐng)創(chuàng)建B矩陣n); InitTSM(&sm2); ShowTSM(sm2); printf(A乘以B為:n); multsmatrix(sm1,sm2,&sm3); ShowTSM(sm3); break; case 3: system(cls); printf(請(qǐng)創(chuàng)建矩陣n); InitTSM(&sm); ShowTSM(sm); printf(矩陣轉(zhuǎn)置為:n); NormalTSMatrix( sm, &tsm) ; ShowTSM(tsm); break; default: printf(choose error!n); while(i!=0);void InitTSM(TSMatrix *M) /初始化數(shù)組元素 int e,m,n,t,i; printf(請(qǐng)輸入矩陣行數(shù),列數(shù),非零元素的個(gè)數(shù):n); scanf(%d%d%d, &m,&n,&t); M-mu=m; M-nu=n; M-tu=t; for( i=1;i=t;i+) printf(請(qǐng)輸入元素所在行,列,值:); scanf(%d%d%d, &m,&n,&e); if(m=0|nM-mu|nM-nu) printf(input error!n); i-; else M-datai.i=m; M-datai.j=n; M-datai.e=e; void ShowTSM(TSMatrix M) /顯示數(shù)組元素 int m,n,i,t=1; printf(則矩陣為:n); for( i=1;i=M.nu;i+) printf(%dt,i); printf(n); printf(*n); for(m=1;m=M.mu;m+) for(n=1;nmu=M.nu; T-nu=M.mu; T-tu=M.tu; if(T-tu) int t,i,k=1; for( i=1;iM.nu;i+) for( t=1;tdatak.i=M.datat.j; T-datak.j=M.datat.i; T-datak+.e=M.datat.e; void SeqAdd(TSMatrix a,TSMatrix b,TSMatrix *c) /矩陣加法 int i=1,j=1,k=1; /下標(biāo)置初始值 while(i=a.tu & jdatak.i=a.datai.i; c-datak.j=a.datai.j; c-datak.e=a.datai.e+b.dataj.e;/此時(shí)將他們的數(shù)據(jù)直接相加 i+; j+; k+; else if(a.datai.jdatak.i=a.datai.i; c-datak.j=a.datai.j; c-datak.e=a.datai.e;/如果行號(hào)相等,則相加后的值等于列號(hào)更小的矩陣中對(duì)應(yīng)元素的值 i+; k+; else if(a.datai.jb.dataj.j)/a的列號(hào)大于b的列號(hào) c-datak.i=b.dataj.i; c-datak.j=b.dataj.j; c-datak.e=b.dataj.e; /如果行號(hào)相等,則相加后的值等于列號(hào)更小的矩陣中對(duì)應(yīng)元素的值 j+; k+; else if(a.datai.idatak.i=a.datai.i; c-datak.j=a.datai.j; c-datak.e=a.datai.e;/如果列號(hào)相等,則相加后的值等于行號(hào)更小的矩陣中對(duì)應(yīng)元素的值 i+; k+; else if(a.datai.ib.dataj.i)/a的行號(hào)大于b的行號(hào) c-datak.i=b.dataj.i; c-datak.j=b.dataj.j; c-datak.e=b.dataj.e;/如果列號(hào)相等,則相加后的值等于行號(hào)更小的矩陣中對(duì)應(yīng)元素的值 j+; k+; while(idatak.e=a.datai.e; c-datak.i=a.datai.i; c-datak.j=a.datai.j; i+; k+; while(jdatak.e=a.dataj.e; c-datak.i=a.dataj.i; c-datak.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論