《第3章 循环控制结构》由会员分享,可在线阅读,更多相关《第3章 循环控制结构(66页珍藏版)》请在金锄头文库上搜索。
1、3.1 3.1 滚动条滚动条1. 1. 用用 途途 滚动条控件(滚动条控件(ScrollBarScrollBar)分为水平滚动条分为水平滚动条(HScrollbarHScrollbar)和垂直滚动条(和垂直滚动条(VscrollBarVscrollBar)二种,通常附二种,通常附在窗体上协助观察数据或确定位置,也可用作数据输入工具,在窗体上协助观察数据或确定位置,也可用作数据输入工具,用来提供某一范围内的数值供用户选择。用来提供某一范围内的数值供用户选择。第三章第三章 循环控制结构循环控制结构3.1 3.1 滚动条滚动条2. 2. 属性属性(1) (1) ValueValue 滑块所处位置所代
2、表的值。滑块所处位置所代表的值。(2) (2) MaxMax:最大值最大值 -32,76832,767-32,76832,767(3) (3) MinMin:最小值最小值 -32,76832,767-32,76832,767(4) (4) SmallChangeSmallChange 最小变动值,最小变动值, 单击箭头时移动的增量值。单击箭头时移动的增量值。(5) (5) LargeChangeLargeChange 最大变动值,单击空白处时移动的增量值最大变动值,单击空白处时移动的增量值。3.1 3.1 滚动条滚动条3.3.事件事件(1 1)ChangeChange事件事件 滚滚动动条条的的
3、ChangeChange事事件件, ,在在移移动动滚滚动动框框或或通通过过代代码码改改变变其其ValueValue属属性性值值时时发发生生。单单击击滚滚动动条条两两端端的的箭箭头头或或空空白白处处将将引引发发ChangeChange事件。事件。(2 2)ScrollScroll事件事件 当当滚滚动动框框被被重重新新定定位位,或或按按水水平平方方向向或或垂垂直直方方向向滚滚动动时时,ScrollScroll事件发生。事件发生。拖动滑块时会触发拖动滑块时会触发ScrollScroll事件。事件。 ScrollScroll事事件件与与ChangeChange事事件件的的区区别别在在于于:当当滚滚动动
4、条条控控件件滚滚动动时时ScrollScroll事事件件一一直直发发生生,而而ChangeChange事事件件只只是是在在滚滚动动结结束束之之后后才才发发生生一一次次。即即ScrollScroll事事件件用用来来跟跟踪踪滚滚动动条条中中的的动动态态变变化化,ChangeChange事件用来得到滚动条的最后的值。事件用来得到滚动条的最后的值。实例例3-1新建一个工程,完成“改变图形”程序的设计。具体要求:1)窗体的标题为“改变图形”,固定边框。2)在窗体上有一个图像框(image1),加载一副图片(Scretch=True);一个水平滚动条(Hscroll1)和一个垂直滚动条(Vscroll1)
5、。3)程序运行时,改变滚动条可以使图片横向或纵向压缩或拉伸。对象对象属性属性设置设置窗体NameForm1Caption改变图形图像框NameImage1StretchTrue水平滚动条NameHscroll1LargeChange100SmallChange100垂直滚动条NameVscrollLargeChange100SmallChange100PrivateSubForm_Load()HScroll1.Max=Image1.WidthVScroll1.Max=Image1.HeightHScroll1.Value=HScroll1.MaxVScroll1.Value=VScroll1.
6、MaxEndSubPrivateSubhscroll1_scroll()Image1.Width=HScroll1.ValueEndSubPrivateSubvscroll1_scroll()Image1.Height=VScroll1.ValueEndSubPrivateSubhscroll1_change()Image1.Width=HScroll1.ValueEndSubPrivateSubvscroll1_change()Image1.Height=VScroll1.ValueEndSub例3-2新建一个工程,设计一个“调色板”程序。窗体的标题为“调色板”。固定边框。将形状控件Shap
7、e1设置为长方形,黑色边框。通过滚动条来选择红、绿、蓝三原色的配色取值,配色效果通过形状控件动态显示。单击“确定”按钮或回车键,将调配好的颜色运用于标签(Label1)文字“坚持就是胜利”对命令按钮Command1进行适当的设置,使得按回车键等效于单击命令按钮。对象对象属性属性设置设置窗体NameForm1Caption调色板形状控件NameShape1Shape0(长方形)Fillstyle0滚动条1,2,3NameHscroll1,Hscroll2,Hscroll3Max255标签NameLabel1Caption坚持就是胜利按钮NameCommand1Caption确定PrivateSu
8、bCommand1_Click()Label1.ForeColor=Shape1.FillColorEndSubPrivateSubHScroll1_Scroll()Shape1.FillColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)EndSubPrivateSubHScroll2_Scroll()Shape1.FillColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)EndSubPrivateSubHScroll3_Scroll()Shape1.FillColor=RG
9、B(HScroll1.Value,HScroll2.Value,HScroll3.Value)EndSub3.2 3.2 计时器计时器1.1.用途用途 计时器控件(计时器控件(TimerTimer)又称时钟、定时又称时钟、定时器控件,用于器控件,用于有规律地定时执行指定的工作有规律地定时执行指定的工作,常常用于编写不需要与用户进行交互就可直常常用于编写不需要与用户进行交互就可直接执行的代码,如接执行的代码,如计时、倒计时、动画计时、倒计时、动画等。等。 在程序运行阶段,时钟控件不可见。在程序运行阶段,时钟控件不可见。3.2 3.2 计时器计时器 2. 属属 性性(1)Interval属性属性
10、取值范围在取值范围在0 64767 ,单位:为,单位:为毫秒毫秒(0.001秒),表秒),表示示计计时时间间隔隔。最最大大时时间间间间隔隔不不超超过过65秒秒。若若将将Interval属属性性设设置置为为0或负数,则计时器停止工作。或负数,则计时器停止工作。 缺省设置为缺省设置为 0(2)Enabled属性属性 设置为设置为True,而且而且Interval属性值大于属性值大于0,则计时器,则计时器开始开始工作工作(以以Interval属性值为间隔,触发属性值为间隔,触发Timer事件事件)。)。 设置为设置为False可使时钟控件无效,即计时器停止工作可使时钟控件无效,即计时器停止工作。 缺
11、省设置为缺省设置为True(2)Enabled属性属性 3.2 3.2 计时器计时器3.2 3.2 计时器计时器3. 3. 方方 法法 TimerTimer控件没有方法。控件没有方法。4. 4. 事事 件件 时钟控件只有时钟控件只有TimerTimer事件事件 当当EnabledEnabled属性值为属性值为TrueTrue且且IntervalInterval属性值大于属性值大于0 0时,时, 该事件以该事件以IntervalInterval属性指定的时间间隔发生。属性指定的时间间隔发生。 常常将需要定时执行的操作放在常常将需要定时执行的操作放在TimerTimer事件事件过程中。过程中。实例
12、例3-3新建一个工程,完成“电子钟”程序的设计。1)窗体的标题为“电子钟”,固定边框。2)设计一个定时器Timer1用于显示系统时间,时间间隔为一秒。3)窗体上有一个标签Label1,用于显示时间,设置Label1的Font为:宋体、粗体、二号、背景白色,文字居中对齐,固定边框。对象对象属性属性设置设置窗体NameForm1Caption电子钟计时器NameTime1EnabledTrueInterval1000标签NameLabel1Caption空BorderStyle1Backcolor白色Font宋体、加粗、二号Alignment2(居中)Private Sub Timer1_Time
13、r() Label1.Caption = Time$End Sub例3-4新建一个工程,利用计时器制作一个自下而上的滚动字幕。1)窗体背景加载一幅图片2)窗体上有一个标签Label1,设置Label1的背景透明;前景色为红色;Font为隶书,四号字。对象对象属性属性设置设置窗体NameForm1Caption文字移动Picture图片计时器NameTime1EnabledTrueInterval100标签NameLabel1Caption祝同学们考试顺利BorderStyle0BackStyle0(透明)Font楷体、四号Forecolor红色DimstepAsIntegerPrivateSu
14、bForm_Load()Label1.Top=Me.ScaleHeightstep=Me.ScaleHeight200EndSubPrivateSubTimer1_Timer()Label1.Top=Label1.Top-stepIfLabel1.Top-Label1.HeightThenLabel1.Top=Me.ScaleHeightEndIfEndSub3.3 3.3 过过 程程 本节要求:本节要求: 1.1.掌握子过程掌握子过程(Sub(Sub过程的定义、调用过程的定义、调用) ); 2.2.掌握函数过程(掌握函数过程(FunctionFunction过程)的定义、调用;过程)的定义、
15、调用; 3.3.掌握值传递、地址传递的传递规则。掌握值传递、地址传递的传递规则。本节重点:本节重点:1.Sub1.Sub过程及过程及FunctionFunction过程的定义与调用过程的定义与调用2.2.过程调用中数据的传递。过程调用中数据的传递。本节难点:本节难点:过程调用中数据的传递。过程调用中数据的传递。内容回顾内容回顾 1.3.2 1.3.2 过程过程SubSub过程过程 在在VBVB中,中,SubSub子过程分为:子过程分为:事件过程和通用过程事件过程和通用过程 1 1 事件过程事件过程 (1 1)窗体事件的语法)窗体事件的语法Private Sub Form_Private Sub
16、 Form_事件名事件名( (参数列表参数列表) ) 语句组语句组End SubEnd Sub (2 2)控件事件的语法控件事件的语法Private Sub Private Sub 控件名控件名_ _事件名事件名( (参数列表参数列表) ) 语句组语句组 End SubEnd Sub SubSub过程过程2 2 通用过程(通用过程(SubSub过程)的定义过程)的定义 子过程的定义形式如下:子过程的定义形式如下:Public|PrivateStatic Sub Public|PrivateStatic Sub 子过程名子过程名(形参表形参表) 语句组语句组 Exit SubExit Sub 语
17、句组语句组End SubEnd Sub 说明:说明:(1 1)子过程名:命名规则与)子过程名:命名规则与变量名规则变量名规则相同。相同。1)必须以字母或汉字开)必须以字母或汉字开头,由字母、数字头,由字母、数字和下划线组成,长和下划线组成,长度不得超过度不得超过255个字个字符。符。 2)不得使用)不得使用VB中的关中的关键字。键字。 3)不区分大小写。(建)不区分大小写。(建议:变量首字母一议:变量首字母一般大写,其余用小般大写,其余用小写。常量全部用大写。常量全部用大写字母。)写字母。) SubSub过程过程(2 2)形形式式参参数数列列表表:形形式式参参数数通通常常简简称称“形形参参”,
18、仅仅表表示示形形参参的的类类型型、个个数数、位位置置,定定义义时时是是无无值值的的,只只有有在在过过程程被被调用时,虚实参结合后才获得相应的值。调用时,虚实参结合后才获得相应的值。(3 3)过程可以无形式参数,但括号不能省。过程可以无形式参数,但括号不能省。(4 4)参数的定义形式:参数的定义形式:ByValByValByRefByRef变量名变量名( )As ( )As 类型类型, ,ByValByVal表示当该过程被调用时,参数是按值传递的;缺省或表示当该过程被调用时,参数是按值传递的;缺省或ByRefByRef表示当该过程被调用时,参数是按地址传递的。表示当该过程被调用时,参数是按地址传
19、递的。 SubSub过程过程3 3 通用过程的建立通用过程的建立 通通过过 “工工具具”菜菜单单中中的的“添添加加过过程程”命命令令,出出现现“添添加加过过程程”对对话话框框(见见下下图图),选选择择过过程程类类型型(子子过过程程、函函数数、属属 性性 、 事事 件件 ) 及及 作作 用用 范范 围围 ( 公公 有有 的的 PublicPublic、 私私 有有 的的PrivatePrivate),单单击击确确定定后后得得到到一一个个过过程程或或函函数数定定义义的的结结构构框框架(模板),如:架(模板),如:Public Sub Sort( )Public Sub Sort( )End Sub
20、End Sub或者利用代码窗口直接定义或者利用代码窗口直接定义 SubSub过程过程4 4 过程的调用过程的调用 子过程名子过程名 参数列表参数列表 或或 Call Call 子过程名子过程名( (参数列表参数列表) )说明:说明: (1 1)参数列表参数列表称为实参或实元,它必须与形参保持个数相称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。同,位置与类型一一对应。 (2 2)调用时把实参值传递给对应的形参。其中值传递(形)调用时把实参值传递给对应的形参。其中值传递(形参前有参前有ByValByVal说明)时实参的值不随形参的值变化而改变。而说明)时实参的值不随形参的值变化而改
21、变。而地址传递时实参的值随形参值的改变而改变。地址传递时实参的值随形参值的改变而改变。SubSub过程过程(3 3)调用子过程的形式有两种,用)调用子过程的形式有两种,用CallCall关键字时,实参必须关键字时,实参必须加圆括号括起,反之则实参之间用加圆括号括起,反之则实参之间用“,”分隔。分隔。 例:调用上面定义的例:调用上面定义的SwapSwap子过程的形式:子过程的形式: Swap a,bSwap a,b Call Swap(a,b) Call Swap(a,b)SubSub过程过程 过程调用的执行过程:过程调用的执行过程:Private Sub Private Sub CmdOKCm
22、dOK()() Call Swap(a,b) Call Swap(a,b) Swap a,b Swap a,bEnd SubEnd SubPrivate Sub Swap(x%,y%)Private Sub Swap(x%,y%) Dim temp%Dim temp% Temp=X Temp=X X=Y X=Y Y=Temp Y=TempEnd SubEnd Sub SubSub过程过程例例3-5 3-5 编一个交换两个整型变量值的子过程。编一个交换两个整型变量值的子过程。Private Sub Swap( X As Integer, Y As Integer)Private Sub Swap
23、( X As Integer, Y As Integer)Dim temp As IntegerDim temp As Integer Temp=X : X=Y : Y=TempTemp=X : X=Y : Y=TempEnd SubEnd SubPrivate Sub command1_click()Private Sub command1_click()Dim a%,b%Dim a%,b% a= a=val(inputbox(“aval(inputbox(“a=“)=“) b= b=val(inputbox(“bval(inputbox(“b=“)=“) print print “a=a=
24、“;a,;a,”b=b=“,b,b call swap(a,b) call swap(a,b) print print “a=a=“;a,;a,”b=b=“,b,bEnd SubEnd Sub FunctionFunction过程过程与子过程不同的是函数过程将返回一个值与子过程不同的是函数过程将返回一个值 。 1 1 函数过程(函数过程(FunctionFunction过程)的定义过程)的定义Public|PrivateStaticFunction Public|PrivateStaticFunction 函数名函数名()As)As 函数名函数名= =返回值返回值 Exit Function
25、Exit Function 函数名函数名= =返回值返回值 End Function End FunctionFunctionFunction过程过程说明:说明:(1 1)函数名:命名规则与变量名规则相同。)函数名:命名规则与变量名规则相同。(2 2)ASAS类类型型:是是指指函函数数返返回回值值的的类类型型,若若省省略略,则则函函数数返返回回变体类型值(变体类型值(VariantVariant)。)。 (3 3)形参数列表:形参的定义与子过程完全相同。)形参数列表:形参的定义与子过程完全相同。 FunctionFunction过程过程2 2 函数的调用函数的调用调用形式如下:调用形式如下:
26、函数名(实参列表)函数名(实参列表) 变量名变量名= =函数名(实参列表)函数名(实参列表)说明:说明: 在在调调用用时时实实参参和和形形参参的的数数据据类类型型、顺顺序序、个个数数必必须须匹配。匹配。形参形参Sub过程和Function函数过程中的中的参数称为形式参数.实参实参在程序中调用Sub过程和Function函数过程时中称为实际参数。过程调用,就是实参与形参结合的过程。3.3 过程过程传址与传值传址与传值3.3 3.3 过程过程传址与传值传址与传值1. 1. 按值传递参数按值传递参数( (ByvalByval) ) 在在VBVB中,默认情况下实参与形参是传址传递数据的。中,默认情况下
27、实参与形参是传址传递数据的。2. 2. 按地址传递参数(按地址传递参数(ByRefByRef) )传值就是通过传送实参的值而不是传送地址的方法给被调用过程中的形参。被调用过程并没有访问实参的地址,因而也就不会改变实参的值。在VB中,区分传址与传值的标志为:l传值时:在形参前加上ByValByVall传址时:在形参前加上ByrefByref或者是默认或者是默认。过程之间参数的传递过程之间参数的传递 传址与传值传址与传值 传址:传址: 形参得到的是实参的地址,当形参值的改形参得到的是实参的地址,当形参值的改变同时也改变实参的值。变同时也改变实参的值。 传值:传值: 形参得到的是实参的值,形参值的改
28、变不形参得到的是实参的值,形参值的改变不会影响实参的值。会影响实参的值。例例3-6 3-6 按地址传递参数按地址传递参数按地址传递参数时,系统将实际参数(简单变量、数组按地址传递参数时,系统将实际参数(简单变量、数组或数组元素以及记录)的地址(即变量在内存中的位置)或数组元素以及记录)的地址(即变量在内存中的位置)作为形式参数的地址,以此访问实际参数的内容,也就作为形式参数的地址,以此访问实际参数的内容,也就是说,形式参数和实际参数占用相同的内存单元。这种是说,形式参数和实际参数占用相同的内存单元。这种方式下,当程序修改了形式参数的值时,实际上也就修方式下,当程序修改了形式参数的值时,实际上也
29、就修改了实际参数的值。改了实际参数的值。 Sub Form_Click() Sub Form_Click() Dim a As Integer Dim a As Integer,b As Integerb As Integer a=10 a=10:b=20b=20 tryout a tryout a,b b Print Print a=a= ;a a, b=b= ;b b End Sub End SubSub tryout (x As IntegerSub tryout (x As Integer,y As Integer)y As Integer) x=x + 100 x=x + 100 y
30、=y y=y 6 6 Print Print x=x= ;x x, y=y= ;y y End Sub End Sub2.2. 按值传递参数按值传递参数按值传递参数就是通过值传送实际参数,传送按值传递参数就是通过值传送实际参数,传送的是实参的值而不是它的地址。在这种情况下,的是实参的值而不是它的地址。在这种情况下,系统把需要传送的变量复制到一个临时单元中,系统把需要传送的变量复制到一个临时单元中,然后把该临时单元的地址传送给被调用的通用然后把该临时单元的地址传送给被调用的通用过程。由于通用过程没有访问变量(实参)的过程。由于通用过程没有访问变量(实参)的原始地址,因而不会改变原来变量的值,所有
31、原始地址,因而不会改变原来变量的值,所有的变化都是在变量的副本上进行的的变化都是在变量的副本上进行的。在在Visual BasicVisual Basic中,按值传递参数是通过关键字中,按值传递参数是通过关键字ByValByVal来实现的。也就是说,在定义过程时,如果来实现的。也就是说,在定义过程时,如果形参前面有关键字形参前面有关键字ByValByVal,则按值传递该参数,否则按值传递该参数,否则按地址传递该参数。则按地址传递该参数。在在【例例3-63-6】中,如果用传值方式编写通用过程,中,如果用传值方式编写通用过程,则运行结果是不一样的。改为传值方式的则运行结果是不一样的。改为传值方式的
32、通用过程如下:通用过程如下:Sub tryout (Sub tryout (ByValByVal x As Integer x As Integer,ByValByVal y As Integer) y As Integer) x=x + 100 x=x + 100 y=y y=y 6 6 Print Print x=x= ;x x, y=y= ;y yEnd SubEnd Sub事件过程事件过程Form_ClickForm_Click不用作任何修改。程序运行后,输出不用作任何修改。程序运行后,输出结果如下:结果如下:x=110 y=120x=110 y=120a=10 b=20a=10 b=
33、203.4DowhileLoop循环控制只要只要 为为 True 就执就执行行 。其语法格式为:。其语法格式为:Do While Exit Do 循环体循环体 Loop语句功能:当条件为真时,执语句功能:当条件为真时,执行循环体;当条件为假时,终行循环体;当条件为假时,终止循环。止循环。对于循环次数有限但是不知道具体次数的操作,选用对于循环次数有限但是不知道具体次数的操作,选用Do Do WhileLoopWhileLoop循环。循环。例3-7计算S=1+2+3+.+100PrivateSubForm_Click()DimnAsInteger,sAsLongn=1:s=0DoWhilen=10
34、0s=s+nn=n+1LoopPrint1+2+3+.+100=;sEndSubFor For 循环使用一个叫做计数器的变量,每重复一次循环循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。之后,计数器变量的值就会增加或者减少。For For 循环的语法如下:循环的语法如下:For For = = To To Step Step NextNext 3.6 For.Next3.6 For.Next循环控制循环控制l循环变量必须为数值型循环变量必须为数值型, ,用来计算循环体的次数。用来计算循环体的次数。l步长,每次循环体执行时变量的改变值。如果省略,默认为步长,每
35、次循环体执行时变量的改变值。如果省略,默认为1 1。l循环体,即语句块,可以是一句或多句。循环体,即语句块,可以是一句或多句。l循环次数循环次数= =intint(终值终值- -初值初值)/)/步长步长+1)+1)lExit ForExit For:写在循环体中,表示退出循环。写在循环体中,表示退出循环。对于循环次数确定的操作,对于循环次数确定的操作,选用选用ForNext循环循环开始开始循环变量循环变量=初值初值循环变量循环变量终值终值执行循环体执行循环体循环变量循环变量=循环变量循环变量+步长步长结束结束NoYes例例3-12 3-12 求求T=8!=1T=8!=1238。Private
36、Sub Form_Click() t = 1 For c = 1 To 8 t = t * c Next c Print T=; tEnd Sub例3-5计算5!+10!(P71)PrivateSubCommand1_Click()DimyAsLong,sAsLongCallAaa(5,y)s=yCallAaa(10,y)s=s+yLabel2.Caption=sEndSubPrivateSubAaa(nAsInteger,tAsLong)DimiAsIntegert=1Fori=1Tont=t*iNextiEndSub循环嵌套循环嵌套 在一个循环体内又出现另外的循环语句称为循环嵌套。在一个循
37、环体内又出现另外的循环语句称为循环嵌套。 例:指出下面程序的运行例:指出下面程序的运行结果:果: Dim a As Integer, i As Integer, j As IntegerDim a As Integer, i As Integer, j As Integer a = 0 a = 0 For i = 1 To 5For i = 1 To 5 For j = -2 To 2For j = -2 To 2 a = a + i + j a = a + i + jNext jNext j Print a; Print a; Next iNext i Print Print Print i
38、, j, a Print i, j, a运行结果对于循环嵌套,需要注意以下两点:对于循环嵌套,需要注意以下两点:1.内循环变量与外循环变量不同名2.外循环必须完全包含内循环,不能交叉。3.5 3.5 数数 组组本节要求:本节要求: 1.1.掌握数组的概念掌握数组的概念 2.2.掌握数组(一、二维)的定义及其引用,掌握数组(一、二维)的定义及其引用, 本节本节重点:重点: 数组定义及引用方法,与数组有关的一些常用算法数组定义及引用方法,与数组有关的一些常用算法本节本节难点:难点:与数组有关的一些常用算法与数组有关的一些常用算法 输输入入1010个个数数,输输出出它它们们的的平平均均值值及及大大于
39、于平平均值的那些数?均值的那些数?输入A当NAve Then Print A1 IF A1Ave Then Print A1 IF A2Ave Then Print A2 IF A2Ave Then Print A2 IF A3Ave Then Print A3 IF A3Ave Then Print A3 IF A4Ave Then Print A4 IF A4Ave Then Print A4 . . 实际程序是不能这样写实际程序是不能这样写 思考:思考: 如果能使用如果能使用A Ai i ( i=1,2,.10 ) ( i=1,2,.10 ) 的形式的形式? 使用循环来写程序使用循环来写
40、程序 VBVB中表示下标变量就是通过定义数组来实现的。中表示下标变量就是通过定义数组来实现的。一、一、 一维数组一维数组 1.1.数组的概念:数组的概念:数组并不是一种数据类型,而数组并不是一种数据类型,而是是一组相同类型数据一组相同类型数据的集合。用一个统一的名字的集合。用一个统一的名字(数组名)数组名)代表逻辑上相关的一批数据,每个元素代表逻辑上相关的一批数据,每个元素用用下标变量下标变量来区分;下标变量代表元素在数组中的来区分;下标变量代表元素在数组中的位置位置。VBVB中数组的表示形式:中数组的表示形式: A(1), A(10) A(1), A(10) 一维一维数组数组 X(1,1),
41、 X(2,10) X(1,1), X(2,10) 二维数组二维数组 Y(0,0,0), Y(1,2,5) Y(0,0,0), Y(1,2,5) 三维数组三维数组3.5. 3.5. 数组数组 Dim Dim 数组名数组名(toto)As )As 或:或: Dim Dim 数组名数组名(toto)例例:Dim Dim a(1 a(1 to to 10) 10) As As Integer Integer 声声明明了了a a数数组组有有1010个个元元素素与上面声明等价形式:与上面声明等价形式: Dim a%(1 to 10) Dim a%(1 to 10) 1是下标的下界是下标的下界10是下标的上
42、界是下标的上界数组元数的数据类型数组元数的数据类型2.2.数组的声明数组的声明 3.5. 3.5. 数组数组说明:说明: 1 1数组名的命名规则与变量的命名相同。数组名的命名规则与变量的命名相同。 2 2数组的元素个数:数组的元素个数:上界上界- -下界下界+1+1。 3 3缺缺省省 为为0 0,若若希希望望下下标标从从1 1开开始始,可可在在模模块块的的通通用用部分使用部分使用Option BaseOption Base语句将设为语句将设为1 1。其使用格式是:。其使用格式是: Option Option Base Base 0|1 0|1 后后面面的的参参数数只只能能取取 0 0 或或 1
43、 1 例如:例如: Option Option Base Base 1 1 将将数数组组声声明明中中缺缺省省 下下标标设设为为 1 14. .数组中所有元素都有相同的数据类型。如果类型不同数组中所有元素都有相同的数据类型。如果类型不同, , 则声明时必须将其数据类型定义为则声明时必须将其数据类型定义为VariantVariant。3.5. 3.5. 数组数组5 参数参数indexindex的个数决定数组的维数。各参数间用逗号的个数决定数组的维数。各参数间用逗号分隔。参数可以是简单的数值表达式分隔。参数可以是简单的数值表达式 例如,例如,aa(4)aa(4)也可以是由关键字也可以是由关键字ToT
44、o组成的表达式组成的表达式例如,例如,sdsd(1 To 101 To 10)3.5. 3.5. 数组数组 数组名数组名( (下标下标) ) 3. 3. 数组元素的引用数组元素的引用 例如,定义一个数组,并分别给每一元素赋值。例如,定义一个数组,并分别给每一元素赋值。Dim s1 (9) As StringDim s1 (9) As String,I As IntegerI As IntegerFor I=0 To 9For I=0 To 9s1 (I)=s1 (I)=InputBoxInputBox( 请输入任何一个字符:请输入任何一个字符: )Next INext I3.5. 3.5. 数
45、组数组例3-8输入某小组5个同学的成绩,计算总分和平均分(取小数后一位)。PrivateSubForm_Load()Dimd(5)AsIntegerDimiAsInteger,totalAsSingle,averageAsSingleShowFori=1To5d(i)=Val(InputBox(请输入第&i&个学生成绩,输入成绩)Print第&i&个学生的成绩:&d(i)Nextitotal=0Fori=1To5total=total+d(i)Nextiaverage=total/5Print总分:;totalPrint平均分:;Format(average,#.0)EndSub例3-9输入1
46、0名学生的成绩,求出最高分和最低分。OptionBase1Dimscore(3)AsIntegerPrivateSubCommand1_Click()Fori=1To3score(i)=InputBox(输入学生成绩,学生成绩)NextiLabel1.Caption=单击“查找”按钮开始查找最高分和最低分EndSubPrivateSubCommand2_Click()DimmaxAsInteger,minAsIntegermax=score(1)min=score(1)Fori=2To3Ifmaxscore(i)Thenmin=score(i)EndIfNextiLabel1.Caption=
47、最高分:+Str(max)+Chr(13)+最低分:+Str(min)EndSubPrivateSubForm_Load()Label1.Caption=单击“输入成绩”按钮输入学生成绩EndSub二、二、 多维数组的声明多维数组的声明1.1.定义多维数组的格式如下:定义多维数组的格式如下:Dim Dim 数数组组名名( to to , to to ,) As ) As 例如:例如: D Dim a(5,5,5) As Integer im a(5,5,5) As Integer 声明声明a a是三维数组是三维数组 Dim b(2,6,10,5) As Integer Dim b(2,6,10
48、,5) As Integer 声明声明b b是四维数组是四维数组 3.5. 3.5. 数组数组2. 2. 多维数组元素的引用多维数组元素的引用多维数组元素的引用:多维数组元素的引用:数组名(下标数组名(下标1 1,下标,下标22,下标,下标3 3)As 例如例如 声明一个字符数组,并给数组中声明一个字符数组,并给数组中 每一个元素赋值。每一个元素赋值。 Dim array(3,3) As StringDim array(3,3) As StringDim Dim row,colrow,col As Integer As IntegerFor row=0 To 3For row=0 To 3 F
49、or For colcol=0 To 3=0 To 3 Array(row,colArray(row,col)=)=InputBoxInputBox( ( 请输入一个字符请输入一个字符 ) ) Next Next colcolNext rowNext row3.5. 3.5. 数组数组 三、三、动态数组:在声明时未给出数组的大小。在程序执行动态数组:在声明时未给出数组的大小。在程序执行时分配存储空间。时分配存储空间。 动态数组的建立及使用动态数组的建立及使用 建立动态数组包括声明和大小说明两步:建立动态数组包括声明和大小说明两步: 1 1在在使使用用DimDim、PrivatePrivate或
50、或PublicPublic语语句句声声明明括括号号内内为为空空的的数组。数组。 格式:格式:Dim | Private|Public Dim | Private|Public 数组名()数组名()As As 数据类型数据类型 例:例:Dim a() As IntegerDim a() As Integer 2 2在过程中用在过程中用ReDimReDim语句指明该数组的大小。语句指明该数组的大小。 格式:格式:ReDim Preserve ReDim Preserve 数组名(下标数组名(下标11,下标,下标22) PreservePreserve参数:保留数组中原来的数据参数:保留数组中原来的
51、数据 3.5. 3.5. 数组数组例:例:Redim A(10) Redim A(10) Redim Preserve A(20) Redim Preserve A(20)3.5. 3.5. 数组数组例:例:Dimnum()AsIntegerPrivateSubForm_Click().ReDimnum(5).EndSub说明:说明: (1 1)ReDimReDim语句是一个可执行语句,只能出现在过程中,语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。并且可以多次使用,改变数组的维数和大小。 (2 2)定长数组声时中的下标只能是常量,而动态数组)定长数组声时中的
52、下标只能是常量,而动态数组ReDimReDim 语句中的下标是常量,也可以是有了确定值的变量。语句中的下标是常量,也可以是有了确定值的变量。 (3) Preserve(3) Preserve为可选的关键字,当改变原有数组最末维为可选的关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。的大小时,使用此关键字可以保持数组中原来的数据。3.5. 3.5. 数组数组PrivateSubForm_Load()ShowRandomizeDima(1To10)AsIntegerPrint原始数据Forj=1To10a(j)=Int(91*Rnd+10)Printa(j);Nextj
53、Print:PrintFori=1To9Forj=i+1To10Ifa(i)a(j)Thent=a(i):a(i)=a(j):a(j)=tEndIfNextjNextiPrint排序结果Forj=1To10Printa(j);NextjEndSub例3-10随机产生10个10100的整数,用“选择排序法”按值从小到大顺序排序,最后输出结果。P75一、选择题一、选择题1下面数组声明语句,_正确。A)Dima2,4AsIntegerB)Dima(2,4)AsIntegerC)Dima(n,n)AsIntegerD)Dima(24)AsInteger2用下面语句定义的数组的元素个数是_。DimA(-
54、3To5)AsIntegerA)6B)7C)8D)93下面数组声明语句中,数组包含元素个数为_。Dima(-2to2,5)AsIntegerA)120B)30C)60D)20 答案:B 答案:D 答案:B4.要改变控件的宽度,应修改该控件的()属性。A、TOPB、widthC、LeftD、Height答案:B5.将命令按钮Command1设置为不可见,应修改该命令按钮的()属性。A、VisibleB、ValueC、CaptionD、Enabled答案:A6.单机滚动条两端的任何一个滚动箭头,将触发该滚动条的()事件。A、ScrollB、KeyDownC、changeD、Dragver答案:C7.下列数据类型中,占用内存最大值是()A、BooleanB、ByteC、IntegerD、Single答案:D二、填空题1.在VisualBasic中,变量从它的作用范围来看,可分为、三种。全局变量全局变量、模块级变量模块级变量和过程级变量过程级变量 2声明定长为10个字符变量Sun的语句为: 。 Dim Sun as String*10。3.用随机函数产生10个100500的整数,其表达可为:For I=1 to 10 a(i)=100+int(401*rnd)Next I