實(shí)驗(yàn)報告----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計稀疏矩陣的應(yīng)用_第1頁
實(shí)驗(yàn)報告----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計稀疏矩陣的應(yīng)用_第2頁
實(shí)驗(yàn)報告----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計稀疏矩陣的應(yīng)用_第3頁
實(shí)驗(yàn)報告----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計稀疏矩陣的應(yīng)用_第4頁
實(shí)驗(yàn)報告----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計稀疏矩陣的應(yīng)用_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上數(shù)學(xué)與計算機(jī)學(xué)院課程設(shè)計說明書課 程 名 稱: 數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設(shè) 計 課 程 代 碼: 題 目: 稀疏矩陣的應(yīng)用 年級/專業(yè)/班: 2010級 軟件工程 2班 學(xué) 生 姓 名: 尹 龍 海 學(xué) 號: 1228 開 始 時 間: 2011 年 12 月 08 日完 成 時 間: 2011 年 12 月 16 日課程設(shè)計成績:學(xué)習(xí)態(tài)度及平時成績(30)技術(shù)水平與實(shí)際能力(20)創(chuàng)新(5) 說明書(計算書、圖紙、分析報告)撰寫質(zhì)量(45)總 分(100)指導(dǎo)教師簽名: 年 月 日數(shù)據(jù)結(jié)構(gòu)課 程 設(shè) 計 任 務(wù) 書學(xué)院名稱: 數(shù)學(xué)與計算機(jī)學(xué)院 課程代碼:_ _專 業(yè)

2、: 軟件工程(Web方向) 年 級: 2010級2班 一、設(shè)計題目稀疏矩陣應(yīng)用二、 主要內(nèi)容主要完成稀疏矩陣的加、轉(zhuǎn)、乘的實(shí)現(xiàn)。三、具體要求及應(yīng)提交的材料以三元組、十字鏈表為存儲形式,分別實(shí)現(xiàn)兩個稀疏矩陣的加法運(yùn)算、兩個稀疏矩陣的乘法運(yùn)算,以及對任意稀疏矩陣的轉(zhuǎn)置運(yùn)算。稀疏矩陣要求可為鍵盤錄入的任意矩陣。用C/C+語言編程實(shí)現(xiàn)上述內(nèi)容,對每個問題寫出一個算法實(shí)現(xiàn),并按數(shù)學(xué)與計算機(jī)學(xué)院對課程設(shè)計說明書規(guī)范化要求,寫出課程設(shè)計說明書,并提交下列材料:1)課程設(shè)計說明書打印稿一份2)課程設(shè)計說明書電子稿一份;3)源程序電子文檔一份。四、主要技術(shù)路線提示注意合理地設(shè)計三元組及十字鏈表,結(jié)合稀疏矩陣的壓

3、縮存儲方式和特點(diǎn),將每一功能模塊以函數(shù)形式分別實(shí)現(xiàn)。在此基礎(chǔ)上用C/C+實(shí)現(xiàn)其操作。五、進(jìn)度安排按教學(xué)計劃規(guī)定,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計為2周,其進(jìn)度及時間大致分配如下:序號設(shè)計內(nèi)容天數(shù)1分析問題,給出數(shù)學(xué)模型,選擇數(shù)據(jù)結(jié)構(gòu)22設(shè)計算法,給出算法描述13給出源程序清單24編輯、編譯、調(diào)試源程序25編寫課程設(shè)計報告3總 計10六、推薦參考資料1 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu).清華大學(xué)出版社出版。 2 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)題集(C語言版) .清華大學(xué)出版社.2003年5月。3 唐策善,李龍澎.數(shù)據(jù)結(jié)構(gòu)(作C語言描述) .高等教育出版社.2001年9月4 朱戰(zhàn)立.數(shù)據(jù)結(jié)構(gòu)(C+語言描述)(第二版本).高等

