陣列轉置
阿新 • • 發佈:2019-01-03
多種方法實現陣列轉置:
指標,陣列…
//二維陣列實現轉置 #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); } } }