2016-04-20 53 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