C中的矩阵乘法不能正常工作

时间:2017-01-13 19:28:20

标签: c arrays matrix-multiplication

我想在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;
}

你们中的任何人都知道这里有什么?

2 个答案:

答案 0 :(得分:3)

res数组初始化为0。

int res[l][k] = {{0}};

答案 1 :(得分: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;
}