73 lines
1.6 KiB
C
73 lines
1.6 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
void mul(int **a, int **b, int **c, int n) {
|
|
int i, j, k, sum;
|
|
for (i = 0; i < n; i++) {
|
|
for (j = 0; j < n; j++) {
|
|
sum = 0;
|
|
for (k = 0; k < n; k++) {
|
|
sum += a[i][k] * b[k][j];
|
|
}
|
|
c[i][j] = sum;
|
|
}
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
int i, j, n = 2;
|
|
|
|
int ary_a[2][2]={{1,2},{3,4}};
|
|
int ary_b[2][2]={{5,6},{7,8}};
|
|
|
|
// 動態分配記憶體給矩陣
|
|
int **arr_a = (int **)malloc(n * sizeof(int *));
|
|
int **arr_b = (int **)malloc(n * sizeof(int *));
|
|
int **arr_c = (int **)malloc(n * sizeof(int *));
|
|
|
|
if (arr_a == NULL || arr_b == NULL || arr_c == NULL) {
|
|
printf("記憶體分配失敗\n");
|
|
return 1;
|
|
}
|
|
|
|
for (i = 0; i < n; i++) {
|
|
arr_a[i] = (int *)malloc(n * sizeof(int));
|
|
arr_b[i] = (int *)malloc(n * sizeof(int));
|
|
arr_c[i] = (int *)malloc(n * sizeof(int));
|
|
|
|
if (arr_a[i] == NULL || arr_b[i] == NULL || arr_c[i] == NULL) {
|
|
printf("記憶體分配失敗\n");
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
for (j = 0; j < 2; j++) {
|
|
arr_a[i][j] = ary_a[i][j];
|
|
arr_b[i][j] = ary_b[i][j];
|
|
}
|
|
}
|
|
|
|
// 進行矩陣乘法
|
|
mul(arr_a, arr_b, arr_c, n);
|
|
|
|
// 輸出結果
|
|
for (i = 0; i < n; i++) {
|
|
for (j = 0; j < n; j++) {
|
|
printf("arr_c[%d][%d] = %d\n", i, j, arr_c[i][j]);
|
|
}
|
|
}
|
|
|
|
// 釋放記憶體
|
|
for (i = 0; i < n; i++) {
|
|
free(arr_a[i]);
|
|
free(arr_b[i]);
|
|
free(arr_c[i]);
|
|
}
|
|
free(arr_a);
|
|
free(arr_b);
|
|
free(arr_c);
|
|
|
|
return 0;
|
|
}
|