为什么这个矩阵乘法代码不起作用

时间:2016-03-21 18:25:59

标签: c++ c arrays multidimensional-array matrix-multiplication

#include<stdio.h>
#include<conio.h>
int main()
{
int ar1[3][3] = {{1,0,0},{0,1,0},{0,0,1}};
int ar2[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int ar3[3][3];
int i,j,k;
for(i=0;i<3;i++)
{
    ar3[i][j] = 0;
    for(j=0;j<3;j++)
    {
        for(k=0;k<3;k++)
        {
            ar3[i][j] = ar3[i][j]+(ar1[i][k]*ar2[k][j]);
        }
    }
}
for(i=0;i<3;i++)
{
    for(j=0;j<3;j++);
    printf("%d\t",ar3[i][j]);
}
getch();
return 0;
}

当我在Dev C ++中编译代码时,它没有给出任何错误但是无法运行并且应用程序停止工作。这有什么不对吗?

2 个答案:

答案 0 :(得分:6)

在线

ar3[i][j] = 0;

j仍然是垃圾,所以你得到未定义的行为,这可能导致不同类型的错误 - 错误的结果,段错误,在某些罕见的情况下它甚至可能按预期工作。< / p>

将该行移到第二个循环中。

答案 1 :(得分:1)

您应将arr3[i][j]初始化为0 int arr3[i][j]={0};。同时在显示乘法矩阵时,您使用j关闭了第二个循环。不要关闭,否则你将无法获得所需的输出。我纠正了。希望这个解决你的问题。

#include<stdio.h>
#include<conio.h>
int main()
{
int ar1[3][3] = {{1,0,0},{0,1,0},{0,0,1}};
int ar2[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int ar3[3][3] = {0}; // here goes initialization
int i,j,k;
for(i=0;i<3;i++)
{
  for(j=0;j<3;j++)
  {
    for(k=0;k<3;k++)
    {
        ar3[i][j] = ar3[i][j]+(ar1[i][k]*ar2[k][j]);
    }
  }
}
for(i=0;i<3;i++)
{
  for(j=0;j<3;j++)
    {
    printf("%d\t",ar3[i][j]);
    }
  printf("\n");
}
getch();
return 0;
}