一些个c++的相关问题

自定义2个矩阵,求解矩阵相乘的结果。(要求矩阵的元素通过给定的代码随机生成)


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int **init_matrix(int r, int c, int rmax)
{
    int **p = (int **)malloc(r * sizeof(int *));
    for (int i = 0; i < r; i++)
    {
        p[i] = (int *)malloc(c * sizeof(int));
        for (int j = 0; j < c; j++)
        {
            p[i][j] = rand() % rmax; // 生成rmax以内随机数
        }
    }
    return p;
}

void free_matrix(int **m, int r)
{
    for (int i = 0; i < r; i++)
    {
        free(m[i]);
    }
    free(m);
}

int main()
{
    int m, n, p, q;
    printf("请输入第一个矩阵的维数(m*n):");
    scanf("%d %d", &m, &n);
    printf("请输入第二个矩阵的维数(p*q):");
    scanf("%d %d", &p, &q);
    if (n != p)
    {
        printf("两个矩阵维数不匹配,无法进行矩阵乘法!\n");
        return -1;
    }

    int **m1 = init_matrix(m, n, 100);
    int **m2 = init_matrix(p, q, 100);

    int m3[m][q];
    memset(m3, 0, sizeof(m3));

    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < q; k++)
            {
                m3[i][k] += m1[i][j] * m2[j][k];
            }
        }
    }

    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < q; j++)
        {
            printf("%d ", m3[i][j]);
        }
        printf("\n");
    }

    free_matrix(m1, m);
    free_matrix(m2, p);
    return 0;
}

矩阵相乘有条件,按照矩阵相乘规则乘就好了嘛