#include <stdlib.h>
void print(int m, int p, int *p4); /*函數聲明*/
int main()
{
int test_num = 0; /*要計算的次數*/
int comp_times = 0; /*已經執行計算的次數*/
int m, n, p, i, j, k, sum, x; /*m,n,p確定矩陣形式,i,j表行與列,sum求每次計算之和*/
int *p1 = NULL; /*定義3個指針並初始化*/
int *p2 = NULL;
int *p3 = NULL;
scanf ("%d", &test_num); /*讀入要運算的次數*/
for( ; comp_times < test_num; comp_times++) /*當執行次數等於所要運行次數時退出*/
{
scanf("%d %d %d", &m, &n, &p); /*確定矩陣形式,m*n和n*p階矩陣*/
p1 = malloc( (m * n) * sizeof(int) ); /*申請內存*/
p2 = malloc( (n * p) * sizeof(int) );
p3 = malloc( (m * p) * sizeof(int) );
for( i = 0; i < m * n; i++) /*讀入第壹個矩陣*/
{
scanf("%d", &*(p1 + i));
}
for( i = 0; i < n * p; i++) /*讀入第二個矩陣*/
{
scanf("%d", &*(p2 + i));
}
/*以下計算矩陣乘法,並將每次的運算結果存入第三塊內存*/
for(i = 0; i < m; i++)
{
for(j = 0; j < p; j++)
{
for (k = sum = 0; k < n; k++)
{
x = *(p1 + k + i*n) * *(p2 + k*p + j);
sum += x; /*累加求和*/
}
*(p3 + i*p + j) = sum;
}
}
print(m, p, p3);
free(p1);
free(p2);
free(p3);
}
return 0;
}
/*定義打印矩陣相乘結果的函數,變量分別為矩陣類型以及指
針p4用以實現每打p個數值後面就有壹個回車,否則為空格*/
void print(int m, int p, int *p4)
{
int i = 0;
while (i < m * p)
{
if (i % p == p - 1)
printf("%d\n", *(p4 + i));
else
printf("%d ", *(p4 + i));
i++;
}
}