2023年12月6日发(作者:)

《VB程序设计教程》(第4版)习题解答

单元一 巩固与提高答案

一、选择题

1. Visual Basic 6.0分为3种版本,不属于这3种版本的是

A)学习版 B)专业版 C)企业版

【答】D。

2. 下列方法中不能退出Visual Basic的是

A)按Alt+Q组合键

B)按下Alt+F组合键,然后按Esc键

C)按F10键,然后按F键,再按X键

D)打开“文件”菜单→“退出”命令

【答】B。

3. Visual Basic集成的主窗口中不包括

A)属性窗口 B)标题栏 C)菜单栏

【答】A。

4. 下列操作可以打开立即窗口的是

A)Ctrl+D B)Ctrl+F C)Ctrl+G

【答】C。

二、填空题

1. 与传统的程序设计语言相比,Visual Basic最突出的特点是____。

【答】事件驱动编程机制。

2. 如果不使用鼠标,用键盘打开菜单和执行菜单命令,第一步应按____键。

【答】功能键F10或Alt键。

3. 建立一个新的标准模块,应该选择____菜单下的“添加模块”命令。

【答】“工程”菜单。

三、思考题

D)业余版

D)工具栏

D)Ctrl+E 1. 简述Visual Basic的特点。

【答】与一般的程序设计语言相比,VB具有以下特点:

(1) 可视化的设计平台;

(2) 面向对象的设计方法;

(3) 事件驱动的编程机制;

(4) 结构化的设计语言;

(5) 充分利用Windows资源;

(6) 开放的数据库功能与网络支持。

2. 简述Visual Basic集成开发环境的组成。

【答】VB 6.0集成开发环境除了具有标准Windows环境的标题栏、菜单栏、工具栏外,还有工具箱、属性窗口、工程管理器窗口、窗体设计器、立即窗口、窗体布局窗口等有用的开发工具。

(1) 标题栏和菜单栏:标题栏中显示的有窗体控制菜单图标、当前激活的工程名称、当前工作模式以及最小化、最大化∕还原、关闭按钮。菜单栏中显示了“文件”、“编辑”、“视图”、“工程”、“格式”等菜单项,其中包含了VB编程的常用命令。单击菜单栏中的菜单名,即可打开下拉菜单。在下拉菜单中显示了各种功能子菜单,包含执行该项功能的热键和快捷键。

(2) 工具栏及数字显示区:在菜单栏的下面是工具栏,工具栏提供了许多常用命令的快速访问按钮。单击某个按钮,即可执行对应的相关操作。数字显示区包含两个部分,左数字区显示的是对象的坐标位置(窗体工作区的左上角为坐标原点,即(0,0)位置),右数字区显示的是对象的高度(向下递增)和宽度,即对象的大小。

(3) 工具箱:标准工具箱包含了建立应用程序所需的各种控件。另外,VB还提供了很多ActiveX控件可以添加到工具箱中。

(4) 工程管理器窗口:采用Windows资源管理器式的界面,层次分明地列出当前工程中的所有文件。

(5) 属性窗口:“属性”窗口包含选定对象(窗体或控件)的属性列表,在设计程序时可通过修改对象的属性设计其外观和相关数据,这些属性值将是程序运行时各对象属性的初始值。

(6) 窗体设计器:也称为“对象窗口”,每一个应用程序中的窗体,都有与之对应的窗体设计器窗口。

(7) 窗体布局窗口:用来显示窗体在屏幕中的位置。

(8) 立即窗口:使用立即窗口可以在中断状态下查询对象的值,也可以在设计时查询表达式的值或命令的结果。

3. 属性窗口主要包括哪些内容?

【答】“属性窗口”的内容包括: (1) 对象下拉列表框:标识当前选定对象的名称以及所属的类。单击右端的下拉箭头,可列出当前窗体以及所包含的全部对象的名称,可从中选择要更改其属性的对象。

(2) 选项卡:可按字母排序和分类排序两种排序方式显示所选对象的属性。

(3) 属性列表框:属性列表框中列出了当前选定的窗体或控件的属性设置值。左半边显示所选对象的所有属性名,右半边是属性值。可以直接在属性窗口中修改属性值,有的属性取值具有预定值,如右侧显示“三点”式按钮或“下拉箭头”式按钮,都有预定值可供选择。在“属性”列表中双击属性值可以遍历所有选项。选择任一属性并按F1键可得到该属性的帮助信息。

(4) 属性说明:显示当前属性的简要说明。可通过右键快捷菜单中的“描述”菜单来切换显示或隐藏“属性说明”。

4. 打开属性窗口的方法有哪些?

【答】可通过以下方法之一打开属性窗口:

(1)单击工具栏中的“属性窗口”按钮。

(2)单击“视图”菜单→“属性窗口”命令。

单元二 巩固与提高答案

一、选择题

1. 在VB中,被称为对象的是

A)窗体 B)控件

C)控件和窗体 D)窗体、控件和属性

【答】C。

2. 关于VB“方法”的概念错误的是

A)方法是对象的一部分 B)方法是预先定义好的操作

C)方法是对事件的响应 D)方法用于完成某些特定的功能

【答】C。

3. 确定窗体控件启动位置的属性是

A)Width和Height B)Width或Height

C)StartUpPositon D)Top和Left

【答】C。

4. 下列说法正确的是

A)对象的可见性可设为True或False B)标题的属性值不可设为任何文本

C)属性窗口中属性只能按字母顺序排列

D)某些属性的值可以跳过不设置,自动设为空值

【答】A。

5. 下列说法错误的是

A)方法是对象的一部分

B)在调用方法时,对象名是不可缺少的

C)方法是一种特殊的过程和函数

D)方法调用格式和对象属性使用格式相同

【答】B。

6. 下列说法错误的是

A)窗体文件的扩展名为.frm

B)一个窗体对应一个窗体文件

C)VB中一个工程只包含一个窗体

D)VB中一个工程最多可以包含255个窗体

【答】C。

7. 一个工程必须包含的文件的类型是

A)*.vbp *.frm *.frx B)*.vbp *.cls *.bas

C)*.bas *.ocx */res D)*.frm *.cls *.bas

【答】A。

8. 新建一个窗体,其BorderStyle属性设置为Fixed Single,但运行时却无最大化和最小化按钮,可能的原因是

A)BorderStyle的值设为,其设置值的作用即禁止最大化和最小化按钮

B)窗体的MaxButton和MinButton值设为False

C)正常情况下新建的窗体都没有最大化和最小化按钮

D)该窗体可用鼠标拖动框的方法改变窗体的大小

【答】B。

二、填空题

1. VB程序设计采用的编程机制是____。

【答】事件驱动。

2. VB对象可以分为两类,分别为____和____。 【答】预定义对象;用户定义对象。

三、思考题

1. 什么是对象?什么是对象的属性、事件和方法?

【答】在可视化编程语言中,对象是代码和数据的集合,它可以是窗体和控件,也可以是菜单或数据库等。从可视化编程的角度来看,这些对象都具有属性(数据)和方法(行为方式)。简单地说,属性是用于描述对象的一组特征,方法是对象实施的一些动作,对象的动作则常常要触发事件,而触发事件又可以修改属性。一个对象建立以后,其操作就通过与该对象有关的属性、事件和方法来描述。

2. 如何创建一个应用程序?

【答】

(1)设计界面。先建立窗体,再利用控件在窗体上创建各种对象。

(2)设置属性。设置窗体或控件等对象的属性。

(3)编写代码。编写对象的事件代码。

(4)运行调试程序。

3. 如何在当前窗体上创建和删除一个对象?

【答】向窗体中添加控件的步骤为:

(1)单击工具箱中的控件图标,鼠标指针变成一个十字指针。

(2)在窗体的工作区按住鼠标左键拖动鼠标,即可在窗体上画出对应控件。

删除一个对象的方法为:选中要删除的对象,按键盘上的Delete键。

