




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數 據 結 構 課程設計報告題 目: 專 業(yè): 班 級: 學 號: 姓 名: 指導老師: 時 間: 一、課程設計題目及所涉及知識點設計題目是“矩陣的運算”,所涉及的知識點主要是:1、數據結構中的對于結構體的定義, 用typedef struct來實現(xiàn),根據所設計的問題在結構體里面定義數據類型及其變量,用define定義數組的大小,然后利用typedef 來實現(xiàn)對于變量的未知類型確定正確的類型。2、利用數組的形式來儲存數據,在實現(xiàn)不同操作過程中,有的用一維結構體數組(三元組順序表)來存儲,有的用二維數組來儲存。3、轉置的過程中利用的是快速轉置的方法,附設了num和cpot兩個輔助變量。4、矩陣的
2、加法、減法、乘法、逆運算的基本算法方式。5、通過調用每個函數,來實現(xiàn)每個算法的功能。二、課程設計思路及算法描述設計思路:1、 首先是對于轉置的考慮,要運用快速轉置的方法實現(xiàn),必須用三元組順序表來儲存數據,所以在第一個結構體中存在int類型的行數(mu)列數(nu)以及非零元素的個數(tu);然后第二個結構體中分別有非零元素的行下標(i)、列下標(j)和元素數值(e),最后在第一個結構體中實現(xiàn)對第二個結構體成為數組結構體類型。2、 對于其余加法、減法、乘法和逆運算則是運用另一個結構體來實現(xiàn),里面只有矩陣的行數、列數和一個二維數組(用float來定義類型)。3、 在main函數里面,來實現(xiàn)對于數據
3、的輸入操作,利用if語句進行選擇來執(zhí)行操作,利用dowhile語句來實現(xiàn)功能的循環(huán)操作。4、 分五個函數調用分別來實現(xiàn)轉置、加法、乘法、和逆運算,每個里面都有最終輸出結果的方式。算法1:矩陣的轉置輸入:mu中存放矩陣的行數,tu存放矩陣的列數,i接收行下標的數值,j接收列下標的數值,e來存儲數據。輸出:轉置后的新矩陣。輸入兩行兩列數據,在第二行第一列中有個數據為12,其余都為0,則輸出的結果為第一行第二列數據為12,其余為0。算法2:矩陣的加法運算 輸入:i中存放矩陣的行數,j中存放矩陣的列數,二維數組b中存放每個數據。 輸出:矩陣加完后的另一個新矩陣。 輸入兩個兩行三列的矩陣,在第一個矩陣里
4、面第一行第一列有個數據20,其余為0,在第二個矩陣里面第一行第二列中有個數據30,其余為0,則輸出的結果為一個兩行三列的矩陣,其中第一行第一列數據為20,第一行第二列數據為30,其余為0。算法3:矩陣的減法運算 輸入:i中存放矩陣的行數,j中存放矩陣的列數,二維數組b中存放每個數據。 輸出:矩陣相減后的另一個新矩陣。 輸入兩個兩行三列的矩陣,在第一個矩陣里面第一行第一列有個數據20,其余為0,在第二個矩陣里面第一行第一列中有個數據30,其余為0,則輸出的結果為一個兩行三列的矩陣,其中第一行第一列數據為-10,其余為0。算法4:矩陣的乘法運算 輸入:i中存放矩陣的行數,j中存放矩陣的列數,二維數
5、組b中存放每個數據。 輸出:矩陣加完后的另一個新矩陣。 輸入兩行兩列的矩陣,第一個矩陣里面第一行第一列有個數據2第二列有個數據3,其余為0,在第二個矩陣里面第一行第一列有個數據2第二列中有個數據3,其余為0,則輸出的結果為一個兩行兩列的矩陣,其中第一行第一列數據為4,第二列為6,第一行第二列數據為30,其余為0。算法五:矩陣的逆運算 輸入:i中存放矩陣的行數,j中存放矩陣的列數,二維數組b中存放每個數據。 輸出:矩陣進行逆運算完后的另一個新矩陣。 輸入三行三列的矩陣,第一個矩陣里面第一行第一列有個數據3個數據分別為1,2,3;第二行的數據分別為2,2,1;第三行的暑假分別為3,4,3;則輸出的
6、結果為三行三列矩陣,其中第一行的數據為1,3,-2;第二行的數據分別為-1.5,-3,2.5; 第三行的數據分別為1,1,-1。三、課程設計中遇到的難點及解決辦法1、在轉置的過程中,要求把轉置后的矩陣輸出出來,因為用的是三元組順序表的存儲形式,所以不知道怎么去實現(xiàn),然后通過進一步思考,運用先把一個矩陣存入零元素,然后在對其進行更改,最后完成了此項的工作。2、就是對于矩陣的乘法運算和逆運算,掌握的不夠熟練,先是通過書籍對于矩陣的乘法和逆運算得到更深的了解,然后通過一步步寫程序最后實現(xiàn)了矩陣的乘法運算和逆運算。四、總結通過此次課程設計,讓我對于編程有了更深的認識,老師的精心指導讓我學會到了很多,不
7、僅僅是代碼,最主要的讓我的思維開闊了很多,在這個過程中,通過不斷的嘗試,不斷的修改,最終克服了困難,完成了自己的任務,心里有種無比的喜悅,但同時又感覺到了自己的知識面的狹隘,還有好多知識的海洋還沒有暢游,等待自己將是一回更大的考驗。對于現(xiàn)在的自己,對學習程序還是有很大的興趣,它讓我體驗到了很多的快樂,我要進步跟進現(xiàn)在的課程,努力去發(fā)展自己,按照老師說的最主要的是具有了編程的思想,則具有了編程的能力,我想我可以成功完成自己的目標。五、附錄主要源程序代碼及運行結果1、主要源程序代碼:# include <stdio.h># define max 100# define maxsize
8、100typedef float elemtype;typedef struct float bmaxmax; int i;/矩陣的行數 int j;/ 矩陣的列數 tsmatrix;typedef struct int i,j;/該非零元的行下標和列下標elemtype e;triple;typedef struct triple datamaxsize+1;/非零元三元組,data0未用 int mu,nu,tu;/矩陣的行數、列數和非零元個數sqlist ; void zhuanzhi(sqlist s1,tsmatrix &l2)/矩陣的轉置 sqlist s2;int col
9、,t9,p,q,a1,b1;int num100,copt100; s2.mu=s1.mu;s2.nu=s1.nu;s2.tu=s1.tu; if(s2.tu>0) for(col=1;col<=s1.nu;+col) numcol=0; for(t9=1;t9<=s1.tu;+t9) +nums1.datat9.j;/求s1中每一列含非零元個數 copt1=1;/求第col列中第一個非零元在s2.data中序號 for(col=2;col<=s1.nu;+col) coptcol=coptcol-1+numcol-1; for(p=1;p<=s1.tu;+p)c
10、ol=s1.datap.j; q=coptcol;s2.dataq.i=s1.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("轉置后的數據是:n"); printf("*n"); for(a1=1;a1<=s1.nu;a1+) for(b1=1;b1<=s1.mu;b1+) printf("%10.3f",l2.ba1b1); printf("t&
11、quot;); printf("n"); printf("*"); printf("n"); void jiafa(tsmatrix l4, tsmatrix l5)/矩陣的加法 tsmatrix l6; for(int t=0; t<l4.i;t+) for(int t1=0;t1<l4.j;t1+) l6.btt1=l4.btt1+l5.btt1; printf("矩陣加完后的結果:n");printf("*n"); for(int t2=0; t2<l4.i;t2+) f
12、or(int t3=0;t3<l4.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; t<l4.i;t+) for(int t1=0;t1<l4.j;t1+) l6.btt1=l4.btt1-l5.btt1; printf("矩陣相減后的結果:n"
13、;);printf("*n"); for(int t2=0; t2<l4.i;t2+) for(int t3=0;t3<l4.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;t<l4.i;t+) for(int t1=0;t1<l5.j;t
14、1+) l6.btt1=0; for(int k=0;k<l4.j;k+)l6.btt1+=l4.btk*l5.bkt1; printf("矩陣乘完后的結果:n");printf("*n"); for(int t2=0; t2<l4.i;t2+) for(int t3=0;t3<l5.j;t3+) printf("%10.3f",l6.bt2t3); printf("t"); printf("n");printf("*n"); void niyunsuan(
15、 tsmatrix s)/矩陣的逆運算 tsmatrix s1; float t,x;int k,i,j; for(i=0;i<s.i;i+)for(j=0;j<(2*s.i);j+) if(j<s.i) s1.bij=s.bij; else if(j=s.i+i) s1.bij=1.0;else s1.bij=0.0;for(i=0;i<s.i;i+) for(k=0;k<s.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;i
16、<s.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;i<s.i;i+) y=y*s1.bii; if(y=0.0) printf("對不起,您輸入的矩陣沒有逆矩陣"); else for(i=0;i<s.i;i+) for(j=0;j<s.i;j+) s.bij=s1.bij+s.i; printf("矩陣逆運算后的結果:n"); for(i=0;i<s.i;i+) for(j=0;j<s.i;j+) pri
17、ntf("%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("請輸入你要進行的操作:n"); printf("*n"); printf("矩陣轉置運算請按1n矩陣的加法運算請按2n矩陣的乘法運算請按3n矩陣的減法運算請按4n矩陣的逆運算請按5n結束請按0:n"); printf("*n&
18、quot;); scanf("%d",&m1);if(m1=1) printf("您選擇進行的操作是矩陣的轉置運算nn");printf("請輸入你要轉置矩陣的行數、列數和非零元的個數n"); scanf("%d",&t1);scanf("%d",&t2); scanf("%d",&t3); s.mu=t1;s.nu=t2;s.tu=t3; printf("請輸入你要轉置矩陣非零元的行下標、列下標(從11開始由左至右由上到下)及其數據
19、(按行逐個輸入)n"); for(t4=1;t4<=s.tu;t4+) scanf("%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("您選擇進行的操作是矩陣的加法運算nn")
20、; printf("請輸入矩陣的行數和列數: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",l.i,l.j); for(t=0;t<l.i;t+) for(n1=0;n1<l.j;n1+) scanf("%f",&l.btn1); printf("*n");p
21、rintf("*n"); printf("請輸入第二個%d行%d列的矩陣n",l3.i,l3.j); for(n4=0;n4<l3.i;n4+) for(n5=0;n5<l3.j;n5+) scanf("%f",&l3.bn4n5); printf("*n"); jiafa(l,l3);if(m1=3) printf("您選擇進行的操作是矩陣的乘法運算n(只有當第一個矩陣的列數等于第二個矩陣的行數方可進行計算)nn"); printf("請輸入第一個矩陣的行數和列數
22、: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;t<l.i;t+) for(n1=0;n1<l.j;n1+) scanf("%f",&l.btn1); printf("*n");printf("*n"); printf("請輸入第二
23、個矩陣的行數和列數: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;n4<l3.i;n4+) for(n5=0;n5<l3.j;n5+) scanf("%f",&l3.bn4n5); printf("*n"); chengfa(l,l3);if(m1=4) printf("您選擇進行的操作是矩陣的減法運算nn"); printf("請輸入矩陣的行數和列數:n"); scanf("%d",&n); scanf("%d",&m); l.i=n; l.j=m; l3.i=n; l3.j=m;printf("*n");
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建漳州三模數學試卷
- 廣東高分突破九年級數學試卷
- 肛腸術后護理課件
- 高三寫不完的數學試卷
- 肋骨骨折護理
- 2024年09月湖北省農村信用社聯(lián)合社網絡信息中心度招考35名勞務派遣科技專業(yè)人才筆試歷年參考題庫附帶答案詳解
- 2025至2030袋泡茶市場前景分析及發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 高血糖引起的并發(fā)癥的早期干預
- 2025至2030寵物袋運動衫行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 2024年山東煙臺干部學院招聘教師筆試真題
- 梅毒螺旋體試驗活動風險評價報告
- 精裝房驗房項目表格
- 《有效溝通》培訓課件
- 汽車租賃項目可行性報告
- 礦井災變時期通風理論與技術及案例分析
- (蘇教 譯林版)三年級英語上冊同步預習練習
- 2021年新《建設工程施工合同司法解釋(一)》逐條解讀4課件
- 綠城物業(yè)工程承接查驗工作手冊
- Q∕GDW 12185-2021 輸變電設備物聯(lián)網邊緣計算應用軟件接口技術規(guī)范
- 幼兒園一日活動流程保教細則
- 開利42CE系列風機盤管最新版樣本
評論
0/150
提交評論