4、出版社出版.2004年4月5 胡學(xué)鋼.數(shù)據(jù)結(jié)構(gòu)(C語言版) .高等教育出版社.2004年8月6 徐孝凱 等著.數(shù)據(jù)結(jié)構(gòu)(C語言描述).清華大學(xué)出版社.2004指導(dǎo)教師 簽名日期 年 月 日系 主 任 審核日期 年 月 日目 錄 摘要5引言51 需求分析62 概要設(shè)計63詳細(xì)設(shè)計84調(diào)試分析155用戶使用說明156測試結(jié)果157結(jié)論19致謝20參考文獻(xiàn)21摘 要 本課程設(shè)計主要實(shí)現(xiàn)在三元組存儲結(jié)構(gòu)與十字鏈表存儲結(jié)構(gòu)下輸入稀疏矩陣,并對稀疏矩陣進(jìn)行轉(zhuǎn)置,相加,相乘等操作,最后輸出運(yùn)算后的結(jié)果。考慮到難易程度,先用三元組實(shí)現(xiàn)稀疏矩陣的輸入,輸出,及其轉(zhuǎn)置,相加,相乘等操作的方法,再在十字鏈表下實(shí)現(xiàn)。

5、程序通過調(diào)試運(yùn)行,結(jié)果與預(yù)期一樣,初步實(shí)現(xiàn)了設(shè)計目標(biāo)。關(guān)鍵詞:程序設(shè)計;稀疏矩陣;三元組;十字鏈表引 言 1.1 課程設(shè)計任務(wù)本課程設(shè)計主要實(shí)現(xiàn)在三元組存儲結(jié)構(gòu)與十字鏈表存儲結(jié)構(gòu)下輸入稀疏矩陣,并對稀疏矩陣進(jìn)行轉(zhuǎn)置,相加,相乘操作,最后輸出運(yùn)算后的結(jié)果。稀疏矩陣采用三元組和十字鏈表表示,并在兩種不同的存儲結(jié)構(gòu)下,求兩個稀疏矩陣A和B的和為矩陣C,并輸出C; 求出A的轉(zhuǎn)置為矩陣D,輸出D; 求兩個稀疏矩陣A和B的相乘為矩陣E,并輸出E。1.2 課程設(shè)計性質(zhì)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是重要地實(shí)踐性教學(xué)環(huán)節(jié)。在進(jìn)行了程序設(shè)計語言課和數(shù)據(jù)結(jié)構(gòu)課程教學(xué)的基礎(chǔ)上,設(shè)計實(shí)現(xiàn)相關(guān)的數(shù)據(jù)結(jié)構(gòu)經(jīng)典問題,有助于加深對數(shù)據(jù)結(jié)構(gòu)

6、課程的認(rèn)識。本課程設(shè)計是數(shù)據(jù)結(jié)構(gòu)中的一個關(guān)于稀疏矩陣的算法的實(shí)現(xiàn),包括在三元組和十字鏈表下存儲稀疏矩陣,并對輸入的稀疏矩陣進(jìn)行轉(zhuǎn)置,相加,相乘等操作,最后把運(yùn)算結(jié)果輸出。此課程設(shè)計要求對數(shù)組存儲結(jié)構(gòu)和鏈表存儲結(jié)構(gòu)非常熟悉,并能熟練使用它們。1.3課程設(shè)計目的其目的是讓我們在學(xué)習(xí)完C+、數(shù)據(jù)結(jié)構(gòu)等課程基礎(chǔ)上,掌握多維數(shù)組的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)、掌握稀疏矩陣的壓縮存儲及轉(zhuǎn)置,相加,相乘等操作,并用不同的方法輸出結(jié)果,進(jìn)一步掌握設(shè)計、實(shí)現(xiàn)較大系統(tǒng)的完整過程,包括系統(tǒng)分析、編碼設(shè)計、系統(tǒng)集成、以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計、實(shí)現(xiàn)以及操作方法,為進(jìn)一步的應(yīng)用開發(fā)打好基礎(chǔ)。需求分析2.1設(shè)計函數(shù)

