矩阵乘法(帮我解析一下这个程序,一定要详细!急!

#include<stdio.h>
int main()
{
int A[4][3]={0},B[3][4]={0}, C[3][3]={0};

printf("请输入三行两列的矩阵A:\n");
int i,j;
for(i=1;i<=3;i++)
{
for(j=1;j<=2;j++)
{
scanf("%d",&A[i][j]);
}
}
printf("请输入两行三列的矩阵B:\n");
for(i=1;i<=2;i++)
{
for(j=1;j<=3;j++)
{
scanf("%d",&B[i][j]);
}
}

int m;
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
for(m=1;m<=3;m++)
{
C[i][j]+=A[i][m]*B[m][j];

  } 
}

}
printf("矩阵A与矩阵B相乘的结果数组C为:\n");
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
printf("%d ",C[i][j]);
}
printf("\n");
}
return 0;
}
需要知道核心,一定要详细。初学者,什么都不懂

看你写的每个数组下标都从1开始,是不是写错了,数组下标是从0开始的,所以你的第三个for循环会导致数组C下标越界。

就是创建2个矩阵,然后矩阵相乘。最后输出相乘后的矩阵
矩阵相乘就是 A的每一行中的数字对应乘以B的每一列的数字把结果相加起来

img

核心就是循环相乘求值,输出相乘后的矩阵。
具体可以搜索数学上的矩阵乘法。
矩阵还是很厉害的,可以做很多优化

我纠正了下你的程序

#include<stdio.h>
int main()
{
    int A[3][2]={0},B[2][3]={0}, C[3][3]={0};

    printf("请输入三行两列的矩阵A:\n");
    int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            scanf("%d",&A[i][j]);
        }
    }
    printf("请输入两行三列的矩阵B:\n");
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&B[i][j]);
        }
    }

    int m;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            for(m=0;m<2;m++)
            {
                C[i][j]+=A[i][m]*B[m][j];
            } 
        }
    }
    printf("矩阵A与矩阵B相乘的结果数组C为:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d ",C[i][j]);
        }
        printf("\n");
    }
    return 0;
}

运行结果如下:

img


原理就是矩阵乘法,这个可以百度下,有不清楚的地方可以问我

#include<stdio.h> //头文件
int main()//主函数
{
int A[4][3]={0},B[3][4]={0}, C[3][3]={0};//定义三个矩阵

printf("请输入三行两列的矩阵A:\n");
int i,j;
for(i=1;i<=3;i++)
{
for(j=1;j<=2;j++)
{
scanf("%d",&A[i][j]);//输入矩阵a
}
}
printf("请输入两行三列的矩阵B:\n");
for(i=1;i<=2;i++)
{
for(j=1;j<=3;j++)
{
scanf("%d",&B[i][j]);//输入矩阵b
}
}

int m;
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
for(m=1;m<=3;m++)
{
C[i][j]+=A[i][m]*B[m][j];//矩阵c=矩阵A*矩阵B

  } 
}
}
printf("矩阵A与矩阵B相乘的结果数组C为:\n");
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
printf("%d ",C[i][j]);//输出结果
}
printf("\n");
}
return 0;
}