我正在尝试使用for loops进行矩阵乘法,并且我遇到了一个错误,"数组下标不是整数",我可以得到一些帮助。
#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 togethern");
printf("%.3ft%.3ft%.3fn",result[0][0],result[0][1],result[0][2]);
printf("%.3ft%.3ft%.3fn",result[1][0],result[1][1],result[1][2]);
printf("%.3ft%.3ft%.3fn",result[2][0],result[2][1],result[2][2]);
system("PAUSE");
return 0;
}
订阅或数组索引需要为 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
float i, j, k;
必须是:
int i, j, k;
(或任何其他整数类型),因为您只能使用数组索引的整数值。
result = result + Matrix_1[i][k] * Matrix_2[k][j];
^ ^ have to be integers