题目要求
有一个2 × 3的矩阵,将之转置为3 × 2的矩阵,并显示出这个转置后的矩阵。
如:
转置后:
先用两个数组的方法解决一下题目
代码(定义两个数组)
#include <stdio.h> int main() { //根据题目要求,建立两个二维数组 //arr存储转置前的矩阵,num存储转置后的矩阵 int arr[2][3] = { {1,2,3},{4,5,6} }; int num[3][2]; //row-行号下标,col-列号下标 int row, col; //将原来的矩阵打印出来 printf("2*3:\n"); for (row = 0; row < 2; row++) { for (col = 0; col < 3; col++) { printf("%2d", arr[row][col]); } printf("\n"); } //将转置的矩阵存进数组num for (row = 0; row < 3; row++) { for (col = 0; col < 2; col++) { num[row][col] = arr[col][row]; } } //打印出新的矩阵 printf("3*2:\n"); for (row = 0; row < 3; row++) { for (col = 0; col < 2; col++) { printf("%2d", num[row][col]); } printf("\n"); } return 0; }
运行结果图(定义两个数组)
接下来再用一个数组的方法解决一下题目
代码(定义一个数组)
#include <stdio.h> int main() { //因为原矩阵为2*3,新矩阵为3*2,总共要占用3行3列 //故建立数组时,定义为arr[3][3],防止出现数组越界的情况 int arr[3][3] = { {1,2,3},{4,5,6},{0,0,0} }; int row,col; printf("2*3:\n"); for(row = 0; row < 2; row++) { for (col = 0; col < 3; col++) { printf("%2d", arr[row][col]); } printf("\n"); } printf("3*2:\n"); for (col = 0; col < 3; col++) { for (row = 0; row < 2; row++) { printf("%2d", arr[row][col]); } printf("\n"); } return 0; }
运行结果图(定义一个数组)
简易思路图解
小结
题目的关键点在于理解二维数组的下标,并且熟悉了解二维数组的行和列。
使用数组的时候更要注意数组越界的问题,如果出现了数组越界,打印出来的值将是不确定值。