7、建立稀疏矩陣及初始化值和輸出稀疏矩陣的值本模塊要求設(shè)計函數(shù)建立稀疏矩陣并初始化,包括在三元組結(jié)構(gòu)下和十字鏈表結(jié)構(gòu)下。在創(chuàng)建稀疏矩陣時,需要設(shè)計兩個不同的函數(shù)分別在三元組和十字鏈表下創(chuàng)建稀疏矩陣,在輸入出現(xiàn)錯誤時,能夠?qū)﹀e誤進(jìn)行判別處理,初始化稀疏矩陣都為空值。在設(shè)計輸出稀疏矩陣的值的函數(shù)時,也要針對兩種不同的情況,分別編制函數(shù),才能準(zhǔn)確的輸出稀疏矩陣。在對稀疏矩陣進(jìn)行初始化時,只輸入非零元素的值和它所在的所在行及所在列。在對稀疏矩陣輸出時,以矩陣的完整形式輸出。2.2構(gòu)造函數(shù)進(jìn)行稀疏矩陣的轉(zhuǎn)置并輸出結(jié)果本模塊要求設(shè)計函數(shù)進(jìn)行稀疏矩陣的轉(zhuǎn)置并輸出轉(zhuǎn)置后的結(jié)果。在編寫函數(shù)時,要先定義一個相應(yīng)的結(jié)構(gòu)

8、體變量用于存放轉(zhuǎn)置后的矩陣,最后把此矩陣輸出。2.3構(gòu)造函數(shù)進(jìn)行兩稀疏矩陣相加、減及相乘并輸出最終稀疏矩陣本模塊要求設(shè)計相加、減和相乘函數(shù)對兩個矩陣進(jìn)行運(yùn)算,并輸出最終的稀疏矩陣,定義相應(yīng)的矩陣類型用于存放兩個矩陣操作后的結(jié)果矩陣,這個結(jié)果矩陣的行、列數(shù)需要綜合多方面情況來確定。這些函數(shù)也是整個程序的難點(diǎn),需要靈活運(yùn)用數(shù)組及指針的特點(diǎn)。2.4退出系統(tǒng)本模塊要求設(shè)置選項能隨時結(jié)束程序的運(yùn)行,本程序中采用do-while循環(huán)。程序在計算機(jī)上顯示“提示信息”之后,由用戶在鍵盤上輸入演示程序中需要的相關(guān)信息及命令。概要設(shè)計3.1存儲結(jié)構(gòu)設(shè)計三元組結(jié)構(gòu)體定義: struct matint i;/非零元素

9、的行位置int j;/非零元素的列位置int v;/非零元素的值;class sqmatrixprivate:int m;/矩陣的行數(shù)int n;/矩陣的列數(shù)int t;/矩陣中非零元素的個數(shù)mat datamax;/三元組表int rposmax;/存儲矩陣中第max行以前所有非零元素的個數(shù)public:;十字鏈表結(jié)構(gòu)體定義: typedef struct OLNode int i,j; /該非零元的行、列下標(biāo) int e; /非零元值 struct OLNode *right,*down; / 該非零元所在行表和列表的 后繼元素 OLNode,*OLink;/ 定義十字鏈表對象結(jié)構(gòu)體typ

10、edef struct OLink *rhead,*chead; /OLink類型 結(jié)點(diǎn)數(shù)組 int a,b,c; / 系數(shù)矩陣的行數(shù),列數(shù),和非零元素個數(shù) CrossList;3.2系統(tǒng)功能設(shè)計本系統(tǒng)除了要完成分別在三元組存儲結(jié)構(gòu)以及在十字鏈表下實(shí)現(xiàn)稀疏矩陣的初始化功能外還設(shè)置了4個子功能菜單。稀疏矩陣的建立及初始化在三元組存儲結(jié)構(gòu)下,由函數(shù) void creat()實(shí)現(xiàn),在十字鏈表存儲結(jié)構(gòu)下,由函數(shù)void CreateSMatix_OL(CrossList &M)依據(jù)讀入的行數(shù)和列數(shù)以及非零元素的個數(shù),分別設(shè)定每個非零元素的信息。4個子功能的設(shè)計描述如下。(1)稀疏矩陣的轉(zhuǎn)置:此

