




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include<stdio.h>#include<stdlib.h>#define MAXSIZE 12500/三元組結(jié)構(gòu)typedef struct int i,j; /矩陣行下標(biāo)和列下標(biāo) int e; /值Triple;/矩陣結(jié)構(gòu)typedef struct Triple dataMAXSIZE+1; int rposMAXSIZE+1; /這是存放各行第一非零元在矩陣中的位置 int mu,nu,tu; /矩陣的行數(shù)、列數(shù)、非零元個(gè)數(shù)Matrix;void Init(Matrix* M);void Add(Matrix* M,Matrix* T,Matrix*
2、G);void Jian(Matrix* M,Matrix* T,Matrix* G);void Cheng(Matrix* M,Matrix* T,Matrix* G);void Cheng(Matrix* M,Matrix* T,Matrix* G);void PrintMatrix(Matrix* M);/2、初始化矩陣void Init(Matrix* M) int i; if(M->mu < 1 | M->nu < 1 | M->tu > M->mu*M->nu) 1 / 17 printf("出錯(cuò)!n"); /如果
3、矩陣的行數(shù)、列數(shù)不符合要求,打印出錯(cuò) for(i=1;i<=M->tu;i+) /data0不用 printf("第%d個(gè)非零元的行號(hào):",i); /以下為數(shù)據(jù)初始化 scanf("%d",&M->datai.i); printf("第%d個(gè)非零元的列號(hào):",i); scanf("%d",&M->datai.j); printf("第%d個(gè)非零元的元素值:",i); scanf("%d",&M->datai.e); pri
4、ntf("n"); printf("您創(chuàng)建的矩陣如下:n"); PrintMatrix(M);/3、矩陣相加void Add(Matrix* M,Matrix* T,Matrix* G) G->mu = M->mu; /因?yàn)榧訙p運(yùn)算必須維數(shù)相等,所以M、T行、列數(shù)相等,初始化第三方矩陣的行、列數(shù)。 G->nu = M->nu; G->tu = 0; int g,m,t; /g、m、t分別記錄三個(gè)矩陣的元素的存儲(chǔ)位置 g = m = t = 1; /從data1開(kāi)始 int k; int sum; /和 if(M->mu
5、 != T->mu | M->nu != T->nu) printf("維數(shù)不等!n"); for(k = 1;k <= M->mu;k+) /行下標(biāo)和下標(biāo)相等的對(duì)應(yīng)元素相加 /*開(kāi)始*/ if(M->datam.i = k && T->datat.i = k) /行下標(biāo)相等時(shí) if(M->datam.j = T->datat.j ) /列下標(biāo)相等時(shí) sum=M->datam.e+T->datat.e; /矩陣向加 if(sum != 0) /相加不為零時(shí) G->datag.i=k; G
6、->datag.j=M->datam.j; G->datag.e=sum; G->tu+; g+; m+; t+; else /矩陣相加為零時(shí),不做存儲(chǔ)操作 m+; t+; /*結(jié)束*/ /行下標(biāo)和下標(biāo)不等的元素直接插入到G的相應(yīng)位置 /*開(kāi)始*/ while(M->datam.i = k) /插入M剩余的元素 G->datag.i = k; G->datag.j = M->datam.j; G->datag.e = M->datam.e; G->tu+; m+; g+; while(T->datat.i = k) /插入
7、T剩余的元素 G->datag.i = k; G->datag.j = T->datat.j; G->datag.e = T->datat.e; G->tu+; t+; g+; /G->tu=g; /記錄運(yùn)算完成后,第三方矩陣非零元的個(gè)數(shù) /*結(jié)束*/ printf("n"); printf("相加后的矩陣如下:n");PrintMatrix(G);/4、矩陣相減void Jian(Matrix* M,Matrix* T,Matrix* G) G->mu = M->mu; G->nu = M-&
8、gt;nu; G->tu = 0; int sum,k; int m,t,g; m = t = g = 1; if(M->mu != T->mu | M->nu != T->nu) printf("維數(shù)不等!n"); for(k = 1;k <= M->mu;k+) /行下標(biāo)和下標(biāo)相等的對(duì)應(yīng)元素相減 /*開(kāi)始*/ if(M->datam.i = k && T->datat.i = k) /行下標(biāo)相等時(shí) if(M->datam.j = T->datat.j ) /列下標(biāo)相等時(shí) sum=M->
9、;datam.e-T->datat.e; /矩陣向減 if(sum != 0) /相加不為零時(shí) G->datag.i=k; G->datag.j=M->datam.j; G->datag.e=sum; G->tu+; g+; m+; t+; else m+; t+; /*結(jié)束*/ /行下標(biāo)和下標(biāo)不等的元素直接插入到G的相應(yīng)位置 /*開(kāi)始*/ while(M->datam.i = k) /插入M剩余的元素 G->datag.i = k; G->datag.j = M->datam.j; G->datag.e = M->dat
10、am.e; G->tu+; m+; g+; while(T->datat.i = k) /插入T的元素 G->datag.i = k; G->datag.j = T->datat.j; G->datag.e = 0 - T->datat.e; G->tu+; t+; g+; /G->tu=g; /記錄運(yùn)算完成后,第三方矩陣非零元的個(gè)數(shù) /*結(jié)束*/ printf("n"); printf("相減后的矩陣如下:n");PrintMatrix(G);/5、矩陣相乘void Cheng(Matrix* M,
11、Matrix* T,Matrix* G) int k,w,q,x,mrow,trow,gcol; int tmpMAXSIZE; /累加器 int numMAXSIZE; /記錄矩陣的各行的第一個(gè)非零元的位置 int m,t,g; m = t = g = 1; w =1; if(M->nu != T->mu) /如果第一個(gè)矩陣的列數(shù)不等于第二個(gè)矩陣的行數(shù) printf("這兩個(gè)矩陣不能相乘!n"); /初始化 G->mu = M->mu; G->nu = T->nu; G->tu = 0; if(M->tu * T->t
12、u != 0) / /記錄各個(gè)矩陣的各行的第一個(gè)非零元的位置 / /*開(kāi)始*/ /記錄矩陣M中各行非零元的個(gè)數(shù) for(mrow = 1; mrow < M->mu; mrow+) /清零 nummrow = 0; for(w = 1;w <= M->tu;w+) k = M->dataw.i; numk+; M->rpos1 = 1; /第一行第一個(gè)非零元的位置在data的第一位 for(mrow = 2; mrow <= M->mu; mrow+) /第N行第一個(gè)非零元的位置 M->rposmrow = M->rposmrow-1
13、 + nummrow-1; printf("n"); printf("矩陣Mn"); for(mrow = 1;mrow <= M->mu; mrow+) printf("第%d行的第一個(gè)非零元在data中的序號(hào)是:(%d)",mrow,M->rposmrow); printf("n"); /記錄矩陣T中各行非零元的個(gè)數(shù) for(trow = 1; trow < T->mu; trow+) /清零 numtrow = 0; for(w = 1;w <= T->tu;w+)
14、k = T->dataw.i; numk+; T->rpos1 = 1; /第一行第一個(gè)非零元的位置在data的第一位 for(trow = 2; trow <= T->mu; trow+) /第N行第一個(gè)非零元的位置 T->rpostrow = T->rpostrow-1 + numtrow-1; printf("n"); printf("n"); printf("矩陣Tn"); for(trow = 1;trow <= T->mu; trow+) printf("第%d行的
15、第一個(gè)非零元在data中的序號(hào)是:(%d)",trow,T->rpostrow); printf("n"); /*結(jié)束*/ for(mrow = 1; mrow <= M->mu; mrow+) for(k = 1; k <= T->nu;k+) /當(dāng)前行各元素累加器清零 tmpk = 0; G->rposmrow = G->tu + 1; /矩陣G的各行的第一個(gè)非零元在G->data中的位置 for(w = M->rposmrow;w < M->rposmrow+1;w+) trow = M-&g
16、t;dataw.j; /找到對(duì)應(yīng)T的行號(hào) if(trow < T->mu) x = T->rpostrow+1; else x = T->tu+1; for(q = T->rpostrow; q< x;q+) gcol = T->dataq.j; tmpgcol += M->dataw.e * T->dataq.e; /對(duì)應(yīng)非零元累加 for(gcol = 1; gcol <= G->nu;gcol+) /壓縮存儲(chǔ) if(tmpgcol) G->dataG->tu+1.i = mrow; G->dataG-&g
17、t;tu+1.j = gcol; G->dataG->tu+1.e = tmpgcol; G->tu+; printf("n"); printf("相乘后的矩陣如下:n"); PrintMatrix(G);/6、矩陣打印void PrintMatrix(Matrix* M) int k; printf("非零元素?cái)?shù)%dn",M->tu); for(k = 1;k <= M->tu;k+) printf("(%d,%d,%d)n",M->datak.i,M->datak
18、.j,M->datak.e); /7、主函數(shù)int main(int argc, char* argv) Matrix* M =(Matrix*)malloc(sizeof(Matrix); Matrix* T =(Matrix*)malloc(sizeof(Matrix); Matrix* G =(Matrix*)malloc(sizeof(Matrix); int tag = 1; int n; printf("請(qǐng)輸入第一個(gè)矩陣的行數(shù)和列數(shù):"); scanf("%d %d",&(M->mu),&(M->nu); printf("非零元的個(gè)數(shù):"); scanf("%d",&(M->tu); Init(M); printf("n"); printf("請(qǐng)輸入第二個(gè)矩陣的行數(shù)和列數(shù):"); scanf("%d %d",&(T->mu),&(T->nu); printf("
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省大連市2022-2023學(xué)年高二下學(xué)期期末考試化學(xué)試題(含答案)
- 介紹玩具活動(dòng)方案
- 從軍夏日活動(dòng)方案
- 倉(cāng)儲(chǔ)貨架促銷(xiāo)活動(dòng)方案
- 倉(cāng)庫(kù)清理活動(dòng)方案
- 付費(fèi)專(zhuān)欄活動(dòng)方案
- 代表之家活動(dòng)方案
- 代賬公司節(jié)假日活動(dòng)方案
- 企業(yè)與企業(yè)團(tuán)建活動(dòng)方案
- 企業(yè)代言活動(dòng)方案
- 29.4常見(jiàn)腫瘤標(biāo)志物講解
- 游泳池安全保障制度和措施范本
- 志愿服務(wù)證明(多模板)
- 中南地區(qū)工程建設(shè)標(biāo)準(zhǔn)設(shè)計(jì)建筑圖集 13ZJ301 建筑無(wú)障礙設(shè)施
- 陰道炎演示課件
- 婦科疾病的運(yùn)動(dòng)與體育鍛煉預(yù)防
- 2023年重慶市高考思想政治試卷真題(含答案)
- 1.2音樂(lè)情感及情緒《祝酒歌》課件-高中音樂(lè)人音版必修音樂(lè)鑒賞
- CONSORT2010流程圖(FlowDiagram)【模板】文檔
- 籃球比賽分組循環(huán)積分表
- 三字經(jīng)注解備要(清)賀興思撰
評(píng)論
0/150
提交評(píng)論