0

我正在运行一个基本循环来检查二维数组的上对角线元素的值:

//Check upper diagonal
for (i = 0; i < n; i++){
    for (j = i+1; j<(n-1); j++){
        printf("n: %d i: %d j: %d\n",n, i, j);
        if (myA[i][j] > pow(10,-13)) return 0;
    }
}

但是,这段代码并没有准确地检查我想要的元素。我放置在内循环中的打印语句给出以下输出:

n: 4 i: 0 j: 1
n: 4 i: 0 j: 1
n: 4 i: 0 j: 2
n: 4 i: 1 j: 2

特别具有挑战性的部分是在第一行和第二行之间。似乎 j 在中间循环的第一次迭代之后没有像我预期的那样递增。

为什么我的输出的第二行不显示j: 2

4

1 回答 1

4

你的输出的第二行没有显示j: 2,因为你的循环被return 0. 输出的第二行实际上是对包含此代码的函数的另一个调用的结果。

您可以通过注释掉if内部循环中的语句来轻松测试这一点:

//Check upper diagonal
for (i = 0; i < n; i++){
    for (j = i+1; j<(n-1); j++){
        printf("n: %d i: %d j: %d\n",n, i, j);
        //if (myA[i][j] > pow(10,-13)) return 0;
    }
}
于 2013-10-09T22:10:21.240 回答