编一C个程序:将一个任意二维数组转置

如题所述

举例如下的矩阵A:

1 2 3

4 5 6

7 8 9

则经过转置后,即将矩阵的第i行变成了现在的第i列,则原来的矩阵A变为如下矩阵B:

1 4 7

2 5 8

3 6 9

代码:

#include

int main()

{

int n[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};

int i, j, temp;

printf("原始矩阵:\n");

for(i=0; i<3; i++)

{

for(j=0; j<3; j++)

printf("%d ", n[i][j]); /*输出原始矩阵*/

printf("\n");

}

for(i=0; i<3; i++)

for(j=0; j<3; j++)

{

if (j>i)

{ /*将主对角线右上方的数组元素与主对角线左下方的数组元素进行单方向交换*/

temp=n[i][j];

n[i][j]=n[j][i];

n[j][i]=temp;

}

}

printf("转置矩阵:\n");

for(i=0; i<3; i++)

{

for(j=0; j<3; j++)

printf("%d ", n[i][j]); /*输出原始矩阵的转置矩阵*/

printf("\n");

}

return 0;

}

扩展资料:

return 0代表程序正常退出。return是C++预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。

return语句用来结束循环,或返回一个函数的值。

1、return 0,说明程序正常退出,返回到主程序继续往下执行。

2、return 1,说明程序异常退出,返回主调函数来处理,继续往下执行。return 0或return 1对程序执行的顺序没有影响,只是大家习惯于使用return(0)退出子程序而已。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-30

程序流程细致复杂,每个环节都要注意,避免出错。

具体程序如下:

#include"stdio.h"

void main()

{

int a[3][4];

int b[4][3];

int i,j;

int sum;

printf("请输入四个数字:\n");

         for(i=0;i<3;i++)

{

                   for(j=0;j<4;j++)

{

                            scanf("%d",&a[i][j]);

printf("%d\t",a[i][j]);

}

printf("\n");

}

         for(j=0;j<4;j++)

{

                   for(i=0;i<3;i++)

{

b[j][i]=a[i][j];

printf("%d\t",b[j][i]);

}

printf("\n");

}

扩展资料

二维数组的定义如下:

二维数组定义的一般形式是:dataType arrayName[length1][length2],其中,dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。可以将二维数组看做一个 Excel 表格,有行有列,length1 表示行数,length2 表示列数,要在二维数组中定位某个元素,必须同时指明行和列,例如:int a[3][4]。

定义了一个 3 行 4 列的二维数组,共有 3×4=12 个元素,数组名为 a,即:

如果想表示第 2 行第 1 列的元素,应该写作 a[2][1]。

本回答被网友采纳
第2个回答  推荐于2018-03-02
#include <stdio.h>
#define X_max 20//定义数组的最大可以转置范围
#define Y_max 20
//数组输出函数
void output(int Array[][Y_max], int x, int y)//二维数组做形参,应该带列下标,而且要与定义时大小相同
{
int i, j;
for(i=0; i<x; i++)
{
for(j=0; j<y; j++)
{
printf("%d ", Array[i][j]);
}
printf("\r\n");
}
}
//矩阵转置函数
void transpose( int a[][Y_max], int x, int y)//同样注意二维数组下标
{
int i, j;
int temp;

for(i=0; i<x; i++)
{
for(j=i+1; j<y; j++)//关键句
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;

}
}
output(a, y, x);//调用输出数组函数
}

void main()
{
int i, j;
int x, y;
int array[X_max][Y_max]={0};//定义数组,注意要初始化

printf("请输入数组的行数和列数,用逗号隔开\r\n");
scanf("%d,%d", &x, &y);
if(x > X_max && y > Y_max)
{
printf("待转置数组过大,本程序不能满足要求\r\n");
return;
}
else
{
printf("请输入数组元素\r\n");
for(i=0; i<x; i++)
{
for(j=0; j<y; j++)
{
scanf("%d", &array[i][j]);
}
}
}
printf("输出待转置二维数组\r\n");
output(array, x, y);

printf("输出转置后二维数组\r\n");
transpose(array, x, y);
}本回答被提问者和网友采纳