Data_Structure/作業/unit1/matrix multiplication/main.c

73 lines
1.6 KiB
C
Raw Permalink Normal View History

2025-01-20 21:30:53 +08:00
#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}};
// <20>ʺA<CABA><41><EFBFBD>t<EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD>x<EFBFBD>}
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("<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\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("<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\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];
}
}
// <20>i<EFBFBD><69><EFBFBD>x<EFBFBD>}<7D><><EFBFBD>k
mul(arr_a, arr_b, arr_c, n);
// <20><><EFBFBD>X<EFBFBD><58><EFBFBD>G
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]);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD>
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;
}