1. 程式人生 > >陣列轉置

陣列轉置

多種方法實現陣列轉置:
指標,陣列…

//二維陣列實現轉置
#include <stdio.h>
#define N 10
#define M 10
void TP(int a[][N],int at[][M],int m,int n);
void OUT(int at[][M],int m,int n);
void IP(int a[][N],int m,int n);
int main()
{
	int a[M][N],at[N][M],m,n;
	printf("input m,n:");
	scanf("%d%d",&m,&n);
	IP(a,m,n);
	TP(a,at,m,n);
	OUT(at,n,m);
	return 0;
}
void TP(int a[][N],int at[][M],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			at[j][i]=a[i][j];
		}
	}
}
void OUT(int at[][M],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%3d",at[i][j]);
		}
		printf("\n");
	}
}
void IP(int a[][N],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%3d",&a[i][j]);
		}
	}
}



//二級指標實現轉置
#include <stdio.h>
#define N 10
#define M 10
void TP(int (*a)[N],int (*at)[M],int m,int n);
void OUT(int (*at)[M],int m,int n);
void IP(int (*a)[N],int m,int n);
int main()
{
	int a[M][N],at[N][M],m,n;
	printf("input m,n:");
	scanf("%d%d",&m,&n);
	IP(a,m,n);
	TP(a,at,m,n);
	OUT(at,n,m);
	return 0;
}
void TP(int (*a)[N],int (*at)[M],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			*(*(at+j)+i)=*(*(a+i)+j);//行加列,指標指2次
		}
	}
}
void OUT(int (*at)[M],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%3d",*(*(at+i)+j));
		}
		printf("\n");
	}
}
void IP(int (*a)[N],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%3d",*(a+i)+j);
		}
	}
}

//一級指標實現轉置
#include <stdio.h>
#define N 10
#define M 10
void TP(int *a,int *at,int m,int n);
void OUT(int *at,int m,int n);
void IP(int *a,int m,int n);
int main()
{
	int a[M][N],at[N][M],m,n;
	printf("input m,n:");
	scanf("%d%d",&m,&n);
	IP(*a,m,n);//指標降級
	TP(*a,*at,m,n);
	OUT(*at,n,m);
	return 0;
}
void TP(int *a,int *at,int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			*(at+j*m+i)=*(a+i*n+j);
		}
	}
}
void OUT(int *at,int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%3d",*((at+i*n)+j));
		}
		printf("\n");
	}
}
void IP(int *a,int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%3d",a+i*n+j);
		}
	}
}