11、功能在三元組存儲結(jié)構(gòu)下,有兩種方法:按行轉(zhuǎn)置和按列轉(zhuǎn)置,分別由函數(shù)sqmatrix transmatone()和sqmatrix transmattwo()實(shí)現(xiàn),在十字鏈表存儲結(jié)構(gòu)下,由函數(shù)void zhuanzhi( )實(shí)現(xiàn)。當(dāng)用戶選擇該功能,系統(tǒng)提示用戶初始化一個矩陣,然后進(jìn)行轉(zhuǎn)置,最終輸出結(jié)果。(2)稀疏矩陣的加法:此功能在三元組存儲結(jié)構(gòu)下,由函數(shù)void add(sqmatrix a,sqmatrix b)實(shí)現(xiàn),在十字鏈表存儲結(jié)構(gòu)下,由函數(shù)void add()實(shí)現(xiàn)。當(dāng)用戶選擇該功能,系統(tǒng)即提示用戶初始化要進(jìn)行加法的兩個矩陣的信息。然后進(jìn)行加法,最后輸出結(jié)果。(3)稀疏矩陣的乘法:此功能

12、在三元組存儲結(jié)構(gòu)下,由函數(shù)void cheng(sqmatrix a,sqmatrix b)實(shí)現(xiàn)。在十字鏈表存儲結(jié)構(gòu)下,由函數(shù)void chengfa()實(shí)現(xiàn)。當(dāng)用戶選擇該功能,系統(tǒng)提示輸入要進(jìn)行相乘的兩個矩陣的詳細(xì)信息。然后進(jìn)行相乘,最后得到結(jié)果。(4)退出:即退出稀疏矩陣的應(yīng)用系統(tǒng),由switch語句實(shí)現(xiàn)。當(dāng)用戶選擇相應(yīng)序號,則退出該稀疏矩陣的應(yīng)用系統(tǒng)。詳細(xì)設(shè)計4.1 數(shù)據(jù)類型定義三元組結(jié)構(gòu)體定義:struct matint i;/非零元素的行位置int j;/非零元素的列位置int v;/非零元素的值; class sqmatrixprivate:int m;/矩陣的行數(shù)int n;/矩

13、陣的列數(shù)int t;/矩陣中非零元素的個數(shù)mat datamax;/三元組表int rposmax;/存儲矩陣中第max行以前所有非零元素的個數(shù)public: ; 十字鏈表結(jié)構(gòu)體定義: typedef struct OLNode int i,j; /該非零元的行、列下標(biāo) int e; /非零元值 struct OLNode *right,*down; OLNode,*OLink; typedef struct OLink *rhead,*chead; /OLink類型 結(jié)點(diǎn)數(shù)組 int a,b,c; / 系數(shù)矩陣的行數(shù),列數(shù),和非零元素個數(shù) CrossList; 4.2系統(tǒng)主要子程序詳細(xì)設(shè)計A

14、. 主程序模塊設(shè)計: 采用一個do-while語句執(zhí)行各個功能的操作循環(huán),并用switch語句控制選擇三元組或十字鏈表進(jìn)行相關(guān)的操作,在采用的操作界面中,再用switch語句控制各功能的實(shí)現(xiàn),主要代碼如下:docout<<endl;cout<<"n *稀疏矩陣應(yīng)用*"<<endl<<endl;cout<<"n 請你選擇創(chuàng)建稀疏矩陣的方法 "<<endl;cout<<"n 1、用三元組創(chuàng)建稀疏矩陣"<<endl;cout<<&qu

15、ot;n 2、用十字鏈表創(chuàng)建稀疏矩陣"<<endl;cout<<"n 3、退出程序"<<endl<<endl;cout<<"請選擇:"cin>>k; cout<<endl;switch(k)case 1: cout<<" 歡迎進(jìn)入三元組操作矩陣系統(tǒng)"<<endl<<endl;switch(kk)case 1: 兩矩陣求和break;case 2: 兩矩陣相乘break;case 3: 矩陣按行轉(zhuǎn)置break

