C语言-数组(2)

二维数组的定义

二维数组定义的一般形式:类型说明符  数组名 [常量表达式][常量表达式];

如:定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组,如:

float  a[3][4],b[5][10];

如:int[3][4]说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型,该数组的下标变量共有3×4个,即:

a[0][0],a[0][1],a[0][2],a[0][3]

a[1][0],a[1][1],a[1][2],a[1][3]

a[2][0],a[2][1],a[2][2],a[2][3]

我们可以把二维数组看作是一个特殊的一维数组:它的元素又是一个一维数组。如:可以把a看作一个一维数组,它有三个元素,a[0],a[1],a[2],每个元素又是一个包含四个元素的一维数组。

二维数组在概念上是二维的,但是实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。在一维存储器中存放二维数组有两种方式:一种是按行排列,即放完一行之后顺次进入第二行。另一种是按列排列,即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。

多维数组的定义

定义多维数组:float a[2][2][3];

多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快。

a[0][0][0],a[0][0][1],a[0][0][2],a[0][0][3]

a[0][1][0],a[0][1][1],a[0][1][2],a[0][1][3]

a[0][2][0],a[0][2][1],a[0][2][2],a[0][2][3]

a[1][0][0],a[1][0][1],a[1][0][2],a[1][0][3]

a[1][1][0],a[1][1][1],a[1][1][2],a[1][1][3]

a[1][2][0],a[1][2][1],a[1][2][2],a[1][2][3]

二维数组元素的引用和初始化

一般形式:数组名[常量表达式1][常量表达式2]=[初始化数据];

对二维数组初始化的四种方法:

1.直接分行给二维数组初始化

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

2.可以将所有的数据写在一个花括号内,按数组排列的顺序对各元素赋初值

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

3.可以对部分元素赋初值

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

4.也可以对各行中某一元素赋初值

int a[3][4]={{1},{0,6},{0,0,11}};

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

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

注意事项:如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等价于int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

在定义时可以只对部分元素赋初值而忽略第一维的长度,但应分行赋值

如:int a[][4]={{0,0,3},{},{0,10}};

例:如图一个学习小组有五个人,每个人有三门课的考试成绩,将各个数据保存到二维数组a[5][3]中,并求全组分科的平均成绩和总平均成绩。

bb3cd90a05ef434da5c4791f811b0732.jpg

 1.按行分段赋值可写成:

int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};

2.按行连续赋值可写为:

int a[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};

这两种赋初值的结果是完全相同的。

#include<stdio.h>

void main()

{

int i,j,sum=0,average,v[3];

int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};

for(i=0;i<3;i++)

{

for(j=0;j<5;j++)

{

sum=sum+a[j][i];

v[i]=s/5;

sum=0;

}

average=v[0]+v[1]+v[2]/3;

printf("math:%d\n language:%d\n Foxtrot:%d\n",v[0],v[1],v[2]);

printf("total:%d\n",average);

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值