文档库

最新最全的文档下载
当前位置:文档库 > VB程序设计课后习题答案

VB程序设计课后习题答案

VB课后习题解答

第一、二章:

1、简述VB6.0的主要特点

答:方便、直观的可视化设计工具;面向对象程序设计方法;事件驱动的编程机制;易学易用的应用程序集成开发环境;结构化程序设计语言;完备的联机帮助功能;强大的多媒体、数据库和网络功能。2、当正常安装VB6.0后,误把Windows子目录删除。当重新安装Windows后,是否需要再次安装VB6.0?

答:要重新安装的。因为安装VB6.0时,有些VB程序被系统自动安装在Windows目录下,所以一旦删除Windows子目录,就必须重新安装VB6.0。

3、Visual Basic 6.0分为学习版、专业版和企业版,如何知道所安装的是哪个版本?

答:在VB6.0的启动界面上,能显示对应的版本。

4、叙述建立一个完整应用程序的过程

答:首先建立用户界面的控件对象(简称控件);然后对控件属性进行设置;再对控件事件过程及编程;

保存应用程序;程序调试和运行。

5、Visual Basic 6.0有多种类型窗口,若要在设计时看到代码窗口,应怎样操作?

答:选择“视图”—>“代码窗口”命令或单击“工程资源管理器”窗口中的“查看代码”按钮。

6、当建立好一个简单的应用程序后,假定该工程仅有一个窗体模块。试问该工程涉及多少个要保存的文件?

若要保存该工程的所有文件,应先保存什么文件?再保存什么文件?若不这样做,系统会出现什么信息?

答:涉及两个文件要保存。先保存窗体文件(.frm),再保存工程文件(.vbp)。若先保存工程文件,系统也会先弹出“文件另存为”对话框,要求先保存窗体文件。

7、保存文件时,若不改变目录名,则系统默认的目录是什么?

答:系统默认的目录是VB98

8、安装Visual Basic 6.0后,帮助系统是否也已安装?

答:没有。VB6.0的帮助系统在两张光盘上,即MSDN Library,其中还包含了VC、VFP等其他语言的帮助系统。

9、如何使用Visual Basic 6.0的帮助系统?

答:最方便的方法是选定要帮助的内容,然后按F1功能键,这时系统打开MSDN Library查阅器,直接显示与选定内容有关的帮助信息。

10、什么是类?什么是对象?什么是事件过程?

答:类是同类对象集合的抽象,它规定了这些对象的公共属性和方法;

对象是类的一个实例,对象包含三个要素:属性、方法和事件。

当在对象上发生了事件后,应用程序就要处理这个事件,而处理的步骤就是事件过程。

11、属性和方法的区别是什么?

答:属性是对象的特征,方法是对象的行为。前者有值,可以被赋值或引用;后者没有值,表示能够执行的操作。

12、当标签边框的大小由Caption属性的值进行扩展或缩小时,应对该控件的什么属性进行何种设置?

答:将该控件的Autosize属性值设置为true。

13、在VB6.0中,命令按钮的显示形式可以有标准的和图形的两种选择,它们通过什么属性来设置?若选

择图形的,则通过什么属性来装入图形?若已在规定的属性里装入了某个图形文件,但该命令按钮还是不能显示该图形,而显示的是Caption属性设置的文字,应怎样修改?

答:命令按钮的显示形式通过将Style属性值设置为Graphical来实现。通过Picture属性来装入图形。不能显示图形是因为Style属性值被设置为Standard,只要将其改为Graphical,并且将Caption的值设置为空即可。

14、如果文本框要显示多行文字,应对什么属性设置为何值?

答:将MultiLine属性的值设置为True。

15、标签和文本框的区别是什么?

答:在程序运行时,标签只能显示文字,不能输入文字,显示文字通过对Caption属性赋值来实现;而文本框既能显示文字,也能输入文字,这通过text属性来实现。

16、要让文本框获得焦点的方法是什么?

答:SetFocus方法。

17、简述文本框的Change和KeyPress事件的区别

答:相同点是当在文本框输入内容时,同时激发上述两个事件;不同点是Keypress事件可通过参数KeyAscii 返回所按键的编码值,可依此判断数据输入的正确性或数据输入结束与否,因而该事件使用较多;change 事件还可以发生在程序改变文本框的text属性时。

18、当某文本框输入数据后(按了回车键),经判断后认为是数据输入错,应怎样删除原来文本框中的数

据?

答:假定文本框的名称为Text1,则事件过程如下:

Private Sub Text1_KeyPress(KeyAscii As Integer )

if KeyAscii = 13 then

if 出错条件判断成立then

Text1=””

end if

……

end if

end sub

注意:删除刚输入的字符,通过KeyAscii=0语句实现;焦点定位文本框对象采用SetFocus方法。

