2015-01-10 2 views
0

В настоящее время я изучаю программирование на языке С, чтобы лучше понять матрицы в C. Я пытался сделать эту программу. Кажется, у меня проблемы с выходом, так как вы видите, что программа имеет 3 функции. Первый позволяет вам вводить значения для массива, а затем отображать его. Вторая функция выполняет умножение, а последняя должна отображать вывод умноженной матрицы. Однако выход странный. Вот мой код. Вывод находится чуть ниже кода.Проблема с программированием и умножением матрицы умножения

#include <stdio.h> 

void read_matrix(int m2[][3]) 
{ 
    int i, j; 
    printf("input values for matrix in order of rows first \n"); 
    for (i = 0; i < 3; i++) 
    {  
     for (j = 0; j < 3; j++) 
     { 
      scanf("%d",&m2[i][j]);   
     } 
    } 

    for (i = 0; i < 3; i++) 
    { 
     for (j = 0; j < 3; j++) 
     { 
      printf("%d ", m2[i][j]); 
     } 
     printf("\n"); 
    } 
} 

void multiply_matrices(int m1[][3], int m2[][3] ,int m3[][3]) 
{ 
    int i, j, k; 

    for (i = 0; i < 3; i++){ 
     for (j = 0; j < 3; j++){ 
      for (k = 0; k < 3; k++){ 
       m3[i][j] +=m1[i][k]*m2[k][j]; 
      } 
     } 
    } 
} 

void write_matrix(int m3[][3]) 
{ 
    int i, j; 

    for (i = 0; i < 3; i++) 
    { 
     for (j = 0; j < 3; j++) 
     { 
      printf("%d ", m3[i][j]); 
     } 
     printf("\n"); 
    } 
} 

int main(void) 
{ 
    int matrix1[3][3], matrix2[3][3], matrix3[3][3]; 

    read_matrix(matrix1); 
    read_matrix(matrix2); 

    multiply_matrices(matrix1, matrix2, matrix3); 

    write_matrix(matrix3); 

    return 0; 
} 

и этот выход!

input values for matrix in order of rows first 
1 
2 
3 
2 
2 
2 
1 
2 
2 
1 2 3 
2 2 2 
1 2 2 
input values for matrix in order of rows first 
2 
1 
1 
1 
2 
1 
2 
1 
2 
2 1 1 
1 2 1 
2 1 2 
-858993450 -858993452 -858993451  /*This is the multiplied matrix output!*/ 
-858993450 -858993452 -858993452 
-858993452 -858993453 -858993453 
Press any key to continue . . . 

Я боюсь, что это может быть просто глупая ошибка; если так мне жаль, но я не вижу, где я сейчас ошибаюсь.

Любая помощь была бы принята с благодарностью.

ответ

2

Вы должны инициализировать все элементы матрицы m3 к 0 перед выполнением этой операции

m3[i][j] +=m1[i][k]*m2[k][j]; 

в функции multiply_matrices.

+0

Doh !, Это плохо от меня, я забыл, что некоторое время назад я инициализировал массив и имел проблемы. Думаю, я добавлю возможность теперь выбирать размер матриц вместо 3x3. Спасибо! – InYourDreams

1

Initialize matrix3 в матричной функции умножения, как этот

for (int i=0;i<3;i++) 
{ 
    for (int j=0;j<3;j++) 
    { 
     m3[i][j]=0; 
    } 
} 

После этого, сделать умножение и все будет отлично работать.

+1

Да, это то, что я только что сделал. Спасибо! – InYourDreams

+0

приветствуется boi !!! – farhangdon

Смежные вопросы