Умножение двух матриц 3х3 в C - PullRequest
5 голосов
/ 15 апреля 2011

Я пытаюсь умножить две матрицы 3х3.Первые 2 цифры в первом и втором ряду являются единственным правильным ответом.Что я делаю неправильно?Является ли материал, который мне нужен, объявлен в mult_matrices?

#include <stdio.h>

void mult_matrices(int a[][3], int b[][3], int result[][3]);
void print_matrix(int a[][3]);

int main()
{
    int p[3][3] = {{1, 2, 3},{4, 5, 6}, {7, 8, 9}};
    int q[3][3] = {{10, 11, 12}, {13, 14, 15}, {16, 17, 18}};
    int r[3][3];

    mult_matrices(p, q, r);
    print_matrix(r);
}

void mult_matrices(int a[][3], int b[][3], int result[][3])
{
    int i, j, k;
    for(i = 0; i < 3; i++)
    {
            for(j = 0; j < 3; j++)
            {
                    for(k = 0; k < 3; k++)
                    {
                            result[i][j] +=  a[i][k] *  b[k][j];
                    }
            }
    }
}

void print_matrix(int a[][3])
{
    int i, j;
    for (i = 0; i < 3; i++)
    {
            for(j = 0; j < 3; j++)
            {
                    printf("%d\t", a[i][j]);
            }
            printf("\n");
    }
 }

Ответы [ 4 ]

8 голосов
/ 15 апреля 2011

Убедитесь, что вы инициализировали r для всех нулей, прежде чем использовать его.

int r[3][3] = { 0 };
7 голосов
/ 15 апреля 2011

Похоже, что вы не инициализируете матрицу result.

т.е.

4 голосов
/ 15 апреля 2011

Одна вещь, которую я заметил, что вы не делаете, это инициализируете ваш массив r [3] [3].Я не уверен, что это корень вашей проблемы, но это вполне может быть.По сути, значения r устанавливаются так, как это было «оставлено» в памяти в этом месте.Иногда они все будут равны 0, но, скорее всего, они не будут.Так что это может быть проблема, с которой вы столкнулись, но даже если это не так, всегда полезно иметь привычку инициализировать все переменные.

1 голос
/ 25 мая 2017
int main(){ 
  int A[3][3],B[3][3],C[3][3],i,j; 
  printf("Please Enter 9 Numbers for First Matrix") 
  for(i=0;i<=2;i++){
    for(j=0;j<=2;j++){ 
      scanf("%d",A[i][j]);
    }
  }
  printf("Please Enter 9 Numbers for Second Matrix") 
  for(i=0;i<=2;i++){ 
    for(j=0;j<=2;j++){ 
      scanf("%d",B[i][j]); 
    }
  } 
  for(i=0;i<=2;i++){ 
    for(j=0;j<=2;j++){ 
      C[i][j]=A[i][j]+B[i][j] 
      printf("%d "C[i][j]); 
    } 
    printf("\n");
  }
}
...