19、在程序运行前,对某些控件设置属性值,除了在窗体中直接设置外,还可以通过代码设置,这些代码

一般存放在什么事件中?如果要将命令按钮定位在窗体的中央,试写出事件过程代码。

答:这些代码一般放在Forem_Load()事件过程中。将窗体定位在屏幕的中央,只能在属性窗口中将Form1窗口的StartUpPosition属性值设置为2(表示屏幕中心),该属性不能在运行时设置。

要将按钮定位在窗体的中央,事件过程如下:

Private sub Form_Load()

Command1.left= Form1.scaleWidth\2-command1.Width\2

Command1.Top = Form1.ScaleHeight \ 2 – command1.Height \2

End Sub

其中,ScaleWidth、ScaleHeight表示窗体的相对宽度和高度。

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 | + z5→abs(x+y) +z^5 (2)(a+xy)6→(1 + x * y )^ 6

(3)→(10*x + sqr(3*y) ) / (x * y ) (4)→( -b+sqr(b^2-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 10) 10 + x /10 (6)Round(123.2389*100)/100

(7) Ucase (c ) >=”A” and Ucase(c )<=”Z” or Lcase (c ) >=”a” and Lcase(c )<=”z”

(8) Mid ( s, 5, 6 ) (9) x >=10 and x <20

(10) ( x < z and y >z ) or ( x >z and y < z)

(11) x>z and y > z

5、下出下列表达式的值:

(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,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)+y ‘10x是非法变量名

(2)c=3+sqr(-3) ‘待求平方根的数为负数

(3)c+x+y=c*y ‘赋值符左边是表达式了

(4)x=sin(x)/(20 mod 2) ‘分母为零了

3、Msgbox函数与InputBox函数之间有什么区别?各自获得什么值?

答:两个函数共同之处都显示对话框。区别:Inputbox函数等待用户在文本框中输入数据,获得的是输入的字符串数据;Msgbox函数等待用户按一按钮,获得的是表示按钮的整数值,以决定程序的流向。

4、要使单精度变量x,y,z分别保留1位、2位、3位小数,并在窗体显示,应使用什么函数?如何编写对应的

print方法?

答:使用format函数,具体如下:

print Format(x,”0.0” )

print Format ( y , “ 0.00 “ ) print Format ( z , “ 0.000 “ )

5、 语句 if < 表达式> then …… 中的表达式可以是算术、字符、关系、逻辑表达式中的哪些?

答:算术、关系、逻辑表达式 6、 指出下列语句中的错误:

(1) if x ≥y then print x ‘表达式书写错误,应写成:x>=y (2) if 10

7、

按照下列条件,写出相应的条件语句

(1)字符型变量中第三个字符是“C ”时,利用Msgbox 显示“yes ”,否则显示“No ” if Mid ( c , 3, 1 ) = “C” then Msgbox “yes” else Msgbox “No” (2)利用if 语句、select case 语句两种方法计算分段函数:

答:private sub command1.click() x=val( text1) if x > 20 then

y = x * x + 3 * x +2 elseif x>=10 then y = sqr ( 3 * x ) – 2 elseif x>0 then

y= 1 / x + Abs ( x ) end if print y end sub

(3)利用if 语句和iif 函数两种方法求三个数x,y,z 中的最大值并存入变量max 中。 if x>y then max=x else max = y if z>max then max = z

max = iif ( x>y , x , y ) : max = iif ( max >z, max , z )

8、 在多分支结构的实现中,可以用 if ……then ……elseif ……endif 形式的语句,也可以用select case …end

Select 形式的语句,由于后者的条件书写更灵活、简洁,是否完全可以取代前者?

答:虽然Select Case ……end Select 形式的语句中条件书写更灵活、简洁,程序可读性强,但使用它有限制。(适合于对一个变量判断的) 首先,看该语句的形式:

Select Case <变量或表达式> case < 表达式列表1 > < 语句块1 > case < 表达式列表2> < 语句块2 > …

rivate sub command1.click() x=val( text1) Select case case is > 20

y = x * x + 3 * x +2 case is>=10

y = sqr ( 3 * x ) – 2 case is >0

y= 1 / x + Abs ( x ) end select print y end sub

[ Case else

< 语句块n+1 >

End Select

其中《变量或表达式》只能含有一个变量,任何含有多个变量的形式都是错误的。如,要判断x,y是否在第一、三象限内,若输入如下语句:select case x,y, VB程序会显示“缺少:语句结束”。

其次,在后面的case表达式列表中不能出现Select case变量或表达式中使用的变量,也不能出现主教材上列出的四种形式以外的符号或关键字(符号是:逗号;关键字是:is, to)。

9、计算下列循环语句的次数

(1)For I = -3 to 20 step 4 6

(2)For I = -3.5 to 5.5 step 0.5 19

(3)For I = -3.5 to 5.5 step -0.5 无循环,因为步长<0 ,循环初值小于终值

(4)For I = -3 to 20 step 0 无限循环,因为步长=0

10、下列30-90为语句标号,分别标记该语句,第40名共执行了几次,第50名共执行了几次,执行第90号

语句后显示的结果是多少?

30 For j =1 to 12 Step 3 循环4次

40 For k = 6 to 2 step -2 循环3次,被执行4次

50 mk = k 共执行4*3=12次

60 print j , k

70 next k

80 next j

90 print j , k , mk 13 0 2

11、如果事先不知道循环次数,如何用for…Next结构来实现?

答:将循环终值设置得足够大,再在循环体内设置条件语句,满足条件退出循环。

12、利用循环结构,实现如下功能:

(1)

s=0: for I =1 to 10

s = s + ( i+1)*(2*i+1)

next i

(2)分别统计1~100中,满足3的倍数、7的倍数的数各是多少?

s3 = 0: s7 = 0

for I =1 to 100

if I mod 3 = 0 then s3 = s3 +1

if I mod 7 = 0 then s7 = s7 +1

next i

(3)将输入的字符串以反序显示。例如,输入“ASDFGHJKL”,显示“LKJHGFDSA”。

s = InputBox(“ 请输入字符串”)

for I = Len( s ) to 1 step -1

print Mid ( s, I, 1 )

next i

13、

下面程序的运行结果是什么?该程序的功能是什么?

10100

将20转换成2进制数表示

Private Sub Command1_Click() Dim x$, n% n = 20

Do While n <> 0 a = n Mod 2 n = n \ 2

x = Chr(48 + a) & x Loop Print x End Sub

14、

下面程序的运行结果是什么?该程序的功能是什么?

Private Sub Command2_Click()

Dim x%, y%, z%

x = 242: y = 44

z = x * y

Do Until x = y

If x > y Then x = x - y Else y = y – x Loop

Print x, z / x End Sub

15、 利用随机函数产生50~100范围内的20个随机数,显示其中最大值,最小值和平均值。

Private Sub Command3_Click()

Dim i%, min%, max%, avg!, x% min = 100: max = 50: avg = 0 For i = 1 To 20

x = Int(Rnd * 51 + 50) Print x;

If x > max Then max = x If x < min Then min = x avg = avg + x Next I Print

Print "20个随机数最大是:"; max; " 最小值是:"; min; " 平均值是:"; avg / 20 End Sub

22,484

利用相差法求x,y 的最大公约数和最小公

倍数

第5章:数组和自定义类型

1、在VB6.0中,数组的下界默认为0,用什么语句可以重新定义数组的默认下界?

opention Basic 语句

2、要分配存放12个元素的整形数组,下列数组声明(若下界无,按默认规定)哪些符合要求?

(1)n=12 (2) Dim a%() Dim a ( 1 to n ) As Interger n=11

Redim a ( n )

(3) Dim a%[2,3] (4) Dim a ( 1,1,3) as Integer

(5) Dim a%(10 ) (6) Dim a! ( )

ReDim a ( 1 to 12 ) ReDim a (3, 2 ) As Integer

(7) Dim a% ( 2,3 ) (8) Dim a ( 1 to 3 1 to 4 ) As Integer

答:2、4、7、8符合要求

3、程序运行时显示“下标越界”可能产生的错误有哪几种情况?

答:下标比下界小或比上界大

4、已知下面数组声明,写出它的数组名、数组类型、维数、各维的上下界、数组的大小、并按行的顺序列

出各元素。Dim a ( -1 to 2, 3) as single

答:数组名为a,数组类型为单精度,二维,各维的下界为-1和0,上界分别为2和3;数组的大小为4*4共16个元素;各元素标号排列为:

a (-1, 0 ) a (-1, 1) a (-1, 2 ) a (-1, 3 )

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) a (2, 1) a (2, 2 ) a (2, 3 )

5、利用随机数生成两个矩阵(数据不一定相同,前者30-70范围,后者101-135)

(1)将两个矩阵相加结果放入C矩阵中。

For i = 1 To 4

For j = 1 To 4

c(i, j) = a(i, j) + b (i, j)

Next j

Next i

(2)将A矩阵转置

For i = 2 To 4

For j = 1 To i – 1

t = a(i, j): a(i, j) = a(j, i):

a(j, i) = t

Next j

Next i

(3)统计C矩阵中最大值和下标

Dim max%, maxi%, maxj%

max = c(1, 1): maxi = 0: maxj = 0

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

Next i

(4)以下三角形式显示A矩阵,上三

角形式显示B矩阵

For i = 1 To 4

For j = 1 To i

Print a(i, j); Space(2);

Next j

Print

Next i

Print "输出B上三角元素"

For i = 1 To 4

Print Tab(i * 5);

For j = i To 4

Print 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

Next j

(6)求A矩阵矩阵条对角线元素之和

Sum = 0

For i = 1 To 4

Sum = Sum + a(i, i) + a(i, 5 - i)

Next i

(7)将A矩阵按列的次序把各元素放入一维数组D中,显示结果

Dim D%(16)

For i = 1 To 4

For j = 1 To 4

D(k) = a(j, i): k = k + 1

Next j

Next i

Print "D一维数组无素为:"

For k = 0 To 15

Print D(k);

Next k

6、声明一个一维字符类型数组,有20个元素,每个元素最多放10个字符,要求:

1)由随机数形成小写字母构成的数组,每个元素的字符个数由随机数产生,范围1~10

