1、VB 课后习题解答第一、二章:1、 简述 VB6.0的主要特点答:方便、直观的可视化设计工具;面向对象程序设计方法;事件驱动的编程机制;易学易用的应用程序集成开发环境;结构化程序设计语言;完备的联机帮助功能;强大的多媒体、数据库和网络功能。2、 当正常安装 VB6.0后,误把Windows 子目录删除。当重新安装Windows 后,是否需要再次安装VB6.0? 答:要重新安装的。因为安装 VB6.0时,有些 VB 程序被系统自动安装在 Windows 目录下,所以一旦删除 Windows 子目录,就必须重新安装 VB6.0。3、 Visual Basic 6.0分为学习版、专业版和企业版,如何
2、知道所安装的是哪个版本? 答:在 VB6.0的启动界面上,能显示对应的版本。4、 叙述建立一个完整应用程序的过程答:首先建立用户界面的控件对象(简称控件);然后对控件属性进行设置;再对控件事件过程及编程;保存应用程序;程序调试和运行。5、 Visual Basic 6.0有多种类型窗口,若要在设计时看到代码窗口,应怎样操作?答:选择“视图”“代码窗口”命令或单击“工程资源管理器”窗口中的“查看代码”按钮。6、 当建立好一个简单的应用程序后,假定该工程仅有一个窗体模块。试问该工程涉及多少个要保存的文件? 若要保存该工程的所有文件,应先保存什么文件?再保存什么文件?若不这样做,系统会出现什么信息?
3、 答:涉及两个文件要保存。先保存窗体文件(.frm),再保存工程文件(.vbp)。若先保存工程文件,系统也会先弹出“文件另存为”对话框,要求先保存窗体文件。7、 保存文件时,若不改变目录名,则系统默认的目录是什么? 答:系统默认的目录是 VB988、 安装 Visual Basic 6.0后,帮助系统是否也已安装?答:没有。VB6.0的帮助系统在两张光盘上,即MSDN Library,其中还包含了VC、VFP 等其他语言的帮助系统。9、 如何使用 Visual Basic 6.0的帮助系统?答:最方便的方法是选定要帮助的内容,然后按 F1功能键,这时系统打开 MSDN Library 查阅器,
4、直接显示与选定内容有关的帮助信息。10、什么是类?什么是对象?什么是事件过程?答:类是同类对象集合的抽象,它规定了这些对象的公共属性和方法; 对象是类的一个实例,对象包含三个要素:属性、方法和事件。当在对象上发生了事件后,应用程序就要处理这个事件,而处理的步骤就是事件过程。11、属性和方法的区别是什么?答:属性是对象的特征,方法是对象的行为。前者有值,可以被赋值或引用;后者没有值,表示能够执行的操作。12、当标签边框的大小由 Caption 属性的值进行扩展或缩小时,应对该控件的什么属性进行何种设置? 答:将该控件的 Autosize 属性值设置为 true。13、在 VB6.0中,命令按钮的
5、显示形式可以有标准的和图形的两种选择,它们通过什么属性来设置?若选择图形的,则通过什么属性来装入图形?若已在规定的属性里装入了某个图形文件,但该命令按钮还是不能显示该图形,而显示的是 Caption 属性设置的文字,应怎样修改?答:命令按钮的显示形式通过将Style 属性值设置为Graphical 来实现。 通过Picture 属性来装入图形。 不能显示图形是因为 Style 属性值被设置为 Standard,只要将其改为 Graphical,并且将 Caption 的值设置为空即可。14、 如果文本框要显示多行文字,应对什么属性设置为何值? 答:将 MultiLine 属性的值设置为 Tru
6、e。15、 标签和文本框的区别是什么?答:在程序运行时,标签只能显示文字,不能输入文字,显示文字通过对Caption 属性赋值来实现;而文本框既能显示文字,也能输入文字,这通过text 属性来实现。16、 要让文本框获得焦点的方法是什么? 答:SetFocus 方法。17、 简述文本框的 Change 和 KeyPress 事件的区别答:相同点是当在文本框输入内容时,同时激发上述两个事件;不同点是Keypress 事件可通过参数KeyAscii 返回所按键的编码值,可依此判断数据输入的正确性或数据输入结束与否,因而该事件使用较多;change 事件还可以发生在程序改变文本框的 text 属性时
7、。18、 当某文本框输入数据后(按了回车键),经判断后认为是数据输入错,应怎样删除原来文本框中的数据?答:假定文本框的名称为 Text1,则事件过程如下: Private Sub Text1_KeyPress(KeyAscii As Integer )if KeyAscii = 13 thenif 出错条件判断成立thenText1=”end ifend if end sub注意:删除刚输入的字符,通过 KeyAscii=0语句实现;焦点定位文本框对象采用 SetFocus 方法。19、在程序运行前,对某些控件设置属性值,除了在窗体中直接设置外,还可以通过代码设置,这些代码一般存放在什么事件中
8、?如果要将命令按钮定位在窗体的中央,试写出事件过程代码。答:这些代码一般放在 Forem_Load()事件过程中。将窗体定位在屏幕的中央,只能在属性窗口中将 Form1窗口的 StartUpPosition 属性值设置为2(表示屏幕中心),该属性不能在运行时设置。要将按钮定位在窗体的中央,事件过程如下:Private sub Form_Load()Command1.left= Form1.scaleWidth2-command1.Width2 Command1.Top = Form1.ScaleHeight 2 command1.Height 2End Sub其中,ScaleWidth、Sca
9、leHeight 表示窗体的相对宽度和高度。20、 VB6.0提供的大量图形文件存放在哪个目录?若你的计算机上没有安装,应怎样安装这些图形文件? 答:存放在 Graphics 目录下。在 VB6.0的安装盘上可以找到 Graphics 子目录,将其复制到硬盘上的 VB 目录下。21.略(书上page36)第3章:1、 合法的有:(1)单精度(3)单精度(4)双精度(6)整形(7)字符型(9)日期型(10)双精度(12)八进制表示(14)十六进制表示(15)逻辑型(18)单精度数2、 合法变量有:(1),(2),(6),(9),(10),(11)3、 算术表达式写成 VB 表达式(1)| x+y
10、 | + z5 abs(x+y) +z5(2)(a+xy)6 (1 + x * y ) 6(3)(10*x + sqr(3*y) ) / (x * y ) (4)( -b+sqr(b2-4*a*c) )/2/a(5)1 / (1/r1+1/r2+1/r3)(6) sin(45*3.14/180)+ ( exp(10)+ log(10) )/ sqr( x+y+1) 4、 根据条件写出相应的 VB 表达式(1) chr( int ( Rnd * 10 +67 )(2) int ( Rnd * 101 +100 )(3) x * y 0(4) x%5=0 or x % 7 =0(5) (x mod
11、 10) 10 + x /10(6)Round(123.2389*100)/100(7) Ucase (c ) =”A” and Ucase(c )=”a” and Lcase(c )=10 and x 20(10) ( x z ) or ( x z and y z and y z5、 下出下列表达式的值:(1) 123+23 mod 10 7 +Asc(“A”) 188,(2) 100+”100” & 100 200100(3) Int ( 68.555*100+0.5)/100 68.56(4) 已知 A$=“87654321”,求表达式 Val(Left$(A$,4)+ Mid(A,4,
12、2)的值 876554(5)DateAdd(“m”,1,#1/30/2000#) 2000-2-29(6) Len(”VB 程序设计”) 6 6 、 略第4章:VB 控制语句1、 结构化程序设计的三种基本结构是什么? 答:顺序结构、选择结构和循环结构。2、 指出下列赋值语句中的错误(包括运行时错误):(1)10x=sin(x)+y10x 是非法变量名(2) c=3+sqr(-3)待求平方根的数为负数(3) c+x+y=c*y赋值符左边是表达式了(4) x=sin(x)/(20 mod 2)分母为零了3、 Msgbox 函数与 InputBox 函数之间有什么区别?各自获得什么值?答:两个函数共
13、同之处都显示对话框。区别:Inputbox 函数等待用户在文本框中输入数据,获得的是输入的字符串数据;Msgbox 函数等待用户按一按钮,获得的是表示按钮的整数值,以决定程序的流向。4、 要使单精度变量 x,y,z 分别保留1位、2位、3位小数,并在窗体显示,应使用什么函数?如何编写对应的print 方法?答:使用 format 函数,具体如下:print Format(x,”0.0” )printFormat ( y , “ 0.00 “ ) printFormat ( z , “ 0.000 “ )5 、 语句if then 中的表达式可以是算术、字符、关系、逻辑表达式中的哪些? 答:算术
14、、关系、逻辑表达式6、 指出下列语句中的错误:(1) if xy then print x表达式书写错误,应写成:x=y(2) if 10x20 then x=x+20表达式书写错,应是:10x and x 20y = x * x + 3 * x +2 case is=10y = sqr ( 3 * x ) 2 case is 0y= 1 / x + Abs ( x ) end selectprint y end sub(2) 利用 if 语句、select case 语句两种方法计算分段函数:答:private sub command1.click() x=val( text1)if x 2
15、0 theny = x * x + 3 * x +2 elseifx=10 theny = sqr ( 3 * x ) 2 elseif x0 theny= 1 / x + Abs ( x ) end ifprint y end sub(3) 利用 if 语句和 iif 函数两种方法求三个数 x,y,z 中的最大值并存入变量 max 中。if xy then max=x else max = y if zmax then max = zmax = iif ( xy , x , y ) :max = iif ( max z, max , z )8、 在多分支结构的实现中,可以用 ifthenel
16、seifendif 形式的语句,也可以用 select caseend Select 形式的语句,由于后者的条件书写更灵活、简洁,是否完全可以取代前者?答:虽然 Select Caseend Select 形式的语句中条件书写更灵活、简洁,程序可读性强,但使用它有限制。(适合于对一个变量判断的)首先,看该语句的形式:Select Case case case Case elseEnd Select其中变量或表达式只能含有一个变量,任何含有多个变量的形式都是错误的。如,要判断x,y 是否在第一、三象限内,若输入如下语句:select case x,y, VB 程序会显示“缺少:语句结束”。其次,
17、在后面的 case 表达式列表中不能出现 Select case 变量或表达式中使用的变量,也不能出现主教材上列出的四种形式以外的符号或关键字(符号是:逗号;关键字是:is, to)。9、 计算下列循环语句的次数(1)For I = -3 to 20 step 46(2) For I = -3.5 to 5.5 step 0.519(3) For I = -3.5 to 5.5 step -0.5无循环,因为步长0 ,循环初值小于终值(4) For I = -3 to 20 step 0无限循环,因为步长=010、下列30-90为语句标号,分别标记该语句,第40名共执行了几次,第50名共执行了
18、几次,执行第90号 语句后显示的结果是多少?30Forj =1 to 12 Step 3循环4次40For k = 6 to 2 step -2循环3次,被执行4次50mk = k共执行4*3=12次60print j , k70next k80next j90print j , k , mk130211、如果事先不知道循环次数,如何用forNext 结构来实现?答:将循环终值设置得足够大,再在循环体内设置条件语句,满足条件退出循环。12、利用循环结构,实现如下功能:(1)s=0: for I =1 to 10s = s + ( i+1)*(2*i+1)13、next i(2) 分别统计110
19、0中,满足3的倍数、7的倍数的数各是多少?s3 = 0: s7 = 0for I =1 to 100if I mod 3 = 0thens3 = s3 +1ifI mod7 = 0thens7 = s7 +1 next i(3) 将输入的字符串以反序显示。例如,输入“ASDFGHJKL”,显示“LKJHGFDSA”。s = InputBox(“ 请输入字符串”)forI = Len( s )to1 step -1 printMid ( s, I, 1 )next i下面程序的运行结果是什么?该程序的功能是什么?10100将20转换成2进制数表示14、Private Sub Command1_C
20、lick() Dim x$, n%n = 20Do While n 0 a = n Mod 2 n = n 2x = Chr(48 + a) & x LoopPrint x End Sub下面程序的运行结果是什么?该程序的功能是什么?22,484利用相差法求 x,y 的最大公约数和最小公倍数Private Sub Command2_Click() Dim x%, y%, z%x = 242: y = 44z = x * yDo Until x = yIf x y Then x = x - y Else y = y x LoopPrint x, z / x End Sub15、利用随机函数产生5
21、0100范围内的20个随机数,显示其中最大值,最小值和平均值。Private Sub Command3_Click()Dim i%, min%, max%, avg!, x% min = 100: max = 50: avg = 0For i = 1 To 20x = Int(Rnd * 51 + 50) Print x;If x max Then max = x If x max Thenmax = c(i, j): maxi = i:maxj = jEnd If Next jPrint 输出B 上三角元素 For i = 1 To 4Print Tab(i * 5); For j = i
22、To 4Print b(i, j); Next jPrint Next i(5)将A 矩阵第一行与第三行对应元素交换位置For j = 1 To 4t = a(1, j): a(1, j) = a(3, j): a(3, j) = tNext i(4)以下三角形式显示A 矩阵,上三角形式显示B 矩阵For i = 1 To 4 For j = 1 To iPrint a(i, j); Space(2); Next jPrint Next iNext j(6) 求 A 矩阵 矩阵条对角线元素之和Sum = 0For i = 1 To 4Sum = Sum + a(i, i) + a(i, 5 -
23、 i) Next i(7) 将 A 矩阵按列的次序把各元素放入一维数组D 中,显示结果Dim D%(16)For i = 1 To 4For j = 1 To 4D(k) = a(j, i): k = k + 1 Next jNext iPrint D 一维数组无素为: For k = 0 To 15Print D(k);Next k6、 声明一个一维字符类型数组,有20个元素,每个元素最多放10个字符,要求:1) 由随机数形成小写字母构成的数组,每个元素的字符个数由随机数产生,范围1102) 要求将生成的数组分4行显示,规定每个元素宽度为103) 显示生成的字符数组中字符最多的元素Dim s
24、t(1 To 20) As String, c As String * 1 Dim i%, n%For i = 1 To 20n = Int(Rnd * 11 + 1)For j = 1 To nc = Chr(Int(Rnd * 26 + 97) st(i) = st(i) & cNext j Next i(2)按一行显示5个字符串要求输出For i = 1 To 20Print st(i); Space(15 - Len(st(i); If i Mod 5 = 0 Then PrintNext i(3)显示20个中字符个数最多的一个maxlen = 0 maxstr = For i = 1
25、 To 20If Len(st(i) maxlen Then maxlen = Len(st(i) maxstr = st(i)End If Next iPrintPrint 最多字符个数:; maxlen; 字符串是:; maxstr 7、 简述列表框和组合框的异同处答:相同处都是可存放字符串;不同处在于:组合框是文本框和列表框的组合,可以输入内容,但要通过 additem 方法添加;列表框只能选择项目,不能直接输入内容。8、 列表框或组合框中选中的项目、总项目数的属性分别是什么?答:表示选中的内容,属性有:text;总项目数的属性为 ListCounts。9、 简述自定义类型与自定义变量的
26、区别答:前者仅定义了类型,这如同系统提供的integer、string 等基本类型;后者系统为其分配了存储单元。10、自定义一个职工类型,包含职工号、姓名、工资。声明一个职工类型的动态数组。输入n 信职工的数据;要求按工资递减的顺序排序,并显示排序的结果,每个职工一行显示三项信息。Private Type zgtype no As Integername As String * 10 gz As SingleEnd TypeDim s( ) As zgtype, n%Private Sub Form_click()Dim t As zgtypen = InputBox(请输入人数) ReDim
27、 s(1 To n)For i = 1 To n With s(i).no = InputBox(请输入职工工号).name = InputBox(请输入职工姓名).gz = InputBox(请输入职工工资)End WithIf s(j).gz s(j - 1).gz ThenNext i根据工资递减排序For i = 1 To n - 1For j = i + 1 To nt = s(j): s(j) = s(j - 1): s(j - 1) = t End IfNext j Next i输出信息For i = 1 To nPrint s(i).no, s(i).name, s(i).gz
28、 Next iEnd Sub第六章:过程1、 简述子过程和函数过程的共同点和不同之处答:子过程和函数过程的共同点:函数过程和子过程都是功能相对独立的一种子程序结构,它们有各自的过程头、变量声明和过程体。在程序中使用它们不但可避免书写重复的程序语句,缩短代码,而且可使程序条理清晰,容易阅读。两者不同点是:1) 过程声明的关键字不同,子过程用的是sub,函数过程用的是function.2) 子过程名无值就无类型声明,函数过程名有值就有类型声明3) 函数过程名兼作结果变量,因此在函数过程体内至少对函数过程名赋值;而子过程名在过程体内不能赋值。4) 调用方式不同,子过程是一条独立的语句,可用call
29、子过程或或省略call 直接以子过程名调用;函数过程不是一条独立语句,是一个函数值,必须参与表达式的运算 5)一般来说,一个函数过程可以被一个子过程代替,代替时只要改变函数过程定义的形式,并在子过程的形参表中增加一个地址传递的形参来传递结果。2、 什么是形参、什么是实参?什么时候是值引用?什么是地址引用?地址引用时,对应的实参有什么影响? 答:形参是在定义过程时的一种形式虚设的参数,只代表了该过程参数的个数、类型、位置,形参的名字并不重要,也没有任何值,只表示在过程体内进行某种运算或处理。实参是调用子过程时提供给过程形参的初始值或通过过程体处理后获得的结果。调用时用实参代替形参,实参与形参在个
30、数、类型、位置一一对应,实参与形参名相同与否无关。 实参与形参的结合有两种方法,即传地址( byref)和传值(byval),或称地址引用和值引用,缺省为地址引用。值引用时,系统将实参的值传递给对应的形参,实参与形参断开了联系。如果在过程体中改变形参的值,不会影响到实参。地址引用时,实参与形参变量共同用一个存储单元,如果在过程中改变了形参的值,则对应的实参也将发生改变。地址引用时,实参只能是变量,不能是常量或表达式。3、 指出下列过程语句说明中的错误:1)sub f1 ( n % ) as Integer错误为sub 子过程名无返回值,也就没有类型2)function f1 % ( f1 %
31、)函数名与形参名相同了3) sub f1 (byval n % ( ) )形参n 为数组,不允许声明为byval 值传递4) sub f1 ( x (i) as integer )形参x( i)不允许为数组元素4、 已知如下求两个平方数和的fsum 子过程:public sub fsum( sum % ,byval m%, byval n%) sum = a*a + b * bend sub在事件过程中若有如下变量声明:private sub command1_click ( ) Dima%, b% ,c!a = 10 : b = 20则指出如下过程调用语句的错误所在:(1) fsum 3 ,
32、 4 , 5fsum 子过程的第一个形参是地址传递,因此对应的实参应该是个变量,不应是3(2) fsum c , a , bfsum 子过程的第一个形参是地址传递并且是整形,但对应的C 是单精度(3) fsum a + b, a , b fsum 子过程的第一个形参是地址传递,对应的实参不应该是个表达式a+b(4) call fsum (sqr (a) , sqr (b )fsum 子过程的第一个形参是地址传递,对应的实参不应该是个表达式sqr(c)(5) call fsum c, a , b用 call 语句调用 fsum 子过程,必须加圆括号括起实参。5、 利用迭代法求议程 x2-a=0的
33、近似根,要求精度为10-5,失代公式为迭代函数过程、迭代子过程和递归法函数过程。Private Sub Command1_Click() PrintPrint 函数过程; f1(10)Call s1(x!, 10)Print 子过程; x!Print 递归调用; dgf(x, 10) End SubPublic Function f1(a!)函数过程Dim x!, x1!x = a Do。编制三个过程:x1 = (x + a / x) / 2If Abs(x - x1) 0.00001 Then Exit Do x = x1Loop f1 = xEnd FunctionPublic Sub s
34、1(x1!, a!)子过程Dim x!x = 9 DoLoop End Subx1 = (x + a / x) / 2If Abs(x1 - x) 0.00001 Then Exit Do x = x1Public Function dgf!(x, a!) 递归调用x1 = (x + a / x) / 2If Abs(x - x1) 0.00001 Then dgf = xElsedgf = dgf(x1, a) End IfEnd Function6、 要使变量在某事件过程中保留值,有哪几种变量声明的方法?答:声明变量为全局(public)、通用声明段或标准模块声明的模块级变量、局部过程声明
35、的表达态变量static。7、 为了使某变量在所有的窗体中都能使用,应在何处声明该变量? 答:在标准模块声明为全局变量8、 在同一模块、不同过程中声明的相同变量名,两者是否表示同一个变量?两者间有无联系? 答:表示不同的变量;两者没有关系。第7章:用户界面设计1、 框架的作用是什么?如何在框架中建立控件?答:对单选按钮进行分组,每一组单选按钮都是独立的,对一组单选按钮进行操作不会影响其他组单选按钮的选择;另外可对窗体上现有控件进行分组,提供视觉上的区分和总体的激活或屏蔽特性。在窗体上创建框架及其内部控件时,必须先建立框架,然后在其中建立各种控件。在框架内创建控件的方法如下: 1)先单击工具箱上
36、的工具,然后利用出现的“+”指针,在框架内行当位置拖拉出适当大小的控件,不能使用双击工具箱上工具的自动方式。2) 如果要用框架对窗体中现有控件进行分组,则应先选定控件,然后剪切到剪贴板,最后粘贴到框架上。2、 如果要让定时器每30秒产生一个 Timer 事件,则 Interval 属性应设置为多少?答:定时器是以 Interval 属性的值作为时间间隔产生 Timer 事件的。Interval 属性值的单位 ms(0.001s),因此当 Interval 属性值为30000时,每30s 发生一个 Timer 事件。3、 滚动条的 Scroll 和 Change 事件有什么区别?答:滚动条的 S
37、croll 事件是在拖动滑块时发生的事件,单击两端的箭头或空白处不会产生 Scroll 事件。此外,在拖动滑块过程中会产生许多 Scroll 事件,而不是仅仅在拖动滑块结束时产生一个Scroll 事件。滚动条的 Change 事件是当 Value 属性值改变时产生的事件。单击两端的箭头或空白处,Value 属性值都会改变,Change 事件随之产生;拖动滑块过程不会产生Change 事件,直到拖动结束时Value 属性值改变了才会产生 Change 事件。因此,拖动滑块过程中会多次执行 Scroll 事件过程,拖动滑块结束时产生一个Change 事件;单击两端的箭头或空白处,会执行 Chang
38、e 事件过程,而不会执行 Scroll 事件过程。4、 默认情况下,进度条是水平形式的,若要让进度条变成垂直形式,应如何设置? 答:进度条有水平和垂直两种形式,由属性Orientation 决定: 0ccOrentationHorizontal:(缺省)进度条是水平方向1ccOrentationVertical:进度条为垂直方向因此,若要让进度条变成垂直形式,其Orientation 属性应设置为1。5、 在使用“字体”对话框之前必须设置什么属性?答:在显示“字体”对话框前必须设置 Flags 属性,指示选用何种字体,否则将发生不存在字体错误。6、 热键与快捷键有什么区别?应如何实现?答:如果
39、要通过键盘来访问菜单项,则需要为菜单项定义热键与快捷键。热键是菜单项中带有下划线的字符。建立热键的方法是在菜单标题的某个字符前加一个“&”符号,显示是过一字符下面有一个下划线,表示该字符是一个热键字符。快捷键不是用来打开菜单,而是直接去执行相应的操作。要为菜单项指定快捷键,只要打开快捷键(Shortcut)下拉式列表框并选择一个键,则菜单项标题的右边就会显示快捷键名称。7、 从设计角度,试说明下拉式菜单和弹出式菜单的区别。答:菜单有两种基本类型:一种是下拉式菜单,由一个主菜单和若干个子菜单所组成的;另一种是弹出式菜单,是用户在某个对象上单击右键所弹出的菜单。下拉式菜单和弹出式菜单都是在使用菜单
40、编辑器时设计的。在设计时这两种菜单的区别是:弹出式菜单中作为菜单名的菜单项的 Visible 属性应设置为 False,程序开始运行时不需要显示,在单击鼠标右键时会弹出;下拉式菜单中作为菜单名的菜单项的Visible 属性应设置为 True,程序运行时显示在窗体的顶部。8、 什么是模式对话框?什么是非模式对话框?两者有什么区别?VB 中怎样设置窗体作为对话框? 答:对话框有两种类型:模式对话框和非模式对话框。若对话框是模式型,打开后无法将鼠标移支其他窗口,即只有在关闭后才能对其他窗体进行操作,如 Office 软件中“帮助”菜单的“关于”命令所打开的对话框;若对话框是非模式型,则打开后可对其他窗口进行操作,如“编辑”菜单的“替换”对话框就是一个非模式对话框的实例。当把窗体作为对话框打开时, Show 方法的参数有两个,分别表示模式对话框和非模式对话框:(1) 将窗体作为模式对话框打开,语句为:窗体名称.Show 1(2) 将窗