2016-09-11 15 views
0

私は行列回ベクトルプログラムを作成しようとしましたが、私はプログラムを実行すると、私は出力がC:マトリックス回ベクトル出力

少し奇妙であることがわかった。ここに私のコードは

#include <stdio.h> 

main() 
{ 
    int i, j, n, a[3][3], b[3], c[3]; 

    n = 3; 

    printf("Matrix A\n"); 
    for (i = 0; i < n; ++i) { 
     for (j = 0; j < n; ++j) { 
      a[i][j] = 10; 
      printf("%d ", a[i][j]); 
     } 
     printf("\n"); 
    } 

    printf("\nMatrix B\n"); 
    for (i = 0; i < n; ++i) { 
     b[i] = 5; 
     printf("%d\n", b[i]); 
    } 

    printf("\nA * B\n"); 

    for (i = 0; i < n; ++i) { 
     for (j = 0; j < n; ++j) { 
      c[i] += a[j][i] * b[j]; 
     } 
    } 

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

です結果はC = {150,150,150}になります。問題はc [0]とc [2]でしかないようです。

+0

は、' C 'はどのあなたは、乗算の結果を追加するために、初期化されていません。 'c [3] = {0、0、0};のように宣言するか、ループで初期化してください。 – Robert

答えて

1

問題はCが変数を0に初期化しないということです。次のようにループがCを計算するための

変更:あなたがC ' `にランダムなゴミで終わるよう

for (i = 0; i < n; ++i) { 
    c[i]=0;  // Add this line so that c[i] can be used in: c[i] += .... 
    for (j = 0; j < n; ++j) { 
     c[i] += a[j][i] * b[j]; 
    } 
} 
関連する問題