第六章数组
- 格式:doc
- 大小:65.50 KB
- 文档页数:6
C++程序设计第6章数组单个变量只能存放一个数据值。
当程序中要处理一组相同类型、彼此相关的一组数据时,单个变量就不适合了,就需要一种特殊的数据结构来处理,这就是数组。
数组(array)是一种派生类型。
一个数组能同时存放多个数据值,并能对每个数据进行访问。
本章将介绍一维数组、二维数组和字符数组的定义及使用。
6.1 一维数组一个数组(array)是由相同类型的一组变量组成的一个有序集合。
数组中的每个变量称为一个元素(element),所有元素共用一个变量名,就是数组的名字。
数组中的每个元素都有一个序号,称为下标(index)。
访问一个元素就可以用数组名加下标来实现。
数组必须先定义后使用。
6.1.1 一维数组的定义一维数组就是具有一个下标的数组。
定义一个数组有3个要素:类型、名称与大小。
语法格式为:<数据类型> <数组名> [<常量表达式>]其中,<数据类型>确定了该数组的元素的类型,可以是一种基本数据类型,也可以是已定义的某种数据类型。
<数组名>是一个标识符,作为数组变量的名字。
方括号中的<常量表达式>必须是一个正整型数据,其值为元素的个数,即数组的大小或长度。
注意这里的方括号[]表示数组,而不是表示可缺省内容。
例如,下面定义了三个不同类型的数组:int a[5]; //定义了一个int数组afloat b[20]; //定义了一个float数组bdouble c[5]; //定义了一个double数组c对于上面数组a,元素类型为int,a是数组名,方括号中的10表示数组的长度,即该数组包含了5个元素,分别是a[0]、a[1]、a[2]、a[3]、a[4]。
如果一个数组有n个元素,那么数组中元素的下标从0开始到n-1。
具有相同类型的数组可以在一条说明语句中定义。
例如:int a1[5], a2[4]; //同时定义两个整型数组具有相同类型的单个变量和数组也可以在一条语句中定义。
第六章数组学习和解题要点1.要学习和掌握C语言的数组问题,首先必须形成这么一个观念,当用数组定义语句:[存储类型] 数据类型数组名[长度];定义一个数组时,表明请求计算机在内存开辟一个大的空间,该空间的名字即为数组名,同时数组名也是该空间在内存的起始地址。
空间的大小由“长度”决定,因此“长度”必须是正整常数明确确定。
即使是N,该N也必须在前面的#define N中明确指明是多少。
该空间可放“长度”个同一类型的数据。
放什么样的数据由数据类型指定。
如:int a[10]; 表明内存地址为a 放10个整数,每个小空间为a[0],a[1],……,a[9]a↘2. 有的想用下面的方法定义任意大小的数组:int n;scanf(“%d”,&n);int a[n];认为从键盘输入一多少大整数给n,则就定义多少大的数组。
这也是错误的。
因为C语言规定,执行语句以后,就不能再出现定义语句。
这种根据程序的需要随时申请空间的称为“动态数据结构”,要用以后的结构类型和指针来解决。
3.可在定义数组的同时,马上就赋初值。
也可由初值的个数决定数组的大小。
如:int a[]={1,2,3,4,5,6,7,8,9,10};4.对数值型的数组操作,只能一个元素一个元素的使用,每一的元素的使用都可以看成一个变量的使用,称之为带下标的变量,而决不允许用数组名。
如 a[i] 当i为多少时即为那一个元素。
在程序中要时时注意现在是对那一个元素操作,如在教材中的“冒泡排序法”和“选择排序法”的程序中要注意现在下标是那一个元素。
注意:定义中的int a[10] 表示共10个元素,而程序中的a[10]表示带下标的变量。
5.二维数组的定义与一维一样,必须有二个正整常数明确确定,我们可以看成多少行和多少列个元素,如果在定义数组的同时赋初值,则第一维的长度可以省略。
无论如何,第二维的长度决不能缺省。
6.对数值型的二维数组,也只能一个元素一个元素的使用,这时一定要二个下标,表示那一行那一列的元素。
第6章数组
知识要点
数组和记录的概念、分类
数组的声明和记录的定义
数组的使用方法
学习任务
了解数组的概念和分类
理解数组的功能
掌握数组的定义、声明及使用方法
6.1 数组的概念
Visual Basic中的数组和数学中数组的概念基本类似,都是由一批互相联系的、有一定顺序的数据组成的集合。
与数学中的数组不同的是,Visual Basic中的数组必须先声明,然后才能在程序中使用。
一个数组中的所有数据,称为该数组的数组元素。
6.2 常规数组
常规数组,即大小固定的数组,也就是说常规数组中包含的数组元素的个数不变,它总是保持同样的大小,占有的存储空间当然也就保持不变。
6.2.1 常规数组的声明
语法:
{Dim|Static|Public|Global|Private}< 数组名>[类型说明符]([下界] To 上界[,[下界] To 上界] [,...])[As < 类型说明词>]
功能:
声明常规数组的数组名、维数、上下界及其类型。
说明:
1.数组名与变量名命名规则相同。
2.数组元素在上下界内编号是联续的,上下界的范围不超过LONG数据所表示的数
的范围。
例:DIM COUNT(1 TO 15) AS INTEGER :一维整型数组,共有15个元素,即COUNT(1)-COUNT(15)
DIM SUM&(10 TO 20):
4.数组元素下界可以省略,默认为0
例:DIM COUNT(15) AS INTEGER :COUNT(0)-COUNT(15)共16个元素。
设置OPTION BASE 1 则数组下标默认值为1。
OPTION BASE 0则数组下标默认值为0。
说明:
1.该语句必须在模块顶部的声明中使用,在数组声明语句之前,只影响本模块中定
义的数组。
2.一个模块中只能出现一次。
3.OPTION BASE 对ARRAY函数不起作用,即ARRAY函数创建的数组,下标的下
界始终为0
例1:
数组函数:
1.ARRAY函数:
语法:ARRAY(元素列表)
功能:求一V ARIANT 型数组。
说明:
1.
2.
3
例:
2.下界函数LBOUND()
语法:LBOUND(变量[,维数])
功能:求数组指定维数的最小下标。
说明:
例:
DIM A(1 TO 100,-3 TO 4)
?LBOUND(A,1)
?LBOUND(A,2)
3.上界函数UBOUND()
语法:UBOUND(变量[,维数])
功能:求数组指定维数的最大下标。
说明:
例:
DIM A(1 TO 100,-3 TO 4)
?UBOUND(A,1)
?UBOUND(A,2)
提示:
具有两个或两个以上序号的数组称为多维数组。
例:DIM CJ(1 TO 50,1 TO 6)
DIM MATRI(9,9) AS DOUBLE
若默认下界为0,则以上是10*10的矩阵MA TRI(0,0)-MATRI(9,9) DIM M(3,1 TO 10,1 TO 15)是一个三维数组,元素个数为4*10*15个。
一般用到二维。
6.2.3 数组数据的输入和输出
因为数组元素下标的顺序在其上下界的范围内是连续的,所以我们可以使用循环语句来控制数组数据的输入和输出。
例2:单循环
例3:双循环
例3-2:输出矩阵
6.2.4 包含其他数组的数组
可以在一个数组中包含其他已声明的数组,被包含的数组的类型可以相同也可以不同,如果不同,则必须将此数组声明为Variant数据类型。
6.3 动态数组
动态数组就是能够随时调整数组的大小的数组。
可以节省内存,也方便使用。
6.3.1 动态数组的声明
语法:
{Dim|Static|Public|Private}<数组名>[类型说明符]()As[< 类型说明词>]
功能:
声明动态数组的数组名及其类型。
说明:与常规数组相同。
例:DIM DYNARRAY() AS INTEGER
或DIM DYNCOUNT&()
6.3.2 为动态数组分配实际可用空间
语法:
ReDim [Preserve] <数组名>([下界] To 上界[,[下界] To 上界][,. . .])
功能:
声明动态数组的维数和上下界范围,为动态数组分配实际可用空间。
说明:
1.REDIM 语句只能出现在过程中。
2.对于每一维数,REDIM 能够改变上下界,达到改变数组元素个数的目的,但,数组的
维数不能改变。
Option Base 1
Private Sub Form_Activate()
Dim m%()
ReDim m(5)
For i = 1 To 5
m(i) = i
Next i
Print UBound(m, 1), LBound(m, 1)
For i = 1 To 5
Print m(i);
Next i
Print
ReDim m(3)
Print UBound(m, 1), LBound(m, 1)
For i = 1 To 3
Print m(i);
Next i
End Sub
思考与练习
填空题
根据占用内存方式的不同,可将数组分为和
两种类型。
数组元素下标的下界默认为是,如要想改变其默认值,应使用语
句。
简答题
什么是数组?什么是数组元素?
数组数据的输入和输出常使用什么语句进行控制?
使用动态数组有什么优点?
要想保留动态数组中的数据应使用什么关键字?此时能改变
最后一维的上、下界吗?能改变其他维的上、下界吗?能改
变数组的维数吗?如不保留动态数组中的数据,能改变最后
一维的上、下界吗?能改变其他维的上、下界吗?能改变数
组的维数吗?
什么是用户自定义数据类型?用户自定义数据类型又叫做什
么数据类型?可以在过程内部定义用户自定义数据类型吗?
全局型的用户自定义类型数据和用户自定义类型数据的变量
分别应在什么地方声明?
编程题
声明一个有20个元素的一维数组A,使用InputBox函数为其所有元素赋值,然后
将其所有元素的值及其下标显示出来。
定义一描述教师情况的用户自定义类型数据Teacher,其中包括姓名、年龄、学科、
工作年限和基本工资五个数据项,然后在窗体的Activate事件中将一包含20名教师的数组T声明为此记录类型,接着使用InputBox函数给数组T中的每个数组元素的各个数据项赋值,最后将其值全部显示到屏幕上。