2)要求将生成的数组分4行显示,规定每个元素宽度为10

3)显示生成的字符数组中字符最多的元素

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(Rn

d * 26 + 97))

st(i) = st(i) & c

Next j

Next i

'(2)按一行显示5个字符串要求输出

For i = 1 To 20

Print st(i); Space(15 - Len(st(i)));

If i Mod 5 = 0 Then Print

Next i

'(3)显示20个中字符个数最多的一个

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

Print "最多字符个数:"; maxlen; "字符串是:"; maxstr

7、简述列表框和组合框的异同处

答:相同处都是可存放字符串;不同处在于:组合框是文本框和列表框的组合,可以输入内容,但要通过additem方法添加;列表框只能选择项目,不能直接输入内容。

8、列表框或组合框中选中的项目、总项目数的属性分别是什么?

答:表示选中的内容,属性有:text;总项目数的属性为ListCounts。

9、简述自定义类型与自定义变量的区别

答:前者仅定义了类型,这如同系统提供的integer、string等基本类型;后者系统为其分配了存储单元。

10、自定义一个职工类型,包含职工号、姓名、工资。声明一个职工类型的动态数组。输入n信职工的数

据;要求按工资递减的顺序排序,并显示排序的结果,每个职工一行显示三项信息。

Private Type zgtype

