1、国家二级 VB机试(控制结构)模拟试卷 4及答案与解析 一、选择题 1 现有语句: y=IIf(x 0, x Mod 3, 0)设 x=10,则 y的值是 ( A) 0 ( B) 1 ( C) 3 ( D)语句有错 2 现有如下语句: x=IIf(a 50, Int(a 3), a Mod 2)当 a=52时, x的值是 ( A) 0 ( B) 1 ( C) 17 ( D) 18 3 编写如下程序: 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
2、-1 End If Print b-a 0 End Sub 程序运行后,单击命令按钮 Command1,输出结果为 ( A) True ( B) False ( C) 1 ( D) -1 4 设有下面的语句: Print IIf(x 0, 1, IIf(x 0, -1, 0)与此语句输出结果不同的程序段是 ( A) If x 0 Then x=1 ElseIfx 0 Then x=-1 End If Pdnt x ( B) If x 0 Then Print1 ElseIf x 0 Then Print-1 Else Print 0 End If ( C) Select Case x Case
3、 Is 0 Print 1 Case Is 0 Print-1 Case Else Print0 End Select ( D) If x 0Then If x 0Then Print1 Elself x 0Then Print-1 Else Print() End If End If 5 设 x为一整型变量,且语句的开始为: Select Case x,则不符合语法规则的 Case子句是 ( A) Case Is 20 ( B) Case1 To 10 ( C) Case0 Is And IS 20 ( D) Case2, 3, 4 6 窗体上有 1个名称为 Command1的命令按钮,事件
4、过程如下: Private Sub Command1_Click() Dim num As Integer, x As Integer num=Val(InputBox(“请输入一个正整数 “) Select Case num Case Is 100 x=x+num Case Is 90 x=num Case Else x=x*num End Select Print x; End Sub 运行程序,并在三次单击命令按钮时,分别输入正整数 100、 90和 60,则窗体上显示的内容为 ( A) 0 0 0 ( B) 0 0 60 ( C) 0 90 0 ( D) 100 0 60 7 某人为计
5、算 n!(0 n =12)编写了下面的函数过程: Private Function fun(n As Integer)As Long Dim p As Long p=1 For k=n-1To2Step-1 p=p*k Next k fun=p End Function 在调试时发现该函数过程产生的结果是错误的,程序需要修改。下面的修改方案中有 3种是正确的,错误的方案是 ( A)把 p=1改为 p=n ( B)把 For k=n-1To2Step-1改为 For k=1To n-1 ( C)把 For k=n-1To2Step-1改为 For k=1To n ( D)把 For k=n-1T
6、o2Step-1改为 For k=2To n 8 在窗体上画一个命令按钮,名称为 Command1,然后编写如下代码: Option Base0 Private Sub Command1_Click() Dim A1(4)As Integer, A2(4)As Integer For k=0To2 A1(k+1)=InputBox(“请输入一个整数 “) a2(3-k)=A1(k+1) Next k PrintA2(k) End Sub 程序运行后,单击命令按钮,在输入对话框中依次输入 2、 4、 6,则输出结果为 ( A) 0 ( B) 1 ( C) 2 ( D) 3 9 有下面程序代码:
7、Private Sub Command1_Click() Dim sign As Integer sign=1 a=1: b=2 For k=1To5 c=a+sign*b a=b: b=c Print c: sign=-sign Next k End Sub 程序运行后,单击命令按钮 Command1,输出结果是 ( A) 3 -1 2 -3 -1 ( B) 3 5 8 13 21 ( C) -1 1 -2 -1 -1 ( D) 3 4 5 6 7 10 设窗体上有一个文本框 Text1和一个命令按钮 Command1,并有以下事件过程: Private Sub Command1_Click
8、()Dim s As String, ch As String s=“For k=1To Len(Text1)ch=Mid(Text1, k, 1)s=ch+s Next k Text1 Text=s End Sub程序执行时,在文本框中输入 “Basic”,然后单击命令按钮,则 Text1中显示的是 ( A) Basic ( B) cisaB ( C) BASIC ( D) CISAB 11 在窗体上画一个名为 Command1的命令按钮,然后编写如下代码: Option Base1 Private Sub Command1_Click() Dim a a=Array(1, 2, 3, 4)
9、: j=1 For i=4To1Step-1 s=s+a(i)*j: j=j*10 Next i Print s End Sub 运行上面的程序,其输出结果是 ( A) 1234 ( B) 12 ( C) 34 ( D) 4321 12 在窗体上画 1个名称为 Command1的命令按钮,并编写如下事件过程: Private Sub Command1_Click() x=1: s=0 For i=1To5 x=x i: s=s+x Next Print s End Sub 该事什过程的功能是计算 ( A) s=1+2+3+4+5q ( B) s=1+1 2+1 3+1 4+1 5 ( C) s
10、=1+1 21+1 31+1 41+1 51 ( D) s=1+1 (1*2)+1 (2*3)+1 (3*4)+1 (4*5) 13 编写如下程序: Option Base1 Private Sub Command1_Click() Dim a a=Array(1, 2, 3, 4): s=0: j=1 For i=4To1Step-1 s=s+a(i)*j: j=j*10 Next i Print s End Sub 程序运行后,单击命令按钮 Command1,输出结果为 ( A) 110 ( B) 123 ( C) 1234 ( D) 4321 14 在窗体上画一个组合框,其名称为 Com
11、bo1,然后编写如下事件过程: Private Sub Form_Load() Combo1 Text=“1“ For i=1To10 Sum=Sum+i Next i Combo1 Text=Sum End Sub 程序运行后,输出结果为 ( A)在组合框的编辑区中显示 1 ( B)在组合框的编辑区中显示不定值 ( C)在 组合框的编辑区中显示 55 ( D)出错信息 15 假定有以下循环结构 Do Unti1条件表达式循环体 Loop则以下正确的描述是 ( A)如果 “条件表达式 ”的值是 0,则一次循环体也不执行 ( B)如果 “条件表达式 ”的值不为 0,则至少执行一次循环体 ( C)
12、不论 “条件表达式 ”的值是否为 “真 ”,至少要执行一次循环体 ( D)如果 “条件表达式 ”的值恒为 0,则无限次执行循环体 16 编写如下程序: Private Sub Command1_Click() Dim x As Integer, y As Integer x=1: y=1 Do y=x*y If y 10Then Exit Do Else x=x+3 End If Loop Until x =10 Print x; y End Sub 程序运行后,单击命令按钮 Command1,输出结果为 ( A) 1 1 ( B) 4 1 ( C) 4 2 ( D) 7 28 17 窗体上有
13、 1个名称为 Command1的命令按钮,事件过程如下: Private Sub Command1 Click() Dim x, y, z x=InputBox(“请输入第 1个整数 “): y=InputBox(“请输入第 2个整数 “) Do Until x=y If x y Then x=x-y Else y=y-x End if Loop Print x End Sub 运行程序,单击命令按钮,并输入 2个整数 169和 39,则在窗体上显示的内容为 ( A) 11 ( B) 13 ( C) 23 ( D) 39 18 下列循环中,可以正常结束的是 ( A) i=10 Do i=i+1
14、 Loop Until i 1 ( B) i=1 Do i=i+1 Loop Until i=10 ( C) i=10 Do i=i+1 Loop Whfie i 1 ( D) i=10 Do i=i-2 Loop Until i=1 19 假定有如下程序: Private Sub Form Click() Dim N As Integer, J As Integer N=0 J=1 Do Until N 2 N=N+1: J=J+N*(N+1) Loop Print N; J End Sub 运行程序,单击窗体,输出结果是 ( A) 3 21 ( B) 3 7 ( C) 0 1 ( D) 3
15、 13 20 编写如下程序: Dim num As Integer, r As Integer, n As Integer, i As Integer, arr(5)As Integer Private Sub Command1_Click() num=12: r=2 Call sub1(num, r, n) For i=n To1Step-1 Print arr(i); Next i End Sub Sub 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
16、Loop End Sub 程序运行后,单击命令按钮 Command1,输出结果为 ( A) 1 1 0 0 ( B) 0 0 1 1 ( C) 0 1 0 1 ( D) 1 0 1 0 21 在窗体上画 1个命令按钮,并编写如下事件过程: Private Sub Command1_Click() Dima(3, 3) For m=1To3 For n=1To3 If n=in 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 运行程序,单击命令按钮,窗体上显示的内
17、容为 ( 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 22 已知在 4行 3列的全局数组 score(4, 3)中存放了 4个学生 3门课程的考试成绩(均为整数 )。 现需要计算每个学生的总分,某人编写程序如下: Option Base1 Private Sub Command1_Click() Dim sum As Integer sum=0 For i=1To4 For j=1To3 sum=sum+score(i, j) Next j Print“第 “
18、&i&“个学生的总分是: “; sum Next i End Sub 运行此程序时发现,除第 1个人的总分计算正确外,其他人的总分都是错误的,程序需要修改。以下修改方案中正确的是 ( A)把外层循环语句 For i=1To4改为 For i=1To3内层循环语句 For j=1To3改为For j=1To4 ( B)把 sum=0移到 Fori=1To4和 For j=1To3之间 ( C)把 sum=sum+score(i, J)改为 sum=sum+score(j, i) ( D)把 sum=sum+score(i, j)改为 sum=score(i, j) 23 运行如下程序 Priva
19、te Sub Command1_Click() Dim a(5, 5)As Integer For i=1To5 For j=1To4 a(i, j)=i*2+j If a(i, j) 7=a(i, j) 7Then n=n+1 End If Next j Next Print n End Sub 则 n的值是 ( A) 2 ( B) 3 ( C) 4 ( D) 5 24 有如下程序: Private Sub Form_Click() Dim s As Integer, p As Integer p=1 For i=1To4 For j=1Toi s=s+j Next j p=p*s Next
20、 i Print p End Sub 程序运行后,单击窗体,则输出结果是 ( A) 90 ( B) 180 ( C) 400 ( D) 800 25 编写如下程序: Private Sub Command1_Click() Dim a(3, 3)As Integer, s As Integer For i=1To3 For j=1To3 a(i, j)=i*j+i Next j Next i s=0 For i=1To3 s=s+a(i, 4-i) Next i Print s End Sub 程序运行后,单击命令按钮 Command1,输出结果为 ( A) 7 ( B) 13 ( C) 16
21、 ( D) 20 26 有如下程序: Private Sub Command1_Click() Dim i As Integer,j As Integer, sum As Integer n=1 Do j=1 Do sum=sum+j: j=j+1Print j; Loop Until j 3 n=n+2 Loop Until n 10 Print sum End Subs 运行上述程序,外层 Do循环执行的次数为 ( A) 4 ( B) 5 ( C) 7 ( D) 10 27 窗体上有一个名称为 Command1的命令按钮,其单击事件过程如下: Private Sub Command1_Cl
22、ick() For i=3To1Step-1 Sum=0 For i=1Toi Sum=Sum+i*i Next Next Print Sum End Sub 运行程序时,单击命令按钮,则窗体上显示的是 ( A) 1 ( B) 6 ( C) 18 ( D) 25 28 有下面程序代码: Private Sub Command1_Click()i=1 Do While i 5 j=1 Do j=i+1 Print“*“; Loop Until i+j 10 Print i=i+2 Loop End Sub 程序运行时输出字符 “*”的个数是 ( A) 50 ( B) 20 ( C) 16 ( D
23、) 15 国家二级 VB机试(控制结构)模拟试卷 4答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 本题考查的考点是有关 IIf函数的。 IIf函数可用于执行简单的条件判断操作,它是 “IfThenEle” 结构的简写版本。 格式: Result=IIf条件, True部分, False部分 ) 其中 “Result”是函数的返回值, “条件 ”是一个逻辑表达式。当 “条件 ”为真时, IIf函数返回 “True部分 ”的值,而当 “条件 ”为假时返回 “False部分 ”的值。 “Tme部分 ”或 “False部 分 ”可以是表达式、变量或其他函数。本题中由于 x=10是大于 0
24、的,所以返回值为 x Mod3的值即 1。 【知识模块】 控制结构 2 【正确答案】 C 【试题解析】 IIf函数可用来执行简单的条件判断操作,它是 “IfThenElse” 结构的简写版本。格式为: result=IIf(条件, Tme部分, False部分 )。当条件为真时, Ilf函数返回 True部分,而当条件为假时,返回False部分。本题中 a的值是 52,所以条件为真,将返回 52 3的值即 17。 【知识模 块】 控制结构 3 【正确答案】 B 【试题解析】 本题的程序中由于 a*b 10条件成立,因此执行 Then分支, b自加 1变成 3,最后输出 b-a 0的值即 Fal
25、se。 【知识模块】 控制结构 4 【正确答案】 D 【试题解析】 IIf函数叮用来执行简单的条件判断操作,它是 “IfthenElse” 结构的简写版本。格式为: Result=IIf(条件, True部分, False部分 )。当条件为真时, IIf函数返回 True部分,而当条件为假时,返回False部分 。本题中 IIf函数的功能是判断 x是不是正数,如果是返回 1,否则继续判断 a是不是负数,如果是返回 -1,否则返回 0,即返网 x的符号。分析 4个选项只有 D选项不应该使用 ElseIf语句而应该使用 Else语句。 【知识模块】 控制结构 5 【正确答案】 C 【试题解析】 C
26、ase语句中含有多个参量,这些参量的含义分别为: 测试表达式:可以是任何表达式,通常采用变量或常基: 语句块 1,语句块 2, :每个语句块由一行或多行合法的 Visual Basic语句组成: 表达式列表 1,表达式列表 2, :称 为域值。可采用下列 3种形式之一: 表达式 1,表达式 2 。 表达式 1To表达式 2。 Is关系运算表达式,其中可使用的运算符有 =(等于 )、 (不等于 )、 (小于 )、 (大于 )、 =(小于或等于 )、 =(大于或等于 )。 【知识模块】 控制结构 6 【正确答案】 B 【试题解析】 多分支控制结构又称为 Select Case语句或 Case语句,
27、可以同时对条件的多个取值来判断。 本题中第一次输入 100执行 Case Else分支,由于 x是默认初值 0所以输出 0;第二次输入 90也执行 Case Else分支,由于 x是默认初值 0所以输出 0;第三次输入60执行第二个分支输出 60。 【知识模块】 控制结构 7 【正确答案】 B 【试题解析】 奉题考查的考点是有关循环次数的。本题题干中程序的错误在于,p的值是从 1-直乘到 n-1的值,也就是 n-1的阶乘。选项 A可以在这个基础上再乘n就得到 n的阶乘;选项 C和 D都能够保证从 1乘到 n,只有选项 B是错误的。 【知识模块】 控制结构 8 【正确答案】 C 【试题解析】 奉
28、题的关键之处在于抓住每次具体给哪个数组元素进行了赋值,第一次循环中输入的 2被赋给了 A1(1)和 A2(3),第二次循环中输入的 4被赋给了A1(2)和 A2(2),第三次循环中输入的 6被赋给了 A1(3)和 A2(1),跳出循环时 k的值为 3,所以最后输出 2。 【知识模块】 控制结构 9 【正确答案】 A 【试题解析】 在每次循环中 sign的值在 1和 -1之间来回变化,第一次循环时sign的值为 1;在循环中 c的值为 a+sign*b,然后将 b赋值给 a, c赋值给 b;因此第一次循环结束后 c的值为 3, a的值为 2, b的值为 3;第二次循环结束后 c的值为 -1, a
29、的值为 3, b的值为 -1:第三次 循环结束后 c的值为 2, a的值为 -1, b的值为 2:第四次循环结束后 c的值为 -3, a的值为 2, b的值为 -3;第五次循环结束后 c的值为 -1, a的值为 -3, b的值为 -1。 【知识模块】 控制结构 10 【正确答案】 B 【试题解析】 本题考查的考点是有关循环和取子串函数的。本题比较简单,循环次数就是字符串的长度,每次都在第 k位取一个字母,最后倒序连接起来。注意每次都把 ch连接到 s的前面。 【知识模块】 控制结构 11 【正确答案】 A 【试题解析】 本题考查的考点是有关循环的。本题也 很简单,首先取得数组的最后一个元素加到
30、累加变量中,然后取倒数第二个元素,乘 10后加到累加变量中,然后取倒数第一个元素,乘 100后加到累加变量中,以此类推,最后结果为1234。 【知识模块】 控制结构 12 【正确答案】 C 【试题解析】 在本题的循环中每次累加的变量是 x,而 x在每次的循环中都会除以 i,即第一次除以 1,第二次再除以 2,第三次再除以 3 以此类推 C选项是正确答案。 【知识模块】 控制结构 13 【正确答案】 C 【试题解析】 本题的循环首先取出数组的最后一位累加, 然后取出倒数第二位乘以 10以后累加;然后去除倒数第三位乘以 100后累加 以此类推,最终结果为1234。 【知识模块】 控制结构 14 【
31、正确答案】 C 【试题解析】 组合框的 Text属性将会返回或者设置编辑区中的文本,本题中显示的是 1 10的累加和 55。 【知识模块】 控制结构 15 【正确答案】 D 【试题解析】 本题考查的考点是有关 Do型循环的。埘于这种循环结构,首先看条件判断在循环体的前面还是后面,如果是先判断条件,则有可能一次也不执行循环体:如果是后判断条什,则无论 条件如何至少执行一次循环体。在 Until循环中条件为 False时执行循环体,条件为 True时退出循环;在 WhiIe循环中条件为True时执行循环体,条件为 False时退出循环,这一点要注意区分清楚。 【知识模块】 控制结构 16 【正确答
32、案】 B 【试题解析】 Do型循环结构,首先看条什判断在循环体的前面还是后面,如果是先判断条件,则有可能一次也不执行循环体:如果是后判断条件,则无论条件是什么,至少执行一次循环体。在 Until循环中条件为 False时执行循环体,条件为 True时退出循环;在 While循环中条件为 Tme时执行循环体,条件为 False时退出循环。本题中使用的是后判断型循环,第一次循环时 y的值为 1,不满足 y10,执行 Else分支, x变成 4,此时由于满足 x =10所以结束循环。 【知识模块】 控制结构 17 【正确答案】 B 【试题解析】 本题的循环中将两个输入的数 x和 y互相相减,直到 x
33、=y为止,实际上就是辗转相减法求最大公约数的过程。 【知识模块】 控制结构 18 【正确答案】 B 【试题解析】 Do循环语句的功能是:当指定的 “循环条件 ”为真或直到指 定的 “循环条件 ”变为真之前重复执行循环体。 Do While|UntilLoop 循环是在条件满足的情况下才执行一次循环体,而 DoLoop While|Until 循环不管是否满足条件都先执行一次循环体,然后再判断条件是否成立以决定后续操作。本题的 A选项由于 i的值从 10开始递增,永远不会满足 i 1而无限循环; C选项由于 i的值从 10开始递增,永远满足 i 1而无限循环; D选项由于 i的值从 10开始递减
34、,但是因为每次递减 2,所以 i永远为偶数,不会满足 i=1而无限循环。 【知识模块】 控制结构 19 【正确答 案】 A 【试题解析】 Do循环语句的功能是:当指定的 “循环条件 ”为真或直到指定的 “循环条件 ”变为真之前重复执行循环体。 Do while|untilLoop 循环是在条件满足的情况下才执行一次循环体,而: DoLoop While|Until 循环不管是否满足条件都先执行一次循环体,然后再判断条件是否成立以决定后续操作。本题的循环共执行 3次,跳出循环时 N的值为 3, J的值为 21。 【知识模块】 控制结构 20 【正确答案】 A 【试题解析】 本题实际上是在子过程
35、sub1中对 arr数组进行的 赋值工作,形参 d的值为 12, r的值为 2, k的初值为 0;在循环中计算 d除以 2的余数放到数组的第一个元素,整除 2后再除以 2的余数放到第二个元素 以此类推,最后数组arr中存放的是 (0、 0、 1、 1),在 Command1_Click()过程中调用完子过程对数组进行赋值以后,逆序输出了数组的值。 【知识模块】 控制结构 21 【正确答案】 B 【试题解析】 本题通过一个嵌套的 For循环为二维数组 a的各元素赋值,该二维数组对应矩阵的主对角线上的元素 (即满足条件 m=n)和副对角线上的元素 (即满足条件 m+n=4)其值为 m+n,即主对角
36、线上的元素从左上至右下依次为 2、 4、 6,副对角线上的元素均为 4,而其它元素均为 0。 【知识模块】 控制结构 22 【正确答案】 B 【试题解析】 本题考查的考点是有关循环求和和二维数组的。本题要对二维数组的每行进行累加求和,每计算新的一行就应该将累加和变量 sum清零,否则上一行的累加计算结果将会在下一行继续累加,造成结果不正确。 【知识模块】 控制结构 23 【正确答案】 B 【试题解析】 在二重循环中为二维数组赋初值,每个元素的值均为行号 *2加 上列号;在 If语句中进行判断,如果数组元素能被 7整除则令计数器 n加 1,所以整个程序的功能就是统计二维数组中能被 7整除的数的个
37、数。 【知识模块】 控制结构 24 【正确答案】 D 【试题解析】 本题是一个二重循环,而且内循环次数根据外循环的循环变量而定。内循环完成累加,内循环结束后将累加和乘到 p中保存起来。在 4次外循环中分别累乘的是 1、 4、 10、 20。 【知识模块】 控制结构 25 【正确答案】 C 【试题解析】 本题中首先用一个二重循环为二维数组的每一个元素赋值,然后累加二维 数组的部分元素,即依次累加 a(1, 3)、 a(2, 2)、 a(3, 1)的值,相当于对角线求和。 【知识模块】 控制结构 26 【正确答案】 B 【试题解析】 外循环的控制条件为 n 10,即 n 10的时候结束循环:在每次
38、内循环中 j都会自加, j 3的时候退出内循环,即每次外循环中内循环都会执行 3次;由于内循环没有改变 n的值,而在外循环中 n的值自加 2,所以外循环共循环5次。 【知识模块】 控制结构 27 【正确答案】 A 【试题解析】 本题是一个简单的二重循环,只要注意到 i的值逐渐递减 ,而且在内循环执行之前都会重新将 Sum的值设置为 0,不难得出只会输出最后一次外循环的 Sum值,由于此时 i=1,所以内循环只会执行一次,最终输出 1作为结果。 【知识模块】 控制结构 28 【正确答案】 C 【试题解析】 本题是一个二重循环,最终求星号的个数,实际上就是计算内循环总共执行了多少次。 i=1的时候内循环执行 9次, i=3的时候内循环执行 7次, i=5的时候跳出循环,内循环共执行了 16次。 【知识模块】 控制结构