Программа умножения матриц - PullRequest
0 голосов
/ 21 апреля 2019

В приведенном ниже коде показана ошибка сегментации.
Ошибка преобладает
Пробовал много изменений, но бесполезно

#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 Ответ

2 голосов
/ 21 апреля 2019

Ошибка 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, это должно бытьрегистр для количества строк и столбцов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...