no As Integer

name As String * 10

gz As Single

End Type

Dim s( ) As zgtype, n%

Private Sub Form_click()

Dim t As zgtype

n = InputBox("请输入人数")

ReDim s(1 To n)

For i = 1 To n

With s(i)

.no = InputBox("请输入职工工号")

.name = InputBox("请输入职工姓名")

.gz = InputBox("请输入职工工资")

End With

Next i

'根据工资递减排序

For i = 1 To n - 1

For j = i + 1 To n

If s(j).gz > s(j - 1).gz Then

t = s(j): s(j) = s(j - 1): s(j - 1) = t

End If

Next j

Next i

'输出信息

For i = 1 To n

Print s(i).no, s(i).name, s(i).gz

Next i

End Sub

第六章:过程

1、简述子过程和函数过程的共同点和不同之处

答:子过程和函数过程的共同点:函数过程和子过程都是功能相对独立的一种子程序结构,它们有各自的过程头、变量声明和过程体。在程序中使用它们不但可避免书写重复的程序语句,缩短代码,而且可使程序条理清晰,容易阅读。

两者不同点是:

1)过程声明的关键字不同,子过程用的是sub,函数过程用的是function.

2)子过程名无值就无类型声明,函数过程名有值就有类型声明

3)函数过程名兼作结果变量,因此在函数过程体内至少对函数过程名赋值;而子过程名在过程体内不能赋值。

4)调用方式不同,子过程是一条独立的语句,可用call子过程或或省略call直接以子过程名调用;函数过程不是一条独立语句,是一个函数值,必须参与表达式的运算

5)一般来说,一个函数过程可以被一个子过程代替,代替时只要改变函数过程定义的形式,并在子过程的形参表中增加一个地址传递的形参来传递结果。

2、什么是形参、什么是实参?什么时候是值引用?什么是地址引用?地址引用时,对应的实参有什么影响?

答:形参是在定义过程时的一种形式虚设的参数,只代表了该过程参数的个数、类型、位置,形参的名字并不重要,也没有任何值,只表示在过程体内进行某种运算或处理。

实参是调用子过程时提供给过程形参的初始值或通过过程体处理后获得的结果。

调用时用实参代替形参,实参与形参在个数、类型、位置一一对应,实参与形参名相同与否无关。

实参与形参的结合有两种方法,即传地址(byref)和传值(byval),或称地址引用和值引用,缺省为地址引用。

值引用时,系统将实参的值传递给对应的形参,实参与形参断开了联系。如果在过程体中改变形参的值,不会影响到实参。

地址引用时,实参与形参变量共同用一个存储单元,如果在过程中改变了形参的值,则对应的实参也将发生改变。

地址引用时,实参只能是变量,不能是常量或表达式。