4. 如何设置对象的属性?

【答】设置对象的属性有两种方式:

(1) 预设法:在设计界面时,使用属性窗口设置对象的属性。这时只要在属性窗口中选中要修改的属性,然后在右列中键入新的值即可。

(2) 现改法:在编写代码的过程中,通过程序代码更改对象的属性。在程序中设置属性的语法格式为:

对象名.属性名 = 属性值

5. 建立对象后,每个属性都有一个默认值,“(名称)”属性和Caption属性的默认值相同,它们有什么区别?能否用代码修改“(名称)”属性?

【答】建立对象后,名称属性是事件驱动的标识,而Caption属性是显示在窗体上标签提示。在编写代码中,不能用代码修改“(名称)”属性,而能用代码修改Caption属性。

6. 在没有关闭程序的情况下,如果又添加了一个工程,但运行时会发现运行的仍是第一个工程,这是什么原因?如何解决?

【答】这是因为VB默认“工程1”为启动工程。解决办法为:在工程资源器窗口中,右键单击添加的“工程”,在快捷菜单中选择“设置为启动”即可。

单元三 巩固与提高答案

一、选择题

1. 以下关于VB数据类型的说法,不恰当的是

A)VB 6.0提供的数据类型主要有字符串型和数值型,此外还有字节、货币、对象、日期、布尔和变体数据类型等

B)目前Decimal数据类型只能在变体类型中使用

C)用户不能定义自己的数据类型

D)布尔型数据只能取两种值,用两个字节存储

【答】C。

2. 以下各项,可以作为VB变量名的是

A)Book B)2_Seek C)123.58 D)Book-1

【答】A。

3. 下列哪个符号不能作为VB中的变量名?

A)ABCDEFG B)P000000 C)89TWDDFF D)xyz

【答】C。

4. 下列( )是VB中的合法变量名。

A)AB7 B)7AB C)IF D)A[B]7

【答】A。

5. 表达式2 *3^2 + 2 * 8 / 4 + 3^2的值为

A)64 B)31 C)49 D)22

【答】B。

6. 函数Int(Rnd(0)*10)是在( )范围内的整数。

A)( 0 , 1 ) B)( 1 , 10 ) C)( 0 , 9 ) D)( 1 , 9 )

【答】C。

7. 表达式3 ^ 2 Mod 14\2^3的值是 A)1 B)0 C)2 D)3

【答】B。

8. 在VB中,下列两个变量名相同的是

A)Japan和Ja_pan B)English和ENGLish

C)English和Engl D)China和Chin

【答】B。

9. 数学式子sin25°写成VB表达式是

A)Sin25 B)Sin(25) C)Sin(25°) D)Sin(25*3.14/180)

【答】D。

10. 在VB中,要强制用户对所用的变量进行显式声明,可以在( )设置。

A)“属性”对话框 B)“程序代码”窗口

C)“选项”对话框 D)对象浏览器

【答】C。

11. 下列符号常量的声明中,不合法的是

A)Const a As Single = 1.1 B)Const a =″OK″

C)Const a As Double = Sin(1) D)Const a As Integer =″12″

【答】C。

12. 在代码编辑器中,续行符是换行书写同一个语句的符号,用以表示续行符的是

A)一个空格加一个下划线“_” B)一个下划线“_”

C)一个造字符“-” D)一个空格加一个连字符“-”

【答】A。

二、填空题

1. 如果希望使用变量x来存放数据765 432.123 456,应将变量x声明为____类型。

【答】双精度型。

2. 把VB算术表达式a/(b + c/(d + e/Sqr(f)))改写成数学表达式为____。

abdcef【答】。 3. 如果x是一个正实数,对x的第3位小数四舍五入的表达式是____。

【答】0.01 * Int(100 * (x + 0.005))。

4. 函数Str$(256.36)的值是____。

【答】256.36。

三、思考题

1. VB定义了哪几种数据类型?变量有哪几种数据类型?常量有哪几种数据类型?

【答】VB 6.0定义了11种数据类型,它们是整型、长整型、单精度浮点型、双精度浮点型、字符型(变长字符串、定长字符串)、逻辑型、日期型、货币型、字节型、对象型、可变类型(数值、字符)。

变量的数据类型有数值型、字符型、逻辑型、日期型、对象型、可变数据类型。其中,数值型变量的数据类型有:整型、长整型、单精度浮点型、双精度浮点型、货币型和字节类型。字符型变量的数据类型有变长字符串和定长字符串。

整型长整型单精度浮点型数值型双精度浮点型货币型字节型变量的数据类型变长字符串字符型定长字符串逻辑型日期型对象型数值可变型字符

常量的数据类型有:字符串常量、数值常量、逻辑常量、日期常量。

整型长整型单精度浮点型数值型双精度浮点型常量的数据类型货币型字节型字符型逻辑型日期型

2. 下列数据哪些是变量?哪些是常量?是什么类型的常量?

(1)name (2) "name" (3)False (4)ff (5)"11/16/99" (6)cj (7)"120" (8)n

(9)#11/16/1999# (10)12.345

【答】变量有(1),(4),(6),(8)。

常量有(2),(3),(5),(7),(9),(10)。其中:(2),(5),(7)为字符型常量,(3)为逻辑型常量,(9)为日期型常量,(10)为数值型常量。

3. 在VB中,对于没有赋值的变量,系统默认值是什么?

【答】使用声明语句建立一个变量后,VB自动将数值类型的变量赋初值0,变长的字符串被初始化为一个零长度的字符串(""),而定长的字符串则用空格填充。Variant变量被初始化为Empty,逻辑型的变量则初始化为False。

4. 将下列数学表达式改写为等价的VB算术表达式。

yx (1)y1x1(2)|abc3| (3)s(sa)(sb)(sc)

【答】VB中的算术表达式与数学中的表达式写法有所区别,主要表现在:VB中每个符号占1格,所有符号都必须一个一个并排写在同一横线上,不能在右上角或右下角写方次或下标;在数学表达式中省略的内容必须重新写上;所有括号都要使用小括号“( )”,而且括号必须配对;数学表达式中的有些符号,需要改成VB中可以表示的符号。

(1)(1 + y / x) / (1 – y / x)

(2)(Abs( a * b – c^3))^0.5

或 (Abs(a * b – c^3))^(1 / 2)

或 Sqr(Abs(a * b – c^3))

(3)(s * (s – a) * (s – b) * (s – c))^0.5

或 (s * (s – a) * (s – b) * (s – c) )^(1 / 2)

或 Sqr(s * (s – a) * (s – b) * (s – c))

5. 写出下列表达式的值。

(1)( 2 + 8 * 3 ) / 2 (2)3^2 + 8

(3)#11/22/99# – 10 (4)"ZYX" & 123 & "ABC"

【答】题中各表达式的值分别为:

(1)13 (2)17

(3)#11/12/99# (4)"ZYX123ABC"

6. 设A = 7, B = 3, C = 4,求下列表达式的值:

(1)A + 3 * C (2)A^2 / 6 (3)A / 2 * 3 / 2

【答】题中各表达式的值分别为:

(1)19

(3)5.25

7. 写出下列表达式的值。

(1)"Visual"+"Basic"

【答】题中各表达式的值分别为:

(1)"VisualBasic"

8. 写出下列函数的值。

(1)Int(–3.14159)

(3)Int(Abs(99–100)/2)

【答】函数的值为:

(1)– 4

(3)– 3

(4)A Mod 3 +B^3 / C 5

(2)8.667

(4)2

(2)"xyz" & 1234 & "ABCD"

(2)"xyz1234ABCD"

(2)Sqr(Sqr(64))

(4)Sgn(7*3+2)

(2)2.828427

(4)1

单元四 巩固与提高答案

一、选择题

1. 要将名为MyForm的窗体显示出来,正确的使用方法是

A) B)

C)MyForm Load D)MyForm Show

【答】A。

