1、国家二级 VB机试(控制结构)模拟试卷 7及答案与解析 一、选择题 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 Mod2)当 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 10Then b=b+1 Else b=b-1 E
2、nd If Print b-a 0 End Sub 程序运行后,单击命令按钮 Command1,输出结果为 ( A) True ( B) False ( C) 1 ( D) -1 4 设有下面的语句: PrintIIf(x 0,1,IIf(x 0,-1,0)与此语句输出结果不同的程序段是 ( A) If x 0 Then x=1 Else If x 0 Then x=-1 End If Print x ( B) If x 0 Then Print1 ElseIfx 0 Then Print-1 Else Print 0 End If ( C) Select Casex Case Is 0 Pr
3、int 1 Case Is 0 Print-1 Case Else Print 0 End Select ( D) If x 0 Then If x 0 Then Print 1 Else If x 0 Then Print-1 Else Print 0 End If End If 5 设为一整型变量,且语句的开始为: SelectCasex,则不符合语法规则的 Case子句是 ( A) Case Is 20 ( B) Case1To10 ( C) Case0 IsAnd IS 20 ( D) Case2,3,4 6 窗体上有 1个名称为 Command1的命令按钮,事件过程如下: Priva
4、te 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 某人为计算 n!(0 n =12)编写了下面的函数过
5、程: Private Function fun(n As Integer)As Long Dim p As Long p=1 For k=n1 To 2Step-1 p=p*k Next k fun=p End Function 在调试时发现该函数过程产生的结果是错误的,程序需要修改。下面的修改方案中有 3种是正确的,错误的方案是 ( A)把 p=1改为 p=n ( B)把 For k=n-1 To 2 Step-1改为 Fork=1 To n-1 ( C)把 For k=n1 To 2 Step-1改为 Fork=1 To n ( D)把 For k=n-1 To 2 Step-1改为 Fo
6、r k=2 To 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 Print A2(k) End Sub 程序运行后,单击命令按钮,在输入对话框中依次输入 2、 4、 6,则输出结果为 ( A) 0 ( B) 1 ( C) 2 ( D) 3 9 有下面程序代码: Private Sub
7、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 Nextk EndSub 程序运行后,单击命令按钮 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,并有以下事件过程: PrivateSub Command1_Click()Dim s As String
8、,ch As String s=“Fork=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 Base 1 Private Sub Command1_Click() Dim a a=Array(1,2,3,4):j=1 For i=4To1Step-1 s
9、=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=1 To 5 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=1+1/2!+1/3!+1/4!+1/5! (
10、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=4 To 1 Step-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 在窗体上画一个组合框,其名称为 Combo1,然后编写如下事件过程: Private Sub
11、Form_Load() Combo1.Text=“1“ For i=1 To 10 Sum=Sum+i Next i Combo1.Text=Sum End Sub 程序运行后,输出结果为 ( A)在组合框的编辑区中显示 1 ( B)在组合框的编辑区中显示不定值 ( C)在组合框的编辑区中显示 55 ( D)出错信息 15 假定有以下循环结构 DoUntil条件表达式循环体 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 窗体上有 1个名称为 Command1的命令按钮,事件过程如下: Pr
13、ivate 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 Loop Until i 1 ( B) i=1 Do i=i
14、+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 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 13 20 编写如下程序: Dim num As Integer
15、,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 To 1 Step-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=dr Loop End Sub 程序运行后,单击命令按钮 Command1,输出结果为 (
16、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() 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 运行程序,单击命令按钮,窗体上显示的内容为 ( A) 2 0 0 0 4 0 0 0 6 ( B) 2 0 4 0 4 0
17、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=1 To 4 For j=1 To 3 sum=sum+score(i,j) Next j Print“第 “sum Next i End Sub 运行此程序时发现,除第 1个人的总分计算正确
18、外,其他人的总分都是错误的,程序需要修改。以下修改方案中正确的是 ( A)把外层循环语句 For i=1 To 4改为 For i=1 To 3内层循环语句 For j=1To 3改为 For j=1 To 4 ( B)把 sum=0移到 For i=1 To 4和 For j=1 To 3之间 ( C)把 sum=sum+score(i,j)改为 sum=sum+score(j,i) ( D)把 sum=sum+score(i,j)改为 sum=score(i,j) 23 运行如下程序 Private SubCommand1_Click() Dim a(5,5)As Integer For
19、i=1 To 5 For j=1 To 4 a(i,j)=i*2+j If a(i,j)/7=a(i,j)7Then n=n+1 End If Nex tj 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=1 To 4 For j=1 To i s=s+j Next j p=p*s Next i Print p End Sub 程序运行后,单击窗体,则输出结果是 ( A) 90 (
20、B) 180 ( C) 400 ( D) 800 25 编写如下程序 : Private Sub Command1_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 j Next i s=0 For i=1 To 3 s=s+a(i,4-i) Next i Print s End Sub 程序运行后,单击命令按钮 Command1,输出结果为 ( A) 7 ( B) 13 ( C) 16 ( D) 20 26 有如下程序: Private Sub Command1_Clic
21、k() Dim i As Integer,j As Integer,sum As Integer n=1 Do j=1 Do sum=sum+j:j=j+1 Print j; Loop Untilj 3 n=n+2 Loop Until n 10 Print sum End Sub 运行上述程序,外层 Do循环执行的次数为 ( A) 4 ( B) 5 ( C) 7 ( D) 10 27 窗体上有一个名称为 Command1的命令按钮,其单击事件过程如下: Private Sub Command1_Click() For i=3 To 1 Step-1 Sum=0 For j=1 To i Su
22、m=Sum+i*j 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=j+1 Print“*“; Loop Until i+j 10 Print i=i+2 Loop End Sub 程序运行时输出字符 “*“的个数是 ( A) 50 ( B) 20 ( C) 16 ( D) 15 国家二级 VB机试(控制结构)模拟试卷 7答案与解析 一、选择题 1 【正
23、确答案】 B 【试题解析】 本题考查的考点是有关 IIf函数的。 IIf函数可用于执行简单的条件判断操作,它是 “IfThenElse” 结构的简写版本。 格式: Result=IIf(条件 , True部分 , False部分 ) 其中 “Result”是函数的返回值, “条件 ”是一个逻辑表达式。当 “条件 ”为真时, IIf函数返回 “True部 分 ”的值,而当 “条件 ”为假时返回 “False部分 ”的值。 “True部分 ”或 “False部分 ”可以是表达式、变量或其他函数。本题中由于 x=10是大于 0的,所以返回值为 xMod3的值即 1。 【知识模块】 控制结构 2 【正
24、确答案】 C 【试题解析】 IIf函数可用来执行简单的条件判断操作,它是 “IfThenElse” 结构的简写版本。格式为: result=IIf(条件 , True部分 , False部分 )。当条件为真时, IIf函数返回 True部分,而当条件为假时,返回 False部分。本题中 a的值是 52,所以条件为真,将返回 523的值即 17。 【知识模块】 控制结构 3 【正确答案】 B 【试题解析】 本题的程序中由于 a*b 10条件成立,因此执行 Then分支, b自加 1变成 3,最后输出 b-a 0的值即 False。 【知识模块】 控制结构 4 【正确答案】 D 【试题解析】 II
25、f函数可用来执行简单的条件判断操作,它是 “IfthenElse” 结构的简写版本。格式为: Result=IIf(条件 , True部分 , False部分 )。当 条件为真时, IIf函数返回 True部分,而当条件为假时,返回 False部分。本题中 IIf函数的功能是判断 x是不是正数,如果是返回 1,否则继续判断 a是不是负数,如果是返回 -1,否则返回 0,即返回 x的符号。分析 4个选项只有 D选项不应该使用 ElseIf语句而应该使用 Else语句。 【知识模块】 控制结构 5 【正确答案】 C 【试题解析】 Case语句中含有多个参量,这些参量的含义分别为: 测试表达式:可以
26、是任何表达式,通常采用变量或常量; 语句块 1,语句块 2, :每个语句块由 一行或多行合法的 VisualBasic语句组成; 表达式列表 1,表达式列表 2, :称为域值。 【知识模块】 控制结构 6 【正确答案】 B 【试题解析】 多分支控制结构又称为 SelectCase语句或 Case语句,可以同时对条件的多个取值来判断。其格式为: Select Case测试表达式 Case表达式列表 1 语句块 1 Case Else 语句块 n End Select Case语句以 Select Case开头,以 End Select结束。 其中,表达式列表 1,表达式列表 2, 称为域值。可采
27、用 3种形式: 表达式 1,表达式 2 ; 表达式 1To表达式 2; Is关系运算表达式。其中,可使用的运算符有等于 (=)、不等于 ( )、小于( )、大于 ( )、小于或等于 ( =)、大于或等于 ( =)。 本题中第一次输入 100执行 CaseElse分支,由于 x是默认初值 0所以输出 0;第二次输入 90也执行 CaseElse分支,由于 x是默认初值 0所以输出 0;第三次输入60执行第二个分支输出 60。 【知识模块】 控制结构 7 【正确答案】 B 【试题解析】 本题考 查的考点是有关循环次数的。本题题干中程序的错误在于,p的值是从 1一直乘到 n-1的值,也就是 n-1的
28、阶乘。选项 A可以在这个基础上再乘 n就得到 n的阶乘;选项 C和 D都能够保证从 1乘到 n,只有选项 B是错误的。 【知识模块】 控制结构 8 【正确答案】 C 【试题解析】 本题的关键之处在于抓住每次具体给哪个数组元素进行了赋值,第一环中输入的 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,
29、c赋值给 b;因此第一次循环结束后 c的值为 3, a的值为 2, b的值为 3;第二次循环结束后 c的值为 -1, a的值为 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的前面。 【知识模块】 控
30、制结构 11 【正确答案】 A 【试题解析】 本题考查的考点是有关循环的。本题也很简单,首先取得数绀的最后一个元素加到累加变量中,然后取倒数第二个元素,乘 10后加到累加变量中,然后取倒数第三个元素,乘 100后加到累加变量中,以此类推,最后结果为1234。 【知识模块】 控制结构 12 【正确答案】 C 【试题解析】 在本题的循环中每次累加的变量是 x,而 x在每次的循环中都会除以 i,即第一次除以 1,第二次再除以 2,第三次再除以 3 以此类推 C选项是正确答案。 【知识模块】 控制结构 13 【正确答案】 C 【试题解析】 本题的循环首先取出数组的最后一位累加,然后取出倒数第二位乘以
31、lO以后累加;然后取出倒数第三位乘以 100后累加 以此类推,最终结果为1234。 【知识模块】 控制结构 14 【正确答案】 C 【试题解析】 组合框的 Text属性将会返回或 者设置编辑区中的文本,本题中显示的是 1 10的累加和 55。 【知识模块】 控制结构 15 【正确答案】 D 【试题解析】 本题考查的考点是有关 Do型循环的。对于这种循环结构,首先看条件判断在循环体的前面还是后面,如果是先判断条件,则有可能一次也不执行循环体;如果是后判断条件,则无论条件如何至少执行一次循环体。在 Until循环中条件为 False时执行循环体,条件为 True时退出循环;在 While循环中条件
32、为True时执行循环体,条件为 False时退出循环,这一点要注意区分清楚。 【知识模 块】 控制结构 16 【正确答案】 B 【试题解析】 Do型循环结构,首先看条件判断在循环体的前面还是后面,如果是先判断条件,则有可能一次也不执行循环体;如果是后判断条件,则无论条件是什么,至少执行一次循环体。在 Umil循环中条件为 False时执行循环体,条件为 True时退出循环;在 While循环中条件为 True时执行循环体,条件为 False时退出循环。本题中使用的是后判断型循环,第一次循环时 y的值为 1,不满足 y10,执行 Else分支, x变成 4,此时由于满足 x =10所以结束循环。
33、 【知识 模块】 控制结构 17 【正确答案】 B 【试题解析】 本题的循环中将两个输入的数 x和 y互相相减,直到 x=y为止,实际上就是辗转相减法求最大公约数的过程。 【知识模块】 控制结构 18 【正确答案】 B 【试题解析】 Do循环语句的功能是:当指定的 “循环条件 ”为真或直到指定的 “循环条件 ”变为真之前重复执行循环体。 Do While|UntilLoop 循环是在条件满足的情况下才执行一次循环体,而 DoLoop While|Until 循环不管是否满足条件都先执行一次循环体,然后再判断条 件是否成立以决定后续操作。本题的 A选项由于 i的值从 10开始递增,永远不会满足
34、i 1而无限循环; C选项由于 i的值从 10开始递增,永远满足 i 1而无限循环; D选项由于 i的值从 10开始递减,但是因为每次递减 2,所以 i永远为偶数,不会满足 i=1而无限循环。 【知识模块】 控制结构 19 【正确答案】 A 【试题解析】 Do循环语句的功能是:当指定的 “循环条件 ”为真或直到指定的 “循环条件 ”变为真之前重复执行循环体。 Do while|UntilLoop 循环是在条件满足的情况下才执行一次循环体,而 Do Loop while|Until循环不管是否满足条件都先执行一次循环体,然后再判断条件是否成立以决定后续操作。本题的循环共执行 3次,跳出循环时 N
35、的值为 3, J的值为 21。 【知识模块】 控制结构 20 【正确答案】 A 【试题解析】 本题实际上是在子过程 sub1中对 arr数组进行的赋值工作,形参 d的值为 12, r的值为 2, k的初值为 0;在循环中计算 d除以 2的余数放到数组的第一个元素,整除 2后再除以 2的余数放到第二个元素 以此类推,最后数组arr中存放的是 (0、 0、 1、 1),在 Command1_Click()过程中调用完子过程对数组进行赋值以后,逆序输出了数组的值。 【知识模块】 控制结构 21 【正确答案】 B 【试题解析】 本题通过一个嵌套的 For循环为二维数组 a的各元素赋值,该二维数组对应矩
36、形的主对角线上的元素 (即满足条 m=n)和副对角线上的元素 (即满足条什 m+n=4)其值为 m+n,即主对角线上线的元素从左上至右下依次为 2、 4、 6,副对角线上的元素均为 4,而其它元素均为 0。 【知识模块】 控制结构 22 【正确答案】 B 【试题解析】 本题考查的考点是有关循环 求和和二维数组的。本题要对二维数组的每行进行累加求和,每计算新的一行就应该将累加和变量 sum清零,否则上一行的累加计算结果将会在下一行继续累加,造成结果不正确。 【知识模块】 控制结构 23 【正确答案】 B 【试题解析】 在二重循环中为二维数组赋初值,每个元素的值均为行号 *2加上列号;在 If语句
37、中进行判断,如果数组元素能被 7整除则令计数器 n加 1,所以整个程序的功能就是统计二维数组中能被 7整除的数的个数。 【知识模块】 控制结构 24 【正确答案】 D 【试题解析】 本题是一 个二重循环,而且内循环次数根据外循环保的循环变量而定。内循环完成累加,内循环结束后将累加和乘到 p中保存起来。在 4次外循环中分别累乘的是 1、 4、 10、 20。 【知识模块】 控制结构 25 【正确答案】 C 【试题解析】 本题中首先用一个二重循环为二维数组的每一个元素赋值,然后累加二维数组的部分元素,即依次累加 a(1, 3)、 a(2, 2)、 a(3, 1)的值,相当于对角线求和。 【知识模块
38、】 控制结构 26 【正确答案】 B 【试题解析】 外循环的控制条件为 n 10,即 n 10的时候 结束循环;在每次内循环中 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次。 【知识模块】 控制结构