16、;case 4: 矩陣按行轉(zhuǎn)置break;case 5: 退出該程序break;cout<<endl; break;case 2: cout<<" 歡迎進(jìn)入十字鏈表操作矩陣系統(tǒng)"<<endl<<endl;switch(kk) case 1: 兩矩陣求和break;case 2: 兩矩陣相乘break;case 3: 兩矩陣相減break;case 4: 矩陣轉(zhuǎn)置break;case 5: 退出該程序break;cout<<endl; break; while(k=1|k=2); cout<<endl;

17、return 0; B. 稀疏矩陣操作各子函數(shù)的定義:(1)建立與初始化稀疏矩陣: 采用三元組建立稀疏矩陣,輸入非零元素的行號、列號和值,關(guān)鍵代碼如下:cout<<"行號i 列號j 非零元素值v"<<endl;for(int p=0;p<t;p+) cout<<" "cin>>ii;datap.i=ii;cout<<" "cin>>jj;datap.j=jj;cout<<" "cin>>element;datap.

18、v=element; cout<<endl; 采用十字鏈表建立稀疏矩陣,輸入非零元素的行號、列號和值,給新結(jié)點(diǎn)申請空間,按列循環(huán)鏈表和行循環(huán)鏈表形式插入到十字鏈表中關(guān)鍵代碼如下:int x,y,m; cout<<"請輸入稀疏矩陣的行,列,及非零元素個數(shù)"<<endl; cin>>M.a>>M.b>>M.c; cout<<"請按三元組的格式輸入數(shù)組:"<<endl; for(int i=1;i<=M.c;i+) cin>>x>>y&

19、gt;>m; cout<<endl; OLink p,q; p->i=x; p->j=y; p->e=m;if(M.rheadx=NULL|M.rheadx->j>y) p->right=M.rheadx; M.rheadx=p; else for(q=M.rheadx;(q->right)&&(q->right->j<y);q=q->right); p->right=q->right; q->right=p; if(M.cheady=NULL|M.cheady->i&g

20、t;x) p->down=M.cheady; M.cheady=p; elsefor(q=M.cheady;(q->down)&&(q->down->i<x);q=q->down); p->down=q->down; q->down=p; (2)輸出稀疏矩陣:用三元組輸出矩陣元素時,若稀疏矩陣所對應(yīng)的元素在三元組中有該元素,則輸出三元組中的這個元素的值,否則,輸出零。其關(guān)鍵代碼如下:if(datap.i=i&&datap.j=j) isfound=true;foundindex=p; if(isfound=t

21、rue) cout<<setw(5)<<datafoundindex.v;elsecout<<setw(5)<<"0"用十字鏈表輸出矩陣元素時,若稀疏矩陣所對應(yīng)的元素在十字鏈表中有該元素,則輸出三元組中的這個元素的值,同時指針指向下一個結(jié)點(diǎn),否則,輸出零。其關(guān)鍵代碼如下: if(p)&&(j=p->j) cout<<p->e<<" " p=p->right; else cout<<"0"<<" &

22、quot; cout<<endl<<endl; (3)實(shí)現(xiàn)矩陣的轉(zhuǎn)置:用三元組和十字鏈表實(shí)現(xiàn)矩陣轉(zhuǎn)置,都采用元素所對應(yīng)的行號變?yōu)樾戮仃嚨牧刑枺鶎?yīng)的列號變?yōu)樾戮仃嚨男刑?,所對?yīng)的值不變,在這個過程中采用一個for循環(huán)使待轉(zhuǎn)置的元素所對應(yīng)的列號較小者先轉(zhuǎn)置到新矩陣中,其關(guān)鍵代碼如下:b.m=n;b.n=m;b.t=t; if(t!=0) int q=0; for(int col=1;col<=n;col+)for(int p=0;p<t;p+)if(datap.j=col) b.dataq.j=datap.i;b.dataq.i=datap.j; b.dat

