写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换。
#include <stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define N 3 int main(void) {
int a[N][N]={1,2,3,4,5,6,7,8,9}, b[N][N];//转置前 转置后 puts("转置前"); for (int i = 0; i < N; i++) {//行 for (int j= 0; j < N; j++) {//列 printf("%d ", a[i][j]); } printf("\n"); } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { b[i][j] = a[j][i]; } printf("\n"); } puts("转置后"); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { printf("%d ", b[i][j]); } printf("\n"); } return 0; }
题目解析:
进行数组的行列互...
用户登录可进行刷题及查看答案
进行数组的行列互换,其关键在于数组互换的表达式 ar[i] [j] = ar[j] [i];其次在循环的时候,内层循环不能到达最大列,需要根据此时是第几行的交换来决定循环的次数,否则有可能数组行列交换之后最后又交换回原来的形状了。
#include<stdio.h> void PrintArray(int ar[3][3]) { for(int i=0; i<3; ++i) { for(int j=0; j<3; ++j) { printf("%d ", ar[i][j]); } printf("\n"); } } void ReverseArray(int ar[3][3]) { int tmp; for(int i=0; i<3; ++i) { for(int j=0; j<i; ++j) { if(i != j) //中间数不发生变化 { //交换两个数 tmp = ar[i][j]; ar[i][j] = ar[j][i]; ar[j][i] = tmp; } } } } int main() { int array[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; printf("转置前:\n"); PrintArray(array); //进行数组转置 ReverseArray(array); printf("转置后:\n"); PrintArray(array); return 0; }
登录后提交答案