2016-04-20 30 views
-3

我想這個代碼,但什麼是錯的如何計算C語言矩陣乘法

 for (i = 0; i < row1; i++) { 
     for (j = 0; j < col2; j++) 
      suma = 0; 
      for (l = 0; l < row2; l++) 
      suma += a[i][l] * bt[l][j]; 
      c[i][j] = suma;    
    } 
    printf("\nMultiplication of 2 matrices:\n"); 
    for (i = 0; i < row1; i++) { 
     for (j = 0; j < col2; j++) 
      printf("%2d", c[i][j]); 
     printf("\n"); 
    } 

當我調試它,它打印出隨機數的行和列(類似-895473)

+0

http://stackoverflow.com/questions/6311309/how-can-i-multiply-two-matrices-in-c –

回答

5

缺少大括號。

for (i = 0; i < row1; i++) { 
    for (j = 0; j < col2; j++) { // added brace 
     suma = 0; 
     for (l = 0; l < row2; l++) { // added brace 
      suma += a[i][l] * bt[l][j]; 
     } // added brace 
     c[i][j] = suma;    
    } // added brace 
} 

在裏面的括號並不是絕對必要但如果你總是使用大括號,你不太可能在將來這個特殊的錯誤。

如果沒有括號,它看起來像這樣,正確的縮進:

for (i = 0; i < row1; i++) { 
    for (j = 0; j < col2; j++) 
     suma = 0; 
    // Note that j = col2, which means that we are accessing 
    // array elements out of bounds, which is an error. 
    for (l = 0; l < row2; l++) 
     suma += a[i][l] * bt[l][j]; 
    c[i][j] = suma;    
} 

這是更顯然是錯誤的。使不太可能錯誤的另一種方式是將環路中的變量:

for (int i = 0; i < row1; i++) { 
    for (int j = 0; j < col2; j++) { 
     double suma = 0; 
     for (int l = 0; l < row2; l++) { 
      suma += a[i][l] * bt[l][j]; 
     } 
     c[i][j] = suma;    
    } 
} 

這樣一來,如果去掉括號,你會因爲j沒有定義得到一個錯誤。 (這在C90中不起作用,但這是近代的古老歷史。)

+0

對不起,但它沒有工作。 – CoolPigeon

+0

@CoolPigeon:適用於我:https://ideone.com/J56xiH –

+0

以下是我的全部代碼:* https://ideone.com/pdBf8K*。如果你能告訴我我做錯了什麼,我將不勝感激。 – CoolPigeon