#include#includeintmain(){int a[2][3]={{1,2,3},{4,5,6}};int b[3][2]={{1,4},{2,5},{3,6}};printf("Original Array A:\n");for(int i =0; i <2; i++){for(int j =0; j <3; j++){printf("%d ", a[i][j]);}printf("\n");}printf("Original Array B:\n");for(int i =0; i <3; i++){for(int j =0; j <2; j++){printf("%d ", b[i][j]);}printf("\n");}int temp[3][2];for(int i =0; i <2; i++){for(int j =0; j <3; j++){
temp[j][i]= a[i][j];}}for(int i =0; i <3; i++){for(int j =0; j <2; j++){
a[j][i]= b[i][j];}}printf("Transpose Array A:\n");for(int i =0; i <3; i++){for(int j =0; j <2; j++){printf("%d ", temp[i][j]);}printf("\n");}printf("Transpose Array B:\n");for(int i =0; i <2; i++){for(int j =0; j <3; j++){printf("%d ", a[i][j]);}printf("\n");}system("pause");return0;}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
方法2:使用指针、函数的模块化设计
#include#include#defineM2#defineN3voidinputArray(int**arr,int m,int n){for(int i =0; i < m; i++){for(int j =0; j < n; j++){printf("Enter Row %d Column %d number: ", i +1, j +1);scanf("%d",&arr[i][j]);}}}// Transpose arrayvoidtransposeArray(int**arr1,int**arr2,int m,int n){for(int i =0; i < m; i++){for(int j =0; j < n; j++){
arr2[j][i]= arr1[i][j];}}}voidoutputArray(int**arr,int m,int n){for(int i =0; i < m; i++){for(int j =0; j < n; j++){printf("%d ", arr[i][j]);}printf("\n");}}intmain(){int**arr1 =(int**)malloc(M *sizeof(int*));for(int i =0; i < M; i++){
arr1[i]=(int*)malloc(N *sizeof(int));}int**arr2 =(int**)malloc(N *sizeof(int*));for(int i =0; i < N; i++){
arr2[i]=(int*)malloc(M *sizeof(int));}printf("Input Array A:\n");inputArray(arr1, M, N);printf("Input Array B:\n");inputArray(arr2, N, M);printf("Original Array A:\n");outputArray(arr1, M, N);printf("Original Array B:\n");outputArray(arr2, N, M);int**arr1new =(int**)malloc(N *sizeof(int*));for(int i =0; i < N; i++){
arr1new[i]=(int*)malloc(M *sizeof(int));}int**arr2new =(int**)malloc(M *sizeof(int*));for(int i =0; i < M; i++){
arr2new[i]=(int*)malloc(N *sizeof(int));}transposeArray(arr1, arr1new, M, N);transposeArray(arr2, arr2new, N, M);printf("Transpose Array A:\n");outputArray(arr1new, N, M);printf("Transpose Array B:\n");outputArray(arr2new, M, N);// Free the memoryfor(int i =0; i < M; i++){free(arr1[i]);free(arr2new[i]);}free(arr1);free(arr2new);for(int i =0; i < N; i++){free(arr2[i]);free(arr1new[i]);}free(arr2);free(arr1new);system("pause");return0;}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
方法3:使用函数指针、函数的模块化设计
#include#include#defineM2#defineN3// Initial Two ArrayvoidinitialArray(int***arr1,int***arr2,int m,int n){*arr1 =(int**)malloc(m *sizeof(int*));for(int i =0; i < m; i++){(*arr1)[i]=(int*)malloc(n *sizeof(int));}*arr2 =(int**)malloc(n *sizeof(int*));for(int i =0; i < n; i++){(*arr2)[i]=(int*)malloc(m *sizeof(int));}}voidinputArray(int***arr,int m,int n){for(int i =0; i < m; i++){for(int j =0; j < n; j++){printf("Enter Row %d Column %d number: ", i +1, j +1);scanf("%d",&(*arr)[i][j]);}}}// Transpose arrayvoidtransposeArray(int***arr1,int***arr2,int m,int n){for(int i =0; i < m; i++){for(int j =0; j < n; j++){(*arr2)[j][i]=(*arr1)[i][j];}}}voidoutputArray(int***arr,int m,int n){for(int i =0; i < m; i++){for(int j =0; j < n; j++){printf("%d ",(*arr)[i][j]);}printf("\n");}}// Free ArrayvoidfreeArray(int***arr1,int***arr2,int m,int n){for(int i =0; i < m; i++){free((*arr1)[i]);}free(*arr1);for(int i =0; i < n; i++){free((*arr2)[i]);}free(*arr2);}voidfunction1(int***arr1,int***arr2,int m,int n,void(*fun[])(int***,int***,int,int)){if(*fun ==&initialArray){initialArray(arr1, arr2, m, n);}if(*fun ==&transposeArray){transposeArray(arr1, arr2, m, n);}if(*fun ==&freeArray){freeArray(arr1, arr2, m, n);}}voidfunction2(char x,char y,int***arr1,int***arr2,int m,int n,int sign,void(*fun[])(int***,int,int)){if(*fun == inputArray && sign ==0){printf("Input Array %c:\n", x);inputArray(arr1, m, n);printf("Input Array %c:\n", y);inputArray(arr2, n, m);}if(*fun == outputArray && sign ==0){printf("Original Array %c:\n", x);outputArray(arr1, m, n);printf("Original Array %c:\n", y);outputArray(arr2, n, m);}if(*fun == outputArray && sign ==1){printf("Transpose Array %c:\n", x);outputArray(arr1, n, m);printf("Transpose Array %c:\n", y);outputArray(arr2, m, n);}}intmain(){void(*callFunc1[3])(int***,int***,int,int)={initialArray, transposeArray, freeArray};void(*callFunc2[2])(int***,int,int)={inputArray, outputArray};int**arr1 =NULL;int**arr2 =NULL;int**arr1new =NULL;int**arr2new =NULL;function1(&arr1,&arr2, M, N,&callFunc1[0]);function1(&arr2new,&arr1new, M, N,&callFunc1[0]);function2('A','B',&arr1,&arr2, M, N,0,&callFunc2[0]);function2('A','B',&arr1,&arr2, M, N,0,&callFunc2[1]);function1(&arr1,&arr1new, M, N,&callFunc1[1]);function1(&arr2,&arr2new, N, M,&callFunc1[1]);function2('A','B',&arr1new,&arr2new, M, N,1,&callFunc2[1]);function1(&arr1,&arr2, M, N,&callFunc1[2]);function1(&arr1new,&arr2new, N, M,&callFunc1[2]);system("pause");return0;}