23、aq.v=datap.v;q+;cout<<endl<<endl; return b; (4)實(shí)現(xiàn)兩個矩陣的相加:采用三元組實(shí)現(xiàn)兩矩陣相加時,先判斷被加的兩矩陣所對應(yīng)的位置是否有非零元素,若沒有或兩矩陣元素相加為零,則新三元組表中不進(jìn)行任何操作,若只有一個為非零元素,則新三元組表中對應(yīng)位置元素值就為該非零元素的值,若兩矩陣相同位置元素和k不為零,則新三元組表中對應(yīng)應(yīng)位置元素值就為k。其關(guān)鍵代碼如下:while(pa<=a.t&&pb<b.t) ka=(a.datapa.i-1)*n+a.datapa.j;kb=(b.datapb.i-1)*n

24、+b.datapb.j; if(ka<kb)pc+;datapc=a.datapa;pa+;else if(ka>kb)pc+;datapc=b.datapb;pb+;elses=a.datapa.v+b.datapb.v; if(s=0)pa+;pb+;elsepc+;datapc=a.datapa; datapc.v=s; pa+;pb+;while(pa<a.t)pc+;datapc=a.datapa;pa+;while(pb<b.t)pc+;datapc=b.datapb;pb+;t=pc+1; 采用十字鏈表實(shí)現(xiàn)兩矩陣相加時,和三元組實(shí)現(xiàn)兩矩陣相加類似,不同點(diǎn)就

25、是元素相加后轉(zhuǎn)向被加的兩個元素結(jié)點(diǎn)向下移動,新三元組的指針也向下移動其關(guān)鍵代碼如下: OLink pa,pb,pre ,hlMAXROW+1; for(int x=1;x<=M.b;x+) hlx=M.cheadx; for(int k=1;k<=M.a;k+) pa=M.rheadk; pb=N.rheadk; pre=NULL; while(pb) OLink p; p->e=pb->e; p->i=pb->i; p->j=pb->j; if(NULL=pa|pa->j>pb->j) if(NULL=pre) M.rhead

26、p->i=p; else pre->right=p; p->right=pa; pre=p; if(NULL=M.cheadp->j) M.cheadp->j=p; p->down=NULL; else p->down=hlp->j->down; hlp->j->down=p; hlp->j=p; pb=pb->right; else if(NULL!=pa)&&pa->j<pb->j) pre=pa; pa=pa->right; else if(pa->j=pb->

27、;j) pa->e += pb->e; if(!pa->e) if(NULL=pre) M.rheadpa->i=pa->right; else pre->right=pa->right; p=pa; pa=pa->right; if(M.cheadp->j=p) M.cheadp->j=hlp->j=p->down; else hlp->j->down=p->down; free(p); pb=pb->right; else pa=pa->right; pb=pb->right; sh

28、uchu(M); (5)實(shí)現(xiàn)兩個矩陣的相乘:三元組實(shí)現(xiàn)兩矩陣相乘和三元組實(shí)現(xiàn)兩矩陣相加類似,不同就是新矩陣非零元素所在行和列的值是兩矩陣所對應(yīng)行元素與所對應(yīng)列元素相乘后相加,其主要代碼如下: int ctempmax; t=0; m=a.m; n=a.n;if(a.t*b.t!=0) for(arow=1; arow<=a.m; arow+)for(ii=1; ii<=a.n; ii+) ctempii=0; rposarow=t;Mlim=arow<a.m?a.rposarow+1 : a.t+1; for( Mcol=a.rposarow; Mcol<Mlim; M

29、col+ ) Mj=a.dataMcol.j; Nlim = Mj<b.m ? b.rposMj+1 : b.t+1; for(Nrow=b.rposMj;Nrow<Nlim;Nrow+) ctempb.dataNrow.j += a.dataMcol.v * b.dataNrow.v; 十字鏈表實(shí)現(xiàn)矩陣相乘和十字鏈表實(shí)現(xiàn)矩陣相加類似,都要判斷相乘后是否為零,在操作時要注意指針的指向。其關(guān)鍵代碼如下:for(int x=1;x<=M.b;x+)hlx=M.cheadx; for(int k=1;k<=M.a;k+) pa=M.rheadk; pb=N.rheadk; p