2. 如果要将窗体中的某个命令按钮设置成无效状态,应设置命令按钮的( )属性。

A)Value B)Visible C)Enabled D)Default

【答】C。

3. 输入代码时,VB可以自动检测( )错误。

A)语法错误 B)编译错误 C)运行错误 D)逻辑错误

【答】A。

4. 在VB中,要将一个窗体加载到内存进行预处理但不显示,应使用的语句是

A)Load B)Show C)Hide D)Unload 【答】A。

5. 以下能在窗体Form1的标题栏中显示"VisualBasic窗体"的语句是

A)="VisualBasic窗体"

B)="VisualBasic窗体"

C)n="VisualBasic窗体"

D)="VisualBasic窗体"

【答】C。

6. 对下列程序段,说法正确的是( )

=2000 : =800

A)Text对象的左边界距窗体的左边界是800twip,上边界距窗体的上边界为2000twip

B)Text1的左边界距屏幕的左边界为800twip,上边界距屏幕的上边界为2000twip

C)Text1对象的宽度为2000twip,高度为800twip

D)Text1对象的高度为800点,宽度为2000点

【答】A。

7. 单击窗体上的关闭按钮时,触发的事件是

A)Form_Initialize() B)Form_Load()

C)Form_Unload() D)Form_Click()

【答】C。

8. 用于将屏幕上的对象分组的控件是

A)列表框 B)组合框 C)标签 D)框架

【答】D。

9. 能够获得一个文本框中被选取文本的内容的属性是

A)Text B)Length C)Seltext D)SelStart

【答】C。

10. 用InputBox函数设计的对话框,其功能是

A)只能接收用户输入的数据,但不会返回任何信息

B)能接收用户输入的数据,并能返回用户输入的信息

C)既能用于接收用户输入的信息,又能用于输出信息

D)专门用于输出信息

【答】B。 二、填空题

1. 下列语句的输出结果为____。

Print Format$(5689.36,″000,000.000″)

【答】005,689.360。

2. 为了使一个窗体从屏幕消失但仍在内存中,所使用的方法或语句为____。

【答】Hide方法。

3. 当对象得到焦点时,会触发____事件,当对象失去焦点时将触发____事件。

【答】GotFocus;LostFocus。

4. 新建一个工程,内有两个窗体,窗体Form1上有一个命令按钮Command1,单击该按钮,Form1窗体消失,显示Form2窗体,试补充程序。

Private Sub Command1_Click() ____

Form2.____

End Sub

【答】或者或者Unload Me;Show。

5. 在文本框中要使键入的所有字符显示为*号,应设置____属性为"*"。

【答】PasswordChar。

三、编程题

1. 设计工程,已知圆的半径r,求圆面积S。

【解答】 设圆半径为r,圆面积为S。根据数学知识,已知圆半径r,求圆面积S的公式为:Sr2。

设计步骤如下。

(1)建立应用程序用户界面,如图4-1所示。

(2)设置对象属性:

Label1的Caption属性为“已知圆半径r=”;

Text1的Text属性为空;

Command1的Caption属性为“圆面积为:”;

Label2的Caption属性为空;

Label2的BorderStyle属性为1-Fixed Single。

各控件的属性设置如图4-2所示。

图4-1

建立用户界面

图4-2

设置各控件的属性

(3)编写程序代码。

写出“圆面积为:”命令按钮Command1的Click事件代码为:

Private Sub Command1_Click( )

Const pi = 3.14

Dim r As Single, S As Single

r = Val()

S = pi * r ^ 2

n = S

End Sub

运行程序时,在文本框输入圆半径的值,单击“圆面积为:”按钮后,输出结果如图4-3所示。

也可以不用文本框接收输入值,改用InputBox函数接收圆的半径r,求圆面积S,代码如下。

图4-3

程序运行结果

Private Sub Form_Load( )

Show

Const pi = 3.1415926

Dim r As Single, S As Single

r = Val(InputBox("输入半径:", "计算圆面积", "10"))

FontSize = 18

S = pi * r ^ 2

Print "圆面积:"; S

End Sub 程序运行时,首先显示如图4-4所示的对话框,在该对话框的文本框中输入数字,按Enter键或单击“确定”按钮后,才能显示窗体。

图4-4

输入对话框

用InputBox函数输入文本虽然很方便,但是由于输入框弹出后将暂停程序的运行,直到用户响应,因此输入框不符合VB自由环境的精神。输入框适合于像要求用户输入口令等这样不常见的输入方式。还可以用更好的用户输入方式,如文本框、选项按钮等。

2. 已知平面坐标系中两点的坐标,求两点间的距离。

【解答】 由数学知识可知,已知两点坐标(xA, yA)、(xB, yB),求两点间距离的计算公式为

s(xBxA)2(yByA)2

建立用户界面如图4-5所示。在该界面中用TextBox控件输入数据,用Label控件输出数据。为了形象地表示两点之间的距离,可用Picture控件插入一幅图,该图用画图软件绘制。

命令按钮Command1的Click事件代码为:

Private Sub Command1_Click( )

Dim xa As Single, xb As Single

Dim ya As Single, yb As Single

Dim s As Single

xa = Val()

ya = Val()

xb = Val()

yb = Val()

s = Sqr((xb - xa) ^ 2 + (yb - ya) ^ 2)

n = s

End Sub

程序运行结果如图4-6所示。

图4-5

设计用户界面

图4-6

程序运行结果

3. 在文本框中输入三种商品的单价、购买数量,计算并输出所用的总金额。

【解答】 假设第一种商品的单价和购买数量分别是a1和a2,第二种商品的单价和购买数量分别是b1和b2,第三种商品的单价和购买数量分别是c1和c2,所用总金额为x。通过TextBox控件输入这三种商品的单价、购买数量,然后利用公式x = a1*a2+b1*b2+c1*c2进行计算,最后输出x的值。

设计步骤如下。

(1)建立应用程序用户界面,并设置对象属性,如图4-7所示。

图4-7

计算商品总金额

(2)编写程序代码。

写出Command1_Click( )的事件代码为:

Private Sub Command1_Click( )

Dim a1 As Single, b1 As Single, c1 As Single

Dim a2 As Integer, b2 As Integer, c2 As Integer

Dim x As Single

a1 = Val()

a2 = Val()

b1 = Val()

b2 = Val()

c1 = Val()

c2 = Val()

x = a1 * a2 + b1 * b2 + c1 * c2

= x

End Sub

4. 设计工程,输出在指定范围内的三个随机数,范围在文本框中输入。

【解答】 随机函数Rnd( )可以返回一个(0,1)区间中的随机小数,那么,Rnd * a语句可以返回(0, a)区间中的随机实数(带小数)。

若n, m均为整数,则表达式:Int((m + 1 – n) * Rnd) + n的值是闭区间[ n, m ]中的一个随机整数。

设计步骤如下。

(1)设计程序界面及设置控件属性。新建一个工程,进入窗体设计器,在窗体中增加一个框架控件Frame1,一个命令按钮Command1和三个标签Label1~Label3。选定Frame1,在其中增加两个文本框Text1和Text2以及一些标签。修改对象属性参见表4-1。设置属性后的窗体如图4-8所示。

表4-1 属性设置

对 象

Frame1

Command1

Label1~Label3

Text1, Text2

属 性

Caption

Caption

Caption

Text

属 性 值

请指定随机整数的范围:

生成随机数

0

0, 1

说 明

框架的标题

按钮的标题

(2)编写程序代码。

Private Sub Command1_Click( )

Randomize

n = Val()

m = Val()

n = Int((m + 1 – n) * Rnd) + n

n = Int((m + 1 – n) * Rnd) + n

n = Int((m + 1 – n) * Rnd) + n

End Sub

运行程序,在文本框中输入范围值后,单击“生成随机数”按钮,可以不断生成指定范围之内的随机整数,如图4-9所示。

图4-8

设计用户界面

图4-9

生成随机数

