5. 在VB中,形参若是数组,不要说明数组元素的个数,即以数组名和圆括号表示,在过程体内如何表示
数组的上下界?
6. 在Form1窗体通用声明部分声明的变量,可否在Form2窗体中的过程被访问? 7. 要使变量在某事件过程中保值,有哪几种变量声明的方法? 8. 指出下面过程语句说明中的错误:
(1)Sub f1(n%) as integer (2)Function f1%(f1%) (3)Sub f1(ByVal n%()) (4)Sub f1(x(i)as integer) 9. 已知有如下求两个平方数和的fsum子过程:
Public Sub fsum(sum%, byval m%, byval n%) Sum=m*m+n*n End Sub
在事件过程中有如下变量声明: Dim a%,b%,c! a=10 b=20
则指出如下过程调用语句错误所在:
(1)fsum 3,4,5 (2)fsum c, a, b (5)call fsum c, a, b (3)fsum a+b, a, b (4)call fsum(sqr(c), sqr(a), sqr(b))
1. 子过程和函数过程的相同点:函数过程和子过程都是功能相对独立的一种子过程结构,它们有各自的过程头、变量声明和过程体。在程序中使用它们不但可以避免频繁的书写重复的程序语句,缩短代码,而且使程序条理清晰,容易阅读。 子过程和函数过程的不同点:
(1)过程声明的关键字不同,子过程用Sub,函数过程用Function。 (2)子过程名无值就无类型声明,函数过程有值就有类型声明。
(3)函数过程名兼作结果变量,因此在函数过程体内至少对函数过程名赋值一次;而子过程名在过程内不能赋值。
(4)调用方式不同,子过程是一句独立的语句,可用call子过程名或省略call直接以子过程名调用;函数过程不是一句独立的语句,是一个函数值,必须参与表达式的运算。
(5)一般来说,一个函数过程可以被一个子过程代替,代替时只要改变函数定义的形式,并在子过程的
46
形参表中增加一个地址传递的形参来传递结果。但反过来,用一个函数过程去替代一个子过程,有时是不容易实现的。
2. 形参是在定义过程时的一种形式虚设的参数,只代表了该过程参数的个数、类型、位置,形参的名字并不重要,也没有任何值,只表示在过程体内进行某种运算或处理。 形参不能是常量、表达式或数组元素,只能是变量。
实参是调用子过程时提供给过程形参的初始值或通过过程体处理过后获得的结果。
3. 调用时用实参代替形参,实参与形参在个数、位置、类型一一对应,但实参与形参名相同与否无关。 VB在调用过程时,提供了命名参数的功能,在调用时使用形参名,而位置可任意;同时VB还提供了可选参数的功能,也就是实参与形参个数不一定相等。
4. 仅要从调用者获得初值,应使用值传递;要将过程运算结果提供给调用者,必须是地址传递。数组、记录类型和对象必须使用地址传递。
调用时地址传递对应的实参不应该是表达式或常量。在VB中尽管不显示出错信息,但得不到所期望的值。
能够用值传递实现的,尽量用值传递,减少过程间关联,有利于程序的调试。 5. 利用VB提供的函数LBound和UBound确定数组的上、下界。
6. 可以,条件是要在Form1窗体通用声明部分声明的变量是Public;Form2窗体中的过程被访问时变量名前加Form1。
7.方法一:在标准模块中声明Public的变量;
方法二:在某事件过程所在的窗体的通用声明段声明变量; 方法三:在某事件过程以Static关键字声明的变量。 8. (1)错误为Sub子过程名无返回值,也就没有类型 (2)函数名与形参名相同
(3)形参n为数组,不允许声明为ByVal值传递 (4)形参x(i)不允许为数组元素
9. (1)fsum 子过程的第一个形参是地址传递,因此对应的实参3不应该是常量。
(2)fsum子过程的第一个形参是整型且地址传递,对应得实参c是单精度,类型不匹配。 (3)fsum子过程的第一个形参是地址传递,因此对应的实参a+b不应该是表达式。 (4)fsum子过程的第一个形参是地址传递,因此对应的实参(sqr(c) 不应该是表达式。 (5)用call语句调用 fsum子过程,必须加圆括号括起实参。.
第七章 一、选择题
1. 要判断在文本框中是否按了Enter键,应在文本框的( D )事件中判断。 (A)Change (B)KeyDown (C)Click (D)KeyPress
47
2. 以下选项中,没有Caption属性的对象是( B )。
(A)命令按钮 (B)组合框 (C)窗体 (D)单选框 3. 计时器控件的控件值是( D )。
(A)Caption (B)Value (C)Interval (D)Enabled 4. 以下选项中,( B )不是鼠标操作事件。
(A)DragDrop (B)GotFocus (C)DblClick (D)MouseDown 5. 以下选项中,( A )是键盘操作事件。
(A)KeyUp (B)GotFocus (C)DblClick (D)MouseDown 6. 设置复选框或单选按钮标题对齐方式的属性是( B )。
(A)Align (B)AlignMent (C)Sorted (D)Value 7. 为了使列表框中的项目分为多列显示,需要设置的属性为( A )。 (A)Columns (B)Style (C)List (D)MultiLine
8. 要想不使用shift或ctrl键就能在列表框中同时选择多个项目,则应把该列表框的MultiSelect属性设置为
( B )。
(A)0 (B)1 (C)2 (D)其他 9. 删除列表框中指定的项目所使用的方法为( D )。
(A)Move (B)Remove (C)Clear (D)RemoveItem 10. 当拖动滚动条中的滚动块时,将触发滚动条的( C )事件。 (A)Move (B)Change (C)Scroll (D)SetFocus 11. 用户在组合框中输入或选择的数据可以通过( C )属性获得。
(A)List (B)ListIndex (C)Text (D)ListCount 12. 下列控件中,没有Caption属性的是( B )。
(A)框架 (B)文本框 (C)复选框 (D)单选按钮 13. 复选框的Value属性为1时,表示( B )。 (A)复选框未被选中 (B)复选框被选中
(C)复选框内有灰色的勾 (D)复选框操作有错误 14. 用来设置粗体字的属性是( C )。
(A)FontItalic (B)FontName (C)FontBold (D)FontSize 15. 将数据项“china”添加到列表框List1中成为第一项应使用( A )语句。 (A)List1.AddItem ―china‖, 0 (B)List1.AddItem ―china‖, 1
48
(C)List1.AddItem 0, ―china‖ (D)List1.AddItem 1, ―china‖ 16. 引用列表框List1最后一个数据项应使用( B )。
(A)List1.List(List1.ListCount) (B)List1.List(List1.ListCount-1)
(C)List1.List(ListCount) (D)List1.List(ListCount-1)
17. 假如列表框List1有四个数据项,那么把数据项‖china‖添加到列表框的最后,应使用( D )语句。 (A)List1.AddItem ―china‖, 3
(B)List1.AddItem ―china‖, List1.ListCount-1 (C)List1.AddItem 3, ―china‖ (D)List1.AddItem ―china‖, List1.ListCount
18. 假如列表框List1中没有被选定的项目,则执行List1.RemoveItem List1.ListIndex语句的结果是
( D )。
(A)移去第一项 (B)移去最后一项 (C)移去最后加入列表的一项 (D)以上都不对
19. 假如列表框List1中只有一个被选定的项目,则执行Debug.print List1.Selected(List1.ListIndex)语句的结果
是( B )。
(A)在Debug窗口中输出被选定的项目的索引值
(B)在Debug窗口中输出True
(C)在窗体上输出被选定的项目的索引值 (D)在窗体上输出True 20 在下列说法中,正确的是( B )。
(A)通过适当的设置,可以在程序运行期间,让时钟控件显示在窗体上
(B)在列表框中不能进行多项选择 (C)框架也有click和dblclick事件 (D)在列表框中能够将项目按字母顺序从大到小排列 21. 为了防止用户随意将光标置于控件之上,应( D )。
(A)将控件的TabIndex属性设置为0 (B)将控件的TabStop属性设置为True (C)将控件的TabStop属性设置为False (D)将控件的Enabled属性设置为False
22. 下列( D )控件没有Min、Max和Value属性。
(A)Slider (B)ProgressBar (C)UpDown (D)SSTab
23. 当Slider控件的Min属性为1,Max属性为40,TickFrequency属性为4时,滑标上的可见刻度数是
49
( A )个,划分了( )等分。
(A)11,10 (B)21,20 (C)31,30 (D)41,40
24. 一个UpDown控件与文本框“捆绑”在一起,其Min、Max、Value和Increment分别为0、10、9和3,
并且选定了“换行”功能,当用鼠标单击向上的箭头时,文本框中的值应是( A )。 (A)10 (B)12 (C)0 (D)2 25. 下面关于拖放和OLE拖放的叙述中,正确的是( D )。
(A)只要对控件的属性进行适当的设置,就能将控件从一个地方移动到另一个地方
(B)文本框、图片框和列表框完全支持自动OLE拖放
(C)当OLEDropMode属性为1时,控件自动实现OLE“放”操作
(D)当控件的DragMode设置为1时,它不能接受Click和MouseDown事件 26. 在下面关于常用的ActiveX控件的说法中,正确的是( B )。 (A)在Animation控件中,当用Open方法打开AVI文件后直接自动播放
(B)Slider控件有Scroll和Change事件 (C)UpDown不能与Slider“捆绑” (D)选项卡只可以出现在控件的顶端
27. 当用户按下并且释放一个键后会触发KeyPress、KeyUp和KeyDown事件,这三个事件发生的顺序是
( B )。
(A)KeyPress、KeyDown、KeyUp
(B)KeyDown 、KeyPress、KeyUp
(C)KeyDown、KeyUp、KeyPress (D)没有规律 28. 在下列关于键盘事件的描述中,正确的是( D )。 (A)按下键盘上的任意一个键,都会引发KeyPress事件
(B)大键盘上的“1”键和数字键盘的“1”键的KeyCode码相同 (C)KeyDown和KeyUp事件过程中有KeyAscii参数
(D)大键盘上的“4”键的上档字符是“$”,当同时按下Shift和大键盘上的“4”键时,KeyPress事
件过程中的KeyAscii参数值是“$‖的ASCII值
29. 在KeyDown和KeyUp事件过程中,能用来检查Ctrl和F3是否同时按下的表达式为 ( C )。 (A)(Button=vbCtrlMask) And (KeyCode=vbKeyF3)
(B)KeyCode=vbKeyControl+vbKeyF3
(C)(kEYcODE=vbKeyF3) And (Shift And vbCtrlMask)
50
第一章 选择题
1. VB是一种面向对象的可视化程序设计语言,采取了( A )的编程机制。
(A)事件驱动 (B) 按过程顺序执行 (C)从主程序开始执行 (D) 按模块顺序执行 2. 以下不属于VB的工作模式的是(c )模式。
(A) 运行 (B)设计 (C) 编译 (D)中断
3. 在VB集成环境创建VB应用程序时,除了工具箱窗口、窗体窗口、属性窗口外,必不可少的窗口是
( C )。
(A)窗体布局窗口 (B)立即窗口 (C)代码窗口 (D)监视窗口 4. 保存新建工程时,默认的路径是( B )。
(A)My Documents (B)VB98 (C)\\ (D)Windows
5. 将调试通过的VB工程经“文件”菜单的“生成.exe文件”编译成.exe后,将该可执行文件拿到其他机器
上不能运行的主要原因是( A )。
(A)运行的机器上无VB系统 (B)缺少.frm窗体文件 (C)该可执行文件有病毒 (D)以上原因都不对 6. VB6.0集成开发环境可以( D )。
(A)编辑、调试、运行程序,但不能生成可执行程序 (B)编辑、调试、生成可执行程序,但不能运行程序 (C)编辑、生成可执行程序、运行程序,但不能调试 (D)编辑、调试、运行程序,也能生成可执行程序 7. VB6.0集成环境的主窗口中不包含( B )。
(A)菜单栏 (B)状态栏 (C)标题栏 (D)工具栏 8. 在设计阶段,当双击窗体上的某个控件时,所打开的窗口是( C )。
(A)工程资源管理器窗口 (B)工具箱窗口 (C)代码窗口 (D)属性窗口
9. 下面四个选项中,不是VB6.0工具箱的标准控件的是( C )。
1
(A)滚动条 (B)定时器 (C)多媒体 (D)框架
10. VB6.0的( C )版本,可供专业编程人员开发功能强大的组内分布式应用程序。
(A)初级版 (B)学习版 (C)企业版 (D)专业版 11. 英文缩写“OOP”的含义是( A )。
(A)面向对象程序设计 (B)结构化程序设计语言 (C)事件驱动的编程机制 (D)可视化程序设计 12. 不能打开代码窗口的操作是( B )。
(A)双击窗体设计器的任意地方 (D)选择视图菜单中的“代码窗口”
(B)按下F4键 (C)单击工程资源管理器中的“查看代码”按钮 13. 标准模块的扩展名是( C )。
(A).frm (B).bmp (C).bas (D).vbp 14. 窗体文件的扩展名是( A )。
(A).frm (B).bmp (C).bas (D).vbp 15. 工程文件的扩展名是( D )。
(A).frm (B).vbg (C).bas (D).vbp 16. 不能打开属性窗口的操作是( D )。
(A)单击工具栏上的“属性窗口”按钮 (B)选择视图菜单中的“属性窗口” (C)按下F4键 (D)选择工程菜单中的“属性窗口” 17. 不能打开对象窗口的操作是( A )。
(A)按下F2键 (B)单击工程资源管理器中的“查看对象”按钮 (C)按下Shift+F7组合键 (D)选择视图菜单中的“对象窗口” 18. 不能打开资源管理器窗口的是( B )。
(A)单击工具栏上的“工程资源管理器”按钮
(B)在窗体上单击右键,从弹出的快捷菜单中选择“工程资源管理器”选项 (C)选择视图菜单中的“工程资源管理器” (D)按Ctrl+R 19. 下面四个选项中,不是工程资源管理器管理的文件是( B )。
2
(A)窗体文件 (B)图形文件 (C)标准模块文件 (D)工程文件 20. 与传统的程序设计语言相比,vb6最突出的特点是( B )。
(A)结构化程序设计 (B)事件驱动编程机制 (C)集成开发环境 (D)程序调试技术 21. VB窗体设计器的主要功能是( A )。
(A)建立用户界面 (B)编写员程序代码 (C)画图 (D)显示文字
22. 用标准工具栏中的工具按钮不能执行的操作是( D )。
(A)添加窗体 (B)添加工程 (C)打开工程 (D)添加模块 23. 下属选项中,属于VB的程序设计方法是( B )。
(A)面向对象、顺序驱动 (B)面向对象,事件驱动 (C)面向过程,事件驱动 (D)面向过程,顺序驱动 二、填空题
1. 当进入VB集成环境,发现没有显示“工具箱”窗口时,应选择( 视图 )菜单的( 工具箱 )
选项,使“工具箱”窗口显示。
2. VB6.0集成环境的主窗口由标题栏、菜单栏和(工具栏)组成。 3. VB6.0集成环境有三种工作状态,工作状态显示在(标题栏 )。 4. VB6.0提供了3种版本,这三种版本是(学习版,专业版,企业版 )。
5. VB6.0有设计、中断和运行三种工作状态,立即窗口不能在(运行)状态下使用。 三、简答题
1. 运行VB6.0需要什么样的最小硬件环境?只要能运行Windows9x或Windows NT并具有140MB以上的
硬盘空间即可。
2. 当正常安装VB6.0后,误把Windows子目录删除。当重新安装Windows后,是否要再安装VB6.0?要
再安装Visual Basic6.0。因为安装VB6.0时,有些VB程序系统自动安装在Windows98目录下,所以一旦删除Windows98子目录,就必须再安装VB6.0。
3. VB6.0有学习版、专业版和企业版,怎样知道所安装的是哪个版本?在启动VB6.0的启动封面上,能显
示对应的版本。
3
4. VB6.0有多种类型的窗口,若想在设计时看到代码窗口,怎样操作?
法:
(1)热键F7 (2)―视图‖—> ―代码窗口‖ (3)在窗体窗口中双击任一控件或窗体本身
(4)从工程窗口中选择窗体或模块后单击―查看代码‖按钮。
5. 如何使各窗口显示或不显示?单击要操作窗口的“关闭”按钮时,则不显示该窗口;选择“视图”菜单
的对应的窗口命令显示所需的窗口。 6. 叙述VB6.0的特点。
VB的特点:
(1)具有面向对象的可视化设计工具; (2)事件驱动的编程机制;
(3)提供了易学易用的应用程序集成开发环境; (4)结构化的程序设计语言; (5)支持多种数据库系统的访问; (6)Active技术;
(7)VB 6.0在开发环境上、网络功能等的增强; (8)完备的help联机帮助功能。 第二章一.选择题
1. 假定已在窗体上画了多个控件,并有一个控件是活动的,为了在属性窗口中设置窗体的属性,预先执行
的操作是( A )。
(A)单击窗体上没有控件的地方 (B)单击任一个控件 (C)不执行任何操作 (D)双击窗体的标题栏
2. 在VB中最基本的对象是( C ),它是应用程序的基石,是其它控件的容器。
(A)文本框 (B)命令按钮 (C)窗体 (D)标签
4
3. 有程序代码如下:text1.text=“visual basic” 则:text1、text和“visual basic”分别代表( C )。
(A)对象,值,属性 (B) 对象,方法,属性 (C) 对象,属性,值 (D) 属性,对象,值
4. VB是一种面向对象的程序设计语言,( A )不是面向对象系统所包含的三要素。 (A)变量 (B)事件 (C)属性 (D)方法
5. VB的一个应用程序至少包括一个( B )文件,该文件存储窗体上使用的所有控件对象和有关的
( )、对象相应的( )过程和( )代码。
(A)模块、方法、事件、程序 (B)窗体、属性、事件、程序
(C)窗体、程序、属性、事件 (D)窗体、属性、事件、方法
6. 在VB6.0环境已有应用程序的情况下,要重新建立一个工程的操作是( C )。
(A)单击工具栏上的“添加工程”按钮
(B)在工程资源管理器窗口上单击右键,在弹出的快捷菜单中选择“新建工程”选项 (C)选择“文件”菜单中的“新建工程” (D)选择“视图”菜单中的“新建工程”
7. 为了把窗体上的某个控件变为活动,应执行的操作是( B )。
(A)单击窗体的边框 (B)单击该控件的内部 (C)双击该控件 (D)双击窗体 8. 确定一个控件在窗体上的位置的属性是( C )。
(A)Width和Height (B)Width或Height (C)Top和Left (D)Top或Left 9. 确定一个窗体或控件的大小的属性是( B )。
(A)Width和Height (B)Width或Height (C)Top和Left (D)Top或Left
10. 对于窗体,下面( D )属性可以在程序运行时进行设置。
(A)MaxButton (B)BorderStyle (C)Name (D)Left
11. 要使Print方法在Form_Load事件中起作用,要对窗体的( C )属性进行设置。
5
k = 4 m = 1 p = func(k, m) Print p; p = func(k, m) Print p End Sub
程序运行后,单击命令按钮,输出结果为:8 8 8. 阅读程序: Dim a%, b%, c% Public Sub p1(x%, y%) Dim c%
x = 2 * x: y = y + 2: c = x + y End Sub
Public Sub p2(x%, ByVal y%) Dim c%
x = 2 * x: y = y + 2: c = x + y End Sub
Private Sub command1_click() a = 2: b = 4: c = 6 Call p1(a, b) Print a, b, c Call p2(a, b) Print a, b, c
End Sub 4 6 6 程序运行后,单击命令按钮,输出结果为:8 6 6
9. 阅读程序:
Private Sub command1_click() Dim m%, i%, x%(10)
41
For i = 0 To 4 x(i) = i + 1 Next i For i = 1 To 2 Call proc(x()) Next i For i = 0 To 4 Print x(i) Next i End Sub
Public Sub proc(a%()) Static i% Do
a(i) = a(i) + a(i + 1) i = i + 1 Loop While i < 2 End Sub
程序运行后,单击命令按钮,输出结果为:3 5 7 4 5 10. 阅读程序:
Private Sub command1_click() Print p1(3, 7) End Sub
Public Function p1!(x!, n%) If n = 0 Then p1 = 1 Else
If n Mod 2 = 1 Then p1 = x * p1(x, n \\ 2) Else
p1 = p1(x, n \\ 2) \\ x
42
End If End If
End Function程序运行后,单击命令按钮,输出结果为:27 11. 阅读程序:
Private Sub command1_click() Dim x%, y%, z%, w% x = 9 y = 8 z = 2 w = 6
Call s1(x, y, z, w) Print x; y; z; w End Sub
Private Sub s1(a%, b%, ByVal c%, ByVal d%) a = a + 1 b = b + 2 c = c + 3 d = d + 4
End Sub程序运行后,单击命令按钮,输出结果为:10 10 2 6 12. 阅读程序:
Private Sub command1_click() Dim x%, y% x = 9: y = 8 Call s1(5, 7, x, y) Print x; y End Sub
Private Sub s1(a%, b%, ByVal c%, ByVal d%) c = c + a: d = d + b
End Sub程序运行后,单击命令按钮,输出结果为:9 8 13. 阅读程序:
43
Private Sub command1_click() Dim x%, y%, z% x = 5: y = 7: z = 0 Call s1(x, y, z) Print x; y; z End Sub
Private Sub s1(ByVal a%, ByVal b%, c%) c = a + b
End Sub程序运行后,单击命令按钮,输出结果为:5 7 12 14. 阅读程序: Private i As Integer Private Sub abc() a$ = Chr(Asc(\ Print a$; \End Sub
Private Sub command1_click() For i = 0 To 4 abc Next i
End Sub程序运行后,单击命令按钮,输出结果为:A;B;C;D;E; 15. 阅读程序: Private Sub abc() a$ = Chr(Asc(\ Print a$; \End Sub
Private Sub command1_click() For i = 0 To 4 abc Next i
End Sub程序运行后,单击命令按钮,输出结果为:A;A;A;A;A;
44
16. 阅读程序:
Function M(x%, y%) As Integer M = IIf(x > y, x, y) End Function
Private Sub command1_click() Dim a As Integer, b As Integer a = 100 b = 200 Print M(a, b)
End Sub程序运行后,单击命令按钮,输出结果为:200 17. 阅读程序: Private i As Integer Private Sub abc() a$ = Chr(Asc(\ b$ = Chr(Asc(\ Print a$ & b$; \End Sub
Private Sub command1_click() Dim x As Integer For i = 0 To 4 x = x + 1 abc Next i
End Sub程序运行后,单击命令按钮,输出结果为:AZ;BZ;CZ;DZ;EZ; 四、简答题
1. 子过程与函数过程的异同点是什么? 2. 什么是形参?什么事实参?
3. 调用子过程或函数过程时,实参与形参的对应关系如何?应注意什么问题? 4. 值传递与地址传递的选择与其特点是什么?
45
的维数。例如,如下语句: Dim a() ReDim a(3,4) ReDim Preserve a(4,5)
程序执行到ReDim Preserve a(4,5)时显示“下标越界”出错信息,也就是只能改变第二个下标的大小,而不能改变第一个下标的大小。 7. 利用随机数生成两个矩阵:
Dim a%(1 to 4, 1 to 4), b%(1 to 4, 1 to 4), c%(1 to 4, 1 to 4) Private Sub Form_Click() For i=1 to 4 For j=1 to 4
a(i,j)=int(rnd*41+30) b(i,j)=int(rnd*35+101) next j, i End Sub
(1)将两个矩阵相加结果放入矩阵C中: for i=1 to 4 for j=1 to 4 c(i,j)=a(i,j)+b(i,j) next j, i (2)将矩阵a转置: for i=1 to 4 for j=1 to i-1
t=a(i,j): a(i,j)=a(j,i): a(j,i)=t next j, i
(3)统计矩阵c最大值和下标:
31
dim max%, maxi%, maxj% max=c(1,1): maxi=1: maxj=1 for i=1 to 4 for j=1 to 4 if c(i,j)>max then
max=c(i,j): maxi=i: maxj=j end if next j, i
(4)以下三角形式显示矩阵a、上三角形式显示矩阵b:
输出下三角元素:
for i=1 to 4
for j=1 to i
print a(i,j); space(4-len(a(i,j))); next j print
next i 输出上三角元素:
for i=1 to 4
for j=i to 4
print tab(j*4);b(i,j); next j print
next i
(5)将矩阵a第一行与第三行对应元素交换位置,即第一行元素放在第三行;第三行元素放在第一行:
for j=1 to 4
t=a(1,j) : a(1,j)=a(3,j) : a(3,j)=t
32
next j
(6)求矩阵a两条对角线之和: s=0 for i=1 to 4 s=s+a(i,i)+a(i,5-i) next i
(7)将矩阵a按列的次序把各元素放入一维数组d中,显示结果: dim d%(1 to 16) ,k% for i=1 to 4 for j=1 to 4 k=(j-1)*4+i d(k)=a(i,j) next j, i
8. 声明一个有20个元素的一维字符类型数组,要求:
(1)由随机数形成小写字母构成的数组,每个元素的字符个数由随机数产生,范围1~11。 Dim st(1 to 20) as string, c as string*1 Dim i%, n% For i=1 to 20 n=int(rnd*11+1) for j=1 to n
c=chr(int(rnd*26+97)) st(i)=st(i) & c next j print st(i) next i
(2)要求将生成的数组分四行显示。
33
For i=1 to 20
Print st(i); space(15-len(st(i))); If i mod 5=0 then print Next i
(3)显示生成的字符数组中字符最多的元素。 Maxlen=0 Maxstr=‖‖ For i=1 to 20
If len(st(i))>maxlen then Maxlen=len(st(i)) Maxstr=st(i) End if Next i
Print maxlen, maxstr
9. 自定义一个职工类型,包含职工号、姓名和工资。声明一个职工类型的动态数组。输入n个职工的数据,要求按工资递减的顺序排序,并显示排序的结果,每个职工一行显示三项信息。
Dim a() As zg, i%
Private Sub Command1_Click() i = i + 1
If i < n Then MsgBox (\人数超过\ With a(i) .gh = Val(Text1) .xm = Text2 .gz = Val(Text3) End With
Text1 = \ Text2 = \
34
End Sub
Private Sub Command2_Click() Picture1.Cls
Dim j%, k%, t As zg For j = 1 To i - 1 For k = j + 1 To i
If a(k).gz > a(k - 1).gz Then
t = a(k): a(k) = a(k - 1): a(k - 1) = t End If Next k Next j For j = 1 To i
Picture1.Print a(j).gh; a(j).xm; a(j).gz Next j End Sub
Private Sub Form_Load() Dim n%
n = InputBox(\输入人数\ ReDim a(1 To n) i = 0
End Sub
第六章 一、选择题
1. 下列叙述中正确的是( C )。
(A)在窗体的Form_Load事件中定义的变量是全局变量 (B)局部变量的作用域可以超出所定义的过程
(C)在某个Sub过程中定义的局部变量可以与其他事件过程中定义的局部变量同名,但其作用域只局
限于该过程。
35
(D)在调用过程时,所有局部变量被系统初始化为0 2. 下列四个叙述中,错误的是(C )。
(A)过程内用Dim语句定义的变量,它的作用域是此过程
(B)过程内用Static语句定义的变量,它的生存期与整个过程的运行期相同 (C)过程内用Dim语句定义的变量,它的生存期与整个过程的运行期相同
(D)若在模块的“通用声明”中写上语句:Option Explicit,则该模块的所有变量必须先说明后引用 3. 在过程定义中用(C )表示形参的传值。
(A)Var (B)ByDef (C)ByVal (D)Value
4. 若已编写了一个Sort子过程,在该工程中有多个窗体,为了方便地调用Sort子过程,应该将该过程放在
( B )中。
(A)窗体模块 (B)标准模块 (C)类模块 (D)工程
5. 在过程中定义的变量,若希望在离开该过程后,还能保存过程中局部变量的值,则应使用( D )关
键字在过程中定义局部变量。
(A)Dim (B)Private (C)Public (D)Static 6. 下面子过程语句说明合法的是( D )。
(A)Sub f1(Byval n%()) (B)Sub f1(n%) as integer
(C)Function f1%(f1%) (D)Function f1(Byval n%)
7. 要想从子过程调用后返回两个结果,下面子过程语句说明合法的是( C )。 (A)Sub f1(Byval n%, Byval m%) (B)Sub f1(n%, Byval m%)
(C)Sub f1(n%, m%) (D)Sub f1(Byval n%, m%) 8. 在VB应用程序中,以下正确的描述是( B )。 (A)过程的定义可以嵌套,但过程的调用不能嵌套
(B)过程的定义不可以嵌套,但过程的调用可以嵌套 (C)过程的定义和调用均不可以嵌套 (D)过程的定义和调用均可以嵌套 9. 以下叙述中错误的是( C )。
(A)一个工程中只能有一个Sub Main过程
(B)窗体的Show方法的作用是将指定的窗体装入内存并显示该窗体 (C)窗体的Hide方法和Unload方法的作用完全相同
(D)若工程文件中有多个窗体,可以根据需要指定一个窗体为启动窗体
36
10. 以下叙述中错误的是( D )。
(A)如果过程被定义为Static类型,则该过程中的局部变量都是Static类型 (B)Sub过程中不能嵌套定义Sub过程 (C)Sub过程中可以嵌套调用Sub过程
(D)事件过程中可以像通用过程一样由用户定义过程名 11. 定义带可变参数的过程,使用的关键字是( C )。
(A)Optional (B)Option (C)ParamArray (D)Private 12. 定义带可选参数的过程,使用的关键字是( A )。
(A)Optional (B)Option (C)ParamArray (D)Private 二、填空题
1. 在过程定义的首部出现的变量名叫做( 形式 )参数,而在调用过程中传送给过程的(常数、变
量、数组元素、表达式)叫做( 实在 )参数。
2. 定义和调用函数或过程时参数传递的两种方法是(按值传递,按地址传递)。
3. 在窗体的通用段用Dim语句定义的变量是(窗体)级变量,它只能在(本窗体)中使用。
4. 全局级过程在定义时可以默认,也可以使用关键字( Public )进行显示声明;窗体/模块级的过程声明时
要用关键字( Private)。
5. 用ParamArray关键字声明可变参数时,被声明的参数只能是(变体类型数组)。 6. 在带可选参数的过程中,使用(IsMissing )函数来测试可选参数是否被选。
三、分析运行结果
1. 阅读程序
Function f(a As Integer) Static c
b = 0: b = b + 1 c = c + 1: f = a + b + c End Function
Private Sub command1_click()
37
Dim a As Integer a = 2 For i = 1 To 3 Print f(a); Next i
End Sub程序运行后,单击命令按钮,输出结果为:4 5 6 2. 阅读程序
Sub s(x As Single, y As Single) t = x x = t / y y = t Mod y End Sub
Private Sub command1_click() Dim a As Single, b As Single a = 5 b = 4 s a, b Print a, b End Sub
程序运行后,单击命令按钮,输出结果为:1.25 1 3. 阅读程序
Function M(x%, y%) As Integer M = IIf(x > y, x, y) End Function
Private Sub command1_click() Dim a As Integer, b As Integer a = 1 b = 2 Print M(a, b)
38
End Sub
程序运行后,单击命令按钮,输出结果为:2 4. 阅读程序 Sub Inc(a As Integer) Static x As Integer x = x + a Print x; End Sub
Private Sub command1_click() Inc 2 Inc 3 Inc 4 End Sub
程序运行后,单击命令按钮,输出结果为:2 5 9 5. 阅读程序: Sub p(b() As Integer) For i = 1 To 4 b(i) = 2 * i Next i End Sub
Private Sub command1_click() Dim a(1 To 4) As Integer a(1) = 5 a(2) = 6 a(3) = 7 a(4) = 8 p a() For i = 1 To 4 Print a(i); Next i
39
End Sub程序运行后,单击命令按钮,输出结果为:2 4 6 8 6. 阅读程序:
Function fun(ByVal num As Long) As Long Dim k As Long k = 1
num = Abs(num) Do While num k = k * (num Mod 10) num = num \\ 10 Loop fun = k End Function
Private Sub command1_click() Dim n As Long, r As Long
n = Val(InputBox(\请输入一个数:\ r = fun(n) Print r End Sub
程序运行后,单击命令按钮,输入1234,输出结果为:24 7. 阅读程序:
Function func(a%, b%) As Integer Static m As Integer, i As Integer m = 0 i = 2 i = i + m + 1 m = i + a + b func = m End Function
Private Sub command1_click() Dim k%, m%, p%
40