30、re=NULL; while(pb) OLink p; p->e=pb->e; p->i=pb->i; p->j=pb->j; if(NULL=pa|pa->j>pb->j) if(NULL=pre) M.rheadp->i=p; else pre->right=p; p->right=pa; pre=p; if(NULL=M.cheadp->j) M.cheadp->j=p; p->down=NULL; else p->down=hlp->j->down; hlp->j->

31、down=p; hlp->j=p; pb=pb->right; else if(NULL!=pa)&&pa->j<pb->j) pre=pa; pa=pa->right; else if(pa->j=pb->j) pa->e *= pb->e; if(!pa->e) if(NULL=pre) M.rheadpa->i=pa->right; else pre->right=pa->right; p=pa; pa=pa->right; if(M.cheadp->j=p) M.che

32、adp->j=hlp->j=p->down; else hlp->j->down=p->down; free(p); pb=pb->right; else pa=pa->right; pb=pb->right; 調(diào)試分析 用C+語言寫代碼實(shí)現(xiàn)所要求的功能過程中,用三元組實(shí)現(xiàn)矩陣相乘,有一定的難度,我通過多次調(diào)試,系統(tǒng)始終提示出錯,通過參考網(wǎng)友的代碼和同學(xué)的提示,原來兩矩陣的第i行非零元素個數(shù)不一定等于另一矩陣的第i列非零元素個數(shù),最后,我通過控制一矩陣的非零元素所在的i行、j列位置與另一個矩陣所對應(yīng)的i列j行元素相乘,然后在相加。通過測試,

33、功能能夠?qū)崿F(xiàn)了;在用十字鏈表實(shí)現(xiàn)各功能時,由于指針很多,寫出的代碼最初基本上都是指針指向出錯,通過自己經(jīng)驗(yàn)以及老師的指導(dǎo)、朋友的幫助,最后解決了各個問題。用戶使用說明該系統(tǒng)具有簡單、明了、使用等特點(diǎn),能夠方便、準(zhǔn)確的計算出矩陣的部分操作,適用于學(xué)校老師、同學(xué)對矩陣方面的研究。當(dāng)使用該系統(tǒng)時,系統(tǒng)會給出相關(guān)的提示信息,用戶只需根據(jù)提示信息,即可完成系統(tǒng)提供的所有功能。測試結(jié)果7.1系統(tǒng)運(yùn)行主界面系統(tǒng)運(yùn)行主界面如圖7.1所示:圖7.1 主界面圖7.2 各子功能測試運(yùn)行結(jié)果(1)稀疏矩陣的相加:在主菜單下,用戶輸入1回車,是用三元組對矩陣的操作,用戶再按1回車,根據(jù)屏幕提示操作,運(yùn)行結(jié)果如圖7.2所示。 圖7.2 三元組創(chuàng)建并初始化矩陣在主菜單下,用戶輸入2回車,是用十字鏈表對矩陣的操作,根據(jù)屏幕提示操作,運(yùn)行結(jié)果如圖7.3所示。圖7.3 十字鏈表創(chuàng)建并初始化矩陣(2)稀疏矩陣的轉(zhuǎn)置:用三元組創(chuàng)建稀疏矩陣后,用戶在三元組操作下輸入3或4回車,便顯示該矩陣的轉(zhuǎn)置矩陣,運(yùn)行結(jié)果如圖7.4所示。 圖7.4 三元組稀疏矩陣轉(zhuǎn)置結(jié)果示意圖用十字鏈表創(chuàng)建稀疏矩陣后,用戶在十字鏈表操作下輸入4回車,便顯示該矩陣的轉(zhuǎn)置矩陣,運(yùn)行結(jié)果如圖7.5所示。 圖7.5 十字鏈表稀疏矩陣轉(zhuǎn)置結(jié)果示意圖(3)稀疏矩陣的相乘:在三元組或十字鏈表操作下輸入2回車,按屏幕提示操作,運(yùn)行結(jié)果如圖7.6所示。圖7.6 三

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論