Data_Structure/作業/unit1/matrix multiplication/main.c
2025-01-20 21:30:53 +08:00

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;
}