C编程和矩阵乘法输出问题

时间:2015-01-10 21:53:00

标签: c matrix

我目前正在学习C编程,为了更好地理解C中的矩阵,我试图制作这个程序。 我似乎遇到输出问题,因为你可以看到该程序有3个功能。 第一个允许您输入数组的值,然后显示它。第二个函数执行乘法,最后一个函数应显示乘法矩阵的输出。 然而输出很奇怪。这是我的代码。输出正好在代码下面。

#include <stdio.h>

void read_matrix(int m2[][3] )
{
    int i, j;
    printf("input values for matrix in order of rows first \n");
    for (i = 0; i < 3; i++)
    {       
        for (j = 0; j < 3; j++)
        { 
            scanf("%d",&m2[i][j]);          
        }
    }

    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("%d ", m2[i][j]);
        }
        printf("\n");
    }
}

void multiply_matrices(int m1[][3], int m2[][3] ,int m3[][3])
{
    int i, j, k; 

    for (i = 0; i < 3; i++){
        for (j = 0; j < 3; j++){
            for (k = 0; k < 3; k++){
                m3[i][j] +=m1[i][k]*m2[k][j]; 
            }
        }
    }
}

void write_matrix(int m3[][3] )
{
    int i, j; 

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

int main(void)
{
    int matrix1[3][3], matrix2[3][3], matrix3[3][3]; 

    read_matrix(matrix1);
    read_matrix(matrix2);

    multiply_matrices(matrix1, matrix2, matrix3);

    write_matrix(matrix3);

    return 0;
}

这是输出!

input values for matrix in order of rows first
1
2
3
2
2
2
1
2
2
1 2 3
2 2 2
1 2 2
input values for matrix in order of rows first
2
1
1
1
2
1
2
1
2
2 1 1
1 2 1
2 1 2
-858993450 -858993452 -858993451       /*This is the multiplied matrix output!*/
-858993450 -858993452 -858993452
-858993452 -858993453 -858993453
Press any key to continue . . .

我担心这可能只是一个愚蠢的错误;如果是的话,我很抱歉,但此刻我无法看到我出错的地方。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

在执行此操作之前,您需要将矩阵m3的所有元素初始化为0

m3[i][j] +=m1[i][k]*m2[k][j];   

在函数multiply_matrices中。

答案 1 :(得分:1)

在函数乘法矩阵中初始化matrix3,如下所示

for (int i=0;i<3;i++)
{
    for (int j=0;j<3;j++)
    {
        m3[i][j]=0;
    }
}

在此之后,进行乘法运算,一切都会完美运行。

答案 2 :(得分:0)

int m3[][]={}; 它最初为 m3 的所有可用索引存储 0