📌  相关文章
📜  教资会网络 | UGC NET CS 2016 年 8 月 – II |问题 44(1)

📅  最后修改于: 2023-12-03 15:10:15.428000             🧑  作者: Mango

教资会网络 | UGC NET CS 2016 年 8 月 – II |问题 44

简介

本题是 UGC NET CS 2016 年 8 月 – II 的编程题,要求编写一个 C 语言程序,实现矩阵的转置。本程序需要处理的矩阵是由动态分配的二维数组表示的。这是一道典型的二维数组题目。

问题描述

编写一个程序,输入一个 $n \times m$ 的矩阵,程序将矩阵转置,输出转置后的矩阵。

思路分析

要将矩阵转置,我们只需要把矩阵的行和列互换即可。具体实现时,我们可以利用一个新的 $m \times n$ 的数组来存储转置后的矩阵。然后利用双重循环,依次将原矩阵中的每个元素复制到新矩阵中对应位置即可。

代码实现
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, m, i, j;
    int **matrix, **transpose;

    // 读取矩阵的大小
    printf("请输入矩阵的行数和列数:");
    scanf("%d %d", &n, &m);

    // 分配原矩阵的空间
    matrix = (int **)malloc(n * sizeof(int *));
    for (i = 0; i < n; i++)
        matrix[i] = (int *)malloc(m * sizeof(int));

    // 分配转置矩阵的空间
    transpose = (int **)malloc(m * sizeof(int *));
    for (i = 0; i < m; i++)
        transpose[i] = (int *)malloc(n * sizeof(int));

    // 读入原矩阵
    printf("请输入矩阵的各个元素:\n");
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            scanf("%d", &matrix[i][j]);

    // 转置矩阵
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            transpose[j][i] = matrix[i][j];

    // 输出转置矩阵
    printf("转置后的矩阵为:\n");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
            printf("%d ", transpose[i][j]);
        printf("\n");
    }

    // 释放内存
    for (i = 0; i < n; i++)
        free(matrix[i]);
    free(matrix);
    for (i = 0; i < m; i++)
        free(transpose[i]);
    free(transpose);

    return 0;
}
运行结果
请输入矩阵的行数和列数:3 4

请输入矩阵的各个元素:
1 2 3 4
5 6 7 8
9 10 11 12
转置后的矩阵为:
1 5 9
2 6 10
3 7 11
4 8 12

以上就是本题的实现代码和运行结果。