• C语言二维数组超细讲解


      用一维数组处理二维表格,实际是可行的,但是会很复杂,特别是遇到二维表格的输入、处理和输出。

      在你绞尽脑汁的时候,二维数组(一维数组的大哥)像电视剧里救美的英雄一样显现在你的面前,初识数组的朋友们还等什么呢?让我们认识一下这位武功高强的大哥吧!

    1. 双下标变量

      聪明的你一定能够顾名思义了吧,简单举个例子:Array [2] [3]

      Array 是数组名,后面的两个方括号内分别放行下标列下标,这里的行下标和列下标就是所谓的双下标

      这里的下标规则和一维数组的下标规则一模一样:

      1)可以是正的整形变量:

        eg:Array [2] [3]

      (2)可以是字符常量:

        eg:Array [‘A’] [‘B’] = Array [65] [66];(不清楚字符常量的同学可以点击:

    https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E5%B8%B8%E6%95%B0?fromtitle=%E5%AD%97%E7%AC%A6%E5%B8%B8%E9%87%8F&fromid=103245

      (3)可以是有确定值的表达式:

        eg:Array [i+1] [j+2]、Array [ A[1] ] [ A[2] ]

      总而言之,这里的下标分别表示行数列数

      

      接下来和小编一起感受一下双下标变量的威力。

      上下标变量可以使方程组的计算更简单,比如:

      计算一个二元一次线性方程组:

    $$left{egin{matrix}7*x_{1}-4*x_{2}=7\-2*x_{1}+3*x_{2}=-1end{matrix} ight.$$

      它的一般表达式为:

    $$left{egin{matrix}a11*x1+a12*x2=b1\a21*x1+a22*x2=b2end{matrix} ight.$$

      我们可以写出一个该方程组的增广矩阵:

    $$egin{pmatrix}a11& a12& b1\a21& a22& b2end{pmatrix}$$

      运用克拉默法则可得:

    $$x1=(b1*a22-b2*a12)/(a11*a22-a21*a12)$$

    $$x2=(a11*b2-a21*b1)/(a11*a22-a21*a12)$$

      因为矩阵的本质其实就是二维数表,我们可以用二维数组来表示这个方程组的系数。

      我们先定义一个二维数表:a[2][2],和一个一维数表:b[2]

      那么a11可以写成:a[0][0],a12可以写成 a[0][1]a21a22同理。则:

    $$x1=(b[0]*a[1][1]-b[1]*a[0][1])/(a[0][0]*a[1][1]-a[1][0]*a[0][1])$$

      x2道理一样。

      所以,通过双下标变量,我们只需要为a[i][j]b[i]中的元素赋值,便可以轻松解决方程组的问题。

      另外,通过双下标变量来表示一张二维数表,使下标变量的行列下标正好与数据在表格中的位置相对应,形象直观地反映了二维表格。

     

    2. 二维数组定义

      很简单,由双下标变量定义的数组就称为二维数组,双下标变量就是数组的元素。

      二维数组定义的一般形式和一维数组大同小异,只是下表中的常量表达式多了一个(维度加一):

    <类型标识符> <数组名标识符> [<常量表达式>] [<常量表达式>]

      例如:float a [3] [4]b [5] [6];

      这里的float表示二维数组中元素的类型是单精度浮点型,a、b就是给数组取的名字。

      注意:a [3] [4] 千万千万不要写成 a [3 , 4] !

      上面我们把二维数组理解成二维图表,我们也可以将二维数组看成元素是一维数组的一维数组,将维数降低。

      比如 a [3] [4],我们可以把a看成一个一维数组,里面有三个元素:a [0]、a [1]、a[2],每个元素又包含4个元素:

     

    a [0]           a [0] [1] a [0] [2] a [0] [3] a [0] [4]
    a [1] a [1] [1] a [1] [2] a [1] [3] a [1] [4]
    a [2] a [2] [1] a [2] [2] a [2] [3] a [2] [4]


      这种理解方法在数据初始化和用指针表示时显得很方便。

      在C语言中,二维数组中元素排列的顺序是按行存放的,就是说先排列第一行的数据,再排列下第二行的数据,以此类推。如图:

      数组元素可以出现在表达式中也可以被赋值,例如:b [1] [2] = a [1] [3] / 2

      小编在这里想提醒一下:要严格区分定义数组时用的 a [5] [6] 和引用元素时的 a [5] [6] 的区别哦!

    3. 二维数组的初始化

    对二维数组的初始化有一下几种办法:

    (1)分行给二维数组赋值

      这个方法用到了我们前面讲的对二维数组的降维理解,比如:

    int a [2] [3] = {{1, 2, 3}, {4, 5, 6}};

      此语句先将第一行元素依次赋值为:1、2、3,然后将第二行元素赋值为:4、5、6,因此说是按行赋值。

    (2) 可以只有一个花括号,按二维数组元素的排列顺序对各元素依次赋值

      比如:

    int a [2] [3] = {1, 2, 3, 4, 5, 6};

    (3)对部分元素赋初值

      ①

    int a [2] [3] = {{2}, {4}};

      此语句表示只给第一行第一个元素赋值为2,第二行第一个元素赋值为4,而其他元素都为0

      ②

    int a [2] [3] = {{1, 2, 3}};

      此语句表示只给第一行三个元素分别赋值为:1、2、3。

      ③

    int a [2] [3] = {{},{1, 2, 3}};

      此语句表示只给第二行三个元素分别赋值为:1、2、3。

    4)定义数组时对第一维的长度可以不定义,但必须定义第二维的长度

      例:

    int a [] [3] = {1, 2, 3, 4, 5, 6};

      系统会根据输入的总个数分配存储空间,易知这个二维数组有二行;

      再如:

      有关二维数组的知识就讲到这里啦,欢迎小伙伴来交流哦!

      预告:二维数组的应用

      2020-04-21 

      17:26:54

  • 相关阅读:
    Django级联删除的选项
    Mysql远程连接配置
    Node.js中http-server的使用
    MySQL大小写问题
    将Mysql的一张表导出至Excel格式文件
    图像处理之直方图均衡化及C源码实现
    图像处理之双边滤波介绍与源码实现
    图像滤波之高斯滤波介绍
    图像处理之中值滤波介绍及C实现
    图像处理之均值滤波介绍及C算法实现
  • 原文地址:https://www.cnblogs.com/zhugesiying/p/array.html
Copyright © 2020-2023  润新知