![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(矩陣的運(yùn)算)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/26/75759cfb-c693-4944-bcea-56a51ab1ed18/75759cfb-c693-4944-bcea-56a51ab1ed181.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(矩陣的運(yùn)算)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/26/75759cfb-c693-4944-bcea-56a51ab1ed18/75759cfb-c693-4944-bcea-56a51ab1ed182.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(矩陣的運(yùn)算)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/26/75759cfb-c693-4944-bcea-56a51ab1ed18/75759cfb-c693-4944-bcea-56a51ab1ed183.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(矩陣的運(yùn)算)_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/26/75759cfb-c693-4944-bcea-56a51ab1ed18/75759cfb-c693-4944-bcea-56a51ab1ed184.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(矩陣的運(yùn)算)_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/26/75759cfb-c693-4944-bcea-56a51ab1ed18/75759cfb-c693-4944-bcea-56a51ab1ed185.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù) 據(jù) 結(jié) 構(gòu) 課程設(shè)計報告題 目: 專 業(yè): 班 級: 學(xué) 號: 姓 名: 指導(dǎo)老師: 時 間: 19一、課程設(shè)計題目及所涉及知識點(diǎn)設(shè)計題目是“矩陣的運(yùn)算”,所涉及的知識點(diǎn)主要是:1、數(shù)據(jù)結(jié)構(gòu)中的對于結(jié)構(gòu)體的定義, 用typedef struct來實(shí)現(xiàn),根據(jù)所設(shè)計的問題在結(jié)構(gòu)體里面定義數(shù)據(jù)類型及其變量,用define定義數(shù)組的大小,然后利用typedef 來實(shí)現(xiàn)對于變量的未知類型確定正確的類型。2、利用數(shù)組的形式來儲存數(shù)據(jù),在實(shí)現(xiàn)不同操作過程中,有的用一維結(jié)構(gòu)體數(shù)組(三元組順序表)來存儲,有的用二維數(shù)組來儲存。3、轉(zhuǎn)置的過程中利用的是快速轉(zhuǎn)置的方法,附設(shè)了num和cpot兩個輔助變量。4、矩
2、陣的加法、減法、乘法、逆運(yùn)算的基本算法方式。5、通過調(diào)用每個函數(shù),來實(shí)現(xiàn)每個算法的功能。二、課程設(shè)計思路及算法描述設(shè)計思路:1、 首先是對于轉(zhuǎn)置的考慮,要運(yùn)用快速轉(zhuǎn)置的方法實(shí)現(xiàn),必須用三元組順序表來儲存數(shù)據(jù),所以在第一個結(jié)構(gòu)體中存在int類型的行數(shù)(mu)列數(shù)(nu)以及非零元素的個數(shù)(tu);然后第二個結(jié)構(gòu)體中分別有非零元素的行下標(biāo)(i)、列下標(biāo)(j)和元素數(shù)值(e),最后在第一個結(jié)構(gòu)體中實(shí)現(xiàn)對第二個結(jié)構(gòu)體成為數(shù)組結(jié)構(gòu)體類型。2、 對于其余加法、減法、乘法和逆運(yùn)算則是運(yùn)用另一個結(jié)構(gòu)體來實(shí)現(xiàn),里面只有矩陣的行數(shù)、列數(shù)和一個二維數(shù)組(用float來定義類型)。3、 在main函數(shù)里面,來實(shí)現(xiàn)對于
3、數(shù)據(jù)的輸入操作,利用if語句進(jìn)行選擇來執(zhí)行操作,利用dowhile語句來實(shí)現(xiàn)功能的循環(huán)操作。4、 分五個函數(shù)調(diào)用分別來實(shí)現(xiàn)轉(zhuǎn)置、加法、乘法、和逆運(yùn)算,每個里面都有最終輸出結(jié)果的方式。算法1:矩陣的轉(zhuǎn)置輸入:mu中存放矩陣的行數(shù),tu存放矩陣的列數(shù),i接收行下標(biāo)的數(shù)值,j接收列下標(biāo)的數(shù)值,e來存儲數(shù)據(jù)。輸出:轉(zhuǎn)置后的新矩陣。輸入兩行兩列數(shù)據(jù),在第二行第一列中有個數(shù)據(jù)為12,其余都為0,則輸出的結(jié)果為第一行第二列數(shù)據(jù)為12,其余為0。算法2:矩陣的加法運(yùn)算 輸入:i中存放矩陣的行數(shù),j中存放矩陣的列數(shù),二維數(shù)組b中存放每個數(shù)據(jù)。 輸出:矩陣加完后的另一個新矩陣。 輸入兩個兩行三列的矩陣,在第一個矩
4、陣?yán)锩娴谝恍械谝涣杏袀€數(shù)據(jù)20,其余為0,在第二個矩陣?yán)锩娴谝恍械诙兄杏袀€數(shù)據(jù)30,其余為0,則輸出的結(jié)果為一個兩行三列的矩陣,其中第一行第一列數(shù)據(jù)為20,第一行第二列數(shù)據(jù)為30,其余為0。算法3:矩陣的減法運(yùn)算 輸入:i中存放矩陣的行數(shù),j中存放矩陣的列數(shù),二維數(shù)組b中存放每個數(shù)據(jù)。 輸出:矩陣相減后的另一個新矩陣。 輸入兩個兩行三列的矩陣,在第一個矩陣?yán)锩娴谝恍械谝涣杏袀€數(shù)據(jù)20,其余為0,在第二個矩陣?yán)锩娴谝恍械谝涣兄杏袀€數(shù)據(jù)30,其余為0,則輸出的結(jié)果為一個兩行三列的矩陣,其中第一行第一列數(shù)據(jù)為-10,其余為0。算法4:矩陣的乘法運(yùn)算 輸入:i中存放矩陣的行數(shù),j中存放矩陣的列數(shù),二
5、維數(shù)組b中存放每個數(shù)據(jù)。 輸出:矩陣加完后的另一個新矩陣。 輸入兩行兩列的矩陣,第一個矩陣?yán)锩娴谝恍械谝涣杏袀€數(shù)據(jù)2第二列有個數(shù)據(jù)3,其余為0,在第二個矩陣?yán)锩娴谝恍械谝涣杏袀€數(shù)據(jù)2第二列中有個數(shù)據(jù)3,其余為0,則輸出的結(jié)果為一個兩行兩列的矩陣,其中第一行第一列數(shù)據(jù)為4,第二列為6,第一行第二列數(shù)據(jù)為30,其余為0。算法五:矩陣的逆運(yùn)算 輸入:i中存放矩陣的行數(shù),j中存放矩陣的列數(shù),二維數(shù)組b中存放每個數(shù)據(jù)。 輸出:矩陣進(jìn)行逆運(yùn)算完后的另一個新矩陣。 輸入三行三列的矩陣,第一個矩陣?yán)锩娴谝恍械谝涣杏袀€數(shù)據(jù)3個數(shù)據(jù)分別為1,2,3;第二行的數(shù)據(jù)分別為2,2,1;第三行的暑假分別為3,4,3;則輸
6、出的結(jié)果為三行三列矩陣,其中第一行的數(shù)據(jù)為1,3,-2;第二行的數(shù)據(jù)分別為-1.5,-3,2.5; 第三行的數(shù)據(jù)分別為1,1,-1。三、課程設(shè)計中遇到的難點(diǎn)及解決辦法1、在轉(zhuǎn)置的過程中,要求把轉(zhuǎn)置后的矩陣輸出出來,因?yàn)橛玫氖侨M順序表的存儲形式,所以不知道怎么去實(shí)現(xiàn),然后通過進(jìn)一步思考,運(yùn)用先把一個矩陣存入零元素,然后在對其進(jìn)行更改,最后完成了此項(xiàng)的工作。2、就是對于矩陣的乘法運(yùn)算和逆運(yùn)算,掌握的不夠熟練,先是通過書籍對于矩陣的乘法和逆運(yùn)算得到更深的了解,然后通過一步步寫程序最后實(shí)現(xiàn)了矩陣的乘法運(yùn)算和逆運(yùn)算。四、總結(jié)通過此次課程設(shè)計,讓我對于編程有了更深的認(rèn)識,老師的精心指導(dǎo)讓我學(xué)會到了很多
7、,不僅僅是代碼,最主要的讓我的思維開闊了很多,在這個過程中,通過不斷的嘗試,不斷的修改,最終克服了困難,完成了自己的任務(wù),心里有種無比的喜悅,但同時又感覺到了自己的知識面的狹隘,還有好多知識的海洋還沒有暢游,等待自己將是一回更大的考驗(yàn)。對于現(xiàn)在的自己,對學(xué)習(xí)程序還是有很大的興趣,它讓我體驗(yàn)到了很多的快樂,我要進(jìn)步跟進(jìn)現(xiàn)在的課程,努力去發(fā)展自己,按照老師說的最主要的是具有了編程的思想,則具有了編程的能力,我想我可以成功完成自己的目標(biāo)。五、附錄主要源程序代碼及運(yùn)行結(jié)果1、主要源程序代碼:# include # define max 100# define maxsize 100typedef fl
8、oat elemtype;typedef struct float bmaxmax; int i;/矩陣的行數(shù) int j;/ 矩陣的列數(shù) tsmatrix;typedef struct int i,j;/該非零元的行下標(biāo)和列下標(biāo)elemtype e;triple;typedef struct triple datamaxsize+1;/非零元三元組,data0未用 int mu,nu,tu;/矩陣的行數(shù)、列數(shù)和非零元個數(shù)sqlist ; void zhuanzhi(sqlist s1,tsmatrix &l2)/矩陣的轉(zhuǎn)置 sqlist s2;int col,t9,p,q,a1,b1;int
9、 num100,copt100; s2.mu=s1.mu;s2.nu=s1.nu;s2.tu=s1.tu; if(s2.tu0) for(col=1;col=s1.nu;+col) numcol=0; for(t9=1;t9=s1.tu;+t9) +nums1.datat9.j;/求s1中每一列含非零元個數(shù) copt1=1;/求第col列中第一個非零元在s2.data中序號 for(col=2;col=s1.nu;+col) coptcol=coptcol-1+numcol-1; for(p=1;p=s1.tu;+p)col=s1.datap.j; q=coptcol;s2.dataq.i=s
10、1.dataq.j; s2.dataq.j=s1.dataq.i; s2.dataq.e=s1.dataq.e;+coptcol;l2.bs2.dataq.is2.dataq.j=s2.dataq.e; printf(轉(zhuǎn)置后的數(shù)據(jù)是:n); printf(*n); for(a1=1;a1=s1.nu;a1+) for(b1=1;b1=s1.mu;b1+) printf(%10.3f,l2.ba1b1); printf(t); printf(n); printf(*); printf(n); void jiafa(tsmatrix l4, tsmatrix l5)/矩陣的加法 tsmatrix
11、l6; for(int t=0; tl4.i;t+) for(int t1=0;t1l4.j;t1+) l6.btt1=l4.btt1+l5.btt1; printf(矩陣加完后的結(jié)果:n);printf(*n); for(int t2=0; t2l4.i;t2+) for(int t3=0;t3l4.j;t3+) printf(%10.3f,l6.bt2t3); printf(t); printf(n);printf(*n); void jianfa(tsmatrix l4, tsmatrix l5)/矩陣的減法 tsmatrix l6; for(int t=0; tl4.i;t+) for
12、(int t1=0;t1l4.j;t1+) l6.btt1=l4.btt1-l5.btt1; printf(矩陣相減后的結(jié)果:n);printf(*n); for(int t2=0; t2l4.i;t2+) for(int t3=0;t3l4.j;t3+) printf(%10.3f,l6.bt2t3); printf(t); printf(n);printf(*n); void chengfa(tsmatrix l4, tsmatrix l5)/矩陣的乘法 tsmatrix l6;for(int t=0;tl4.i;t+) for(int t1=0;t1l5.j;t1+) l6.btt1=0
13、; for(int k=0;kl4.j;k+)l6.btt1+=l4.btk*l5.bkt1; printf(矩陣乘完后的結(jié)果:n);printf(*n); for(int t2=0; t2l4.i;t2+) for(int t3=0;t3l5.j;t3+) printf(%10.3f,l6.bt2t3); printf(t); printf(n);printf(*n); void niyunsuan( tsmatrix s)/矩陣的逆運(yùn)算 tsmatrix s1; float t,x;int k,i,j; for(i=0;is.i;i+)for(j=0;j(2*s.i);j+) if(js.
14、i) s1.bij=s.bij; else if(j=s.i+i) s1.bij=1.0;else s1.bij=0.0;for(i=0;is.i;i+) for(k=0;ks.i;k+)if(k!=i) t=s1.bki/s1.bii; for(j=0;j(2*s.i);j+) x=s1.bij*t; s1.bkj=s1.bkj-x; for(i=0;is.i;i+) t=s1.bii; for(j=0;j(2*s.i);j+) s1.bij=s1.bij/t; float y=1.0; for(i=0;is.i;i+) y=y*s1.bii; if(y=0.0) printf(對不起,您輸
15、入的矩陣沒有逆矩陣); else for(i=0;is.i;i+) for(j=0;js.i;j+) s.bij=s1.bij+s.i; printf(矩陣逆運(yùn)算后的結(jié)果:n); for(i=0;is.i;i+) for(j=0;js.i;j+) printf(%10.3f,s.bij); printf(n); void main() tsmatrix l,l1,l3; sqlist s; int m,n,m1,n1,n4,n5,t,t1,t2,t3,t4,t5,t6,t7,t8; do printf(請輸入你要進(jìn)行的操作:n); printf(*n); printf(矩陣轉(zhuǎn)置運(yùn)算請按1n矩陣
16、的加法運(yùn)算請按2n矩陣的乘法運(yùn)算請按3n矩陣的減法運(yùn)算請按4n矩陣的逆運(yùn)算請按5n結(jié)束請按0:n); printf(*n); scanf(%d,&m1);if(m1=1) printf(您選擇進(jìn)行的操作是矩陣的轉(zhuǎn)置運(yùn)算nn);printf(請輸入你要轉(zhuǎn)置矩陣的行數(shù)、列數(shù)和非零元的個數(shù)n); scanf(%d,&t1);scanf(%d,&t2); scanf(%d,&t3); s.mu=t1;s.nu=t2;s.tu=t3; printf(請輸入你要轉(zhuǎn)置矩陣非零元的行下標(biāo)、列下標(biāo)(從11開始由左至右由上到下)及其數(shù)據(jù)(按行逐個輸入)n); for(t4=1;t4=s.tu;t4+) scanf
17、(%d,&t5); scanf(%d,&t6);s.datat4.i=t5;s.datat4.j=t6;scanf(%f,&s.datat4.e); for(t7=1;t7=s.nu;t7+) for(t8=1;t8=s.mu;t8+) l1.bt7t8=0.0; zhuanzhi(s,l1);if(m1=2) printf(您選擇進(jìn)行的操作是矩陣的加法運(yùn)算nn); printf(請輸入矩陣的行數(shù)和列數(shù):n); scanf(%d,&n); scanf(%d,&m); l.i=n; l.j=m; l3.i=n; l3.j=m;printf(*n); printf(請輸入第一個%d行%d列的矩陣n
18、,l.i,l.j); for(t=0;tl.i;t+) for(n1=0;n1l.j;n1+) scanf(%f,&l.btn1); printf(*n);printf(*n); printf(請輸入第二個%d行%d列的矩陣n,l3.i,l3.j); for(n4=0;n4l3.i;n4+) for(n5=0;n5l3.j;n5+) scanf(%f,&l3.bn4n5); printf(*n); jiafa(l,l3);if(m1=3) printf(您選擇進(jìn)行的操作是矩陣的乘法運(yùn)算n(只有當(dāng)?shù)谝粋€矩陣的列數(shù)等于第二個矩陣的行數(shù)方可進(jìn)行計算)nn); printf(請輸入第一個矩陣的行數(shù)和列
19、數(shù):n); scanf(%d,&n); scanf(%d,&m); l.i=n; l.j=m; printf(*n); printf(請輸入第一個%d行%d列的矩陣n,l.i,l.j); for(t=0;tl.i;t+) for(n1=0;n1l.j;n1+) scanf(%f,&l.btn1); printf(*n);printf(*n); printf(請輸入第二個矩陣的行數(shù)和列數(shù):n); scanf(%d,&n1); scanf(%d,&m1); l3.i=n1; l3.j=m1;printf(*n); printf(請輸入第二個%d行%d列的矩陣n,l3.i,l3.j); for(n4=0;n4l3.i;n4+) for(n5=0;n5l3.j;n5+) scanf(%f,&l3.bn4n5); printf(*n); chengfa(l,l3);if(m1=4) printf(您選擇進(jìn)行的操作是矩陣的減法運(yùn)算nn); printf(請輸入矩陣的行數(shù)和列數(shù):n)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- NB/T 11526-2024煤礦微震監(jiān)測系統(tǒng)通用技術(shù)條件
- 湘教版數(shù)學(xué)八年級下冊《4.3一次函數(shù)的圖象與性質(zhì)》聽評課記錄3
- 人教版地理八年級上冊第三章《中國的自然資源》聽課評課記錄1
- 生態(tài)管護(hù)合同(2篇)
- 環(huán)境科學(xué)崗位中介合同(2篇)
- 北師大版歷史九年級上冊第16課《殖民地獨(dú)立運(yùn)動》聽課評課記錄
- 湘教版數(shù)學(xué)九年級下冊《1.2二次函數(shù)y=a^2 b c的圖象與性質(zhì)(5)》聽評課記錄4
- 北師大版歷史八年級下冊第10課《偉大的歷史轉(zhuǎn)折》聽課評課記錄
- 【部編版】道德與法治九年級下冊6.1《學(xué)無止境》聽課評課記錄
- 吉林省七年級數(shù)學(xué)下冊第7章一次方程組7.3三元一次方程組及其解法聽評課記錄1新版華東師大版
- DB61∕T 1854-2024 生態(tài)保護(hù)紅線評估調(diào)整技術(shù)規(guī)范
- GA 2139-2024警用防暴臂盾
- DL∕T 5810-2020 電化學(xué)儲能電站接入電網(wǎng)設(shè)計規(guī)范
- 北京三甲中醫(yī)疼痛科合作方案
- QCT957-2023洗掃車技術(shù)規(guī)范
- 新外研版高中英語選擇性必修1單詞正序英漢互譯默寫本
- 自愿斷絕父子關(guān)系協(xié)議書電子版
- 2023年4月自考00504藝術(shù)概論試題及答案含解析
- 美麗的大自然(教案)2023-2024學(xué)年美術(shù)一年級下冊
- 成都特色民俗課件
- 花城版音樂四下-第四課-認(rèn)知音樂節(jié)奏(教案)
評論
0/150
提交評論