5. 使用大小写转换函数设计程序,实现在文本框中输入英文字母,按“转大写”按钮,文本变为大写;按“转小写”按钮,文本变为小写。

【解答】 本题主要使用大小写转换函数UCase( )和LCase( ),另外还用到了KeyUp(键抬起)事件。

设计步骤如下。

(1)建立应用程序用户界面,并设置对象属性。新建一个工程,进入窗体设计器,在窗体中增加一个标签Label1,一个文本框Text1和三个命令按钮Command1~Command3,参照图4-10设置各个对象的属性。

(a)

(b)

(c)

图4-10

大小写转换

(2)设计代码。

首先设计文本框的KeyUp事件代码,使得输入的字符存入文本框的Tag属性中:

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)

=

End Sub

编写命令按钮Command1的Click事件代码:

Private Sub Command1_Click( )

= UCase()

End Sub

编写命令按钮Command2的Click事件代码:

Private Sub Command2_Click( )

= LCase()

End Sub

编写命令按钮Command3的Click事件代码:

Private Sub Command3_Click( )

=

End Sub

6. 设某职工应发工资x元,试求各种票额钞票总张数最少的付款方案。

【解答】 可以从最大的票额(100元)开始,算出所需的张数,然后在剩下的部分算出较小票额的张数,直到最小票额(1元)。

设计步骤如下。 (1)建立应用程序用户界面。新建一个工程,进入窗体设计器,增加一个命令按钮Command1,14个标签Label1~Label14,七个文本框Text1~Text7。用户界面如图4-11(a)所示。

(a)

(b)

图4-11

建立程序界面与程序运行结果

(2)设置对象属性,参见表4-2。其中标签的标题属性参见图4-11(a)。

表4-2 属性设置

对 象

Text1

属 性

Text

Text

Text2~Text7 Alignment

Locked

Command1

Caption

Default

属 性 值

0

1-Right Justify

True

应付

True

说 明

文本框的内容

文本框的内容

文本内容右对齐

文本内容只读

按钮标题

窗体的默认按钮

(3)编写程序代码。

编写命令按钮Command1的Click事件代码:

Private Sub Command1_Click( )

x = Val()

y = x 100 : = y

x = x – 100 * y

y = x 50 : = y

x = x – 50 * y

y = x 10 : = y

x = x – 10 * y

y = x 5 : = y

x = x – 5 * y

y = x 2 : = y

x = x – 2 * y : = x

End Sub

' x为实发工资数

' 求100元票张数并显示

' 求剩余款项

' 求50元票张数并显示

' 求剩余款项

' 求10元票张数并显示

' 求剩余款项

' 求5元票张数并显示

' 求剩余款项

' 求2元票张数并显示

' 求1元票张数并显示

编写文本框Text1的Change事件代码:

Private Sub Text1_Change( ) ' 当在Text1中输入新数时,清空其他文本框中的内容

= ""

= ""

= ""

= ""

= ""

= ""

End Sub

运行结果如图4-11(b)所示。

【说明】 文本框的Change事件当文本框中的内容被改变时发生。

下面用信息对话框来输出各种票额钞票张数的付款方案,如图4-12所示。

图4-12

信息对话框

只需将图4-11中多余的文本框和标签删去,并改写命令按钮的Click事件代码如下:

Private Sub Command1_Click( )

x = val() ' x为实发工资数

y1 = x 100 ' 求100元票张数

x = x Mod 100 ' 求剩余款项

y2 = x 50 ' 求50元票张数

x = x Mod 50 ' 求剩余款项

y3 = x 10 ' 求10元票张数

x = x Mod 10 ' 求剩余款项

y4 = x 5 ' 求5元票张数

x = x Mod 5 ' 求剩余款项

y5 = x 2 ' 求2元票张数

x = x Mod 2 ' 求1元票张数

rt = 0

gth = Len()

us

a = "===========================" & Chr(13)

a = a & Format(Y1 & "张 百元票,", "@@@@@@@@@@") & _ Format(Y2 & "张 50元票", "@@@@@@@@@@") & Chr(13)

a = a & Format(Y3 & "张 10元票,", "@@@@@@@@@@@") & _

Format(Y4 & "张 5元票", "@@@@@@@@@@") & Chr(13)

a = a & Format(Y5 & "张 2元票,", "@@@@@@@@@@@") & _

Format(x & "张 1元票", "@@@@@@@@@@") & Chr(13)

a = a & "===========================" & Chr(13)

a = a & "共计" & & "元"

c = MsgBox(a, 0, "应发工资")

End Sub

【说明】 文本框的SelStart属性用来设置(或返回)所选择的文本的起始点,如果没有文本被选中,则指出插入点的位置。

SelLength属性用来设置(或返回)所选择的字符数。函数Len( )返回字符串数据的长度。在命令按钮的Click事件代码中调用SetFocus方法,可使光标重新回到输入框Text1。使用Mod运算可以得到相除的余数。

单元五 巩固与提高答案

一、选择题

1. 下面语句正确的是

A)If x<3*y And x>y Then y=x^3 B)If x<3*y And x>y Then y=3x

C)If x<3*y : x>y Then y=x^3 D)If x<3*y : x>y Then y=x**3

【答】A。

2. 下列语句正确的是

A)If A ≠B Then Print "A不等于B"

B)If A < >B Then Printf "A不等于B"

C)If A < >B Then Print "A不等于B"

D)If A ≠B Print "A不等于B"

【答】C。

3. 计算z的值,当x大于y时,z=x;否则z=y。下列语句错误的是

A)If x>=y Then z=x : z=y B)If x>=y Then z=x Else z=y

C)z=y : If x>=y Then z=x D)If x<=y Then z=y Else z=x

【答】A。

4. 下列程序段的执行结果为

X=2

Y=5

If X * Y <1 Then Y=Y-1 Else Y=-1 Print Y - X>0

A)True B)False

【答】B。

5. 下列程序段执行结果为

x=5

y=-6

If Not x>0 Then x=y-3 Else y=x+3

Print x-y;y-x

C)-1 D)1

A)-3 3 B)5 -9

【答】A。

6. 下列程序段的执行结果为

a=95

If a>60 Then I=1

If a>70 Then I=2

If a>80 Then I=3

If a>90 Then I=4

Print ″I=″; I

C)3 -3 D)-6 5

A)I=1 B)I=2

【答】D。

7. 下面程序段执行结果为

x=Int(Rnd()+4)

Select Case x

Case 5

Print "excellent"

Case 4

Print "good"

Case 3

Print "pass"

Case Else

Print "fail"

End Select

C)I=3 D)I=4

A)excellent B)good C)pass D)fail

【答】B。

8. 在窗体上画一个名称为Timer1的计时器控件,要求每隔0.5秒发生一次计时器事件,则以下正确的属性设置语句是

A)al=0.5 B)al=5

C)al=50 D)al=500 【答】D。

二、填空题

1.

闰年的条件是:年号(year)能被4整除,但不能被100整除;或者能被400整除。闰年的VB布尔表达式是_____。

【答】设y表示年份,判断闰年的布尔表达式为:

(y Mod 4 = 0 And y Mod 100 <> 0) Or (y Mod 400 = 0)

或表示为:

(Int(y / 4) = y / 4 And Int(y / 100) <> y / 100) Or (Int(y / 400) = y / 400)

2. 一元二次方程ax2

+ bx + c = 0有实根的条件为:a≠ 0,并且b2 - 4ac ≥ 0,其相应的VB布尔表达式为____。

【答】a <> 0 And b^2 – 4 * a * c >= 0

3. 有下面一个程序段,从文本框中输入数据,如果该数据满足条件,除以4余1,除以5余2,则输出,否则,将焦点定位在文本框中,并清除文本框的内容。

Private Sub Command1_Click()

x=Val()

If ____ Then

Print x

Else

=""

____

End If

End Sub

【答】x Mod 4 = 1 And x Mod 5 = 2; cs。

