C语言设计 (第四版) 谭浩强 例6.4
例6.4 将一个二维数组行和列的元素互换,存到另一个二维数组中。例如: a = [ 1 2 3 4 5 6 ] b = [ 1 4 2 5 3 6 ] a=\left[\begin{array}{cccc}1 &2 &3\\4 &5 &6\end{array}\right]\ \ \ \ b=\left[\begin{array}{cccc}1 &4\\2 &5\\3 &6\end{array}\right] a=[142536] b= 123456
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法1:使用数组
#include <stdio.h>
#include <stdlib.h>
int main(){
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");
return 0;
}
方法2:使用指针、函数的模块化设计
#include <stdio.h>
#include <stdlib.h>
#define M 2
#define N 3
void inputArray(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 array
void transposeArray(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];
}
}
}
void outputArray(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");
}
}
int main() {
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 memory
for(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");
return 0;
}