VB教程课后习题的答案及解析

全国计算机等级考试二级Visual Basic习题集

Exit Do

Case 65, 68, 92 End End Select Next I Loop End Sub

上述事件过程执行后,下列描述中正确的是( )

A)当所产生的随机数为12时结束所有循环 B)在For循环中产生的随机数小于或等于100 C)当所产生的随机数为65、68或92时窗体关闭、程序结束 D)Do循环执行的次数为1000次

参考答案:C 【解析】程序Do循环中嵌套了For循环,Do循环没有设置结束条件,而是在For循环体中的Select语句中设置了退出Do循环和For循环及结束程序的分支,因此Do循环的次数无法确定。随机函数Rnd产生[0,1)之间的一个数,包括0但不包含1,因此Rnd*100的范围是大于等于0小于100。随机数为65、68或92时结束程序关闭窗体,为58时退出Do循环,为12时退出For循环进入下一次Do循环。 13.在窗体上画一个名称为Command1的命令按钮,然后编写如下事件过程: Private Sub Command1_Click() C=1234

C1=Trim(str(c)) For i=1 to 4

Print ____________ Next

End Sub 程序运行后,单击命令按钮,要求在窗体上显示如下内容: 1 12 123 1234

则在横线处应填入的内容为( A )

A) Left(c1,i) B) Right(c1,i) C) Mid(c1,i,i) D)Mid(c1,i,1)

参考答案:A【解析】程序中使用Str(c)将数值1234转换成为一个字符串\1234\,又使用Trim函数去除了字符串首尾可能存在的空格,保证了字符串中只有1、2、3、4这4个字符。在For循环中从左边递次输出这些字符就需要使用Left()函数,Left是左部截取函数,可以截取字符串左边指定个数的字符串,以Left(c1, i)的形式即可每次循环取出期望的字符串。因此答案为A。 14.编写如下程序:

Private Sub Command1_Click() Dim num As Integer

Dim k As Integer, n As Integer

num = InputBox(\请输入一个正整数:\ k = num n = 2 Do

Do While num Mod n = 0 Print n;

num = num / n Loop

n = n + 1

Loop Until n > k / 2

End Sub 程序运行后,单击命令按钮Command1,并输入数值20,则输出结果为(C )

A) 2 3 4 5 B) 2 5 C) 2 2 5 D) 2 3 4

15.窗体上有1个名称为Command1的命令按钮;1个名称为List1、没有列表项的列表框。编写如下程序: Private Sub Command1_Click()

Dim x As String, s As String, temp As String Dim i As Integer

x = InputBox(\输入字符串\输入\ If x <> \

For i = Len(x) To 1 Step -1 s = Mid(x, i, 1) If s <> \ temp = s + temp Else

list1.AddItem temp s = \ temp = \ End If Next

list1.AddItem temp Else

MsgBox \输入内容为空!\ End If End Sub

程序运行后,单击命令按钮Command1,并输入”Happy new year”,则在List1中显示的内容为( A ) A) year B) yppaH C) raey D) Happy New wen wen new

第 6 页

全国计算机等级考试二级Visual Basic习题集

Happy raey yppaH year 16.编写如下程序:

Private Sub Command1_Click() Dim score As Integer score = 86

If score > 85 Then r = 1

ElseIf score > 60 Then r = 2 Else r = 0 End If Print r

End Sub 程序运行后,单击命令按钮command1,输出结果为( D )

A) 86 B) 0 C) 2 D) 1 17.编写如下程序:

Private Sub Command1_Click() Dim x As Integer, y As Integer x = 1 y = 1 Do

y = x * y

If y > 10 Then Exit Do Else

x = x + 3 End If

Loop Until x <= 10 Print x; y

End Sub 程序运行后,单击命令按钮Command1,输出结果为( D )

A) 1 1 B) 4 2 C) 7 28 D) 4 1 18.编写如下程序:

Private Sub Command1_Click() Dim a As Integer, b As Integer a = 3 b = 2

If a * b < 10 Then b = b + 1 Else b = b - 1 Print b - a > 0 End Sub

程序运行后,单击命令按钮Command1,输出结果为( A )

A) False B) 1 C) -1 D) True

19.在窗体上画一个Timer1计时器控件和一个Shape1形状控件,并编写如下程序: Private Sub Form_Load() Timer1.Interval = 1000 Timer1.Enabled = True End Sub