4. 下列程序的功能是:当x<50时,y=0.8×x;当50≤x≤100时,y=0.7×x;当x>100时,没有意义。请填空。

Private Sub Command1_Click()

Dim x As Single

x=InputBox("输入x的值")

____

Case Is<50

y=0.8 * x

Case 50 To 100

y=0.7 * x

____

Print "输入的数据出界!"

End Select

Print x , y End Sub

【答】Select Case x;Case Else。

5. 在窗体上画一个文本框和一个计时器控件,名称分别为Text1和Timer1,在属性窗中把计时器的Interval属性设置为100,Enabled属性设置为False。程序运行后,如果单击命令按钮,则每隔一秒钟在文本框中显示一次当前的时间。请补充程序。

Private Sub Command1_Click()

Timer1.____

End Sub

Private Sub Timer1_Timer()

=Time

End Sub

【答】Enabled=True。

三、编程题

1. x, y关系如下,设计程序,输入x,可计算出y的值。

1x(x≥0)

y12x(x<0)【解答】 该题是数学中的一个分段函数,它表示当x ≥ 0时,用公式y = 1

+ x来计算y的值;当x < 0时,用公式y = 1 – 2x来计算y的值。在选择条件时,既可以选择x≥0作为条件,也可以选择x < 0作为条件。在这里,选x≥0作为选择条件。这时,当x≥0为真时,执行y = 1 + x;为假时,执行y = 1 – 2x。

设计步骤如下。

(1)建立应用程序用户界面并设置对象属性,参见图5-1。

图5-1

计算分段函数的值

(2)编写程序代码。

命令按钮Command1的Click事件代码为:

Private Sub Command1_Click()

Dim x As Single, y As Single

x = Val() If x >= 0 Then y = 1 + x Else y = 1 - 2 * x

= y

End Sub

程序运行结果如图5-1所示。

也可以利用多行If语句编写代码:

Private Sub Command1_Click()

Dim x As Single, y As Single

x = Val()

If x >= 0 Then

y = 1 + x

Else

y = 1 – 2 * x

End If

= y

= True

End Sub

2. 若基本工资大于等于600元,增加工资20%;若小于600元,且大于等于400元,则增加工资15%;若小于400元,则增加工资10%。请根据用户输入的基本工资,计算出增加后的工资。

【解答】 设计步骤如下。

(1)建立应用程序用户界面,并设置对象属性,如图5-2所示。

图5-2

计算基本工资

(2)编写程序代码。

编写文本框Text1的KeyPress(按键)事件代码:

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

n = Val()

Select Case n

Case Is >= 600

gz = n * 1.2

Case Is >= 400

gz = n * 1.15 Case Else

gz = n * 1.1

End Select

n = "增加后的基本工资为:" & gz & "元"

rt = 0

gth = Len()

End If

End Sub

3. 利用单选钮组控制输入文本的字体,界面如图5-3所示。

图5-3

使用单选钮组

【解答】 设计步骤如下。

(1)建立应用程序用户界面并设置对象属性。

新建一个工程,进入窗体设计器,增加一个标签Label1,一个文本框Text1和四个单选钮Option1~Option4,如图5-4所示。

图5-4

添加控件

然后设置对象属性,见表5-1。

表5-1 属性设置

对 象

Label1

Text1

属 性

Caption

Text

属 性 值

请输入文本

说 明

清空 Option1

Option2

Option3

Option4

Caption

Value

Caption

Caption

Caption

宋体

True

隶书

黑体

楷体

单选钮组中的默认按钮

并设置适当的字体大小,如图5-3所示。

(2)编写程序代码。

编写单选钮Option1的Click事件代码:

Private Sub Option1_Click( )

me = "宋体"

End Sub

编写单选钮Option2的Click事件代码:

Private Sub Option2_Click( )

me = "隶书"

End Sub

编写单选钮Option3的Click事件代码:

Private Sub Option3_Click( )

me = "黑体"

End Sub

编写单选钮Option4的Click事件代码:

Private Sub Option4_Click( )

me = "楷体_GB2312"

End Sub

【说明】 一个单选钮可以用以下方法之一进行选择。

在运行期间单击单选钮。

用Tab键定位到单选钮组,然后在组内使用方向键(箭头键)定位单选钮。

用代码将单选钮的Value属性设置为True。

按下在Label的标题中指定的快捷键,并结合TabIndex属性使用。

4. 文本框的PasswordChar属性可以隐蔽用户通过键盘输入的字符。编写程序,利用文本框检查用户口令,如图5-5所示。

图5-5

检查用户口令

【解答】 设计步骤如下。 (1)建立应用程序用户界面,如图5-5所示。

(2)设置对象属性,见表5-2。

表5-2 属性设置

对 象

Frame1

Text1

属 性

Caption

Text

PasswordChar

Caption

Label1 FontName

FontSize

属 性 值

请输入您的口令:

*

黑体

三号

说 明

清空

只显示字符“*”

字体名称

字体大小

(3)编写代码。

只需编写文本框Text1的KeyPress事件代码:

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

If LCase() = "abcde" Then

n = "欢迎使用本系统"

Else

n = "对不起,口令错!"

End If

rt = 0

gth = Len()

End If

End Sub

5. 设计一个计时器,能够设置倒计时的时间,并进行倒计时。

【解答】 利用计时器控件来控制倒计时,然后通过文本框输入设定的时间。设计步骤如下。

(1)建立应用程序用户界面并设置属性。

新建一个工程,进入窗体设计器,首先在窗体中增加一个框架Frame1,一个命令按钮Command1和一个计时器控件Timer1。选定框架Frame1,在其中增加一个文本框Text1,如图5-6所示。

图5-6

设计窗体界面 属性设置参见表5-3。

表5-3 属性设置

对 象

Frame1

Command1

属 性

Caption

Caption

Default

Interval

Enabled

属 性 值

请输入倒计时的分钟数:

开始

True

1000

False

说 明

设置默认按钮

Timer1

(2)编写代码。

编写命令按钮Command1的Click事件代码:

Private Sub Command1_Click( )

d = True

= * 60

n = "现在开始倒计时"

End Sub

编写计时器Timer1的Timer事件代码:

Private Sub Timer1_Timer( )

= – 1

m =

If m < 0 Then

d = False

MsgBox "预定的时间到了!", 0, "倒计时"

n = "请输入计时的分钟数:"

= 0

Exit Sub

End If

n1 = Format(m Mod 60, "00")

n2 = Format((m 60) Mod 60, "00:")

n3 = Format(m 3600, "00:")

= n3 & n2 & n1

End Sub

运行程序,输入时间后按“开始”按钮,即开始倒计时,如图5-7(a)所示。计时结束后将弹出对话框,如图5-7(b)所示。

图5-7

倒计时器

6. 任给定一年,判断该年是否闰年,并根据给出的月份来判断是什么季节和该月有多少天。闰年的条件是:年号能被4整除但不能被100整除,或者能被400整除。

【解答】 根据闰年条件可得出闰年的逻辑表达式:

(y Mod 4=0 And y Mod 100<>0) Or (y Mod 400=0)

每月的天数可根据月份来判定。

设计步骤如下:

(1) 建立用户界面,参见图5-8所示。

图5-8

用户界面

图5-9

运行结果

(2) 设置对象属性,见表5-4。

表5-4 属性设置

对象

Form1

属性

Caption

Caption

Command1

Default

Command2

Text1

Text2

Label1

Label2

Caption

Text

Text

Caption

Caption

Caption

Label3

BorderStyle 1—Fixed Single 边框样式

True

清除

年份:

月份:

缺省命令按钮

清空

清空

属性值

判断闰年、季节、天数

开始

说明

Caption

Label4

BorderStyle

Caption

Label5

BorderStyle

1—Fixed Single

1—Fixed Single

边框样式

边框样式

(3) 编写事件代码。

编写“开始”命令按钮Command1的Click(单击)事件代码:

Private Sub Command1_Click()

