2015-05-02 107 views
2

我正在嘗試使用for循環執行矩陣乘法,並且出現錯誤,「數組下標不是整數」請幫助我。「數組下標不是整數」c

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    float Matrix_1[3][3] = {{3.4, 4.4, 1.2},{5.3, 5.7, 2.2},{6.2, -2.4, 0.9}}; 
    float Matrix_2[3][3] = {{7.3, 4.9, 3.7},{-2.4, 4.9, -10.2},{7.3, 5.2, 1.7}}; 
    float i, j, k; 
    float result[3][3]; 

    for (i = 0; i < 1; i++) 
    { 
    for (j = 0; j < 3; j++) 
    { 
     for(k = 0; k < 3; k++) 
     { 
       result = result + Matrix_1[i][k] * Matrix_2[k][j];  
     } 
    } 
    } 

    printf("The result of multiplying the matrices together\n"); 
    printf("%.3f\t%.3f\t%.3f\n",result[0][0],result[0][1],result[0][2]); 
    printf("%.3f\t%.3f\t%.3f\n",result[1][0],result[1][1],result[1][2]); 
    printf("%.3f\t%.3f\t%.3f\n",result[2][0],result[2][1],result[2][2]); 

    system("PAUSE"); 
    return 0; 
} 
+0

' for(i = 0; i <1; i ++)'< - 爲什麼你甚至需要一個循環? –

回答

5

下標或數組索引需要爲int值。因此,改變這種:

float i, j, k; 這樣:int i, j, k;

而且,你已經宣佈result爲3X3矩陣。因此,在將數據存儲到矩陣中時,必須逐個存儲元素。所以,與其這樣:

result = result + Matrix_1[i][k] * Matrix_2[k][j];它改成這樣:result[i][j] = result[i][j] + Matrix_1[i][k] * Matrix_2[k][j];

一兩件事:請初始化result矩陣!在上面的語句中,您正在使用矩陣中元素的值,這可能包含一些垃圾值,並且您可能無法獲得所需的結果。因此,在使用result矩陣之前,請對其進行初始化。

一個簡單的方法:

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

最後一兩件事:你最for loop只運行一次:for (i = 0; i < 1; i++) 也許你想這樣的:for (i = 0; i < 3; i++)

最後,修改後的代碼:http://ideone.com/26GSJa

+0

我不確定你爲什麼改變了工作,但我會問你在uni的感謝你的幫助。 – Jacob

+0

@Jacob:你不明白哪一點? –

+0

昨天我有四個問題,但今天早上我做了更多的編碼,你的解決方案突然變得有意義。我想我只是需要休息一下,謝謝你的解釋,儘管他們幫了很多。 – Jacob

5
float i, j, k; 

必須:

int i, j, k; 

(或任何其它類型的整數),其可以只使用整數值陣列索引。

result = result + Matrix_1[i][k] * Matrix_2[k][j]; 
         ^^ have to be integers 
相關問題