Private Sub Timer1_Timer() If shape1.Shape = 1 Then shape1.Shape = 3 Else

shape1.Shape = 1 End If End Sub

运行程序,则看到的结果是( C )

A) 显示椭圆形,每秒移动一次 B) 显示正方形,每秒闪烁一次

C) 交替显示正方形和圆形,每秒交替一次 D) 交替显示矩形和椭圆形,每秒交替一次 20.有如下程序:

Private Sub Command1_Click()

Dim i As Integer, j As Integer Dim sum As Integer n=1 Do

j=1 Do

sum=sum+j j=j+1 Print j; Loop Until j>3 n=n+2 Loop Until n>10 Print sum

第 7 页

全国计算机等级考试二级Visual Basic习题集

End Sub 运行上述程序,外层Do循环执行的次数为( B )。 A) 4 B) 5 C) 7 D) 10

参考答案:B 【解析】外层Do循环结束条件是n>10,n初值为1,每次加2,循环体中每次循环n的值为3、5、7、9、11,值变化5次,因此外层Do循环执行次数为5次。

第七章 数组

1.下面关于控件数组的叙述中正确的是( B )

A) 控件数组中每个元素都是独立的控件,因此都有各自的事件过程 B) 控件数组中所有控件的名称相同,但其Index属性值各不相同 C) 控件数组中所有控件的名称相同,但其Value属性值各不相同 D) 上述都是错误的 2.命令按钮Command1的事件过程如下: Private Sub Command1_Click() Dim arr(5, 5) As Integer

Dim i As Integer, j As Integer For i = 1 To 4 For j = 2 To 4

arr(i, j) = i + j Next j Next i

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

End Sub 执行上述过程,输出结果是( D )

A) 7 B) 12 C) 6 D) 11

参考答案:C 【解析】当用Dim语句定义数组时,该语句把数组中的全部元素都初始化为0,而把字符串数组中的全部元素都初始化为空字符串。程序中利用For循环为数组arr的部分元素赋值这些元素的第一维范围是1~4,第二维的范围是2~4,值为两维下标的和。程序要输出arr(1, 3)+arr(3, 4)的值,arr(1, 3)值为1+3=4,arr(3, 4)值为3+4=7。4+7=11,因此程序输出结果为11。 3.设有如下声明语句 Option Base 1

Dim arr(2,-1 to 5) As Integer

则数组arr中数组元素的个数是( C )

A) 12 B) 21 C) 14 D) 10

4.在窗体上画一个名为Command1的命令按钮,然后编写如下代码:

Option Base 1

Private Sub Command1_Click() Dim a

a=Array(1, 2, 3, 4) j=1

For i=4 To 1 Step-1 s=s+a(i)* j j=j * 10 Next i Print s

End Sub 运行上面的程序,其输出结果是( A )。 A) 1234 B) 12 C) 34 D) 4321

参考答案:A 【解析】Array函数用来为数组元素赋值,即把一个数据集读入某个数组。其格式为:数组变量名=Array(数组元素值)。Dim a语句没有变量类型名,则a默认为Variant类型,这里它作为数组变量使用。现在已知数组a中元素的值依次为1、2、3、4,则For循环中各变量值变化如下: i=4时,s=s+a(4)*j=0+4*1=4,j=1*10=10 i=3时,s=s+a(3)*j=4+3*10=4+30=34,j=10*10=100 i=2时,s=s+a(2)*j=34+2*100=34+200=234,j=100*10=1000 i=1时,s=s+a(1)*j=234+1*1000=234+1000=1234。循环结束。S的值为1234。 5.在窗体上画一个名为Command1的命令按钮,然后编写以下程序:

Private Sub Command1_Click() Dim M(10)As Integer For k=1 To 10 M(k)=12-k Next k x=8

Print M(2+M(x))

End Sub 运行程序,单击命令按钮,在窗体上显示的是( A )。 A) 6 B) 5 C) 7 D) 8

参考答案:A 【解析】从程序中可知,数组M元素M(1)~M(10)的值为11、10、9、8、7、6、5、4、3、2。则M(8)的值为4,M(2+M(8))即M(2+4),即M(6)。M(6)的值为6。因此窗体上显示为6。 6.下列数组定义中错误的是( C )。

A) Dim a(-5 To-3) B) Dim a(3 To 5) C) Dim a(-3 To-5) D) Dim a(-3 To 3) 参考答案:C 【解析】定义数组时,数组下标的上界>=下界。故C选项错误。 7.以下叙述中错误的是( D )

