C语言编写矩阵乘法函数使用动态内存分配

237 阅读1分钟

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

}