C語言實現矩陣相乘

2021-06-18 16:09:18 字數 1811 閱讀 4439

分析:首先我們可以根據題意寫出函式頭。可以定為void matrixmutiply(int m,int n,int p,long lmatrix1[max][max],long lmatrix2[max][max],long lmatrixresult[max][max]),其中lmatrix1和lmatrix2分別是輸入的m*n矩陣和n*p矩陣,lmatrixresult是輸出的m*p矩陣。

因為m,n和p都是未知量,要進行處理的矩陣大小是變數。但我們可以定義比較大的二維陣列,只使用其中的部分陣列元素。

矩陣相乘的演算法比較簡單,輸入乙個m*n矩陣和乙個n*p矩陣,結果必然是m*p矩陣,有m*p個元素,每個元素都需要計算,可以使用m*p巢狀迴圈進行計算。

根據矩陣乘法公式:

可以用迴圈直接套用上面的公式計算每個元素。巢狀迴圈內部進行累加前,一定要注意對累加變數進行清零。

資料要求

問題中的常量:

#define max 10  /*矩陣最大行數和列數*/

問題的輸入:

int m,n,p;   /*相乘的兩個矩陣的行列數*/

long lmatrix1[max][max],lmatrix2[max][max]; /*相乘的兩個矩陣*/

問題的輸出:

long lmatrixresult[max][max];    /*矩陣相乘後得到的矩陣*/

初始演算法

1.輸入兩個矩陣的的行列數m,n,p;

2.輸入第乙個矩陣的每個元素;

3.輸入第二個矩陣的每個元素;

4.呼叫函式進行乘法運算,結果放在lmatrixresult 中;

5. 列印輸出結果矩陣。

演算法細化

演算法的步驟4計算兩個矩陣的乘法演算法如下:

4.1 定義迴圈變數i,j,k;

4.2 巢狀迴圈計算結果矩陣(m*p)的每個元素。

程式**如下:

#define max 10

void matrixmutiply(int m,int n,int p,long lmatrix1[max][max],

long lmatrix2[max][max],long lmatrixresult[max][max])

} main()

/*輸入第二個矩陣的每個元素*/

printf("\nplease elements of matrix2(%d*%d):\n",n,p);

for(i=0;i

for(j=0;j

/*呼叫函式進行乘法運算,結果放在lmatrixresult 中*/

matrixmutiply(m,n,p,lmatrix1,lmatrix2,lmatrixresult);

/*列印輸出結果矩陣*/

printf("\nresult matrix: \n");

for(i=0;i

} 程式執行結果如下:

please input m of matrix1: 3

please input n of matrix1: 2

please input p of matrix2: 3

please elements of matrix1(3*2):

1 20 1

3 0please elements of matrix2(2*3):

1 2 0

3 1 1

result matrix:

7 4 2

3 1 1

3 6 0

C語言實現矩陣相乘

介紹了c語言實現矩陣相乘的常見演算法,並考慮優化程式,提高效能介紹了改進的演算法。1.矩陣相乘 矩陣相乘應滿足的條件 1 矩陣a的列數必須等於矩陣b的行數,矩陣a與矩陣b才能相乘 2 矩陣c的行數等於矩陣a的行數,矩陣c的列數等於矩陣b的列數 3 矩陣c中第i行第j列的元素等於矩陣a的第i行元素與矩...

C語言實現矩陣相乘

問題描述 編寫程式,可以實現m n矩陣和n p矩陣相乘。m,n,p均小於10,矩陣元素為整數。分析 首先我們可以根據題意寫出函式頭。可以定為void matrixmutiply int m,int n,int p,long lmatrix1 max max long lmatrix2 max max...

C語言實現大數相乘運算

本篇文章依然是有關tp 的內容。tp 主要思想 跳出整型浮點型的限制,定義新的容量比較大的資料型別,從而實現一些大數運算 看了一些網上的演算法和 也從前輩文章裡得到一些靈感,產出乙個用c語言實現大數相乘的演算法 廢話不多說,直接上演算法和 t entierlong multiplication t ...