矩阵乘法
《C和指针》第8章编程练习第5题:
1 /* 2 ** 矩阵相乘 3 */ 4 5 #include <stdio.h> 6 7 /* 8 ** 函数功能:将矩阵m1与m2相乘,结果保存在矩阵r中 9 ** 函数参数:m1为x行y列的矩阵,m2为y行z列的矩阵,r为x行z列的矩阵 10 ** 函数没有返回值,结果直接存储在r矩阵中 11 */ 12 void 13 matrix_mutiply( int *m1, int *m2, int *r, int x, int y, int z ) 14 { 15 int row, col; 16 int i; 17 int multp1, multp2; 18 for( row = 0; row < x; ++ row ) 19 for( col = 0; col < z; ++ col ) 20 { 21 *r = 0; 22 for( i = 0; i < y; ++ i ) 23 { 24 multp1 = *( m1 + row * y + i ); 25 multp2 = *( m2 + i * z + col ); 26 *r += multp1 * multp2; 27 } 28 r ++; 29 } 30 } 31 32 int 33 main() 34 { 35 int a[3][2] = { 2, -6, 36 3, 5, 37 1,-1}; 38 int b[2][4] = { 4, -2, -4, -5, 39 -7, -3, 6, 7 }; 40 41 int c[3][4] = { 0 }; 42 43 matrix_mutiply( &a[0][0], &b[0][0], &c[0][0], 3, 2, 4 ); 44 45 int i, j; 46 for( i = 0; i < 3; ++ i ) 47 { 48 for( j = 0; j < 4; ++ j ) 49 printf( "%d ", c[i][j] ); 50 printf( "\n" ); 51 } 52 53 return 0; 54 }