3、指出下列过程语句说明中的错误:

1)sub f1 ( n % ) as Integer 错误为sub子过程名无返回值,也就没有类型

2)function f1 % ( f1 % ) 函数名与形参名相同了

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 * b

end sub

在事件过程中若有如下变量声明:

private sub command1_click ( )

Dim a%, b% ,c!

a = 10 :

b = 20

则指出如下过程调用语句的错误所在:

(1)fsum 3 , 4 , 5 ‘fsum子过程的第一个形参是地址传递,因此对应的实参应该是个变量,不应是3

(2)fsum c , a , b ‘fsum子过程的第一个形参是地址传递并且是整形,但对应的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的近似根,要求精度为10-5,失代公式为。编制三个过程:

迭代函数过程、迭代子过程和递归法函数过程。

Private Sub Command1_Click()

Print

Print "函数过程"; f1(10)

Call s1(x!, 10)

Print "子过程"; x!

Print "递归调用"; dgf(x, 10)

End Sub

Public Function f1(a!) '函数过程

Dim x!, x1!

x = a

Do

x1 = (x + a / x) / 2

If Abs(x - x1) < 0.00001 Then Exit Do

x = x1

Loop

f1 = x

End Function

Public Sub s1(x1!, a!) '子过程

Dim x!

x = 9

Do

x1 = (x + a / x) / 2

If Abs(x1 - x) < 0.00001 Then Exit Do

x = x1

Loop

End Sub

Public Function dgf!(x, a!) '递归调用

x1 = (x + a / x) / 2

If Abs(x - x1) < 0.00001 Then

dgf = x

Else

dgf = dgf(x1, a)

End If

End Function

6、要使变量在某事件过程中保留值,有哪几种变量声明的方法?

答:声明变量为全局(public)、通用声明段或标准模块声明的模块级变量、局部过程声明的表达态变量static。

7、为了使某变量在所有的窗体中都能使用,应在何处声明该变量?

答:在标准模块声明为全局变量

8、在同一模块、不同过程中声明的相同变量名,两者是否表示同一个变量?两者间有无联系?

答:表示不同的变量;两者没有关系。

第7章:用户界面设计

1、框架的作用是什么?如何在框架中建立控件?

答:对单选按钮进行分组,每一组单选按钮都是独立的,对一组单选按钮进行操作不会影响其他组单选按钮的选择;另外可对窗体上现有控件进行分组,提供视觉上的区分和总体的激活或屏蔽特性。

在窗体上创建框架及其内部控件时,必须先建立框架,然后在其中建立各种控件。在框架内创建控件的方法如下:

1)先单击工具箱上的工具,然后利用出现的“+”指针,在框架内行当位置拖拉出适当大小的控件,不能使用双击工具箱上工具的自动方式。

2)如果要用框架对窗体中现有控件进行分组,则应先选定控件,然后剪切到剪贴板,最后粘贴到框架上。

2、如果要让定时器每30秒产生一个Timer事件,则Interval属性应设置为多少?

答:定时器是以Interval属性的值作为时间间隔产生Timer事件的。Interval属性值的单位ms(0.001s),因此当Interval属性值为30000时,每30s发生一个Timer事件。

3、滚动条的Scroll和Change事件有什么区别?

答:滚动条的Scroll事件是在拖动滑块时发生的事件,单击两端的箭头或空白处不会产生Scroll事件。此外,在拖动滑块过程中会产生许多Scroll事件,而不是仅仅在拖动滑块结束时产生一个Scroll事件。

滚动条的Change事件是当Value属性值改变时产生的事件。单击两端的箭头或空白处,Value属性值都会改变,Change事件随之产生;拖动滑块过程不会产生Change事件,直到拖动结束时Value属性值改变了才会产生Change事件。

因此,拖动滑块过程中会多次执行Scroll事件过程,拖动滑块结束时产生一个Change事件;单击两端的箭头或空白处,会执行Change事件过程,而不会执行Scroll事件过程。

4、默认情况下,进度条是水平形式的,若要让进度条变成垂直形式,应如何设置?

答:进度条有水平和垂直两种形式,由属性Orientation决定:

0—ccOrentationHorizontal:(缺省)进度条是水平方向

1—ccOrentationVertical:进度条为垂直方向

因此,若要让进度条变成垂直形式,其Orientation属性应设置为1。

5、在使用“字体”对话框之前必须设置什么属性?

答:在显示“字体”对话框前必须设置Flags属性,指示选用何种字体,否则将发生不存在字体错误。6、热键与快捷键有什么区别?应如何实现?

答:如果要通过键盘来访问菜单项,则需要为菜单项定义热键与快捷键。

热键是菜单项中带有下划线的字符。建立热键的方法是在菜单标题的某个字符前加一个“&”符号,显示是过一字符下面有一个下划线,表示该字符是一个热键字符。