Dim y As Integer, m As Integer, days As Integer

Dim leapyear As Boolean ' 闰年标记

y = Val() ' y为年份

m = Val() ' m为月份

' 判断闰年

If (y Mod 4 = 0 And y Mod 100 <> 0) Or (y Mod 400 = 0) Then

leapyear = True ' True为闰年

n = "闰年"

Else

leapyear = False ' False为非闰年

n = "不是闰年"

End If

' 判断季节

Select Case m

Case 3 To 5

n = "春季(Spring)"

Case 6 To 8

n = "夏季(Summer)"

Case 9 To 11

n = "秋季(Autumn)"

Case 12, 1, 2

n = "冬季(Winter)"

End Select

' 判断月中天数

Select Case m

Case 1, 3, 5, 7, 8, 10, 12

n = "31天!" ' 大月为31天

Case 4, 6, 9, 11

n = "30天!" ' 小月为30天

Case 2 ' 判断2月份的天数

If leapyear Then

days = 29 ' 闰年为29天

Else

days = 28 ' 非闰年为28天

End If n = Str(days) + "天"

End Select

us

End Sub

编写“清除”命令按钮Command2的Click(单击)事件代码:

Private Sub Command2_Click()

= ""

= ""

n = ""

n = ""

n = ""

End Sub

运行程序,输入年份和月份后,单击“开始”按钮,将输出结果,如图5-9所示。单击“清除”按钮,清除文本框中输入的内容。

单元六 巩固与提高答案

一、选择题

1. 下列程序段的执行结果为

a=5

For k=1 To 0

a=a + k

Next k

Print k;a

A)-1 6 B)-1 16

【答】C。

2. 下列程序段的执行结果为

a=6 : b=1

For I=1 To 3

f=a+b

a=b

b=f

Print f;

Next I

C)1 5 D)11 21

A)2 3 6 B)2 3 5

【答】B。

3. 阅读下面的程序段:

For a=1 To 2

C)2 3 4 D)2 2 8 For b=1 To a

For c=b To 2

I=I+1

Next

Next

Next

Print I

执行上面的三重循环后,I的值为

A)4 B)5 C)6

【答】B。

4. 下面程序段的运行结果是

a=1 : b=1

Do

a=a+1

b=b+1

Loop Until b>5

Print″k=″;a;Spc(4);″b=″;b+a

A)k=7 b=14 B)k=6 b=6 C)k=4 b=8

【答】D。

5. 设有下面的循环:

i=1

Do

i=i+3

Print i

Loop Until I> ____

程序运行后要执行3次循环体,则条件中I的最小值为

A)6 B)7 C)8

【答】B。

6. 下列程序段的执行结果为

I=9 : x=5

Do

I=I+1

x=x+2

Loop Until I >=7

Print "I="; I; "x="; x

A)I=4 x=5 B)I=7 x=15 C)I=6 x=8

【答】D。

D)9

D)k=6 b=12

D)9

D)I=10 x=7 7. 执行下列程序段后,输出的结果是

For k1=0 To 4

y=20

For k2=0 To 3

y=10

For k3=0 To 2

y=y + 10

Next k3

Next k2

Next k1

Print y

A)90 B)60 C)40 D)10

【答】C。

8. 新建一个列表框,要实现对列表项可以复选,应设置的属性是

A)ScrollBars B)MultiSelect C)DataField D)Stretch

【答】B。

9. 在Visual Basic中,组合框是文本框和( )特性的组合。

A)复选框 B)标签 C)列表框 D)目录列表框

【答】C。

10. 下列语句中,返回列表框List1中项目个数的语句是

A)x=unt B)x=ListCount

C)x=dex D)x=ListIndex

【答】A。

二、填空题

1. 执行下面的程序段,x的值为____。

For i=1 To 9

a=a + i

Next i

x=Val(i)

MsgBox x

【答】10。

2. 以下程序的功能是从键盘输入若干个学生的考试成绩,统计并输出最高分和最低分,当输入负数时结束输入,输出结果。请补充程序。

Dim x,amax,amin As Single

x=InputBox("Enter a score") amax=x

amin=x

Do While ____

If x>amax Then

amax=x

End If

If _____ Then

amin=x

End If

x=InputBox("enter a score")

Loop

Print "max="; amax, "min="; amin

【答】x>=0;x

3. 下面程序是用来打印九九乘法表的,请补充完整。

Dim i As Integer, j As Integer, Str1$

Str =″″

For i=1 To 9

For j=1 To 9

If ____ Then

Str1=Str1+Str$(j) +"×"+Str$(i)+ "="+Str$(Val(i * j))

Else

Str1=Str1 & Chr(13)

_____

End If

Next j

Next i

Print Str1

【答】j < = i ;EXIT FOR。

4. 在窗体上画一个命令按钮,然后编写如下程序:

Function fun(By Val num As Long)As Long

Dim k As Long

k=l

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=InputBox("请输入一个数") n=CLng(n) : r=fun(n)

Print r

End Sub

程序运行后,单击命令按钮,在输入对话框中输入"345",输出结果为____。

【答】60。

5. 在窗体上画一个命令按钮,然后编写如下事件过程:

Private Sub Command1_Click()

For I=l TO 4

x=4

For j=1 To 3

x=3

For k=1 T0 2

x=x+6

Next k

Next j

Next i

Prim x

End Sub

程序运行后,单击命令按钮,输出结果是____。

【答】15。

6. 以下程序的功能是:从键盘上输入若干个数字,当输入负数时结束输入,统计出若干数字的平均值,输出结果。请填空。

Private Sub Form_click()

Dim x , y As Single , z As Integer

X=InputBox("Enter a score")

Do while ____

y=y+x

Z=z+1

x=InputBox("Enter a score")

Loop

If z=0 Then

z=l

End If

y= ____

Print y

End Sub

【答】x>=0;y/z。

三、编程题

1. 输入初始值,输出100个不能被3整除的数。 【解答】

(1)设计程序界面和设置对象属性,如图6-1所示。

图6-1

输出100个不能被3整除的数

(2)编写代码。

增加窗体的Activate事件代码:

Private Sub Form_Activate( )

us

End Sub

改写命令按钮Command1的Click事件代码:

Private Sub Command1_Click( )

Dim x As Integer, n As Integer

x = Val(): n = 1

Do Until n > 100

If x Mod 3 < > 0 Then

= & Str(x) & Chr(13) & Chr(10)

n = n + 1

End If

x = x + 1

Loop

End Sub

2. 设计程序,求s = 1 + (1 + 2) + (1 + 2 + 3) + … + (1 + 2 + 3 + … + n)的值。

【解答】 本题先进行内循环累加,再进行外循环累加,因此,需要两个累加器。但是,由于本题较特殊,也可以用一个循环来实现。括号内每累加一个数,就往s中累加一次,其结果一样。

(1)设计程序界面并设置对象属性,如图6-2(a)所示。其中Command1的Default属性为True(窗体的默认命令按钮,使得按Enter键等于单击命令按钮)。

(2)编写代码。

首先编写窗体的Activate事件代码:

Private Sub Form_Activate( )

us

End Sub

编写命令按钮Command1的Click事件代码: Private Sub Command1_Click( )

Dim n As Integer, i As Integer, j As Long, s As Long

n = Val()

j = 0: s = 0

For i = 1 To n

j = j + i

s = s + j

Next i

n = "和数 s = " & Str(s)

rt = 0

gth = Len()

End Sub

运行程序,输入一个整数后按Enter键,显示结果如图6-2(b)所示。

(a)

(b)

图6-2

程序界面与程序运行结果

3. 所谓“水仙花数”,是指一个三位数,其各位数的立方和等于该数,如153

= 13 + 53

+ 33,编写程序输出所有的“水仙花数”。

【分析】 此题的关键是把任意三位数的每一位数分离出来。设a, b, c分别是三位整数n的百位数、十位数、个位数,则

a = Int(n / 100)

