如何在C中按顺序填充二维数组而不指定索引?

问题描述 投票:0回答:1

尝试编写拉普拉斯展开式,因为我在大学学习拉普拉斯展开式,但在获取大矩阵的小矩阵时我陷入了困境。这始终是方阵,并且小矩阵始终比大矩阵小 1 个大小,这样:matrix = nxn =>minor = (n-1)x(n-1)。

在代码的这一部分中,我得到了小数,对于矩阵第一行的元素“a”,小数由与元素“a”不在同一行或同一列中的所有值组成:

    float minor[matrixDimension-1][matrixDimension-1];

    for (i = 0; i < matrixDimension; i++) {

        for (j = 1; j < matrixDimension; j++) {
            for (k = 0; k < matrixDimension; k++) {
                
                if(k != i) {
                    minor[j-1][k-1] = matrix[j][k];
                }
            }
        }
        printf("minor: \n");
        printf("%f, ", minor[0][0]);
        printf("%f, \n", minor[0][1]);
        printf("%f, ", minor[1][0]);
        printf("%f, \n", minor[1][1]);
    }

我希望矩阵“次要”始终填充正确的

matrix[j][k]
值,但按照从左到右、从上到下的顺序。 当使用 3x3 矩阵和 2x2 小数进行测试时,小数仅在第一个 for 循环的第一次迭代中是正确的,因为这条线是我能想到的填充小数的最佳行
minor[j-1][k-1] = matrix[j][k];

小矩阵:

{{1,2,3},{4,5,6},{7,8,9}}

预期结果:

minor:
5.000000, 6.000000,
8.000000, 9.000000,
minor:
4.000000, 6.000000,
7.000000, 9.000000,
minor:
4.000000, 5.000000,
7.000000, 8.000000,

我得到了什么:

minor:
5.000000, 6.000000,
8.000000, 9.000000,
minor:
5.000000, 7.000000,
8.000000, 9.000000,
minor:
5.000000, 7.000000,
8.000000, 9.000000,
c matrix multidimensional-array
1个回答
0
投票

请勿使用

k-1
作为
minor
中的索引。您需要一个从
0
开始计数的索引变量,除非您因为
i == k
而跳过一列。因此,使用另一个变量并仅在
if
块中递增它;

#include <stdio.h>

int main() {
    const int matrixDimension = 3;
    float matrix[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    float minor[matrixDimension-1][matrixDimension-1];

    for (int i = 0; i < matrixDimension; i++) {

        for (int j = 1; j < matrixDimension; j++) {
            int kdest = 0;
            for (int k = 0; k < matrixDimension; k++) {
                 if(k != i) {
                    minor[j-1][kdest] = matrix[j][k];
                    kdest++;
                }
            }
        }
        printf("minor: \n");
        printf("%f, ", minor[0][0]);
        printf("%f, \n", minor[0][1]);
        printf("%f, ", minor[1][0]);
        printf("%f, \n", minor[1][1]);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.