版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 喬遷新居賀詞(集錦15篇)
- 雪話題作文(15篇)
- 初一滿分作文800字范文5篇
- 簡(jiǎn)歷的自我評(píng)價(jià)匯編15篇
- 升學(xué)宴學(xué)生演講稿合集15篇
- 特鋼企業(yè)突發(fā)環(huán)境事件應(yīng)急預(yù)案
- 公交站亭基礎(chǔ)及鋪裝施工合同(2篇)
- 商場(chǎng)場(chǎng)地租賃協(xié)議書范本
- 貨車租賃協(xié)議書樣書
- 公租房協(xié)議范本
- 輔警心理健康知識(shí)講座
- 《棗樹(shù)常見(jiàn)病蟲害》課件
- 刑法試題庫(kù)大全
- 燃?xì)獍惭b人員管理制度
- 省份簡(jiǎn)稱課件
- 公民科學(xué)素質(zhì)調(diào)查問(wèn)卷
- 小學(xué)健康教育試題-及答案
- 鋼構(gòu)件應(yīng)力超聲檢測(cè)技術(shù)規(guī)程
- -《多軸數(shù)控加工及工藝》(第二版)教案
- 體 育 課 教 學(xué) 評(píng) 價(jià) 量 表
- 23秋國(guó)家開(kāi)放大學(xué)《漢語(yǔ)國(guó)際教育概論》階段測(cè)驗(yàn)1-2+教學(xué)活動(dòng)1參考答案
評(píng)論
0/150
提交評(píng)論