Matrix 这是我的数据结构课程的一个问题,我如何输出这个矩阵?
在本作业中,要求您编写一个程序,读入两个大小为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]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,这些矩阵就不能相乘 如果您不熟悉矩阵乘法问题,请研究以下示例,
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];