b = Int((n – a * 100) / 10)

c = n – a * 100 – b * 10

【解答】 窗体界面的设计参见图6-3所示。

图6-3

水仙花数 命令按钮的Click事件代码为:

Private Sub Command1_Click( )

Dim p As Integer

For n = 100 To 999

a = Int(n / 100)

b = Int((n - a * 100) / 10)

c = n - (a * 100 + b * 10)

p = a ^ 3 + b ^ 3 + c ^ 3

If p = n Then m p

Next

End Sub

4. 马克思曾经做过这样一道趣味数学题:有30个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,一共花去50先令。问男人、女人和小孩各有几人?

【解答】 设有x个男人,y个女人,z个小孩。依题意,列出以下方程组:

xyz30

3x2yz50由于两个方程式中有三个未知数,属于不定方程,无法直接求解。可以用“穷举法”来进行“试根”,即将各种可能的x, y, z组合一一进行测试,将符合条件者输出即可。

考虑到最多只能有16个男人,最多只能有24个女人。

窗体界面的设计如图6-4所示。

图6-4

趣味数学题

这里给出命令按钮的Click事件代码:

Private Sub Command1_Click( )

For x = 1 To 16

For y = 1 To 24

z = 30 - x - y

If 3 * x + 2 * y + z = 50 Then

p = Format(x, "@@@") & Format(y, "@@@@@") & Format(z, "@@@@@")

m p End If

Next

Next

End Sub

5. 用1, 2, 3, 4这四个数字组成四位数。编写程序,打印出所有可能的四位数(四个数字可以相同),并统计出所组成的四位数的个数。

【解答】 这个问题可以用四重循环来解决,每层循环的初值均为1,终值为4,步长为1。总的循环次数就是所有四位数的个数。程序代码如下:

Private Sub Form_Load( )

Show

Sum = 0

For a = 1 To 4

For b = 1 To 4

For c = 1 To 4

For d = 1 To 4

x = a * 1000 + b * 100 + c * 10 + d

Print x;

Sum = Sum + 1

If Sum Mod 15 = 0 Then Print

Next d

Next c

Next b

Next a

Print

Print "和为:"; Sum

End Sub

运行结果如图6-5所示。

图6-5

用1, 2, 3, 4组成四位数

6. 利用列表框,编写能对本学期选修课程进行课程添加、修改和删除的应用程序。 分析:由于不能直接对列表框中的项目进行添加、修改和删除操作,所以可以利用一个文本框。列表框的项目在Form1_Load中用AddItem方法添加。利用“添加课程”按钮将文本框中的内容添加到列表框,利用“删除课程”按钮删除列表框中选定的项目。如果要修改列表框,则首先选定项目,然后按“修改课程”按钮,所选的项目显示在文本框中,当在文本框中修改完之后再按“修改确定”按钮更新列表框。

设计步骤如下:

(1) 建立用户界面和设置对象属性,如图6.6所示。

图6.6

用户界面和对象属性

图6.7

添加、修改、删除选修课程

(2) 编写事件代码。

窗体Form的Load(载入)事件代码:

Private Sub Form_Load()

m "政治"

m "体育"

m "英语"

m "语文"

m "数学"

End Sub

Private Sub Command1_Click()

m

= ""

End Sub

' 在列表框中加入项目"政治"

' 在列表框中加入项目"体育"

' 在列表框中加入项目"英语"

' 在列表框中加入项目"语文"

' 在列表框中加入项目"数学"

“添加课程”按钮Command1的Click(单击)事件代码:

' 将文本框中的内容添加到列表框

' 清空文本框

“删除课程”按钮Command2的Click(单击)事件代码:

Private Sub Command2_Click()

Item dex

End Sub

' 除去列表框中选定的项目

“修改课程”按钮Command3的Click(单击)事件代码:

Private Sub Command3_Click()

= ' 将列表框中当前选中的项目内容赋给文本框

us ' 设置焦点

d = False

d = False

d = False d = True

End Sub

“修改确定”按钮Command4的Click(单击)事件代码:

Private Sub Command4_Click()

(dex) = ' 将文本框中的内容返还入列表框

d = False ' 使“修改确定”按钮不可用

d = True

d = True

d = True

= ""

End Sub

运行程序,结果如图6.7所示。

7. 编写小学加减法算术练习程序。计算机随机给出两位数的加减法算术题,要求学生回答,答对的打“√”,答错的打“×”。将做过的题目存放在列表框中备查,并随时给出答题的正确率。

【分析】 随机函数Rnd返回一个(0, 1)之间的随机小数,为了生成某个范围内的随机整数,可以使用公式:Int((最大值 – 最小值 + 1) * Rnd + 最小值)。其中,最大值和最小值为指定范围中的最大数和最小数。

【解答】 设计步骤如下。

(1)建立应用程序用户界面。新建一个工程,进入窗体设计器,增加一个标签Label1(显示题目),一个文本框Text1(输入答案),一个列表框List1(保存做过的题目),一个命令按钮Command1,一个图像Image1和一个框架Frame1。激活Frame1后,在其中增加两个标签,如图6-8(a)所示。

(a)

(b)

图6-8

算术练习

(2)设置对象属性,参见表6-1。其他属性的设置参照图6-8(a)所示。

表6-1 属性设置

对象

Form1

List1

属性

Tag

Tag

属性值

0.0

0.0

说明

存放题目总数

存放答对的题数 (3)编写代码。

出题部分由窗体的Activate(激活)事件代码完成:

Private Sub Form_Activate( )

Randomize (Time)

a = Int(10 + 90 * Rnd)

b = Int(10 + 90 * Rnd)

p = Int(2 * Rnd)

Select Case p

Case 0

n = a & " + " & b & " = "

= a + b ' 将本题答案放入中

Case 1

If a < b Then t = a: a = b: b = t

n = a & " – " & b & " = "

= a – b ' 将本题答案放入中

End Select

= + 1

rt = 0

= ""

End Sub

答题部分由文本框的KeyPress事件代码完成:

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

fm = "!@@@@@@@@@@@@@@"

If Val() = Then

Item = Format(n & , fm) & " √"

= + 1

Else

Item = Format(n & , fm) & " ×"

End If

m Item, 0 ' 将题目和回答插入到列表框中的第一项

n = "共" & & "题," & Chr(13) & "正确率为:"

n = Format( / , "#0.0#%")

Form_Activate ' 调用出题部分代码

End If

End Sub

“关闭”按钮的Click事件代码:

Private Sub Command1_Click( )

Unload Me

End Sub

运行程序,结果如图6-8(b)所示。 单元七 巩固与提高答案

一、选择题

1. 窗体通用部分的语句“Option Base 1”,决定本窗体中数组

A)下界必须是1 B)默认的下界为1

C)下界必须是0 D)默认的下界为0

【答】B。

2. 下列数组声明语句,正确的是

A)Dim a(5 6) As Integer B)Dim a(n,n) As Integer

C)Dim a(5,6) As Integer D)Dim a[5,6] As Integer

【答】C。

3. 设有声明语句如下,则数组b中全部元素的个数为

Dim b(2 To 3, 1 To 4, 2 ) As Integer

A)16 B)24 C)9 D)6

【答】B。

4. 以下属于合法的VB数组元素是

A)x2 B)x[2] C)x(2) D)x{2}

【答】C。

5. 设有数组定义语句Dim a(5) As Integer,下列给数组元素赋值的语句错误的是

A)a(3) =3 B)a(3) =Inputbox("input data")

C)a(3) =dex D)a =Array(1,2,3,4,5,6)

【答】D。

6. 以下说法不正确的是

A)使用ReDim语句不可以改变数组的维数

B)使用ReDim语句不可以改变数组的类型

C)使用ReDim语句可以改变数组的每一维的大小

D)使用ReDim语句可以对数组中的每个元素进行初始化

【答】C。

7. 假定建立了一个名为Command1的命令按钮数组,则以下说法错误的是

