我正在尝试一种基于公制的算法,称为taxicab metric。然后我的目标是创建一个简单的例子,你有一个简单的3x3矩阵,在第一个位置你有1.从那里你计算其他位置的距离,如下:
1 2 3
2 3 4
3 4 5
为此,我创建了以下代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int matrix[3][3]={1,0,0,0,0,0,0,0,0}, i, j;
for ( i=0; i<3; i++)
{
for( j=0; j<3; j++)
matrix[i][j]= abs(i-1)+ abs (j-1)+1;//taxicab algorithm
printf("%d ",matrix[i][j]);//prints the matrix
printf("\n");
}
return 0;
}
然而,输出是
0
0
3
我不清楚为什么会这样。为什么它只打印第一列???为什么1变为0?
答案 0 :(得分:3)
语法错误,第二个for
循环没有括号。这对于单行语句是可以的,但没有括号if, for, while, etc
,只适用于它后面的第一行(直到分号)。在多行for
循环中添加括号:
for (i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
matrix[i][j] = abs(i-1) + abs(j-1) + 1; //taxicab algorithm
printf("%d ",matrix[i][j]); //prints the matrix
}
printf("\n");
}
在你的代码中,这导致不经常调用print语句。
(我实际上建议在所有for
循环中始终使用括号,因此大多数if
语句都是这样的)