成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c語(yǔ)言中矩陣函數(shù)的應(yīng)用 c語(yǔ)言實(shí)現(xiàn)矩陣

c語(yǔ)言矩陣乘法函數(shù)

函數(shù)類(lèi)型是根據(jù)有無(wú)返回值判斷的,無(wú)返回值就把函數(shù)定義為void類(lèi)型

為寧遠(yuǎn)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及寧遠(yuǎn)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、寧遠(yuǎn)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

如果是單純輸出矩陣那就不用返回了,如果還要傳回主函數(shù)有其它應(yīng)用那就返回吧

用c語(yǔ)言實(shí)現(xiàn)兩個(gè)矩陣相乘怎么做?

1、程序運(yùn)行輸入數(shù)據(jù)時(shí),第一行為A矩陣的行列數(shù)和B矩陣的行列數(shù),接著分別輸入A、B兩個(gè)矩陣的值。

2、首先,定義6個(gè)整型變量,保存A、B矩陣的行和列,以及控制循環(huán)的變量,k則用于實(shí)現(xiàn)矩陣的乘法。

3、接著,定義三個(gè)整型二維數(shù)組,保存A、B和C矩陣的各元素。

4、輸入三個(gè)矩陣的行數(shù)和列數(shù),保存在變量a、b、c中。

5、輸入矩陣A的各元素,保存在數(shù)組X中。

6、輸入矩陣B的各元素,保存在數(shù)組Y中。

7、將二維數(shù)組Z的各元素,初始化為0。

8、用兩層for循環(huán),控制矩陣的乘法,并輸出乘法所得的結(jié)果。

9、計(jì)算A矩陣和B矩陣的乘法,結(jié)果保存在數(shù)組Z中。

10、最后,輸出乘法所得的結(jié)果,即輸出Z數(shù)組中的所有元素。

11、運(yùn)行程序,輸入矩陣A和B的行數(shù)和列數(shù),以及A矩陣和B矩陣的所有元素,電腦就會(huì)計(jì)算出乘積C矩陣的所有元素,并輸出C矩陣。

用C語(yǔ)言編寫(xiě)一個(gè)矩陣運(yùn)算的程序,高分!

//矩陣三元組之矩陣相加 相乘

#include iostream

using namespace std;

typedef int Elemtype;

#define MAXSIZE 12500 //最大非零元素

typedef struct Triple

{

Elemtype value;

int row,col;

}Triple;

typedef struct TSMatrix

{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

TSMatrix T;

void InputMatrix(TSMatrix T) //輸入t個(gè)非零元素

{

cout"請(qǐng)輸入稀疏矩陣的信息,(行,列,非零元素個(gè)數(shù))"endl;

cinT.muT.nuT.tu;

int i;

cout"請(qǐng)輸入非零元素的信息(行,列,值),提醒(下標(biāo)從1開(kāi)始)"endl;

for(i=1;i=T.tu;++i)

{

cinT.data[i].rowT.data[i].colT.data[i].value;

}

}

void Output(TSMatrix T)

{

cout"矩陣的三元組表示(ROW=)"T.mu" COL="T.nu"非零個(gè)數(shù)="T.tuendl;

int i;

for(i=1;i=T.tu;++i)

{

cout"ROW(行):"T.data[i].row" COL(列):"T.data[i].col" Value(值)"T.data[i].valueendl;

}

}

void TransposeSMatrix(TSMatrix M,TSMatrix T) //矩陣的轉(zhuǎn)置

{

T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;

int i,j,k=1;

for(i=1;i=M.nu;++i)

{

for(j=1;j=M.tu;++j)

if(M.data[j].col==i)

{

T.data[k].row=i;

T.data[k].col=M.data[j].row;

T.data[k].value=M.data[j].value;

++k;

}

}

}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix Q) //矩陣相加

