📅  最后修改于: 2023-12-03 15:10:15.428000             🧑  作者: Mango
本题是 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
以上就是本题的实现代码和运行结果。