VISUAL BASIC教学课件:第7章 数组_第1页
VISUAL BASIC教学课件:第7章 数组_第2页
VISUAL BASIC教学课件:第7章 数组_第3页
VISUAL BASIC教学课件:第7章 数组_第4页
VISUAL BASIC教学课件:第7章 数组_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章数组7.1概述

数组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。其表示形式:

A(1),A(10)X(1,1),X(1,10),X(2,10)Y(0,0,0),Y(1,2,5)VisualBasic中的数组,按不同的方式可分为以下几类:按数组的大小(元素个数)是否可以改变来分为:静态数组、动态(可变长)数组。按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。按数组的维数可分为:一维数组、二维数组、多维数组。对象数组:菜单对象数组、控件数组。7.2一维数组7.2.1一维数组的声明

Dim数组名([<下界>to]<上界>)[As<数据类型>]或:

Dim数组名[<数据类型符>]([<下界>to]<上界>)例:Dima(1to10)AsInteger‘声明了a数组有10个元素1是下标的下界10是下标的上界数组元数的数据类型与上面声明等价形式:

Dima%(1to10)下标的数据类型是整型说明:1.数组名的命名规则与变量的命名相同。2.数组的元素个数:上界-下界+1。3.缺省<下界>为0,若希望下标从1开始,可在模块的通用部分使用OptionBase语句将设为1。其使用格式是:

OptionBase0|1'后面的参数只能取0或1例如:

OptionBase1'将数组声明中缺省<下界>下标设为14.<下界>和<上界>不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。DimNAsIntegerN=Val(Input(“EnteraNumber=?”))DimA(N)AsInteger×5.如果省略As子句,则数组的类型为变体类型。6.数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是下标大小的顺序,如图5-1所示:7.2.2一维数组元素的引用使用形式:

数组名(下标)

其中:下标可以是整型变量、常量或表达式。例如:设有下面的数组定义:

DimB(10)AsInteger,A(10)AsInteger

则下面的语句都是正确的。

A(1)=A(2)+B(1)+5'取数组元素运算

A(i)=B(i)'下标使用变量

B(i+1)=A(i+2)'下标使用表达式7.2.3一维数组的基本操作

1.可通过循环给数组元素的初值

Fori=1To10 ‘A数组的每个元素值为1 A(i)=1Nexti

2.数组的输入

输入100个数,并存入到数组A中Fori=1To100A(i)=Val(InputBox(“输入A(”&i&“)的值”))Nexti3.求数组中最大元素及所在下标

DimMaxAsInteger,iMaxAsInteger Max=A(1):iMax=1Fori=2To10IfA(i)>MaxThen Max=A(i) iMax=iEndIfNextI4.将数组元素倒置Fori=1To10\2t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNextI7.2.4一维数组的应用一、分类统计

例7.2

在例7.1中如果还要统计0~9,10~19,20~29,….80~89,90~99分数段及100分的学生人。则可另用数组bn来存各分数段的人数,并用bn(0)存0~9分的人数,bn(1)存10~19分的人数,…bn(9)存90~99分的人数,bn(10)存100分的人数。例7.1

编程求某班60个学生某门课程考试的平均成绩及高于平均成绩的学生人数。二、排序问题1.选择法排序算法思想:

1)对有n个数的序列(存放在数组a(n)中),从中选出最小(升序)或最大(降序)的数,与第1个数交换位置;

2)除第1个数外,其余n-1个数中选最小或最大的数,与第2个数交换位置;

3)依次类推,选择了n-1次后,这个数列已按升序排列。<选择法排序流程图(升序)Fori=1Ton-1p=iForj=i+1TonIfa(p)>a(j)Thenp=jNextjtemp=a(i)a(i)=a(p)a(p)=tempNexti选择法排序(升序)的VB程序:2.冒泡法排序(递增)

算法思想:(将相邻两个数比较,小的调到前头)1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;

2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数;

3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。Fori=1Ton-1Forj=1Ton-iIfa(j)>a(j+1)Thentemp=a(j)a(j)=a(j+1)a(j+1)=tempEndifNextjNexti冒泡法排序(升序)的VB程序:例7.3

用随机函数产生50个[10,100)的随机整数,并按照由小到大的顺序打印出来。程序界面如下:7.3二维数组及多维数组7.3.1二维数组的声明声明格式如下:Dim数组名([<下界>]to<上界>,[<下界>to]<上界>)[As<数据类型>]其中的参数与一维数组完全相同。例如:Dima(2,3)AsSingle

二维数组在内存的存放顺序是“先行后列”。例如数组a的各元素在内存中的存放顺序是: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)→(2,1)→a(2,2)→a(2,3)7.3.2二维数组的引用引用形式:

数组名(下标1,下标2)例如:

