分析:首先我們可以根據題意寫出函式頭。可以定為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 ...