{

int index_a,index_b,i=1,j=1,k=1;

Q.mu=M.mu; Q.nu=M.nu;

while (i=M.tuj=T.tu)

{

index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;

index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;

if(index_aindex_b)

{

Q.data[k]=M.data[i];

i++;

k++;

}

else if(index_aindex_b)

{

Q.data[k]=T.data[j];

j++;

k++;

}

else if(index_a==index_b)

{

if((M.data[i].value+T.data[j].value)!=0)

{

Q.data[k]=M.data[i];

Q.data[k].value=M.data[i].value+T.data[j].value;

k++;

}

++i;

++j;

}

}

//復(fù)制剩余元素

for(;i=M.tu;++i)

{

Q.data[k]=M.data[i];

k++;

}

for(;j=T.tu;++j)

Q.data[k++]=T.data[j];

Q.tu=k-1;

}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix Q) //相乘

{

if(M.nu!=T.mu)

{

cerr"兩矩陣相乘不合法"endl;

return ;

}

int *rowSize=new int[T.mu+1]; //存放每行非零元素的個(gè)數(shù)

int *rowStart=new int[T.mu+2]; //矩陣每行在三元組開(kāi)始位置

int *temp=new int[T.nu+1]; //存放結(jié)果矩陣中每行的計(jì)算結(jié)果

int i,Current,k,ROWM,COLM,COLB;

for(i=1;i=T.mu;i++) rowSize[i]=0;

for(i=1;i=T.tu;++i) rowSize[T.data[i].row]++;

rowStart[1]=1;

for(i=2;i=T.mu+1;i++)

rowStart[i]=rowStart[i-1]+rowSize[i-1];

Current=1; k=1;

while (Current=M.tu)

{

ROWM=M.data[Current].row; //當(dāng)前三元組數(shù)據(jù)中元素的行號(hào)

for(i=1;i=T.nu;++i) temp[i]=0;

while (Current=M.tuROWM==M.data[Current].row)

{

COLM=M.data[Current].col; //當(dāng)前元素的列號(hào),方便與T矩陣的行號(hào)相乘

for(i=rowStart[COLM];irowStart[COLM+1];i++) //對(duì)應(yīng)T矩陣中每行的個(gè)數(shù)

{

COLB=T.data[i].col;

temp[COLB]+=(M.data[Current].value)*(T.data[i].value);

}

Current++;

}

for(i=1;i=T.nu;i++)

{

if(temp[i]!=0)

{

Q.data[k].row=ROWM;

Q.data[k].col=i;

Q.data[k].value=temp[i];

}

k++;

}

}

Q.mu=M.mu;Q.nu=T.nu;

Q.tu=k-1;

}

int main()

{

TSMatrix T,M,Q,S;

InputMatrix(M);

InputMatrix(T);

cout"兩矩陣相乘"endl;

Multiply(M,T,Q);

Output(Q);

cout"兩矩陣相加"endl;

AddMastrix(M,M,S);

Output(S);

system("pause");

return 0;

}

c語(yǔ)言,矩陣

上面那個(gè)程序是我寫(xiě)的,下面寫(xiě)的是兩個(gè)2*2矩陣相加和相乘的程序(行數(shù)和列數(shù)可以在主函數(shù)中更改),不得不說(shuō)一句,有關(guān)矩陣的東西就是麻煩:

#include stdio.h

#include stdlib.h

int** NewMatrix(int row,int col) //動(dòng)態(tài)開(kāi)辟一個(gè)數(shù)組

{

int i,j;

int** matrix;

matrix=(int **)malloc(sizeof(int *)*row);

for(i=0;irow;i++)

{

matrix[i]=(int*)malloc(sizeof(int)*col);

}

//輸入矩陣的元素

printf("please input the array elements:\n") ;

for(i=0;irow;i++)

{

for(j=0;jcol;j++)

{

scanf("%d",matrix[i][j]);

}

}

return matrix;

}

