利用数组处理批量数据(二维数组)

了解二维数组

 二维数组常称为矩阵。把二维数组写成行和列的排列形式,可以有助于形象地理解二维数组的逻辑结构。

  • 二维数组定义的一般形式为:

类型说明符 数组名[ 常量表达式][ 常量表达式]

 例如:float a[3][4],b[2][3];其定义为 a 为 3x4(3行4列),b为 2 x 3(2行3列)。C语言对二维数组采用这样的定义方式,使得二维数组可被看作一种特殊的一维数组:它的元素又是一个一维数组。例如:可以把a看作一个一维数组,它有3个元素:a[0],a[1],a[2],每个元素又是一个包含4个元素的一维数组,如

a[0]  ………… a[0]a[0]  a[0]a[1]  a[0]a[2] a[0]a[3]
a[1]  ………… a[1]a[0]  a[1]a[1]  a[1]a[2] a[1]a[3]
a[2]  ………… a[2]a[0]  a[2]a[1]  a[2]a[2] a[2]a[3]

 可以把a[0],a[1],a[2]看作3个一维数组的名字。上面定义的二维数组可以以理解为定义了3个一维数组,即相当于:

float a[0][4],a[1][4],a[2][4]

 此处把a[0],a[1],a[2]看作一维数组名。当然在C语言中二维数组元素排列的顺序是按照行存放的,即在内存中先顺序存放第一行的元素,接着再存放第二行的元素。

二维数组的引用
  • 二维数组元素的变现形式为:

    数组名 [ 下标 ][ 下标 ]
    例如:a[2][3]表示a数组中序号为2的行中序号为3的列的元素。其中下标应该是整形表达式,如a[2-1][2*2-1],不能写成a[2,3]、a[2-1,2*2-1]形式。
    数组元素可以出现在表达式中,也可以被赋值,例如:

b[1][2]=a[2][3]/2;

注意:
在引用数组元素时,下标值应在已定义的数组大小的范围内。经常在这个问题上出现错误。例如:

int a[3][4];//定义a为3x4的二维数组
……
a[3][4]=3;//不存在a[3][4]元素

其中数组a可用的“行下标”的范围为0~2, "列下标"的范围为0~3。我们需要区分在定义数组时用的a[3][4]和引用元素时的a[3][4]的区别。

二维数组的初始化

可以用“初始化列表”对二维数组初始化。
(1)分行给二维数组赋初值。例如:

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

这种赋初值方法比较直观,把第1个花括号内的数据给第1行的元素,第2个花括号内的数据给第2行的元素……即按行赋初值。
(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

效果和(1)相同,但是(1)比较好,一行对一行,界限清楚。(2)容易遗漏而且不容易检查。
(3)可以对部分元素赋初值。例如:

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

赋值后数组各元素为:
1  0  0  0
5  0  0  0
9  0  0  0

也可以对各行中的某一元素赋初值,例如:

int a[3][4]={{1},{2,9},{1,1,2}};
初始化后的数组元素为:
1  0  0  0
2  9  0  0
1  1  2  0

也可以对某几行元素赋初值:

这是对第三行不赋值:
int a[3][4]={{1},{5,6}};
初始化后的数组元素为:
1  0  0  0
5  6  0  0
0  0  0  0

那么对第二行不赋值:
int a[3][4]={{1},{},{9}};

(4)如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。例如:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

等价于,当然系统会根据数据总个数和第二维的长度算出第一维的长度。(数据一共12个元素,每行四列,可以确定行数为3。)
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
在定义时也可以对部分元素赋初值而省略第一维的长度,但是一个分行赋初值。例如:

int a[][4]={{0,0,3},{},{0,10}};
初始化后的数组元素为:
0  0  3  0
1  0  0  0
1 10  0  0
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

注定暴富

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值