#include <stdio.h> #define N 3 void convertMethod(int arr[N][N]); void printMethod(int arr[N][N]); int main() { int arr[N][N] = { {1,2,3},{4,5,6},{7,8,9} }; convertMethod(arr); printMethod(arr); system("pause"); return 0; } //二位数组的转置 // 1 2 3 1 4 7 // 4 5 6 转置为2 5 8 // 7 8 9 3 6 9 // 分析arr[0][0] arr[1][1] arr[2][2]不变 //arr[0][1]与arr[1][0] arr[0][2]与arr[2][0] arr[1][2]与arr[2][1]交换 void convertMethod(int arr[N][N]) { //看起来思路没有问题 但实际上忽略了二重循环的影响 //举个例子 当i=2时 arr[2][0]与arr[0][2]又进行了交换 但是要知道早在i=0时 arr[0][2]与arr[2][0]就进行了交换 //思考实验下外层循环 i<N-1 i<N-2会怎么样 //for (int i = 0; i < N; i++) //{ // for (int j = 0; j < N; j++) // { // int temp = arr[i][j]; // arr[i][j] = arr[j][i]; // arr[j][i] = temp; // } //} //再重新仔细分析下 arr[0][1]与arr[1][0] arr[0][2]与arr[2][0] arr[1][2]与arr[2][1] for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { int temp = arr[i][j]; arr[i][j] = arr[j][i]; arr[j][i] = temp; } } } void printMethod(int arr[N][N]) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { printf("%d", arr[i][j]); } printf("\n"); } }
C二维数组的转置
猜你喜欢
转载自www.cnblogs.com/littlelittleprince/p/12297110.html
今日推荐
周排行