c 语言 编写程序,将一个NxN的方阵A转置后输出。要求使用二维数组的行指针实现。
时间: 2024-02-23 12:58:26 浏览: 78
好的,以下是实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
printf("请输入方阵的阶数n:");
scanf("%d", &n);
int **arr = (int **)malloc(n * sizeof(int *)); // 动态分配行指针
for (int i = 0; i < n; i++)
{
arr[i] = (int *)malloc(n * sizeof(int)); // 动态分配列空间
}
printf("请输入%d个数用于填充方阵:\n", n * n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &arr[i][j]); // 输入方阵元素
}
}
printf("转置前的方阵为:\n");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", arr[i][j]); // 输出原方阵
}
printf("\n");
}
int temp;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
// 交换对称元素
temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
printf("转置后的方阵为:\n");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", arr[i][j]); // 输出转置后的方阵
}
printf("\n");
}
// 释放动态分配的内存
for (int i = 0; i < n; i++)
{
free(arr[i]);
}
free(arr);
return 0;
}
```
这个程序首先通过动态分配行指针和列空间来创建一个NxN的二维数组,并且输入方阵的元素。然后,它输出原始的方阵,将其转置,并输出转置后的方阵。最后,它释放动态分配的内存以避免内存泄漏。
阅读全文