转置一个矩阵
将一个三行四列的矩阵转置后变成四行三列的矩阵。
这个问题我打算用二维数组。
首先,我打算随机生成一个数组,并定义一个函数绘制它
void printAnArray(int arr[ROW][COL]){
for(int i=0;i<ROW;i++){
for(int j=0;j<COL;j++){
printf("%4d",arr[i][j]); //%4d tab制表
}
printf("\n");
}
}
怎么实现转置,认清实质:把每一行的元素赋给对应列!
void convertion(int arr[ROW][COL],int arr2[COL][ROW]){
for(int i=0;i<COL;i++){
for(int j=0;j<ROW;j++){
arr2[i][j]=arr[j][i]; //有理解难度!
}
}
for(int i=0;i<COL;i++){
for(int j=0;j<ROW;j++){
printf("%4d",arr2[i][j]);
}
printf("\n");
}
}
综上,
# include <stdio.h>
# include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 4
void printAnArray(int arr[ROW][COL]){
for(int i=0;i<ROW;i++){
for(int j=0;j<COL;j++){
printf("%4d",arr[i][j]);
}
printf("\n");
}
}
void convertion(int arr[ROW][COL],int arr2[COL][ROW]){
for(int i=0;i<COL;i++){
for(int j=0;j<ROW;j++){
arr2[i][j]=arr[j][i];
}
}
for(int i=0;i<COL;i++){
for(int j=0;j<ROW;j++){
printf("%4d",arr2[i][j]);
}
printf("\n");
}
}
int main(){
int array_a[ROW][COL]={};
int array_b[COL][ROW]={};
srand(time(0));
for(int i=0;i<ROW;i++){
for(int j=0;j<COL;j++){
array_a[i][j]=rand()%100;
}
}
printf("Before converted:\n");
printAnArray(array_a);
printf("After convertion:\n");
convertion(array_a,array_b);
return 0;
}
书上还提供了一个思考题:如果行数、列数相等,能否只用一个数组实现?
我觉得,不用操作数组,更改打印的思路:
原来是横着打印,现在竖着打印就行。即原来按列走,现在按行走。
int main(){
for(int i=0;i<ROW;i++){
for(int j=0;j<ROW;j++){
arr[i][j]=rand()%100;
}
}
printAnArray(arr);
printf("After operation:\n");
for(int i =0 ;i<ROW;i++){
for(int j =0;j<ROW;j++){
printf("%4d",arr[j][i]);
}
printf("\n");
}
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JackZhang's Blog!