1、国家二级 VB机试(控制结构)模拟试卷 15及答案与解析 一、选择题 1 编写如下程序: Private Sub Commandl_Click() Dim m As Integer,n As Integer m=1: n=0 Do While m20 n=m+n: m=3*m+1 Loop Print m, n End Sub 程序运行后,单击命令按钮 Commandl,输出结果为 ( A) 40 18 ( B) 40 19 ( C) 20 64 ( D) 21 64 2 下列循环中, 可以正常结束的是 ( A) i=10 Do i=i+1 Loop Until i 1 ( B) i=1 Do
2、 i=i+1 Loop Until i=10 ( C) i=10 Do i=i+1 Loop While i 1 ( D) i=10 Do i=i-2 Loop Until i=1 3 以下能够正常结束循环操作的程序段是 ( A) i=5 Do i=i+1 Loop Until i 0 ( B) i=5 Do i=i+2 Loop Until i=1 ( C) i=5 Do While i 0 i=i-2 Loop ( D) i=0 Do While i 1 i=i-2 Loop 4 窗体上有一个名称为 Commandl的命令按钮,其单击事件过程如下: Private Sub Commandl
3、_Click() Dim s As Double s=0: i=1 Do While i6 s=s+i (i+1): i=i+1 Loop Print s End Sub 该事件过程的功能是计算一个表达式的值,该表达式是 ( A) 1+1 2+2 3+3 4+4 5 ( B) 1+1 2+2 3+3 4+4 5+5 6 ( C) 1 2+2 3+3 4+4 5 ( D) 1 2+2 3+3 4+4 5+5 6 5 假定有如下程序: Private Sub Form_Click() Dim N As Integer, J As Integer N=0 J=1 Do Until N 2 N=N+1
4、: J=J+N*(N+1) Loop Print N; J End Sub 运行程序,单击窗体,输出结果是 ( A) 3 21 ( B) 3 7 ( C) 0 1 ( D) 3 13 6 有如下程序: Function fun(ByVal aura As Integer)As Integer Dim k As Integer k=1 num=Abs(num) Do While num k=k*(num Mod 10): num=num 10 Loop fun=k End Function Private Sub Form_Click() Dim n As Integer, r As Integ
5、er n=InputBox(“请输入一个数: “): n=Int(n): r=fun(n): Print r End Sub 程序运行后,单击窗体,在输入对话框中输入 246,输出结果为 ( A) 120 ( B) 48 ( C) 24 ( D) 60 7 下面程序的功能是输出 100以内所有素数: Private Sub Commandl_Click() For n=2 To 100 isprime=True: k=2 Do While k =n 2 And_ If n Mod k=0 Then isorime=False k=k+1 Loop If isprime Then Print n
6、 Next n End Sub 为使上面程序可以实现该功能,程序代码中横线处应填写的代码是 ( A) isprime ( B) Not isprime ( C) n 100 ( D) n =100 8 编写如下程序: Dim hum As Integer, r As Integer, n As Integer, i As Integer, arr(5)As Integer Private Sub Commandl_Click() num=12: r=2 Call subl(num, r, n) For i=n To 1 Step-1 Print arr(i); Next i End Sub S
7、ub sub1(d As Integer, r As Integer, k As Integer) k=0 Do While d 0 k=k+1: arr(k)=d Mod r: d=d r Loop End Sub 程序运行后,单击命令按钮 Commandl,输出结果为 ( A) 1 1 0 0 ( B) 0 0 1 1 ( C) 0 1 0 1 ( D) 1 0 1 0 9 编写如下程序: Private Sub Commandl_Click() Dim n As Long, s As String n=InputBox(“输入一个数 “) Do While n 0 Print n 10
8、Mod 10;: Print n Mod 10: n=n 100 Loop Print s End Sub 程序运行后,单击命令按钮 Commandl,并输入数值 123456,则输出结果为 ( A) 6 5 4 3 2 1 ( B) 5 6 3 4 1 2 ( C) 6 4 2 5 3 1 ( D) 6 1 5 2 4 3 10 假定有以下程序段 For i=1 To 3 For j=5 To 1 Step-1 Print i*j Next j Next i 则语句 Print i*j的执行次数是 ( A) 15 ( B) 16 ( C) 17 ( D) 18 11 在窗体上画 1个命 令按
9、钮,并编写如下事件过程: Private Sub Commandl_Click() Dim a(3, 3) For m=1 To 3 For n=1 To 3 If n=m Or n=4-mThen a(m, n)=m+n Else a(m, n)=0 End If Print a(m, n); Next n Print Next m End Sub 运行程序,单击命令按钮,窗体上显示的内容为 ( A) 2 0 0 0 4 0 0 0 6 ( B) 2 0 4 0 4 0 4 0 6 ( C) 2 3 0 3 4 0 0 0 6 ( D) 2 0 0 0 4 5 0 5 6 12 编写如下程序
10、: Private Sub Commandl_Click() Dim num As Integer, k As Integer,n As Integer num=InputBox(“请输入一个正整数: “) k=num n=2 Do Do While num Mod n=0 Prim n: num=num n Loop n=n+1 Loop Until n k 2 End Sub 程序运行后,单击命令按钮 Commandl,并输入数值 20,则输出结果为 ( A) 2 2 5 ( B) 2 3 4 ( C) 2 3 4 5 ( D) 2 5 13 编写如下程序: Private Sub Com
11、mandl_Click() Dim a(3, 3)As Integer, b(3, 3)As Integer For i=1 To 3 For j=1 To 3 a(i, j)=i+j: b(i, j)=a(i, j)+i*(j-1) Next j Next i For i=l To 3 For j=1 To 3 Print b(i, j); Next j Print Next i End Sub 程序运行后,单击命令按钮 Commandl,输出结果为 ( A) 2 3 4 3 4 5 4 5 6 ( B) 2 4 6 3 6 9 4 8 12 ( C) 3 5 7 5 8 11 7 11 1
12、5 ( D) 4 6 8 7 10 13 10 14 18 14 已知在 4行 3列的全局数组 score(4, 3)中存放了 4个学生 3门课程的考试成绩(均为整数 )。现需要计算每个学生的总分,某人编写程序如下: Option Base 1 Private Sub Commandl_Click() Dim sum As Integer sum=0 For i=1 To 4 For j=1 To 3 sum=sum+score(i, j) Nextj Print“第 “&i&“个学生的总分是: “; sum Next i End Sub 运行此程序时发现,除第 1个人的总分计算正确外,其他人
13、的总分都是错误的,程序需要修改。以下修改方案中正确的是 ( A)把外层循环语句 For i=1 To 4改为 For i=1 To 3内层循环语句 For j=1 To 3改为 For i=1 To 4 ( B)把 sum=0移至 0 For i=1 To 4和 For i=1 To 3之间 ( C)把 sum=sum+score(i, j)改为 sum=sum+score(j, i) ( D)把 sum=sum+score(i, j)改为 sum=score(i, j) 15 在窗体上画一个命令按钮和一个标签,其名称分别为 Command1和 Label1,然后编写如下事件过程: Priva
14、te Sub Commandl_Click() Counter=0 For i=1 To 4 For i=6 To 1 Step-2 Counter=Counter+1 1 Nextj Next i Label1 Caption=Str(Counter) End Sub 程序运行后,单击命令按钮,标签中显示的内容是 ( A) 11 ( B) 12 ( C) 16 ( D) 20 16 在窗体上画一个命令按钮,然后编写如下事件过程: Private Sub Commandl_Click() DimI, Num Randomize Do For I=1 To 1000 Num=Int(Rnd*10
15、0): Print Num; Select Case Num Case 12 Exit For Case 58 Exit Do Case 65, 68, 92 End End Select Next I Loop End Sub 上述事件过程执行后,下列描述中正确的是 ( A) Do循环执行的次数为 1000次 ( B)在 For循环中产生的随机数小于或等于 100 ( C)当所产生的随机数为 12时结束所有循环 ( D)当所产生的随机数为 65、 68或 92时窗体关闭、程序结束 17 运行如下程序 Private Sub Commandl_Click() Dim a(5, 5)As Int
16、eger For i=1 To 5 Forj=1 To 4 a(i, j)=i*2+j If a(i, j) 7=a(i, j) 7 Then n=n+1 End If Nextj Next Print n End Sub 则 n的值是 ( A) 2 ( B) 3 ( C) 4 ( D) 5 18 命令按钮 Commandl的单击事件过程如下: Private Sub Commandl_Click() Dim a(10, 10)As Integer x=0 For i=1 To 3 For j=1 To 3 a(i, j)=i*2 Mod J Ifx a(i, j)Then x=a(i, j)
17、 Next Next Print x End Sub 执行上述事件过程后,窗体上显示的是 ( A) 1 ( B) 2 ( C) 3 ( D) 4 19 设有如下程序: Option Base 1 Dim a(3, 4)As Integer, b(4, 3)As Integer Private Sub Commandl_Click() 循环 1 For i=1 To 3 Forj=l To 4 b(j, i)=a(i, j) Next j Next i 循环 2 x=b(1, 1) For i=1 To 4 Forj=1 To 3 Print b(i, j); Ifx b(i, j)Then x
18、=b(i, j) Nextj Print Next i End Sub 程序中的数组 a已被赋值。以下关于上述程序的叙述中,正确的是 ( A)窗体模块中,不能使用 Dim声明 a、 b数组 ( B) “循环 1”可以正常运行 ( C) “循环 2”中循环变量 i、 j的终值不对,所以不能正常运行 ( D)程序可 以正常运行, x中保存的是数组 b中所有元素中最小的数 20 有如下程序: Private Sub Form_Click() Dim s As Integer, p As Integer p=1 For i=1 To 4 For j=1 To i s=s+j Nextj p=p*s N
19、ext i Print P End Sub 程序运行后,单击窗体,则输出结果是 ( A) 90 ( B) 180 ( C) 400 ( D) 800 21 窗体上有 1个名称为 Commandl的命令按钮,事件过程如下: Private Sub Commandl_Click() Dim art_x(5, 5)As Integer For i=1 To 3 For j=2 To 4 arr_x(i, j)=i*j Next j Next i Print art_x(2, 1); arr_x(3, 2); art_x(4, 3) End Sub 运行程序,并单击命令按钮,窗体上显示的内容为 ( A
20、) 0 6 0 ( B) 2 6 0 ( C) 0 6 12 ( D) 2 6 12 22 在窗体上画一个名称为 Commandl的命令按钮,并编写如下程序: Option Base 1 Private Sub Commandl_Click()Dim a(4, 4) For i=1 To 4 For j=1 To 4 a(i, j)=(i-1)*3+j Next j Next i For i=3 To 4 For j=3 To 4 Print a(j, i); Next j Print Next i End Sub 运行程序,单击命 令按钮,则输出结果为 ( A) 6 9 7 10 ( B)
21、7 10 8 11 ( C) 8 11 9 12 ( D) 9 12 10 13 23 编写如下程序: Private Sub Commandl_Click() Dim a(3, 3)As Integer, S As Integer For i=1 To 3 For j=1 To 3 a(i, j)=i*j+i Next i Next i S=0 For i=1 To 3 s=s+a(i, 4-i) Next i Print s End Sub 程序运行后,单击命令按钮 Commandl,输出结果为 ( A) 7 ( B) 13 ( C) 16 ( D) 20 24 编写如下程序: Priva
22、te Sub Commandl_Click() Dim i As Integer,j As Integer n=InputBox(“输入一个大于 1的正整数 “) For i=2 To n For j=2 To Sqr(i) If i Modj=0 Then Exit For Next j Ifj Sqr(i)Then Print i Next i End Sub 该程序的功能是 ( A)判断 n是否为素数 ( B)输出 n以内所有的奇数 ( C)输出 n以内所有的偶数 ( D)输出 n以内所有的素数 25 命令按钮 Commandl的事件过程如下: Private Sub Commandl_
23、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 Nextj Next i Print art(1, 3)+arr(3, 4) End Sub 执行上述过程,输出结果是 ( A) 6 ( B) 7 ( C) 11 ( D) 12 26 有如下程序: Private Sub Commandl_Click() Dim i As Integer,J As Integer, sum As Integer n=1 Do j=1 Do sum=sum+j
24、: j=j+1 Printj; Loop Until j 3 n=n+2 Loop Until n 10 Print sum End Sub 运行上述程序,外层 Do循环执行的次数为 ( A) 4 ( B) 5 ( C) 7 ( D) 10 国家二级 VB机试(控制结构)模拟试卷 15答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 本题的 Do循环是一个先判断条件型的循环,在循环中将循环变量m的值每次改变。分析循环可看出,在 4次循环中 m的值分别为 1、 4、 13、 40,而只有前三次循环中的 m值被累规到 n中,最后一次循环由于不满足 m 20而跳出。 【知识模块】 控制结构
25、 2 【正确答案】 B 【试题解析】 Do循环语句的功能是:当指定的 “循环条件 ”为真或直到指定的 “循环条件 ”变为真之前重复执行循环体。 Do WhileIuntilLoop 循环是在条件满足的情况下才执行一次循环体,而 DoLoop while Until循环不管是否满足条件都先执行一次循环体,然后再判断条件是否成立以决定后续操作。本题的 A选项由于 i的值从 10开始递增,永远不会满足 i 1而无限循环; C选项由于 i的值从 10开始递增,永远满足 i 1而无限循环; D选项由于 i的值从 10开始递减,但是因为每次递减 2,所以 i永远为偶数,不会满足 i=1而无限循环。 【知识
26、模块】 控制结构 3 【正确答案】 C 【试题解析】 Do循环语句的功能是:当指定的 “循环条件 ”为真或直到指定的 “循环条件 ”变为真之前重复执行循环体。 Do WhileIUntilLoop 循环是在条件满足的情况下才执行一次循环体,而 DoLoop while Until循环不管是否满足条件都先执行一次循环体,然后再判断条件是否成立以决定后续操作。本题的 A选项由于 i的值从 5开始递增,永远不会满足 i 0而无限循环; B选项由于 i的值从 5开始递增,永远满足 i=1而无限循环; D选项由于 i的值从 0开始递减,永远满足 i 1而无限循环。 【知识模块】 控制结构 4 【正确答案
27、】 D 【试题解析】 本题中 Do循环的循环变量 i的初值为 1,继续循环的条件是 i6,在每次循环中 i的值加 1,因此循环会执行 5次;在第一次循环中累加 1 2,第二次循环中累加 2 3,第三次循环中累加 3 4 即最后计算的是 1 2+23+3 4+4 5+5 6的值。 【知识模块】 控制结构 5 【正确答案】 A 【试题 解析】 Do循环语句的功能是:当指定的 “循环条件 ”为真或直到指定的 “循环条件 ”变为真之前重复执行循环体。 Do while UntilLoop 循环是在条件满足的情况下才执行一次循环体,而 DoLoop While Until循环不管是否满足条件都先执行一次
28、循环体,然后再判断条件是否成立以决定后续操作。本题的循环共执行 3次,跳出循环时 N的值为 3, J的值为 21。 【知识模块】 控制结构 6 【正确答案】 B 【试题解析】 在函数 fun中会对传过来的参数 num进行判断,如果不为 0则进行循环,将各位 数字乘到一起然后作为函数的返回值。 【知识模块】 控制结构 7 【正确答案】 A 【试题解析】 求素数的基本思路是,用 2到 n 2依次去除要判断的数 n,如果能整除就将 isprime置为 False代表不是素数:如果 isprime已经为 False,那么循环没有继续执行的必要了,所以应填入 isprime=me,由于是布尔型变量,可以
29、简写为 isprime。 【知识模块】 控制结构 8 【正确答案】 A 【试题解析】 本题实际上是在子过程 sub 1中对跚数组进行的赋值工作,形参 d的值为 12, r的值为 2, k的初值为 0;在循环中计算 d除以 2的余数放到数组的第一个元素,整除 2后再除以 2的余数放到第二个元素 以此类推,最后数组arr中存放的是 (0、 0、 1、 1),在 Commandl_Click()过程中调用完子过程对数组进行赋值以后,逆序输出了数组的值。 【知识模块】 控制结构 9 【正确答案】 B 【试题解析】 本题中是在一个 Do循环中对一个数字进行分解,首先输出该数字整除 10之后再除以 10得
30、到的余数 (即十位上数字 ),然后输出该数除以 10得到的余数 (即个位数字 ),然后将该数去掉十 位和个位上的数字以后继续循环,最终依次输出 5、 6、 3、 4、 1、 2。 【知识模块】 控制结构 10 【正确答案】 A 【试题解析】 本题考查的考点是有关二重循环的。 ForNext 循环语句可提供一个重复执行的语句序列,遵循 “先检查,后执行 ”的规则,执行过程中,循环次数=Int(终值初值 )步长 +1。二重循环的内循环语句执行次数等于内外循环次数之积。 【知识模块】 控制结构 11 【正确答案】 B 【试题解析】 本题通过一个嵌套的 For循环为二维数组 a的各元素赋值,该二维数组
31、对 应矩阵的主对角线上的元素 (即满足条件 m=n)和副对角线上的元素 (即满足条件 m+n=4)其值为 m+n,即主对角线上的元素从左上至右下依次为 2、 4、 6,副对角线上的元素均为 4,而其它元素均为 0。 【知识模块】 控制结构 12 【正确答案】 A 【试题解析】 Do型循环结构,首先看条件判断在循环体的前面还是后面,如果是先判断条件,则有可能一次也不执行循环体;如果是后判断条件。则无论条件是什么,至少执行一次循环体。、在 UntiI循环中条件为 False时执行循环体,条件为 True时退出循环:在 while循环中条件为 True时执行循环体,条件为 False时退出循环。本题
32、是一个嵌套的 Do循环,外层循环是后判断条件的 Until型循环,内层循环是先判断条件的 while型循环。根据输入的值 20可判断出三次输出的结果为 2、 2、 5。 【知识模块】 控制结构 13 【正确答案】 B 【试题解析】 本题中有两个二维数组 a和 b,然后用一个二重循环为两个数组赋值,根据每次循环中 i和 j的值不难得出 B为正确答案。 【知识模块】 控制结构 14 【正确答案】 B 【试题解析】 本题考查的考点是有关循 环求和和二维数组的。本题要对二维数组的每行进行累加求和,每计算新的一行就应该将累加和变量 sum清零,否则上一行的累加计算结果将会在下一行继续累加,造成结果不正确
33、。 【知识模块】 控制结构 15 【正确答案】 B 【试题解析】 本题考查的考点是有关循环的。通过观察可以得知,在每次内循环中 Counter的值会增加 1,所以最终结果就是内循环执行的总次数。由于内循环和外循环都是 For循环,所以循环次数一定,外循环共执行 4次,每次外循环中内循环都执行 3次,故内循环执行的总次数为 4+3=12次。 【知识模块】 控制结构 16 【正确答案】 D 【试题解析】 本题考查的考点是有关随机数和退出语句的。在本题中,首先在循环中生成一个随机数,由于 Rnd函数可以生成 0 1开区间的数,所以Int(Rnd*100)能够生成 0 99之间的整数,随后对此数进行判
34、断,当随机数为 12时退出内循环;当随机数为 58时退出外循环:当随机数为 65、 68或 92时将会结束整个窗体的运行。本题中的循环次数受随机数控制,所以次数不定。 【知识模块】 控制结构 17 【正确答案】 B 【试题解析】 在二重循环中为 二维数组赋初值,每个元素的值均为行号 *2加上列号;在 If语句中进行判断,如果数组元素能被 7整除则令计数器 n加 1,所以整个程序的功能就是统计二维数组中能被 7整除的数的个数。 【知识模块】 控制结构 18 【正确答案】 B 【试题解析】 本题中使用二重循环为二维数组赋初值,每个元素的值为行号 2然后除以列号的余数;接下来找出数组的最大值。由于列
35、号最大只能为 3,所以余数的最大值为 2。 【知识模块】 控制结构 19 【正确答案】 B 【试题解析】 在窗体模块中使用 Dim声明模块接变量 ,也可以声明模块级数组:在循环 1中 i从 1到 3, j从 1到 4,无论是访问 b(j, i)还是 a(i, j)均在数组的范围内,可以正常运行;在循环 2中 b(i, j)的值也在数组范围内,循环可以正常运行;最后 x里面保存的是数组中最大的数。 【知识模块】 控制结构 20 【正确答案】 D 【试题解析】 本题是一个二重循环,而且内循环次数根据外循环的循环变量而定。内循环完成累加,内循环结束后将累加和乘到 p中保存起来。在 4次外循环中分别累
36、乘的是 1、 4、 10、 20。 【知识模块】 控制结构 21 【正确答 案】 A 【试题解析】 本题二重循环为二维数组的部分元素赋值,其中 arr x(2, 1)的值因为列号为 1,并没有在循环中赋值,保持了默认初值 0; arr x(3, 2)的值被赋值为3*2的值 6; arr x(4, 3)的值因为行号为 4也没有在循环中赋值,也保持默认初值0。 【知识模块】 控制结构 22 【正确答案】 D 【试题解析】 本题中首先用一个二重循环为二维数组的每一个元素赋值,然后输出二维数组的部分元素,即依次输出 a(3, 3)、 a(4, 3)、 a(3, 4)、 a(4, 4)的值,根据二维数组
37、 元素的值,输出分别为 9、 12、 10、 13。 【知识模块】 控制结构 23 【正确答案】 C 【试题解析】 本题中首先用一个二重循环为二维数组的每一个元素赋值,然后累加二维数组的部分元素,即依次累加 a(1, 3)、 a(2, 2)、 a(3, 1)的值,相当于对角线求和。 【知识模块】 控制结构 24 【正确答案】 D 【试题解析】 本题中的外循环是从 2循环到 n,然后进入内循环,在内循环中依次判断 i能否被 j整除,若能整除则退出内循环:内循环结束后进行判断,如果是中途退出内循环的则必然不满 足 j Sqr(i),不会输出 i的值;只有 i不能被任何一个 j整除的情况下才会输出 i的值,即判断 i是不是素数,只有素数才输出。 【知识模块】 控制结构 25 【正确答案】 C 【试题解析】 本题中首先在一个二重循环中给二维数组 arr的部分元素赋值,循环结束后输出两个数组元素的和,根据题意 arr(1, 3)+art(3, 4)=4+7=11。 【知识模块】 控制结构 26 【正确答案】 B 【试题解析】 外循环的控制条件为 n 10,即 n 10的时候结束循环:在每次内循环中 j都会自加, j 3的时候退出内循环,即每次外循环中内循环都会执行 3次:由于内循环没有改变 n的值,而在外循环中 n的值自加 2,所以外循环共循环5次。 【知识模块】 控制结构