![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計數(shù)組的存儲格式轉(zhuǎn)換_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/29458867-eccb-44b8-92d3-e6cf52c2ee12/29458867-eccb-44b8-92d3-e6cf52c2ee121.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計數(shù)組的存儲格式轉(zhuǎn)換_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/29458867-eccb-44b8-92d3-e6cf52c2ee12/29458867-eccb-44b8-92d3-e6cf52c2ee122.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計數(shù)組的存儲格式轉(zhuǎn)換_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/29458867-eccb-44b8-92d3-e6cf52c2ee12/29458867-eccb-44b8-92d3-e6cf52c2ee123.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計數(shù)組的存儲格式轉(zhuǎn)換_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/29458867-eccb-44b8-92d3-e6cf52c2ee12/29458867-eccb-44b8-92d3-e6cf52c2ee124.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計數(shù)組的存儲格式轉(zhuǎn)換_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/29458867-eccb-44b8-92d3-e6cf52c2ee12/29458867-eccb-44b8-92d3-e6cf52c2ee125.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課 程 設(shè) 計 報 告 書題 目:數(shù)組的存儲格式轉(zhuǎn)換專 業(yè): 計算機科學(xué)與技術(shù)班 級:計121學(xué) 號:完成時間:一、 問題描述1.1 問題描述根據(jù)數(shù)組的相關(guān)知識,以行列式的方式輸入矩陣,進行簡單的運算,轉(zhuǎn)置及求逆等過程,然后打印出該矩陣。1.2 基本要求需要按要求輸入矩陣,系統(tǒng)會自行運算,然后輸出矩陣。二、 概要設(shè)計進行運算開始進入程序提示輸入的矩陣類型輸入選擇提示輸入矩陣的方式輸入選擇輸出結(jié)果操作結(jié)束三、 詳細設(shè)計1.1 函數(shù)申明float MatDet(float *p, int n); /求矩陣的行列式float Creat_M(float *p, int m, int n, i
2、nt k); /求矩陣元素A(m, n)的代數(shù)余之式void print(float *p, int m,int n); /輸出矩陣n*nbool Gauss(float *pSrc, float *pDst, int iRow); /采用部分主元的高斯消去法求方陣A的逆矩陣Bbool Transepose(float *pSrc,float *pSdst, int iRow, int iCol); /求矩陣轉(zhuǎn)置bool MatMultiply(float *pSrc1, float *pSrc2,float *pDst,int iRow, int iCol);/矩陣相乘1.2 主函數(shù)floa
3、t *buffer, *p; /定義數(shù)組首地址指針變量int row, num; /定義矩陣的行數(shù)和矩陣元素個數(shù)int i, j;float determ; /定義矩陣的行列式float aNN, bNN;int n;cout << "采用逆矩陣的定義法求矩陣的逆矩陣!n"cout << "請輸入矩陣的行數(shù): "cin >> row;num = 2 * row * row;buffer = (float *)calloc(num, sizeof(float); /分配內(nèi)存單元p = buffer;if (NULL !=
4、 p)for (i = 0; i < row; i+)cout << "Please input the number of " << i+1 << " row: "for (j = 0; j < row; j+)cin >> *p+;elsecout << "Can't distribute memoryn"cout << "The original matrix : n"print(buffer, row); /打印該矩
5、陣determ = MatDet(buffer, row); /求整個矩陣的行列式p = buffer + row * row;if (determ != 0)cout << "The determinant of the matrix is " << determ << endl;for (i = 0; i < row; i+) /求逆矩陣for (j = 0; j < row; j+)*(p+j*row+i) = Creat_M(buffer, i, j, row)/determ;cout << "T
6、he inverse matrix is: " << endl;print(p, row); /打印該矩陣elsecout << "The determinant is 0, and there is no inverse matrix!n"free(buffer); /釋放內(nèi)存空間cout << "采用部分主元的高斯消去法求方陣的逆矩陣!n"cout << "請輸入方陣的階數(shù): "cin >> n;cout << "請輸入" <
7、;< n << "階方陣: n"/輸入一個n階方陣for (i = 0; i < n; i+)for (j = 0; j < n; j+)cin >> aij;/運用高斯消去法求該矩陣的逆矩陣并輸出if (Gauss(a, b, n)cout << "該方陣的逆矩陣為: n"for (i = 0; i < n; i+)cout << setw(4);for (j = 0; j < n; j+)cout << bij << setw(10);cout &l
8、t;< endl; return 0;1.3 功能函數(shù)int i,m,n;cout << "請輸入方陣的行數(shù): "cin >> m;cout << "請輸入方陣的列數(shù): "cin >> n;float *a = new floatm*n;cout << "請輸入" << m << "*"<< n << "階方陣: n"/輸入一個n階方陣for (i = 0; i < m*n;
9、i+)cin >> ai;print(a,m,n);cout<<"轉(zhuǎn)置矩陣:"<<endl;float *b = new floatn*m;Transepose(a,b,m,n);print(b,n,m);cout<<"矩陣乘積:"<<endl;float *c = new floatm*m;MatMultiply(a,b,c,m,n);print(c,m,m);cout<<"矩陣的逆:"<<endl;float *d = new floatm*m;G
10、auss(c,d,m);print(d,m,m);cin>>m;delete a;delete b;delete c;delete d;return 0;/-/功能: 求矩陣(n*n)的行列式/入口參數(shù): 矩陣的首地址,矩陣的行數(shù)/返回值: 矩陣的行列式值/-float MatDet(float *p, int n)int r, c, m;int lop = 0;float result = 0;float mid = 1;if (n != 1)lop = (n = 2) ? 1 : n; /控制求和循環(huán)次數(shù),若為2階,則循環(huán)1次,否則為n次for (m = 0; m < l
11、op; m+)mid = 1; /順序求和, 主對角線元素相乘之和for (r = 0, c = m; r < n; r+, c+)mid = mid * (*(p+r*n+c%n);result += mid;for (m = 0; m < lop; m+)mid = 1; /逆序相減, 減去次對角線元素乘積for (r = 0, c = n-1-m+n; r < n; r+, c-)mid = mid * (*(p+r*n+c%n);result -= mid;elseresult = *p;return result;/-/功能: 求k*k矩陣中元素A(m, n)的代數(shù)
12、余之式/入口參數(shù): k*k矩陣的首地址,矩陣元素A的下標m,n,矩陣行數(shù)k/返回值: k*k矩陣中元素A(m, n)的代數(shù)余之式/-float Creat_M(float *p, int m, int n, int k)int len;int i, j;float mid_result = 0;int sign = 1;float *p_creat, *p_mid;len = (k-1)*(k-1); /k階矩陣的代數(shù)余之式為k-1階矩陣p_creat = (float*)calloc(len, sizeof(float); /分配內(nèi)存單元p_mid = p_creat;for (i = 0;
13、 i < k; i+)for (j = 0; j < k; j+)if (i != m && j != n) /將除第i行和第j列外的所有元素存儲到以p_mid為首地址的內(nèi)存單元*p_mid+ = *(p+i*k+j);sign = (m+n)%2 = 0 ? 1 : -1; /代數(shù)余之式前面的正、負號mid_result = (float)sign*MatDet(p_creat, k-1);free(p_creat);return mid_result;/-/功能: 打印n*n矩陣/入口參數(shù): n*n矩陣的首地址,矩陣的行數(shù)n/返回值: 無返回值void prin
14、t(float *p, int m, int n)int i, j;for (i = 0; i < m; i+)cout << setw(4);for (j = 0; j < n; j+)cout << setiosflags(ios:right) << *p+ << setw(10);cout << endl;/-/功能: 采用部分主元的高斯消去法求方陣A的逆矩陣B/入口參數(shù): 輸入方陣,輸出方陣,方陣階數(shù)/返回值: true or false/-四、 運行與測試1.1 進入提示畫面1.2 按提示輸入后1.3 輸出界面五
15、、 總結(jié)與體會通過這一次的課程設(shè)計,我掌握了另外的一種算法,對矩陣等復(fù)雜數(shù)據(jù)的輸入有了更深刻的理解,起初不知道應(yīng)該以怎樣的方式輸入矩陣,數(shù)據(jù)結(jié)構(gòu)這門課程在處理數(shù)據(jù)信息方面給了我很大的啟發(fā),應(yīng)該以怎樣的方式輸入數(shù)據(jù),處理數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)都很系統(tǒng)的解釋了出來,對我的幫助很大,一開始也沒想到自己真的能做出來,后來通過網(wǎng)上的一些成功案例,一步一步的寫了出來,在經(jīng)過調(diào)試,驗證等一系列操作,終于解決了問題。也增加了自己的信心。六、 附源程序#include <math.h>#include <malloc.h>#include <iomanip>#include <
16、iostream>#define N 10 /定義方陣的最大階數(shù)為10using namespace std;/函數(shù)的聲明部分float MatDet(float *p, int n); /求矩陣的行列式float Creat_M(float *p, int m, int n, int k); /求矩陣元素A(m, n)的代數(shù)余之式void print(float *p, int m,int n); /輸出矩陣n*nbool Gauss(float *pSrc, float *pDst, int iRow); /采用部分主元的高斯消去法求方陣A的逆矩陣Bbool Transepose(f
17、loat *pSrc,float *pSdst, int iRow, int iCol); /求矩陣轉(zhuǎn)置bool MatMultiply(float *pSrc1, float *pSrc2,float *pDst,int iRow, int iCol);/矩陣相乘int main()/*float *buffer, *p; /定義數(shù)組首地址指針變量int row, num; /定義矩陣的行數(shù)和矩陣元素個數(shù)int i, j;float determ; /定義矩陣的行列式float aNN, bNN;int n;cout << "采用逆矩陣的定義法求矩陣的逆矩陣!n&quo
18、t;cout << "請輸入矩陣的行數(shù): "cin >> row;num = 2 * row * row;buffer = (float *)calloc(num, sizeof(float); /分配內(nèi)存單元p = buffer;if (NULL != p)for (i = 0; i < row; i+)cout << "Please input the number of " << i+1 << " row: "for (j = 0; j < row; j+)
19、cin >> *p+;elsecout << "Can't distribute memoryn"cout << "The original matrix : n"print(buffer, row); /打印該矩陣determ = MatDet(buffer, row); /求整個矩陣的行列式p = buffer + row * row;if (determ != 0)cout << "The determinant of the matrix is " << de
20、term << endl;for (i = 0; i < row; i+) /求逆矩陣for (j = 0; j < row; j+)*(p+j*row+i) = Creat_M(buffer, i, j, row)/determ;cout << "The inverse matrix is: " << endl;print(p, row); /打印該矩陣elsecout << "The determinant is 0, and there is no inverse matrix!n"fre
21、e(buffer); /釋放內(nèi)存空間cout << "采用部分主元的高斯消去法求方陣的逆矩陣!n"cout << "請輸入方陣的階數(shù): "cin >> n;cout << "請輸入" << n << "階方陣: n"/輸入一個n階方陣for (i = 0; i < n; i+)for (j = 0; j < n; j+)cin >> aij;/運用高斯消去法求該矩陣的逆矩陣并輸出if (Gauss(a, b, n)cou
22、t << "該方陣的逆矩陣為: n"for (i = 0; i < n; i+)cout << setw(4);for (j = 0; j < n; j+)cout << bij << setw(10);cout << endl; return 0;*/int i,m,n;cout << "請輸入方陣的行數(shù): "cin >> m;cout << "請輸入方陣的列數(shù): "cin >> n;float *a = new
23、floatm*n;cout << "請輸入" << m << "*"<< n << "階方陣: n"/輸入一個n階方陣for (i = 0; i < m*n; i+)cin >> ai;print(a,m,n);cout<<"轉(zhuǎn)置矩陣:"<<endl;float *b = new floatn*m;Transepose(a,b,m,n);print(b,n,m);cout<<"矩陣乘積:&qu
24、ot;<<endl;float *c = new floatm*m;MatMultiply(a,b,c,m,n);print(c,m,m);cout<<"矩陣的逆:"<<endl;float *d = new floatm*m;Gauss(c,d,m);print(d,m,m);cin>>m;delete a;delete b;delete c;delete d;return 0;/-/功能: 求矩陣(n*n)的行列式/入口參數(shù): 矩陣的首地址,矩陣的行數(shù)/返回值: 矩陣的行列式值/-float MatDet(float *p
25、, int n)int r, c, m;int lop = 0;float result = 0;float mid = 1;if (n != 1)lop = (n = 2) ? 1 : n; /控制求和循環(huán)次數(shù),若為2階,則循環(huán)1次,否則為n次for (m = 0; m < lop; m+)mid = 1; /順序求和, 主對角線元素相乘之和for (r = 0, c = m; r < n; r+, c+)mid = mid * (*(p+r*n+c%n);result += mid;for (m = 0; m < lop; m+)mid = 1; /逆序相減, 減去次對角
26、線元素乘積for (r = 0, c = n-1-m+n; r < n; r+, c-)mid = mid * (*(p+r*n+c%n);result -= mid;elseresult = *p;return result;/-/功能: 求k*k矩陣中元素A(m, n)的代數(shù)余之式/入口參數(shù): k*k矩陣的首地址,矩陣元素A的下標m,n,矩陣行數(shù)k/返回值: k*k矩陣中元素A(m, n)的代數(shù)余之式/-float Creat_M(float *p, int m, int n, int k)int len;int i, j;float mid_result = 0;int sign
27、= 1;float *p_creat, *p_mid;len = (k-1)*(k-1); /k階矩陣的代數(shù)余之式為k-1階矩陣p_creat = (float*)calloc(len, sizeof(float); /分配內(nèi)存單元p_mid = p_creat;for (i = 0; i < k; i+)for (j = 0; j < k; j+)if (i != m && j != n) /將除第i行和第j列外的所有元素存儲到以p_mid為首地址的內(nèi)存單元*p_mid+ = *(p+i*k+j);sign = (m+n)%2 = 0 ? 1 : -1; /代數(shù)余
28、之式前面的正、負號mid_result = (float)sign*MatDet(p_creat, k-1);free(p_creat);return mid_result;/-/功能: 打印n*n矩陣/入口參數(shù): n*n矩陣的首地址,矩陣的行數(shù)n/返回值: 無返回值void print(float *p, int m, int n)int i, j;for (i = 0; i < m; i+)cout << setw(4);for (j = 0; j < n; j+)cout << setiosflags(ios:right) << *p+ &
29、lt;< setw(10);cout << endl;/-/功能: 采用部分主元的高斯消去法求方陣A的逆矩陣B/入口參數(shù): 輸入方陣,輸出方陣,方陣階數(shù)/返回值: true or false/-bool Gauss(float *pSrc, float *pDst, int iRow)int i, j, k;int n = iRow;float max, temp;float tNN; /臨時矩陣/將A矩陣存放在臨時矩陣tnn中for (i = 0; i < n; i+) for (j = 0; j < n; j+)tij = pSrci*iRow+j;/初始化B
30、矩陣為單位陣for (i = 0; i < n; i+) for (j = 0; j < n; j+)pDsti*iRow+j = (i = j) ? (float)1 : 0;for (i = 0; i < n; i+)/尋找主元max = tii;k = i;for (j = i+1; j < n; j+)if (fabs(tji) > fabs(max)max = tji;k = j;/如果主元所在行不是第i行,進行行交換if (k != i)for (j = 0; j < n; j+)temp = tij;tij = tkj;tkj = temp;/B伴隨交換temp = pDsti*iRow+j;pDsti*iRow+j = pDstk
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023六年級英語下冊 Review Module Unit 2說課稿 外研版(三起)001
- 2025合同模板銷售事務(wù)處理制度A范本
- 2023三年級英語下冊 Unit 4 Food and Restaurants Lesson 23 How Much Are They說課稿 冀教版(三起)001
- 3 植物長在哪里 說課稿-2024-2025學(xué)年科學(xué)一年級上冊教科版
- 15分享真快樂(說課稿)-部編版道德與法治一年級下冊001
- 養(yǎng)老護工合同范本
- Unit2 Morals and virtues Reading for writing說課稿-2023-2024學(xué)年人教版高中英語必修第三冊
- 1 觀潮說課稿-2024-2025學(xué)年四年級上冊語文統(tǒng)編版
- 2024年五年級英語上冊 Module 2 Unit 2 How much cheese did you buy說課稿 外研版(三起)
- 路面挖補施工方案
- DB31 SW-Z 017-2021 上海市排水檢測井圖集
- 日語專八分類詞匯
- GB/T 707-1988熱軋槽鋼尺寸、外形、重量及允許偏差
- GB/T 33084-2016大型合金結(jié)構(gòu)鋼鍛件技術(shù)條件
- 高考英語課外積累:Hello,China《你好中國》1-20詞塊摘錄課件
- 化學(xué)選修4《化學(xué)反應(yīng)原理》(人教版)全部完整PP課件
- 茶文化與茶健康教學(xué)課件
- 降水預(yù)報思路和方法
- 虛位移原理PPT
- QE工程師簡歷
- 輔音和輔音字母組合發(fā)音規(guī)則
評論
0/150
提交評論