第 8 页

全国计算机等级考试二级Visual Basic习题集

A) 用ReDim语句可以改变数组的维数 B) 用ReDim语句可以对数组中的所有元素置0或空字符串 C) 用ReDim语句可以改变数组的每一维的大小 D) 用ReDim语句可以改变数组的类型 8.在窗体上画1个命令按钮,并编写如下事件过程: Private Sub Command1_Click() Dim a(3, 3) For m = 1 To 3 For n = 1 To 3

If n = m Or n = 4 - m Then a(m, n) = m + n Else

a(m, n) = 0 End If

Print a(m, n); Next n Print Next m

End Sub 运行程序,单击命令按钮,窗体上显示的内容为( C )

A)2 0 0 B)2 0 0 C)2 0 4 D)2 3 0 0 4 0 0 4 5 0 4 0 3 4 0 0 0 6 0 5 6 4 0 6 0 0 6

参考答案:C【解析】根据For循环中的If语句的条件n=m or n=4-m中的n=m首先可以得出a(1,1)=2,a(2,2)=4,a(3,3)=6,其次根据n=4-m的条件可以得出a(1,3)=4,a(2,2)=4,a(3,1)=4。而其他的元素值都为0。因此窗体上输出的三行分别是:2 0 4 ,0 4 0,4 0 6。

9.设有下面的程序段:

x=InputBox(“请输入一个整数”) ReDim a(x)

For k=x to 0 Step -1

a(k)=k

Next k 一般,在这段程序之前应先进行数组a的定义。下面定义语句中正确的( A ) A) Dim a( ) As Integer B) Dim a(100) As Integer C) Dim a(0 to 100) As Integer D) Dim a As Integer

第八章 数据文件

1.窗体上有一个名称为Text1的文本框,一个名称为Command1的命令按钮。以下程序的功能是从顺序文件中读取数据:

Private Sub Command1_Click()

Dim s1 As String, s2 As String Open \:\\d4.dat\ Line Input #3, s1 Line Input #3, s2 Text1.Text=s1+s2 Close

End Sub 该程序运行时有错误,应该进行的修改是( A )。

A) 将Open语句中的For Append改为For Input B) 将Line Input改为Line

C) 将两条Line Input语句合并为Line Input #3, s1,s2 D) 将Close语句改为Close #3

参考答案:A 【解析】文件打开方式中的Append意味着打开的文件是顺序输出方式,也就是说打开文件是为了向其中写入数据的而不是要读出数据。因此Open \:\\d4.dat\应该改为Open \:\\d4.dat\。所以A选项正确。Clsoe语句中的文件号可以省略,这时会关闭所有打开的文件。 2.顺序文件在一次打开期间( D )。

A) 只能读,不能写 B) 只能写,不能读 C) 既可读,又可写 D) 或者只读,或者只写

参考答案:D 【解析】顺序文件的读写是由Open语句的打开模式决定。用Output模式打开,则可对顺序文件进行写操作;用Input模式打开,可对顺序文件进行读操作;用Append模式打开,可将数据追加到文件尾部。打开一次期间,只能读,或只能写,不能同时进行读写操作。但随机文件和二进制文件打开以后可以同时进行读写操作。故D选项正确。 3.用语句Open “C:\\teac.txt” for Input As #1 打开文件后,就可以编程序,下列正确的是( B )

A)在C盘根目录下建立名为teac.txt的文件 B)将C盘根目录下teac.txt文件的内容读入内存

C)把内存中的数据写入C盘根目录下名为teac.txt的文件 D)将某个磁盘文件的内容写入C盘根目录下名为teac.txt的文件 4.写文件语句Print #与Write #的区别之一是( B )

A)Write # 用于写二进制文件;Print # 用于写文本文件

B)Write # 写到文件的每个数据项之间自动添加”,”字符;而Print #

C) Print # 既可以写顺序文件,也可以写随机文件;Write # 则只能写顺序文件 D)Print # 写到文件的每个数据项之间自动添加”,”字符;而Write #

第九章 通用对话框

1.在窗体上画一个通用对话框,其名称为CommonDialog1,则下列与CommonDialog1.ShowOpen方法等效的语句是( A )。 A)CommonDialog1.Action=1 B)CommonDialog1.Action=2 C)CommonDialog1.Action=3 D)CommonDialog1.Action=4

