所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
多维数组
有时需要追踪记录数组中的相关信息。
可用 Visual Basic 声明
多维数组。
例如,下面的
语句声明了一个过程内的 10 × 10 的二维数组。
Static MatrixA (9,9) As Double
可用显式下界来声明两个维数或两个维数中的任何一个:
Static MatrixA (1 To 10,1 To 10) As Double
可以将所有这些推广到二维以上的数组。例如:
Dim MultiD (3,1 To 10,1 To 15)
这个声明建立了三维数组,大小为 4 × 10 × 15。
元素总数为三个维数的乘积,为 600。
注意
定义
一维数组是最简单的数组,其逻辑结构是线性表。要使用一维数组,需经过定义、初始化和应用等过程。
数组声明
在数组的声明格式里,“数据类型”是声明数组元素的数据类型,可以是java语言中任意的数据类型,包括简单类型和结构类型。“数组名”是用来统一这些相同数据类型的名称,其命名规则和变量的命名规则相同。
数组声明之后,接下来便是要分配数组所需要的内存,这时必须用运算符new,其中“个数”是告诉编译器,所声明的数组要存放多少个元素,所以new运算符是通知编译器根据括号里的个数,在内存中分配一块空间供该数组使用。利用new运算符为数组元素分配内存空间的方式称为动态分配方式。
二维数组
定义
前面介绍的数组只有一个
下标,称为一维数组, 其数组
元素也称为单下标
变量。在实际问题中有很多量是二维的或多维的, 因此C语言允许构造
多维数组。
多维数组
元素有多个
下标, 以标识它在数组中的位置,所以也称为多下标
变量。本小节只介绍二维数组,
多维数组可由二维数组类推而得到。二维数组类型说明的一般形式是:
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]
二维数组在概念上是二维的,即是说其
下标在两个方向上变化, 下标
变量在数组中的位置也处于一个平面之中, 而不是象一维数组只是一个
向量。但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放
二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。在C语言中,
二维数组是按行排列的。在如上中,按行顺次存放,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个
元素也是依次存放。由于数组a说明为
元素的表示方法
其中下标应为整型常量或整型表达式。例如:a[3][4] 表示a数组三行四列的
元素。
下标
变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取
下标的最大值; 而数组
元素中的下标是该元素在数组中的位置标识。前者只能是
常量, 后者可以是
常量,
变量或
表达式。
一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。
课程 成绩
姓名Math C DBASE
张 80 75 92
王 61 65 71
李 59 63 70
赵 85 87 90
周 76 77 85
初始化
1.按行分段赋值可写为static int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };
2.按行连续赋值可写为static int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85 };
这两种赋初值的结果是完全相同的。
void main()
{
int i,j,s=0,l,v[3];
static 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++)
s=s+a[j];
v=s/5;
s=0;
}
l=(v[0]+v[1]+v[2])/3;
printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",l);
}
初始化的额外说明
对于二维数组初始化赋值还有以下说明:
static int a [3][3]={{0,1},{0,0,2},}; 赋值后的
元素值为 0 1 00 0 23 0 0
2.如对全部
元素赋初值,则第一维的长度可以不给出。
例如:static int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以写为:static int a[][3]={1,2,3,4,5,6,7,8,9};
分解
根据这样的分析,一个
二维数组也可以分解为多个一维数组。C语言允许这种分解有二维数组a[3][4],可分解为三个一维数组,其数组名分别为a[0],a[1],a[2]。对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个
元素,例如:一维数组a[0]的元素为a[0][0],a[0][1],a[0][2],a[0][3]。最后必须强调的是,a[0],a[1],a[2]不能当作
下标
变量使用,它们是数组名,不是一个单纯的下标变量。
初始化赋值的一般形式为:static类型说明符数组名[
常量
表达式]={值,值……值}; 其中static表示是静态存储类型, C语言规定只有静态存储数组和外部存储数组才可作初始化赋值(有关静态存储,外部存储的概念在第五章中介绍)。
在{ }中的各数据值即为各
元素的初值, 各值之间用逗号间隔。例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;