【问题标题】:Initializing a 2d array then transposing it [closed]初始化一个二维数组然后转置它[关闭]
【发布时间】:2013-11-14 01:44:21
【问题描述】:

这里是初学者,我想用 C 语言编写一个程序,用该行的值初始化 8 x 10 矩阵 A[8][10] 的每一行(第一行包含全 0,第二行包含全 1 等)

打印此矩阵后,我想转置它,制作第二个矩阵 B[10][8]

我正在尝试使用嵌套的 for 循环,但我似乎无法接近答案。

【问题讨论】:

    标签: c arrays loops for-loop 2d


    【解决方案1】:

    如果您想在自己的代码中执行此操作,这里有一个示例:

    #include<stdio.h>
    
    #define ROWS 8
    #define COLS 10
    
    int main(int argc, char *argv[])
    {
        int A[ROWS][COLS];
        int B[COLS][ROWS];
        int i,j;
    
        /*populate*/
        for (i=0; i<ROWS; i++)
        {
            for (j=0; j<COLS; j++)
            {
                A[i][j] = 2*i + j;
            }
        }
    
        /*display*/
        printf("=== Original matrix === \n");
    
        for (i=0; i<ROWS; i++)
        {
            for (j=0; j<COLS; j++)
            {
                printf("%3d  ", A[i][j]);
            }
            printf("\n");
        }
    
    
        /*transpose*/
        for (i=0; i<ROWS; i++)
        {
            for (j=0; j<COLS; j++)
            {
                B[j][i] = A[i][j];
            }
        }
    
    
        /*display*/
        printf("\n\n=== Transposed matrix === \n");
    
        for (i=0; i<COLS; i++)
        {
            for (j=0; j<ROWS; j++)
            {
                printf("%3d  ", B[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    

    输出:

    === 原始矩阵 ===

    0 1 2 3 4 5 6 7 8 9

    2 3 4 5 6 7 8 9 10 11

    4 5 6 7 8 9 10 11 12 13

    6 7 8 9 10 11 12 13 14 15

    8 9 10 11 12 13 14 15 16 17

    10 11 12 13 14 15 16 17 18 19

    12 13 14 15 16 17 18 19 20 21

    14 15 16 17 18 19 20 21 22 23

    === 转置矩阵 ===

    0 2 4 6 8 10 12 14

    1 3 5 7 9 11 13 15

    2 4 6 8 10 12 14 16

    3 5 7 9 11 13 15 17

    4 6 8 10 12 14 16 18

    5 7 9 11 13 15 17 19

    6 8 10 12 14 16 18 20

    7 9 11 13 15 17 19 21

    8 10 12 14 16 18 20 22

    9 11 13 15 17 19 21 23

    【讨论】:

    • 这是一个很大的帮助,谢谢。我正在尝试更改 for 循环,因此我将第一行全为 0,然后将下一行全为 1,等等。在 for 循环内部是我可以完成此操作的地方吗?再次感谢
    • 为此,在填充循环中,您需要 A[i][j] = i;
    • 刚刚按照您的评论尝试过。太好了,非常感谢。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2017-01-04
      • 2021-04-04
      • 1970-01-01
      相关资源
      最近更新 更多