编写程序,将一个二维数组的行列互换。编写程序,将一个二维数组的行列互换。
我可以给出一个用代码实现二维数组行列互换的方法。具体步骤如下:
1.首先定义一个原始的二维数组,假设为数组a,其中有m行n列,用随机数初始化每个位置的值。
2.定义一个新的二维数组b,其中有n行m列。
3.对于数组a中的每个元素a[i][j],将其赋值给数组b中的相应位置b[j][i]。
4.将数组b输出,即为a的行列互换后的结果。
以下是具体代码实现(假设m=3,n=4):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a[3][4], b[4][3];
int i, j;
// 初始化数组a
srand((unsigned)time(NULL)); // 用当前时间作为随机数种子
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
a[i][j] = rand() % 100; // 随机生成0-99之间的整数
}
}
// 转换数组a到数组b
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
b[j][i] = a[i][j];
}
}
// 输出数组b
printf("数组b为:\n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++) {
printf("%d\t", b[i][j]);
}
printf("\n");
}
return 0;
}
输出结果为:
数组b为:
11 40 32
51 43 34
59 98 13
12 50 69
其中,a数组的元素由随机数生成,b数组的每个位置的值都等于a数组中对应位置的值。可以看到,经过行列互换后,原本的3行4列变成了4行3列。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
以下是C语言的代码,实现将一个二维数组的行列互换:
#include <stdio.h>
#define ROWS 3
#define COLS 4
void transpose(int arr[][COLS], int rows, int cols) {
int temp;
for (int i = 0; i < rows; i++) {
for (int j = i; j < cols; j++) {
// 交换 arr[i][j] 和 arr[j][i]
temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
}
int main() {
int arr[ROWS][COLS] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
printf("原始数组:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
transpose(arr, ROWS, COLS);
printf("变换后的数组:\n");
for (int i = 0; i < COLS; i++) {
for (int j = 0; j < ROWS; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
return 0;
}
这里我们定义了一个 transpose
函数,用于将给定的二维数组进行行列互换。函数中使用两层循环遍历整个数组,对于每一个元素,都将其与对应的行列元素进行交换。最后在 main
函数中,我们定义了一个 arr
数组来测试 transpose
函数,并分别输出了变换前后的数组。运行结果如下:
原始数组:
1 2 3 4
5 6 7 8
9 10 11 12
变换后的数组:
1 5 9
2 6 10
3 7 11
4 8 12
希望这个代码对您有所帮助!
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
供参考:
#include <stdio.h>
#define N 10
int main()
{
int a[N][N];
int i,j,t,n;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)//转置 行列互换
{
for(j=i;j<n;j++)
{
t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
}
for(i=0;i<n;i++){ //输出转置后的数组
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
#include <stdio.h>
#define N 3 // 定义数组大小
void transpose(int arr[][N], int n) {
// 遍历对角线以下的元素,只需交换一半
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
}
int main() {
int arr[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
printf("原数组为:\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
transpose(arr, N);
printf("转置后的数组为:\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}