首先,我们分析:
这个问题无非就是把m乘n的值赋值给n乘m,然后再输出不是么?
那我们假设m=3,n=2那就是三行两列,把它转换为2*3,那也就是两行三列。
方便理解我们可以定义两个数组a[3][2],b[2][3]。
a[3][2]里有六个元素分别为:a[0][0] ,a[0][1], a[1][0], a[1][1], a[2][0], a[2][1]
b[2][3]里有六个元素分别为:b[0][0] ,b[0][1] ,b[0][2] ,b[1][0] ,b[1][1] ,b[1][2]
首先我们要对二维数组a[3][2]进行输入才可以进行转换,不然没有值,换个寂寞。那我们就先来编写输入值的代码:
(提示:手机用户可以左划代码部分查看注释)
#include "stdio.h"
#define M 3 //对M进行一个宏定义为3
#define N 2 //同理对N进行宏定义为2
void main(){ //程序的开始
int a[M][N],b[N][M],i,j; //分别定义a,b两个数组并且定义两个整型变量i,j
printf("对该矩阵进行输入:"); //打印输出“对该矩阵进行输入:”
for(i=0;i<M;i++){ //外循环 i值控制数组的行
for(j=0;j<N;j++){ //内循环 j值控制数组的列
scanf("%d",&a[i][j]); //以十进制形式对数组进行赋值
} //内循环结束
} //外循环结束
这里我的main函数的结束花括号没有打,因为程序还没有编写完成,所以让我们来继续编写
赋值完了,让我们以3*2的矩阵形式输出来给我们看看,那我们继续编写:
for(i=0;i<M;i++){ //外循环 i值控制数组的行
for(j=0;j<N;j++){ //内循环 j值控制数组的列
printf("%3d",a[i][j]); //打印输出长度为3以十进制形式的数组
} //内循环结束
printf("\n"); //换行
} //外循环结束
好,写到这里我们完成了一半,下面就是重点,转换部分:
printf("转换成2*3的为:\n"); //为了看的更清楚打印输出这句话
for(i=0;i<N;i++){ //外循环2次i值分别是0 1
for(j=0;j<M;j++){ //内循环3次j值分别是0 1 2
b[i][j]=a[j][i]; //这里将数组a的值赋值给b
} //内循环结束
} //外循环结束
到现在我们已经完成了转换,相信有些同学可能有些迷惑,没关系,我后面来解释,最后让我们输出一下,这个程序就算是完成了,让我们来看一下:
for(i=0;i<N;i++){ //外循环2次i值分别是0 1
for(j=0;j<M;j++){ //内循环3次j值分别是0 1 2
printf("%3d",b[i][j]); //打印输出长度为3以十进制形式的数组
} //内循环结束
printf("\n"); //换行
} //外循环结束
} //main函数结束
这里我们主要讲解一下转换部分,为了方便理解,我用一张表格来把两个数组的下标对应出来
b | a |
---|---|
00 | 00 |
01 | 10 |
02 | 20 |
10 | 01 |
11 | 11 |
12 | 21 |
大家可以逐一对应一下可以发现,a的值完全赋值给了b,这个地方需要大家仔细观察,多加理解。
#include "stdio.h"
#define M 3
#define N 2
void main(){
int a[M][N],b[N][M],i,j;
printf("对该矩阵进行输入:");
for(i=0;i<M;i++){
for(j=0;j<N;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<M;i++){
for(j=0;j<N;j++){
printf("%3d",a[i][j]);
}
printf("\n");
}
printf("转换成2*3的为:\n");
for(i=0;i<N;i++){
for(j=0;j<M;j++){
b[i][j]=a[j][i];
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
printf("%3d",b[i][j]);
}
printf("\n");
}
}
代码放在这里有,同学们可以参考一下,最好自己看一遍,自己打一遍对照着我的程序,但不要完全抄。还是那句话,一遍没看懂,别担心。再看一遍,记得我得启蒙老师说过一句话:编程经不起同学们思考。加油!