/*
編程求兩個矩陣相乘的結果。輸入第一行是整數m,n,表示第一個矩陣式m行n列的;然后是一個m * n的矩陣。
再下一行的輸入時整數p,q,表示下一個矩陣p行,q列的(n=p);然后就是一個p行q列的矩陣。
要求輸出兩個矩陣相乘的結果矩陣(1<m、n、p、q<=8).
P82頁
2014年10月3日21:32:23
*/
#include <iostream>
using namespace std;
const int size = 10;
void init(int *, int *, int a[][size]);//初始化數組
void multi(int, int, int, int, int a[][size], int b[][size], int result[][size]);
void print(int, int, int result[][size]);
int main()
{
int m, n, p, q;
int a[size][size];
int b[size][size];
int result[size][size] = { 0 }; //將保存結果的數組初始化為0;
/*
int a[size][size] = { { 2, 4, 5 }, { 2, 1, 3 } }; //初始化數組
int b[size][size] = { { 1, 1, 1 }, { 2, 3, 2 }, { 0, 1, 4 } }; //初始化數組
m = 2;
n = 3;
p = q = 3;
*/
init(&m, &n, a);
init(&p, &q, b);
multi(m, n, p, q, a, b, result);
//print(m, n, a); 檢查輸入矩陣
//print(p, q, b);
print(m, q, result);
system("pause");
return 0;
}
void multi(int m, int n, int p, int q, int a[][size], int b[][size], int result[][size])
{
if (n == p) //第一個矩陣的列數與第二個矩陣的行數相等時,兩個矩陣才能相乘;
for (int i = 0; i < m; i++) //a的行數
{
for (int j = 0; j < q; j++) //b的列數
{
for (int k = 0; k < n; k++) //a的列數
{
result[i][j] += a[i][k] * b[k][j];
}
}
}
else
printf("行數不匹配\n");
}
void print(int m, int q, int result[][size])
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < q; j++)
{
printf("%d\t", result[i][j]);
}
printf("\n");
}
}
void init(int *pm, int *pn, int a[][size])
{
cin >> *pm >> *pn;
for (int i = 0; i < *pm; i++)
{
for (int j = 0; j < *pn; j++)
{
cin >> a[i][j];
}
}
}