//兩矩陣相加a[row][col]+b[row][col]

int **addMatrix(int** a,int** b,int row,int col)

{

int i,j;

int** matrix;

//動(dòng)態(tài)建立一個(gè)矩陣空間以存放運(yùn)算結(jié)果

matrix=(int **)malloc(sizeof(int *)*row);

for(i=0;irow;i++)

{

matrix[i]=(int*)malloc(sizeof(int)*col);

}

//計(jì)算a+b

for(i=0;irow;i++)

{

for(j=0;jcol;j++)

{

matrix[i][j] = a[i][j] + b[i][j];

}

}

return matrix;

}

//兩矩陣相乘a[row][com]*b[com][col]

int **multiplyMatrix(int **a,int **b,int row,int com,int col)

{

int i,j,k;

int** matrix;

//動(dòng)態(tài)建立一個(gè)矩陣空間以存放運(yùn)算結(jié)果

matrix=(int **)malloc(sizeof(int *)*row);

for(i=0;irow;i++)

{

matrix[i]=(int*)malloc(sizeof(int)*col);

}

//計(jì)算a+b

for(i=0;irow;i++)

{

for(j=0;jcol;j++)

{

matrix[i][j] = 0;

for(k=0;kcom;k++)

{

matrix[i][j] += a[i][k] * b[k][j];

}

}

}

return matrix;

}

void main()

{

int i,j;

int row = 2,col = 2; //行數(shù)和列數(shù)在此更改

int **a,**b,**c;

a = NewMatrix(row,col); //動(dòng)態(tài)建立矩陣a

b = NewMatrix(row,col); //動(dòng)態(tài)建立矩陣b

//調(diào)用函數(shù),求兩矩陣的和

c = addMatrix(a,b,row,col);

//輸出兩矩陣的和

printf("\na add b is:\n");

for(i=0;irow;i++)

{

printf("\n");

for(j=0;jcol;j++)

{

printf("%d ",c[i][j]);

}

}

//調(diào)用函數(shù),求兩矩陣的積

c = multiplyMatrix(a,b,row,row,col);

//輸出兩矩陣的積

printf("\na multiply b is:\n");

for(i=0;irow;i++)

{

printf("\n");

for(j=0;jcol;j++)

{

printf("%d ",c[i][j]);

}

}

}

本來(lái)程序還可以寫(xiě)得簡(jiǎn)單一些,由于你要求兩矩陣同時(shí)能夠相加和相乘,從而可以判定兩矩陣的行數(shù)和列數(shù)應(yīng)該是相等的,因而在函數(shù)傳遞參數(shù)的時(shí)候只要傳一個(gè)就行了。但是考慮到程序的可移植性,我在寫(xiě)相加和相乘的子函數(shù)時(shí),考慮了普遍性,即對(duì)于給定的任意的row和col(甚至row != col),加法和乘法都能夠適用。然而這樣一來(lái),形參看起來(lái)就比較多了。你自己就情況而定吧,不懂的地方發(fā)我消息。

分享標(biāo)題:c語(yǔ)言中矩陣函數(shù)的應(yīng)用 c語(yǔ)言實(shí)現(xiàn)矩陣
文章網(wǎng)址:http://jinyejixie.com/article26/doohhcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站建設(shè)、商城網(wǎng)站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司
饶平县| 五常市| 宜春市| 诸暨市| 阆中市| 东辽县| 海城市| 巴彦淖尔市| 驻马店市| 托克逊县| 浦江县| 澳门| 蓬溪县| 灵丘县| 拜城县| 屯昌县| 晋州市| 南昌县| 元阳县| 凉城县| 海盐县| 南康市| 比如县| 洛隆县| 湾仔区| 宝清县| 漳州市| 张家港市| 永州市| 盐池县| 军事| 通辽市| 库车县| 昭平县| 福清市| 慈溪市| 卓尼县| 五峰| 家居| 海南省| 北京市|