目录
1.简介
2.二维数组的声明格式
3.对二维数组元素的输出
4.二维数组的行列转换
4.1思路介绍
4.2代码实现
1.简介
二维数组的交换可以作为动态规划问题的基础,本文将详细讲述二维数组交换问题,以便读者后期更容易理解动态规划问题。
2.二维数组的声明格式
int num[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
如此代码段,声明了一个三行四列的二维数组。我们可以把他理解为一个矩阵。
注意:数组是从0开始的。及元素1对应的是num [0][0];这点和坐标很相似
3.对二维数组元素的输出
这里我们首先用一维数组的元素输出进行类比
我们首先定义一个一维数组然后用这个例子来类比二维数组。我们使用一个变量i来控制数组元素的输出。
int a[3]={1,2,3};for ( i = 0; i < 3; i++){printf("%d",a[i]);}
接下来我将说明二维数组的输出方法
结合下图我们来直观的理解下二维数组的位置关系。我们可以看出i[0][0]是初始的第一排,然后我们把二维数组看成两个一维数组。
如图所示,我们直观看到,我们对二维数组num[i][j]进行遍历需要改变i和j的值。也就是两个for循环进嵌套,外层控制行,内层控制列。代码如下:
int num[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};int i,j;for ( i = 0; i < 3; i++){for ( j = 0; j < 4; j++){printf("%d\t",num[i][j]);}printf("\n\n");}
4.二维数组的行列转换
4.1思路介绍
(1)这里先介绍一下红酒杯交换法 。我们想把A,B两个酒杯内的液体互换,这时候我们需要一个空酒杯C,先把A中液体倒进C,然后把B中液体倒进A,然后在把C中液体倒进B。
(2)同理我们可以利用一个中间变量储存num [1][2]的值然后进行取赋给一个变量,然后在把他的镜像num [2][1]的值赋给他,最后将常量赋值回去。这就完成了互换。
示意图如下:
4.2代码实现
详细解释见注释:
/*实现二维数组的翻转*/#include<stdio.h>int main(int argc, char const *argv[]){int num[3][3]={//声明一个二维数组{1,2,3},{4,5,6},{7,8,9}};int i,n,cunt; //i,n进行行和列的计算,cunt进行承接for (i = 0; i < 3; i++)//打印原数组{for ( n = 0; n < 3; n++){printf("%d ",num[i][n]);}printf("\n");}for ( i = 0; i < 3; i++)//进行行的遍历{for( n = i; n < 3; n++)//进行列的遍历{ cunt=num [i][n]; //对空酒杯赋值num [i][n]=num [n][i];//交换num [n][i]=cunt; //再次赋值交换完毕}} printf("\n\n");for (i = 0; i < 3; i++) //打印输出{for ( n = 0; n < 3; n++){printf("%d ",num[i][n]);}printf("\n");}return 0;}