a(1,2)=10a(i+2,j)=a(2,3)*2在程序中常常通过二重循环来操作使用二维数组元素。

7.3.3二维数组的基本操作二维数组数据的输入2.求最大元素及其所在的行和列3.计算两矩阵相乘4.矩阵的转置二维数组数据的输入ConstN=4,M=5,L=6Dima(1toN,1toM)AsInteger,iAsInteger,jAsInteger,k%1.给二维数组a输入数据的程序段如下:

Fori=1to4Forj=1to5A(i,j)=Val(InputBox("a("&I&","&j&")=?"))NextjNexti2.求最大元素及其所在的行和列用变量max存放最大值,row,column存放最大值所在行列号

Max=a(1,1):row=1:Column=1Fori=1ToNForj=1ToMIfa(i,j)>a(row,Column)ThenMax=a(i,j)row=iColumn=jEndIfNextjNextiPrint"最大元素是";MaxPrint"在第"&row&"行,";"第"&Column&"列"3.计算两矩阵相乘(略)4.矩阵的转置方阵的转置的程序代码如下:Fori=1

ToM

Forj=1

ToI-1Temp=a(i,j)a(i,j)=a(j,i)a(j,i)=TempNextjNexti设A是M*N的矩阵,要重新定义一个N*M的二级数组B,将A转置得到B的程序代码如下:Fori=1

ToM

Forj=1

ToNb(j,i)=a(i,j)NextjNexti

例7.4

设某一个班共有60个学生,期末考试5门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学号和各门课成绩。(奖学金评定标准是:总成绩超过全班总平均成绩20%发给一等奖学金,超过全班总平均成绩10%发给二等奖学金。)

7.3.5多维数组的声明和引用定义多维数组的格式如下:Dim数组名([<下界>]to<上界>,[<下界>to]<上界>,……)[As<数据类型>]例如:

Dima(5,5,5)AsInteger声明a是三维数组

Dimb(2,6,10,5)AsInteger'声明b是四维数组7.4动态数组动态数组:在声明时未给出数组的大小。定长数组是在程序编译时分配存储空间,而动态数组是在程序执行时分配存储空间。7.4.1动态数组的建立及使用

建立动态数组包括声明和大小说明两步:

1.在使用Dim、Private或Public语句声明括号内为空的数组。格式:Dim|Private|Public数组名()As数据类型例:Dima()AsInteger2.在过程中用ReDim语句指明该数组的大小。格式:ReDim[Preserve]数组名(下标1[,下标2…])

Preserve参数:保留数组中原来的数据例:RedimA(10)RedimPreserveA(20)说明:(1)ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。

(2)定长数组声时中的下标只能是常量,而动态数组ReDim语句中的下标是常量,也可以是有了确定值的变量。例:

PrivateSubForm_Click()DimNAsIntegerN=Val(InputBox(“输入N=?”))Dima(N)AsInteger…….Endsub×(3)在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。例:ReDimx(10)ReDimx(20)x(20)=30Printx(20)ReDimx(20,5)x(20,5)=10Printx(20,5)

(4)每次使用ReDim语句都会使原来数组中值丢失,可以在ReDim后加Preserve参数来保留数组中的数据。但此时只能改变最后一维的大小。例7.5教材P123——124通过输入对话框输入一批正整数,将其中的偶数和奇数分别存入数组a和数组b中,然后分别以每行10个输出数组a和b。

7.4.2与数组操作有关的几个函数Array函数Array函数可方便地对数组整体赋值,但它只能给声明Variant的变量或仅由括号括起的动态数组赋值。赋值后的数组大小由赋值的个数决定。例如,要将1,2,3,4,5,6,7这些值赋值给数组a,可使用下面的方法赋值。Dima()A=array(1,2,3,4,5,6,7)DimaA=array(1,2,3,4,5,6,7)

2求数组的上界Ubound()函数、下界Lbound()函数

Ubound()函数和Lbound()函数分别用来确定数组某一维的上界和下界值。使用形式如下:

UBound(<数组名>[,<N>])

LBound(<数组名>[,<N>])

其中:<数组名>:必需的。数组变量的名称,遵循标准变量命名约定。<N>

:可选的;一般是整型常量或变量。指定返回哪一维的上界。1表示第一维,2表示第二维,如此等等。如果省略默认是1。3.Split函数使用格式:Split(<字符串表达式>[,<分隔符>])说明:使用Split函数可从一个字符串中,以某个指定符号为分隔符,分离若干个子字符串,建立一个下标从零开始的一维数组。补充例题:通过一文本框中输入若于个数据,数据之间用“,”分隔。将这些数据按升序输入在另一个文件框中。7.5控件数组

7.5.1控件数组的概念

一组相同类型的控件组成。它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。例:

PrivateSubcmdOK_Click(IndexAs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论