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;
}
10-12 14:42