快捷键不是用来打开菜单,而是直接去执行相应的操作。要为菜单项指定快捷键,只要打开快捷键(Shortcut)下拉式列表框并选择一个键,则菜单项标题的右边就会显示快捷键名称。

7、从设计角度,试说明下拉式菜单和弹出式菜单的区别。

答:菜单有两种基本类型:一种是下拉式菜单,由一个主菜单和若干个子菜单所组成的;另一种是弹出式菜单,是用户在某个对象上单击右键所弹出的菜单。

下拉式菜单和弹出式菜单都是在使用菜单编辑器时设计的。在设计时这两种菜单的区别是:弹出式菜单中作为菜单名的菜单项的Visible属性应设置为False,程序开始运行时不需要显示,在单击鼠标右键时会弹出;下拉式菜单中作为菜单名的菜单项的Visible属性应设置为True,程序运行时显示在窗体的顶部。

8、什么是模式对话框?什么是非模式对话框?两者有什么区别?VB中怎样设置窗体作为对话框?

答:对话框有两种类型:模式对话框和非模式对话框。

若对话框是模式型,打开后无法将鼠标移支其他窗口,即只有在关闭后才能对其他窗体进行操作,如Office 软件中“帮助”菜单的“关于”命令所打开的对话框;若对话框是非模式型,则打开后可对其他窗口进行操作,如“编辑”菜单的“替换”对话框就是一个非模式对话框的实例。

当把窗体作为对话框打开时,Show方法的参数有两个,分别表示模式对话框和非模式对话框:(1)将窗体作为模式对话框打开,语句为:窗体名称.Show 1

(2)将窗体作为非模式对话框打开,语句为:窗体名称.show 0

9、简述窗体之间数据互访如何才能实现。

答:在多重窗体程序中,不同窗体之间可以相互访问,即一个窗体可以访问另一个窗体中的数据。两个窗体之间访问有下列三种情况:

(1)一个窗体可以在直接访问另一个窗体上控件的属性,形式如下:另一个窗体名.窗件名.属性

(2)一个窗体直接访问在另一个窗体中定义的全局变量,形式如下:另一个窗体名.全局变量名

(3)在模块中定义公共变量实现相互访问,这是最常用的方法。

10、MouseDown事件发生在MouseUp和Click事件之前,但MouseUp和Click事件发生的次序与对象有

关。试编写一个小程序测试在命令按钮和标签上MouseDown、MouseUP和Click事件发生的顺序。

答:在窗体上创建一个命令按钮Command1和一个标签Label1,然后编写下列事件过程就以测试这三个事件发生的先后顺序了。

Private Sub Command1_Click()

Print "命令按钮的Click事件"

End Sub

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Print "命令按钮的MouseDown事件"

End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Print "命令按钮的MouseUp事件"

End Sub

Private Sub Label1_Click()

Print "标签的Click事件"

End Sub

Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Print "标签的MouseDown事件"

End Sub

Private Sub Label1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

Print "标签的MouseUp事件"

End Sub

测试结果发现,在标签上发生的顺序为:MouseDown、MouseUp、Click,而在命令按钮上发生的顺序是:MouseDown、Click、MouseUp。

11、在KeyDown事件过程中,如何检测Ctrl和F3键是否同时被按下?

答:使用(KeyCode = vbKeyF3)and (Shift = vbCtrlMask ) 或者(KeyCode = 114 )and (Shift = 2)表达式,可以检测Ctrl和F3键是否同时被按下,F3键的键盘扫描码是114。

12、KeyDown事件与KeyPress事件的区别是什么?

答:用户按下并且释放一个会产生ASCII码的键时,触发KeyPress事件;用户按下键盘上任意一个键时,触发KeyDown事件。KeyDOwn与KeyPress事件的主要区别如下:

(1)从时间上来说,按下键盘上的一个键立即触发KeyDown事件,但此时没有引发KeyPress事件。只有在释放该按键时触发KeyPress事件。

(2)用户按下键盘中的任一键就会在相应对象引发KeyDown事件,但是并不是按下和释放键盘上的任意一个键都会引发KeyPress事件,KeyPress事件只对会产生ASCII码的按键有反应,包括数字、大小写的字母、Enter、Backspace、Esc、Tab键等。对于如方向键这样的不会产生ASCII码的按键,KeyPress 事件不会被触发。

13、试说明键盘扫描代码(Keycode)与键盘ASCII码(KeyAscii)的区别。

答:键盘扫描代码(KeyCode)是对键盘上按键的编码,它告诉事件过程用户所操作的物理键。也就是说,大写字母和小写字母使用同一个键,它们的KeyCode相同。对于有上档字符和下档字符的键,其KeyCode 也相同,为下档字符的ASCII码。

