Matrix 这是我的数据结构课程的一个问题,我如何输出这个矩阵?

Matrix 这是我的数据结构课程的一个问题,我如何输出这个矩阵?,matrix,data-structures,Matrix,Data Structures,在本作业中,要求您编写一个程序,读入两个大小为nxm和sxt的矩阵,然后输出这两个矩阵的乘积。由于矩阵的大小事先未知,因此需要为矩阵实现动态内存分配方案。您的程序应该提示用户输入n、m、s、t和每个矩阵的元素。之后,如果可以对矩阵执行乘法,则程序应输出每个矩阵和矩阵乘法的结果 回想一下,如果矩阵A的大小为n x m,矩阵B的大小为m x t,则生成的矩阵C的大小为n x t。但是,如果一个矩阵是nxm,另一个是sxt,如果m不等于s,这些矩阵就不能相乘 如果您不熟悉矩阵乘法问题,请研究以下示例,

在本作业中,要求您编写一个程序,读入两个大小为nxm和sxt的矩阵,然后输出这两个矩阵的乘积。由于矩阵的大小事先未知,因此需要为矩阵实现动态内存分配方案。您的程序应该提示用户输入n、m、s、t和每个矩阵的元素。之后,如果可以对矩阵执行乘法,则程序应输出每个矩阵和矩阵乘法的结果

回想一下,如果矩阵A的大小为n x m,矩阵B的大小为m x t,则生成的矩阵C的大小为n x t。但是,如果一个矩阵是nxm,另一个是sxt,如果m不等于s,这些矩阵就不能相乘

如果您不熟悉矩阵乘法问题,请研究以下示例,以找到二维矩阵乘法的一般解决方案。在本例中,矩阵A和B的大小为3 x 3。条目Xij表示元素X[i][j]

         A00    A01   A02                                  B00      B01      B02
  A =             A10    A11   A12      B =         B10      B11      B12
     A20    A21   A22                                  B20      B21      B22
矩阵A和B的乘积等于

          A00 * B00 + A01 * B10 + A02 * B20         A00*B01 + A01 * B11 + A02*B21          A00*B02 + A01 *B12 + A02 *B22
C=A10*B00+A11*B10+A12*B20 A10B01+A11*B11+A12B21 A10B02+A11 B12+A12 B22 A20*B00+A21*B10+A22*B20 A20B01+A21*B11+A22B21 A20B02+A21*B12+A22*B22


要解决这个问题,您需要确定如何从矩阵A和B的条目中获取条目,例如C[i][k]。一旦您了解了这一点,编程将是一项极其简单的任务。警告在开始编程之前,测试您的解决方案。

矩阵乘法是通过首先确定结果矩阵的大小来完成的。只需计算第一个矩阵的行数和第二个矩阵的列数。然后将第一个矩阵的每一行乘以第二个矩阵的每一列。这是代码

        #include <stdio.h>
        #include <stdlib.h>
        
        int main()
        {
            int **a, **b, **c;
            int n, m, s, t;
            int i, j;
        
            printf("\nEnter rows for matrix A: ");
            scanf("%d", &n);
            printf("\nEnter cols for matrix A : ");
            scanf("%d", &m);
            printf("\nEnter rows for matrix B : ");
            scanf("%d", &s);
            printf("\nEnter cols for matrix B: ");
            scanf("%d", &t);
            if(m != s)
            {
                printf("\nCan't multiply two matrices if col of a and row of b are not same.");
                return(0);
            }
        
            a = (int **) malloc(n*sizeof(int *));
            b = (int **) malloc(s*sizeof(int *));
            c = (int **) malloc(n*sizeof(int *));
        
            for(i=0; i<n; i++)
                a[i] = (int *)malloc(m*sizeof(int));
            for(i=0; i<s; i++)
                b[i] = (int *)malloc(t*sizeof(int));
            for(i=0; i<n; i++)
                c[i] = (int *)malloc(t*sizeof(int));
        
            printf("\nEnter elements of matrix A :\n");
            for(i=0; i<n; i++)
            {
                for(j=0; j<m; j++)
                {
                    printf("\tA[%d][%d] = ",i, j);
                    scanf("%d", &a[i][j]);
                }
            }
        
            printf("\nEnter elements of matrix B :\n");
            for(i=0; i<s; i++)
            {
                for(j=0; j<t; j++)
                {
                    printf("\tB[%d][%d] = ",i, j);
                    scanf("%d", &b[i][j]);
                }
            }
        
            printf("Elements of matrix A: \n");
            for(i=0; i<n; i++)
            {
                for(j=0; j<m; j++)
                {
                    printf(" %d ", a[i][j]);
                }
                printf("\n");
            }
            printf("Elements of matrix B: \n");
            for(i=0; i<s; i++)
            {
                for(j=0; j<t; j++)
                {
                    printf(" %d ", b[i][j]);
                }
                printf("\n");
            }
        
            for(i=0; i<n; i++)
                for(j=0; j<s; j++)
                {
                    c[i][j] = 0;
                    for(t=0; t<m; t++)
                        c[i][j] = c[i][j] + a[i][t] * b[t][j];
                }
        
            printf("\n\nResultant matrix :");
            for(i=0; i<n; i++)
            {
                printf("\n\t\t\t");
                for(j=0; j<t; j++)
                    printf("%d\t", c[i][j]);
            }
        
        
            return 0;
}

这是家庭作业。您应该向我们展示您已经编写的代码以及获得的结果。你要求我们解决你的家庭作业而不尝试解决它是不道德的。你甚至没有告诉我们这个问题需要用什么语言。为什么你认为答案需要用C?他没有具体说明,所以可以说我在解决这个问题上取得了自由。无论如何,这看起来像是C语言课程中典型的家庭作业。我在大学里也经历过。这就是我认为它应该在C中的主要原因:)
c[i][j] = c[i][j] + a[i][t] * b[t][j];