题目:
计算两个矩阵 A、B 的乘积矩阵 C。
矩阵 A={1,2,3,4,5,6};矩阵 B={7,8,9,10,11,12}。
两个矩阵的乘积仍然是矩阵。若 A 矩阵有m行p列,B 矩阵有p行n列,则它们的乘积 C 矩阵有m 行n 列。
C=A*B 的算法: Cij= (i=0,1,……,m-1;j=0,1,……,n-1)
设 A、B、C 矩阵用 3 个 2 维数组表示:a 数组有 3 行 2 列,b 数组有 2 行 3 列,则 c 数组有 3 行 3 列。
如:
c[0][0]= a[0][0]*b[0][0]+a[0][1]*b[1][0];
c[1][0]= a[1][0]*b[0][1]+a[1][1]*b[1][1];
01 | public class ArrayMult { |
02 |
03 | public static void main(String[] args) { |
04 | int [][] a = {{ 1 , 2 },{ 3 , 4 },{ 5 , 6 }}; |
05 | int [][] b = {{ 1 , 2 , 3 },{ 4 , 5 , 6 }}; |
06 | //m表示数组a的行数,n表示数组b的列数,s表示数组a的列数和数组b的行数 |
07 | int m = a.length, n = b[ 0 ].length, s1 = a[ 0 ].length, s2 = b.length; |
08 | //判断两个数组是否能够相乘求积 |
09 | if (s1 != s2) { |
10 | System.out.println( "数组不能相乘,数组a的列数不等于数组b的行数" ); |
11 | return ; |
12 | } |
13 | //动态创建数组c用来保存结果 |
14 | int [][] c = new int [m][n]; |
15 | for ( int i= 0 ; i<m; i++) //i表示数组c的每一行 |
16 | for ( int j= 0 ; j<n; j++) { //j表示数组c的每一列 |
17 | int temp = 0 ; |
18 | for ( int k= 0 ; k<s1; k++) //k表示数组a的列号和数组b的行号 |
19 | temp+=a[i][k]*b[k][j]; |
20 | c[i][j] = temp; |
21 | } |
22 | print(a); |
23 | print(b); |
24 | print(c); |
25 | } |
26 | |
27 | private static void print( int [][] c) { |
28 | int m = c.length; |
29 | int n = c[ 0 ].length; |
30 | for ( int i= 0 ; i<m; i++) { |
31 | for ( int j= 0 ; j<n; j++) { |
32 | if (c[i][j]< 10 ) |
33 | System.out.print( " " ); |
34 | System.out.print(c[i][j] + " " ); |
35 | } |
36 | System.out.println(); |
37 | } |
38 | System.out.println( "--------------------------------------" ); |
39 | } |
40 | } |