当前位置:首页 > 行业动态 > 正文

c语言怎么实现二维数组的转置输入

二维数组的转置是将一个二维数组的行列互换,得到一个新的二维数组,在C语言中,我们可以通过遍历原数组,将元素按照新的顺序放入新的数组中来实现二维数组的转置。

以下是一个简单的C语言实现二维数组转置的示例:

1、我们需要定义一个二维数组,并初始化它,我们定义一个3行4列的二维数组,并给它赋值:

int arr[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

2、我们需要定义一个新的二维数组,用于存放转置后的数据,由于原数组是3行4列的,所以转置后的数组应该是4行3列的,我们可以使用动态内存分配来创建这个新数组:

int rows = 3;
int cols = 4;
int transpose_rows = cols;
int transpose_cols = rows;
int *transpose_arr = (int *)malloc(transpose_rows * transpose_cols * sizeof(int));
if (transpose_arr == NULL) {
    printf("内存分配失败!
");
    return 1;
}

3、接下来,我们需要遍历原数组,并将元素按照新的顺序放入新数组中,我们可以使用两层嵌套循环来实现这个功能:

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        transpose_arr[j * transpose_rows + i] = arr[i][j];
    }
}

这里,外层循环遍历原数组的行,内层循环遍历原数组的列,我们将原数组的元素按照新的顺序放入新数组中,即transpose_arr[j * transpose_rows + i],这样,我们就实现了二维数组的转置。

4、我们需要释放新数组所占用的内存:

free(transpose_arr);

至此,我们就完成了二维数组的转置,以下是完整的代码示例:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int rows = 3;
    int cols = 4;
    int transpose_rows = cols;
    int transpose_cols = rows;
    int *transpose_arr = (int *)malloc(transpose_rows * transpose_cols * sizeof(int));
    if (transpose_arr == NULL) {
        printf("内存分配失败!
");
        return 1;
    }
    int arr[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transpose_arr[j * transpose_rows + i] = arr[i][j];
        }
    }
    for (int i = 0; i < transpose_rows; i++) {
        for (int j = 0; j < transpose_cols; j++) {
            printf("%d ", transpose_arr[i * transpose_cols + j]);
        }
        printf("
");
    }
    free(transpose_arr);
    return 0;
}

运行上述代码,我们可以得到如下输出:

1 5 9 
2 6 10 
3 7 11 
4 8 12 

这就是原二维数组的转置结果。

0