矩阵乘法程序

时间:2019-04-21 07:42:29

标签: c

以下代码显示了细分错误。
错误普遍存在
尝试了许多更改,但没有用

#include<conio.h>
#include<stdio.h>
void main()
{
  static int a[100][100],b[100][100],c[100][100]={0};
  int m,n,p,i,j,k;
  printf("Enter no pf rows and colums for matrix A");
  scanf("%d%d",&m,&n);
  for(i=0;i<=m-1;i++)
  {
    for(j=0;j<=n-1;j++)
    {
      printf("enter no.");
      scanf("%d",&a[i][j]);
    }
  }
  printf("Enter no. of column for matrix b");
  scanf("%d",&p);
  for(i=0;i<=n-1;i++)
  {
    for(j=0;j<=p-1;j++)
    {
      printf("enter no.");
      scanf("%d",&b[i][j]);
    }
  }
  for(i=0;i<=m-1;i++)
  {
    for(j=0;i<=p-1;j++)
    {
      c[i][j]=0;
      for(k=0;k<=n-1;k++)
      {
        c[i][j]=c[i][j]+a[i][k]*b[k][j];
      }
    }
  }
  printf(" The resultant matrix is");
  for(i=0;i<=m-1;i++)
  {
    for(j=0;j<=p-1;j++)
    {
      printf("%d\t",c[i][j]);
    }
  printf("\n");
  }

getch();
}

在turbo c ++上尝试过

错误139 细分错误

1 个答案:

答案 0 :(得分:2)

  

错误139细分错误

这是因为

     for(j=0;i<=p-1;j++)

必须

    for(j=0;j<=p-1;j++)

当前 j 无休止地增加,因此c[i][j]=0;和其他访问由于不确定的行为(您的分割错误)而不在数组中


其他备注:

  • 要做for(j=0; j < p; j++)是更好的选择,例如与size_t兼容,它是索引的正确类型

  • 我强烈建议您检查您的 scanf 是否成功,例如,您目前不知道是否输入了有效数字

    if (scanf("%d%d",&m,&n)!= 2)
      fprintf(stderr, "invalid numbers");
    else {
    
  • 还要在必要时检查输入值> 0,这对于行数和列数必须如此