目录

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;
}

更多推荐

【行列转换】C语言二维数组入门