A)数组中每个命令按钮的名称(Name属性)均为Command1 B)数组中每个命令按钮的标题(Caption属性)都一样

C)数组中所有命令按钮可以使用同一个事件过程

D)用名称Command1(下标)可以访问数组中的每个命令按钮

【答】B。

8. 下列叙述中,正确的是

A)控件数组的每一个成员的Caption属性值都必须相同

B)控件数组的每一个成员的Index属性值都必须不相同

C)控件数组的每一个成员都执行不同的事件过程

D)对已经建立的多个类型相同的控件,这此控件不能组成控件数组

【答】B。

二、填空题

1. 用Dim(1, 3 to 7,10)声明的是一个____维数组。

【答】3。

2. 在窗体上画一个命令按钮然后编写如下事件过程:

Option Base 1

Private Sub Command1_Click()

Dim a

A=Array(1 , 2 , 3 , 4)

j=1

For i=4 TO l Step-1

s=s+a(i)*j

j=j*10

Next i

Print s

End Sub

运行程序,单击命令按钮,其输出结果是____。

【答】1234。

3. 在窗体上画一个名称为Label1的标签,然后编写如下事件过程:

Private Sub Form_Click()

Dim arr(10,10) As Integer

Dim i As Integer , j As Integer

For i=2 To 4

For j=2 To 4

arr(i,j)=i*j

Next j

Next i

n=Str(arr(2,2)+arr(3,3)) End Sub

程序运行后,单击窗体,在标签中显示的内容是_____。

【答】13。

4. 阅读程序:

Option Base 1

Dim arr() As Integer

Private Sub Form_Click()

Dim i As Integer , j As Integer

ReDim arr(3,2)

For i=1 To 3

For j=1 To 2

arr(i,j)=i*2+j

Next j

Next i

ReDim Preserve arr(3,4)

For j=3 To 4

arr(3,j)=j+9

Next j

Print arr(3,2)+arr(3,4)

End Sub

程序运行后,单击窗体,输出结果为____。

【答】13。

5. 在窗体上画一个名称为Command1的命令按钮,然后编写如下程序:

Option Base 1

Private Sub Command1_Click()

Dim c As Integer , d As Integer

d=0

c=6

x=Array(2,4,6,8,10,12)

For i=1 To 6

If x(i)>c Then

d=d+x(i)

c=x(i)

Else

d=d-c

End If

Next i

Print d

End Sub

程序运行后,如果单击命令按钮,则在窗体上输出的内容为____。

【答】12。 6. 在窗体上画一个名称为Textl的文本框和一个名称为Commandl的命令按钮,然后编写如下事件过程:

Private Sub Commandl_Click()

Dim arrayl(10,10)As Integer

Dim i As Integer,j As Integer

For i=1 To 3

For j=2 To 4

arrayl(i,j)=i+j

Next j

Next i

=arrayl(2,3)+arrayl(3,4)

End Sub

程序运行后,单击命令按钮,在文本框中显示的值是____。

【答】12。

三、编程题

1. 输入一串字符,统计各字母出现的次数,不区分大小写。

【解答】

分析:统计26个英文字母出现的次数,必须声明一个具有26个元素的数组,每个元素的下标表示对应字母出现的次数。从输入的字符串中逐一取出字符,并将其转换成大写字母(使得大小写不分),再进行判断。设计步骤如下。

(1)建立用户界面和设置对象属性,如图7-1所示。

(a)

(b)

图7-1

建立用户界面和程序运行结果

(2)编写事件代码。

编写“统计字母”命令按钮Command1的单击Click事件代码:

Private Sub Command1_Click( )

Dim a(1 To 26) As Integer

Dim i As Integer, j As Integer, c As String * 1

tot = Len(Text1) ' 求字符串的长度 For i = 1 To tot

c = UCase(Mid(Text1, i, 1)) ' 取一个字符,将其转换成相应的大写字母

If c >= "A" And c <= "Z" Then

j = Asc(c) – 65 + 1 ' 将A~Z大写字母转换成1~26的下标

a(j) = a(j) + 1 ' 对应数组元素加1

End If

Next i

For j = 1 To 26 ' 输出字母及其出现的次数

If a(j) > 0 Then

n = n & Chr$(j + 64) & "=" & a(j) & " "

End If

Next j

End Sub

程序运行结果如图7-1所示。

2. 随机产生10个两位整数,找出其中的最大值、最小值和平均值。

【解答】

分析:问题可以分为两部分:一是产生10个随机整数,一是对这10个整数求最大、最小以及平均值。为此,需要使用数组。设计步骤如下。

(1)建立应用程序用户界面并设置对象属性。

新建一个工程,进入窗体设计器,首先增加一个框架Frame1,三个标签Label1~Label3,三个文本框Text1~Text3,三个命令按钮Command1~Command3。激活Frame1后,在其中增加一个标签Label4,并修改各个控件的属性,如图7-2所示。

图7-2

求最大值、最小值和平均值

(2)编写代码。

考虑到要在不同的过程中使用数组,所以首先在模块的通用段中声明数组:

Dim a(1 To 10) As Integer

随机整数的生成由窗体的Load事件代码完成:

Private Sub Form_Load( )

Dim p As String

Randomize p = ""

For i = 1 To 10

a(i) = Int(Rnd * 90) + 10

p = p & Str(a(i)) & ","

Next

n = LTrim(Left(p, Len(p) – 1))

End Sub

求最大、最小以及平均值由“确定”按钮Command2的Click事件代码完成:

Private Sub Command2_Click( )

Dim n As Integer, m As Integer, s As Single

min = 100: max = 10: s = 0

For i = 1 To 10

If a(i) > n Then max = a(i)

If a(i) < m Then min = a(i)

s = s + a(i)

Next

= max

= min

= s / 10

End Sub

“重置”按钮Command1的Click事件代码:

Private Sub Command1_Click( )

Form_Load

= ""

= ""

= ""

End Sub

最后是“关闭”按钮Command3的Click事件代码:

Private Sub Command3_Click( )

Unload Me

End Sub

【说明】 在“重置”按钮的Click事件代码中,可通过调用窗体的Load事件过程来重新产生随机数。

如果要求产生的随机整数互不相同,应改写窗体的Load事件代码:

Private Sub Form_Load( )

Dim p As String

Randomize

p = ""

For i = 1 To 10

Do

x = Int(Rnd * 90) + 10

yes = 0

For j = 1 To i - 1

If x = a(j) Then yes = 1: Exit For ' 如与前面元素相同,返到Do循环 Next ' 重新产生随机数

Loop While yes = 1

a(i) = x

p = p & Str(a(i)) & ","

Next

n = LTrim(Left(p, Len(p) - 1))

End Sub

其中,变量x用来存放刚产生的随机整数。变量yes用来作为标志,如果x与已放入数组中的某个随机整数相同,则yes为1,否则为0。当yes为0时将退出第二层Do…Loop循环,即可把随机数放入数组之中:a(i)=x。

3. 利用随机函数模拟投币结果。设共投币100次,求“两个正面”、“两个反面”、“一正一反”三种情况各出现多少次。

【解答】 定义一个二维数组a(1,1),其中各元素的含义为:

a(0,0) —— 累计“两个正面”的次数;

a(1,1) —— 累计“两个反面”的次数;

a(0,1)和a(1,0) —— 累计“一正一反”或“一反一正”的次数。

为简单起见,本题直接输出结果到窗体,如图7-3所示。

图7-3

模拟投币结果

编写命令按钮的Click事件代码如下:

Private Sub Command1_Click( )

Dim a(1, 1)

Dim n As Integer

n = Val(InputBox("n=", "请输入投币次数"))

n = "投币次数:" & n

Randomize Timer

For i = 1 To n

n1 = Int(Rnd * 2)

n2 = Int(Rnd * 2)

a(n1, n2) = a(n1, n2) + 1

Next i

Cls

CurrentY = + + 50