第 9 页

全国计算机等级考试二级Visual Basic习题集

参考答案:A 【解析】通用对话框的属性Action=1与ShowOpen方法等效,而Action=2则与ShowSave等效。 2.以下关于通用对话框的叙述中,错误的是( D )

A) 在设计阶段,通用对话框控件的大小不能改变 B) 通用对话框不是工具箱中的标准控件

C) 通用对话框控件可以用来建立不同类型的对话框 D) 利用通用对话框建立打开文件对话框时,可以完成打开文件的操作 参考答案:D 【解析】\打开\对话框主要用来获取用户指定的文件信息并供程序使用,对话框本身并不提供打开文件功能,这些功能需另外编写代码才能实现,所以在\打开\对话框中可选中某文件,但不能打开。故D选项错误。 3.通用对话框控件文件建立对话框时,可以通过一个属性指标题,这个属性是( D ) A) Caption B) Action C) Name D) DialogTi定对话框的tle 4.在窗体上画一个Text1文本框和一个CD1通用对话框控件,并编写下面程序: Private Sub Command1_Click( ) CD1.Flags=1 Or 256 CD1.Action=4

If CD1.Color>=0 Then

Text1.ForeColor=CD1.Color End if

End Sub 运行程序并单击命令按钮,下面叙述中正确的是( B )

A)弹出的是颜色对话框 B)在弹出的对话框中选了一个颜色并单击‘确定’按钮后,会改变文本框中文本的颜色 C)把代码CD1.Action=4改为CD1.ShowColor效果是一样的 D)弹出的是打开文件对话框

第十章 调用子程序和函数过程

1.以下过程的功能是从数组中寻找最大值:

Private Sub FindMax(a()As Integer, ByRef Max As Integer) Dim s As Integer, f As Integer Dim i As Integer s=LBound(a) f=UBound(a) Max=a(s)

For i=s To f

If a(i)>Max Then Max=a(i) Next

End Sub 以下关于上述过程的叙述中,错误的是( C )。

A) 语句Call FindMax(a,m)可以调用该过程,其中的a是数组,m是Integer类型变量 B) For循环次数等于a数组的元素数 C) 过程末尾应该增加一条返回最大值的语句FindMax=Max D) 参数Max用于存放找到的最大值 参考答案:C 【解析】过程定义语句中第1个参数是数组,调用是实参应该是一个数组变量或元素,第2个参数是整型变量。过程中LBound函数获取了数组下标的下限,UBound函数获取了数组下标的上限,在For i=s to f语句的循环中就可以访问数组中的各个元素。本过程是用Sub定义的过程不需要返回值。程序中找到的最大值由参数Max返回,因为它是按址传递的参数,它的值会带给实参。因此C选项的说法错误。 2.窗体上有一个名称为Command1的命令按钮,一个名称为Text1的文本框。编写如下程序:

Private Sub Command1_Click() Private Function fun(ByRef n As Integer)

If n Mod 3=0 Then Dim x As Integer

n=n+n

x=Val(InputBox(\输入数据\ Else

n=n * n Text1=Str(x+fun(x)+fun(x))

End If

End Sub fun=n

End Function 对于上述程序,以下叙述中错误的是( A )。

A) 语句 fun=n 有错,因为n是整型,fun没有定义类型 B) 运行程序,输入值为5时,文本框中显示655 C) 运行程序,输入值为6时,文本框中显示42 D) ByRef表示参数按址传递

参考答案:A 【解析】过程fun的功能是将传入的值运算后返回,当传入数值为3的整数倍时返回该值的2倍,否则返回该值的平方。过程Fun的参数指定为ByRef方式,即按址传递,因此会影响实参的值。Str函数是将数值转换为字符串。过程fun定义时没有指明返回类型因此默认为Variant类型,它可以表示任何值,因此A)选项的说法不正确。 3.设有如下通用过程:

Public Function Fun(xStr As String)As String Dim tStr As String, strL As Integer tStr=\

strL=Len(xStr) i=1

Do While i<=strL / 2

tStr=tStr & Mid(xStr, i, 1)& Mid(xStr, strL-i+1, 1) i=i+1 Loop

Fun=tStr End Function

在窗体上画一个名称为Command1的命令按钮。然后编写如下的事件过程: Private Sub Command1_Click() Dim S1 As String S1=\

Print UCase(Fun(S1))

第 10 页

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4