C 中的矩阵乘法无法正常工作
Matrix-Multiplication in C not working properly
我想在 C 中创建一个矩阵乘法函数。为此我定义了函数 matrix_mult()。
当我使用以下参数调用此函数时:
int matrix1[l][m] = {{1,2}, {1,2}};
int matrix2[m][k] = {{1,0}, {0,1}};
在 main() 方法中像这样:
int main()
{
int matrix1[l][m] = {{1,2}, {1,2}};
int matrix2[m][k] = {{1,0}, {0,1}};
matrix_mult(matrix1, matrix2);
return 0;
}
我得到以下结果:
59 59
68 60
正确的结果是:
1 2
1 2
我只是不明白代码做错了什么。
函数matrix_mult()的定义如下:
#define l 2
#define m 2
#define k 2
int matrix_mult(int m1[l][m], int m2[m][k]) {
int res[l][k];
for(int row=0;row<l;row++){
for (int col=0;col<k;col++){
for(int j=0;j<m;j++){
res[row][col] += m1[row][j]*m2[j][col];
}
}
}
printf("Result of matrix multiplication is:\n");
for(int i=0;i<l;i++) {
for(int j=0;j<k;j++){
printf("%d ", res[i][j]);
}
printf("\n");
}
return 0;
}
你们有人知道这里有什么吗?
将res
数组初始化为0。
int res[l][k] = {{0}};
//
// main.c
// Matrix Multiplicatiion.
//
// Created by Devansh on 15/07/21.
//
#include <stdio.h>
int main()
{
int arow,acolumn,brow, bcolumn,i,j;
int MAX=100;
int a[MAX][MAX];
int b[MAX][MAX];
printf("enter rows of matrix a: ");
scanf("%d", &arow);
printf("enter columns of matrix a: ");
scanf("%d", &acolumn);
printf("enter rows of matrix b: ");
scanf("%d", &brow);
printf("enter columns of matrix b: ");
scanf("%d", &bcolumn);
if(brow != acolumn){
printf("sorry we cannot multiply matrix a and b");
}
else{
printf("enter the elements of matrix a:\n");
for(i=0;i<arow;i++)
{
for(j=0;j<acolumn;j++)
{
scanf("%d", &a[i][j]);
}
}
printf("enter the elements of matrix b:\n");
for(i=0;i<brow;i++)
{
for(j=0;j<bcolumn;j++)
{
scanf("%d", &b[i][j]);
}
}
int product[MAX][MAX];
int sum=0;
for(i=0;i<arow;i++)
{
for(j=0;j<bcolumn;j++){
for(int k=0;k<brow;k++){
sum += a[i][k] * b[k][j];
}
product[i][j]= sum;
}
}
for(i=0;i<arow;i++){
for(j=0;j<bcolumn;j++){
printf("%d ", product[i][j]);
}
printf("\n");
}
}
return 0;
}
我想在 C 中创建一个矩阵乘法函数。为此我定义了函数 matrix_mult()。
当我使用以下参数调用此函数时:
int matrix1[l][m] = {{1,2}, {1,2}};
int matrix2[m][k] = {{1,0}, {0,1}};
在 main() 方法中像这样:
int main()
{
int matrix1[l][m] = {{1,2}, {1,2}};
int matrix2[m][k] = {{1,0}, {0,1}};
matrix_mult(matrix1, matrix2);
return 0;
}
我得到以下结果:
59 59
68 60
正确的结果是:
1 2
1 2
我只是不明白代码做错了什么。
函数matrix_mult()的定义如下:
#define l 2
#define m 2
#define k 2
int matrix_mult(int m1[l][m], int m2[m][k]) {
int res[l][k];
for(int row=0;row<l;row++){
for (int col=0;col<k;col++){
for(int j=0;j<m;j++){
res[row][col] += m1[row][j]*m2[j][col];
}
}
}
printf("Result of matrix multiplication is:\n");
for(int i=0;i<l;i++) {
for(int j=0;j<k;j++){
printf("%d ", res[i][j]);
}
printf("\n");
}
return 0;
}
你们有人知道这里有什么吗?
将res
数组初始化为0。
int res[l][k] = {{0}};
//
// main.c
// Matrix Multiplicatiion.
//
// Created by Devansh on 15/07/21.
//
#include <stdio.h>
int main()
{
int arow,acolumn,brow, bcolumn,i,j;
int MAX=100;
int a[MAX][MAX];
int b[MAX][MAX];
printf("enter rows of matrix a: ");
scanf("%d", &arow);
printf("enter columns of matrix a: ");
scanf("%d", &acolumn);
printf("enter rows of matrix b: ");
scanf("%d", &brow);
printf("enter columns of matrix b: ");
scanf("%d", &bcolumn);
if(brow != acolumn){
printf("sorry we cannot multiply matrix a and b");
}
else{
printf("enter the elements of matrix a:\n");
for(i=0;i<arow;i++)
{
for(j=0;j<acolumn;j++)
{
scanf("%d", &a[i][j]);
}
}
printf("enter the elements of matrix b:\n");
for(i=0;i<brow;i++)
{
for(j=0;j<bcolumn;j++)
{
scanf("%d", &b[i][j]);
}
}
int product[MAX][MAX];
int sum=0;
for(i=0;i<arow;i++)
{
for(j=0;j<bcolumn;j++){
for(int k=0;k<brow;k++){
sum += a[i][k] * b[k][j];
}
product[i][j]= sum;
}
}
for(i=0;i<arow;i++){
for(j=0;j<bcolumn;j++){
printf("%d ", product[i][j]);
}
printf("\n");
}
}
return 0;
}