#include <stdio.h> #include <stdlib.h>
void matrix_print(int row, int col, float** mtx); void matrix_mut(int row_a, int col_a, int col_b, float** a, float** b, float** c);
void matrix_print(int row, int col, float** mtx) { int r = 0, c = 0; for (r = 0; r < row; r++) { for (c = 0; c < col; c++) { printf("%g ", ((mtx + r) + c)); } printf("\n"); } }
void matrix_mut(int row_a, int col_a, int col_b, float** a, float** b, float** c) { int i, j, k; for (i = 0; i < row_a; i++) { for (j = 0; j < col_b; j++) { float sum = 0; for (k = 0; k < col_a; k++) { sum += ((a + i) + k) * ((b + k) + j); } ((c + i) + j) = sum; } } } int main(void) { int i, j; float** a, ** b, ** c; int row_a, col_a, row_b, col_b;
printf("请输入矩阵A的行数,列数:\n");
scanf("%d,%d", &row_a, &col_a);
a = (float**)malloc(row_a * sizeof(float*));
for (i = 0; i < row_a; i++)
a[i] = (float*)malloc(col_a * sizeof(float));
printf("请输入矩阵A:\n");
for (i = 0; i < row_a; i++)
for (j = 0; j < col_a; j++)
scanf("%f", &a[i][j]);
row_b = col_a;
printf("请输入矩阵B的列数:\n");
scanf("%d", &col_b);
b = (float**)malloc(row_b * sizeof(float*));
for (i = 0; i < row_b; i++)
b[i] = (float*)malloc(col_b * sizeof(float));
printf("请输入矩阵B:\n");
for (i = 0; i < row_b; i++)
for (j = 0; j < col_b; j++)
scanf("%f", &b[i][j]);
c = (float**)calloc(row_a, sizeof(float*));
for (i = 0; i < row_a; i++)
c[i] = (float*)calloc(col_b, sizeof(float));
// float a[2][3] = {{1,2,3}, {1,5,2}};
// float b[3][2]= {{1,2},{2,1},{3,1}};
// float d[2][2];
matrix_mut(row_a, col_a, col_b, a, b, c);
matrix_print(row_a, col_b, c);
for (i = 0; i < row_a; i++)
free(*(a + i));
free(a);
for (i = 0; i < row_b; i++)
free(*(b + i));
free(b);
for (i = 0; i < row_a; i++)
free(*(c + i));
free(c);
return 0;
}