14、键盘上“4”键的上档字符是“$”。当同时按下Shift键和“4”键时,KeyPress事件发生了几次?过

程中的KeyAscii参数值是多少?

答:KeyPress事件发生了一次,KeyAscii参数值是36。即“$”字符的ASCII码为36。因为KeyPress事件是在输入一个ASCII码字符时发生的事件,尽管在输入“$”字符时按了两个键,但是输入了一个ASCII 字符,所以KeyPress事件只发生一次。

第8章:数据文件

1、什么是文件?ASCII文件与二进制文件有什么区别?

答:文件是存储在外存储器(如磁盘)上的用文件名标识的数据的集合。按存储信息的形式分类,文件可分为ASCII文件和二进制文件。

ASCII文件存放的是各种数据的ASCII代码,可以用记事本打开;二进制文件存放的是各种数据的二进制代码,不能用记事本打开,必须由专用程序打开。

2、根据文件的访问模式,文件可分为哪几种类型?访问方式各有什么特点?

答:根据文件的访问模式,文件可分为顺序文件、随机文件、二进制文件。

顺序文件要求按顺序访问文件的数据;随机文件可以根据记录号直接访问某一特定记录;二进制文件要求以字节为单位定位数据位置,允许程序直接访问各个字节数据,也允许程序按所需的任何方式组织和访问数据。

3、构造满足下列条件的Open语句。

(1)建立一个新的顺序文件Seqnew.dat,供用户写入数据,指定文件号为1

答:Open “ Seqnew.dat “ For Outpu t As # 1

(2)打开一个旧的顺序文件Seqold.dat,用户将从该文件读出数据,指定文件号为2

答:Open “ Seqold.dat “ For Input As # 2

(3)打开一个旧的顺序文件Seqappend.dat,用户将在该文件后面添加数据,文件号通过调用Freefile函数获得。

答:Dim No%

No= FreeFile

Open “ Seqappend.dat “ For Append As # No

4、试写出程序代码片段,将文本文件Text.dat中的内容读入变量StrTest中。

答:文本文件具有行结构的特性,可以按行读取文本文件中的数据:

Open “Text.dat” For Input As # 1

strTest$ = “”

Do While Not EOF(1)

Line Input # 1 , LineData

strTest$ = strTest$ + LineData + vbCrLf

Loop

Close # 1

5、Print #和Write # 语句的区别?各有什么用途?

答:两种语句区别是:用Write # 语句输出数据时,各数据项之间自动插入“,”,并给字符串加上双引号,以区别数据类型;而用Print # 语句输出数据时,数据项之间既无逗号分隔,字符串又无双引号引起。

因此,为了以后读取数据项的方便,输出列表有多个数据项组成时,建议使用Write #语句。

6、试说明EOF函数的功能

答:EOF函数判断文件指针是否到达文件结束标志。该函数在读取文件中的全部记录时很有用,可作为循环结构中循环终止与否的标志。

7、随机文件和二进制文件的读写操作有何不同?

答:随机文件以记录为单位读/写数据,而二进制文件以字节为单位读/写数据。

8、试写出程序代码片段,将磁盘上的两个文件合并(提示:把它们作为二进制文件处理)。

答:随机文件按记录为单位读/写,所以合并时两个文件的记录类型应相同,合并的思路与顺序文件合并思路相同;否则采取二进制方式以字节为单位读/写。

将两个二进制文件合并成第三个二进制文件程序段如下:

Dim char As Byte

Open “t1.dat” For Binary As # 1

Open “t2.dat” For Binary As # 2

Open “t3.dat” For Binary As # 3

DO While Not EOF(1)

Get 1, char

Put 3, recno, char

Loop

Do While Not Eof(2)

Get 2, , char

Put 3, , char

Loop

Close #1, #2, #3

9、为什么有时不使用Close语句关闭文件会导致文件数据的丢失?

答:将数据写入文件时,先将数据写入文件缓冲区暂存,等到文件缓冲区满了或文件关闭时才一次性输出到文件中。因此,数据写入文件结束后一定要关闭文件,因为有部分数据仍然在文件缓冲区,不关闭文件会有数据丢失情况发生,尽管大多数情况下操作系统会自动关闭文件。

第九章:图形操作

1、怎样建立用户坐标系?

答:使用Scale方法指定对象左上角和右下角的坐标值,如Form1.Scale(-300,200)-(300, -200)。

2、窗体的ScaleHeight、ScaleWidth属性和Height、Width属性有什么区别?

答:ScaleHeight、ScaleWidth属性为窗体内部度量单位数据,Height、Width属性为窗体外观尺寸。当改变坐标轴的方向后,ScaleHeight、ScaleWidth属性值可以是负数,而Height、Width属性值必定大于0。

3、RGB函数中的参数按什么颜色排列?其有效的数值范围是多少?怎样用RGB函数实现色彩的渐变?

答:RGB函数中的参数按红、绿、蓝顺序排列,RGB函数三基色的取值在0~255之间,当该值大于255时,RGB函数将其当作255处理。为实现色彩的渐变,只要在循环内连续改变三基色的取值。下面给出一段程序样例,通过调整RGB函数的参数值,实现色彩由黑到红之间的渐变。

For j=0 to 255

Line(10, j) – ( 5000 , j ) , RGB( j, 0, 0 )

Next j

4、怎样设置Line控件对象的线宽?

答:在设计或运行时设置Line控件对象的BorderWidth属性。

5、当用Line方法画线之后,CurrentX与CurrentY在何处?

答:当用Line方法画线之后,CurrentX与CurrentY属性值被设置为直线的终点坐标。

6、当用Circle方法画圆弧和扇形时,若起始角的绝对值大于终止角的绝对值,则圆弧角度在何范围?

答:当用Circle方法画圆弧和扇形时,若起始角的绝对值大于终止角的绝对值,则所画圆弧或扇形的圆弧角度大于180度。

7、使用Pset绘制像素点的大小由何因素确定?

答:使用Pset绘制像素点的大小由当前容器的DrawWidth的属性值确定。

8、怎样用Point方法来比较两张图片?

答:用Point方法按行和列的顺序扫描图片,Point方法可返回窗体对象或PictureBox控件和Image控件所指定点的RGB颜色值,如果所引用的点位于对象指定区域之外,用Point方法返回-1。

第十章:数据库应用基础

1、什么是关系型数据库?

答:关系型数据库模型将数据以表的集合来表示。在关系型数据库中,行被称为记录,列则被称为字段,每个字段都有一个取值范围,表是有关信息的逻辑组。

2、简述SQL中常用的Select语句的基本格式和用法。

答:SELECT语句常用的语法形式为:

SELECT 目标表达式列表FROM表名[WHERE 查询条件] [GROUP BY 分级字段HAVING 分组条件] [ ORDER BY 排序关键字段[ASC| DESC]]

其中SELECT和FROM子句是必需的,通过使用SELECT语句返回一个查询结果。

3、简述使用ADO数据控件访问数据库的步骤

答:首先使用ADO数据控件建立与数据库的连接;使用命令对象对数据库发出SQL命令,从数据库中选择数据构成记录集;应用程序对记录集进行操作。

4、什么是数据绑定?怎样实现数据绑定?

答:在V osia; Basoc中,ADO数据控件不能直接显示记录集对象中的数据,必须通过能与其绑定的控件来实现。数据绑定是一个过程,即在运行时自动为与记录集中的元素关联的控件设置属性。Windows窗体可以进行两种类型的数据绑定:简单数据绑定和复杂数据绑定。绑定控件通过ADO数据控件使用记录集中的数据,再由ADO控件将记录集连接到数据内的数据表。要使绑定控件能自动连接到记录集的某个字段,通常需要对控件的两个属性进行设置:

(1)DataSource属性:通过指定一个有效的ADO数据控件将绑定控件连接到数据源。

(2)DataField属性:设置记录集中有效的字段使绑定控件与其建立联系。

5、如何用代码给ADO数据控件设置连接属性,创建一个记录集对象?

答:(1)用代码设置ConnectionString属性值

mlink = “ Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Student.mdb “

Adodc1.ConnectionString = mlink

(2)指定命令类型:http://www.wendangku.net/doc/5607b76bd0d233d4b04e6973.htmlmandType = adCmdUnknown

(3)设置数据源:Adodc1.RecordSource = “ Selcet * From 基本情况汇报”

(4)激活:Adodc1.Refresh

6、在ADO中如何用代码实现记录指针的移动?

答:MoveFirst方法移至第1条记录,MoveLast方法移至最后一条记录,MoveNext方法移至下一条记录,MovePrevious方法移至上一条记录。

7、如何实现对数据库的增、删、改功能?

答:对记录集数据的增、删、改操作涉及AddNew、Delete、Update和CancelUpdate这4个方法。

增加一条新记录通常要经过以下三步:(1)调用AddNew方法,在记录集内增加一条记录;(2)给新记录各字段赋值。可以通过绑定控件直接输入,也可使用程序代码给字段赋值。(3)调用Update方法,确定所做的添加,将缓冲区内的数据写入数据库。

从记录集中删除记录通常要经过以下三步:

(1)定位被删除的记录使之成为当前记录;(2)调用Delete方法;(3)移动记录指针

ADO数据控件有较高的智能,当改变数据项的内容时,ADO自动进入编辑状态,在对数据编辑后,只要改变记录集的指针或调用Update方法,即可确定所做的修改。

8、如果要显示数据表内的照片,可使用哪些控件?

答:PictureBox和Image控件,将它们绑定到数据表内的照片字段。