1、二级 VISUAL+BASIC-47 及答案解析(总分:100.00,做题时间:90 分钟)1.在窗体上画一个命令按钮,然后编写如下事件过程,结果为_。 Private Sub Command1_Click() MsgBox Str(123+321) End Sub(分数:2.50)A.字符串“123+321”B.字符串“444”C.数值“444”D.空白2.下面程序运行时,若输入“Visual Basic Programming”,则在窗体上输出的是_。 Private Sub Comand1_Click() Dim count(25) As Integer, ch As String ch
2、=Ucase(InputBox(“请输入字母字符串“) For k=1 To Len(ch) n=Asc(Mid(ch,k,1)-Asc(“A“) If n=0 Then Count(n)=Count(n)+1 End If Next k m=count(0) For k=1 To 25 If mcount(k) Then m=count(k) End If Next k Print m End Sub(分数:2.50)A.0B.1C.2D.33.下面函数的功能应该是:删除字符串 str 中所有与变量 ch 相同的字符,并返回删除后的结果。例如,若 str=“ABCD-ABCD”,ch=“B”
3、,则函数的返回值为“ACDACD”。 Function delchar(str As String,ch As String) As String Dim k As Integer,tempAs String,ret As String ret=“ For k=1 To Len(str) temp=Mid(str,k,1) If temp=ch Then ret=ret b=1;c=1 d=a+b+c i=5 While d=1000 Print d; a=b;b=c;c=d d=a+b+c i=i+1 Wend End Sub 运行上面的程序,发现输出的数列不完整,应进行修改,以下正确的是_
4、。(分数:2.50)A.把 While d=1000 改为 While d1000B.把 i=5 改为 i=4C.把 i=i+1 移到 While d=1000 下面D.在 i=5 前面增加一个语句:Print a;b;c;31.下面程序计算并输出的是_。 Private Sub Comand1_Click() a=10 s=0 Do s=s+a*a*a a=a-1 Loop Until a=0 Print s End Sub A.12+23+33+103的值 B.10!+3!+2!+1!的值 C.(1+2+3+10)3的值 D.10 个 103的和(分数:2.50)A.B.C.D.32.以下
5、程序段的输出结果是_。 x=1 y=4 Do Until y4 x=x*y y=y+1 Loop Printx(分数:2.50)A.1B.4C.8D.2033.Fibonacci 数列的规律是:前 2 个数为 1,从第 3 个数开始,每个数是它前 2 个数之和,即1,1,2,3,5,8,13,21,34,55,89,。某人编写了下面的函数,判断大于 1 的整数 x 是否是 Fibonacci 数列中的某个数,若是,则返回 True,否则返回 False。 Function Isfab(xAs Integer)As Boolean Dim a As Integer,b As Integer,c
6、As Integer, flag As Boolean flag=false a=1:b=1 Do While xb c=a+b a=b b=c If x=b Then flag=True Loop Isfab=flag End Function 测试时发现对于所有正整数 x,函数都返同 False,程序需要修改。下面的修改方案中正确的是_。(分数:2.50)A.把 a=b 与 b=c 的位置互换B.把 c=a+b 移到 b=c 之后C.把 Do While xb 改为 Do While xbD.把 If x=b Then flag=True 改为 If x=a Then flag=True3
7、4.在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Private Sub Command1_Click() Dim a$, b$, c$, k% a=“ABCD“ b=“123456“ c=“ k=1 Do While k=Len(A) Or k=Len(B) If k=Len(A) Then c=cx a=a+b b=b+a Loop End Sub 程序运行后,单击窗体,输出结果是_。(分数:2.50)A.2 3B.2 4C.3 8D.3 636.有人编写了如下程序: Private Sub Form_Click() Dim S As Integer, x A
8、s integer s=0 x=0 Do While s=10000 x=x+1 s=s+x2 Loop Print s End Sub 上述程序的功能是:计算 s=1+2 2 +3 2 +n 2 +,直到 s10000 为止。程序运行后,发现得不剑正确的结果,必须进行修改。下列修改中正确的是_。(分数:2.50)A.把 x=0 改为 x=1B.把 Do While s=10000 改为 Do While s=10000C.把 Do While s=10000 改为 Do While s10000D.交换 x=x+1 和 s=s+x2 的位置37.窗体上有一个名称为 Command1 的命令按
9、钮,并有如下程序: Private Sub Command1_Click() Dim m As Integer, n As Integer m=InputBox(“输入第一个数“) n=InputBox(“输入第二个数“) Do While mn Do While mn m=m-n Loop Do While nm n=n-m Loop Loop Print m End Sub 该程序的功能是_。(分数:2.50)A.求数值 m 和 n 的最大公约数B.求数值 m 和 n 的最小公倍数C.求数值 m 和 n 中的较大数D.求数值 m 和 n 中的较小数38.有如下事件过程: Private S
10、ub Form_Click() Dim n As Integer x=0 n=InputBox(“请输入一个整数“) For i=1 To n For j=1 To i x=x+1 Next j Next i Print x End Sub 程序运行后,单击窗体,如果在输入对话框中输入 5,则在窗体上显示的内容是(分数:2.50)A.13B.14C.15D.1639.有下面的程序段,其功能是按图 1 所示的规律输出数据。 Dim a(3,5) As Integer For i=1 To 3 For j=1 To 5 A(i,j)=i+j Print a(i,j); Next Print Nex
11、t 若要按图 2 所示的规律继续输出数据,则接在上述程序段后面的程序段应该是_。 图 1 数据输出规律(分数:2.50)A.For i=1 To 5For j=1 To 3For j=1 To 5Print a(j,i); Print a(j,i);Next NextPrint PrintNext NextB.For i=1 To 3C.For j=1 To 5For i=1 To 3 For j=1 To 3Print a(j,i);Print a(i,j);NextNextPrint PrintNext NextD.For i=1 To 540.请阅读程序: Private Sub For
12、m_Click() m=l For i=4 To 1 Step-1 Print Str(m); m=m+1 For j=1 To i Print“*“; Next j Print Next i End Sub 程序运行后,单击窗体,则输出结果是_。(分数:2.50)A.1*2*3*4*B.4*3*2*1*C.*D.*二级 VISUAL+BASIC-47 答案解析(总分:100.00,做题时间:90 分钟)1.在窗体上画一个命令按钮,然后编写如下事件过程,结果为_。 Private Sub Command1_Click() MsgBox Str(123+321) End Sub(分数:2.50)
13、A.字符串“123+321”B.字符串“444” C.数值“444”D.空白解析:解析 考查 MsgBox 语句与 str 函数的用法。Msgbox 语句产生的内容为字符串,所以排除选项C、D;str 函数是将常量、变量或表达式的值转换为字符串格式。2.下面程序运行时,若输入“Visual Basic Programming”,则在窗体上输出的是_。 Private Sub Comand1_Click() Dim count(25) As Integer, ch As String ch=Ucase(InputBox(“请输入字母字符串“) For k=1 To Len(ch) n=Asc(M
14、id(ch,k,1)-Asc(“A“) If n=0 Then Count(n)=Count(n)+1 End If Next k m=count(0) For k=1 To 25 If mcount(k) Then m=count(k) End If Next k Print m End Sub(分数:2.50)A.0B.1C.2D.3 解析:解析 程序的功能是将输入的字母字符串进行逐个遍历,并统计每个字母出现的次数存放在数组中,然后将最大的数组元素值(字母出现的最多次数)赋给 m,最后输出 m。显然出现最多的是 a,次数为3。3.下面函数的功能应该是:删除字符串 str 中所有与变量 ch
15、 相同的字符,并返回删除后的结果。例如,若 str=“ABCD-ABCD”,ch=“B”,则函数的返回值为“ACDACD”。 Function delchar(str As String,ch As String) As String Dim k As Integer,tempAs String,ret As String ret=“ For k=1 To Len(str) temp=Mid(str,k,1) If temp=ch Then ret=ret b=1;c=1 d=a+b+c i=5 While d=1000 Print d; a=b;b=c;c=d d=a+b+c i=i+1 W
16、end End Sub 运行上面的程序,发现输出的数列不完整,应进行修改,以下正确的是_。(分数:2.50)A.把 While d=1000 改为 While d1000B.把 i=5 改为 i=4C.把 i=i+1 移到 While d=1000 下面D.在 i=5 前面增加一个语句:Print a;b;c; 解析:解析 根据题目,已知前三个元素的值,分别用变量 a、b、c 表示,d 表示第四个以后的元素的值,故输出的数列缺少前三项。31.下面程序计算并输出的是_。 Private Sub Comand1_Click() a=10 s=0 Do s=s+a*a*a a=a-1 Loop Un
17、til a=0 Print s End Sub A.12+23+33+103的值 B.10!+3!+2!+1!的值 C.(1+2+3+10)3的值 D.10 个 103的和(分数:2.50)A. B.C.D.解析:解析 由程序可知,每次循环 s 都会累加一个数,而这个数是 a 的 3 次方,a 则从 10 递减到 0 然后退出循环,所以输出的结果应该是 1 3 +2 3 +3 3 +10 3 的值。32.以下程序段的输出结果是_。 x=1 y=4 Do Until y4 x=x*y y=y+1 Loop Printx(分数:2.50)A.1B.4 C.8D.20解析:解析 Do Until.L
18、oop 是“直到型循环”,首先对条件进行判断,如果条件为真时,则终止循环,条件为假则继续循环。该程序中 y 的初始值为 4,不满足循环终止条件,进入循环体,此时x=1*4=4,y=4+1=5,而 54 条件为真则退出循环体。33.Fibonacci 数列的规律是:前 2 个数为 1,从第 3 个数开始,每个数是它前 2 个数之和,即1,1,2,3,5,8,13,21,34,55,89,。某人编写了下面的函数,判断大于 1 的整数 x 是否是 Fibonacci 数列中的某个数,若是,则返回 True,否则返回 False。 Function Isfab(xAs Integer)As Boole
19、an Dim a As Integer,b As Integer,c As Integer, flag As Boolean flag=false a=1:b=1 Do While xb c=a+b a=b b=c If x=b Then flag=True Loop Isfab=flag End Function 测试时发现对于所有正整数 x,函数都返同 False,程序需要修改。下面的修改方案中正确的是_。(分数:2.50)A.把 a=b 与 b=c 的位置互换B.把 c=a+b 移到 b=c 之后C.把 Do While xb 改为 Do While xb D.把 If x=b Then
20、 flag=True 改为 If x=a Then flag=True解析:解析 本题主要考查 Do While.Loop 循环,程序中 b 的初始值为 1,当程序运行到 Do While xb 时,将传递过来的参数 x 与变量 b 进行比较,发现所有正整数都不满足此条件,因此也就不能进入循环体,跳出 Do While.Loop 循环,直接执行 Isfab=flag 语句,而 flag 的初始值为 False,函数的返回值即变量 flag 的值,故对所有正整数 x,函数都返回 False。34.在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Private Sub
21、Command1_Click() Dim a$, b$, c$, k% a=“ABCD“ b=“123456“ c=“ k=1 Do While k=Len(A) Or k=Len(B) If k=Len(A) Then c=cx a=a+b b=b+a Loop End Sub 程序运行后,单击窗体,输出结果是_。(分数:2.50)A.2 3B.2 4C.3 8D.3 6 解析:解析 考查 Do Until.Loop 型循环的执行条件。考生一定要注意与 Do While.Loop 的区别(在 Do.Loop 结构中 Until 和 While 不同,判断条件正好相反。Until 结构是只要条
22、件为 False,而不是True,就执行循环,否则跳出循环体)。该程序第一次循环时,a=1,b=1,判断条件为假,执行循环,x=1,第一次输出 1 1,然后 a=2,b=3,接着进行第二次循环,x=2*3=6,输出 3 6,此时 a=5,b=8,判断条件为真,退出循环。36.有人编写了如下程序: Private Sub Form_Click() Dim S As Integer, x As integer s=0 x=0 Do While s=10000 x=x+1 s=s+x2 Loop Print s End Sub 上述程序的功能是:计算 s=1+2 2 +3 2 +n 2 +,直到 s
23、10000 为止。程序运行后,发现得不剑正确的结果,必须进行修改。下列修改中正确的是_。(分数:2.50)A.把 x=0 改为 x=1B.把 Do While s=10000 改为 Do While s=10000 C.把 Do While s=10000 改为 Do While s10000D.交换 x=x+1 和 s=s+x2 的位置解析:解析 考查 do while 循环的执行条件,题目要求直到 s10000 为止,在此题应表达为当s=10000 时执行循环体,否则跳出循环。37.窗体上有一个名称为 Command1 的命令按钮,并有如下程序: Private Sub Command1_
24、Click() Dim m As Integer, n As Integer m=InputBox(“输入第一个数“) n=InputBox(“输入第二个数“) Do While mn Do While mn m=m-n Loop Do While nm n=n-m Loop Loop Print m End Sub 该程序的功能是_。(分数:2.50)A.求数值 m 和 n 的最大公约数 B.求数值 m 和 n 的最小公倍数C.求数值 m 和 n 中的较大数D.求数值 m 和 n 中的较小数解析:解析 本题要理解嵌套 Do While 的功能。如果 m 不等于 n,则执行内层循环,退出循环的
25、条件和m=n。输入的 m、n 的值有三种情况:m=n,mn,mn。如果 m=n,则直接跳过循环,输出 m 的值。下面对 mn 的作进一步的分析,mn 的情况与之类似。 (1)mn,循环执行嵌套的第一个循环,m=m-n,直到 m=n,设循环执行了 x 次,则 m=m-xn,令 a=m=m-xn,为执行第一个循环后的 m 值。如果 a=n,有 n=m-xn,整理得 m=(x+1)n,则 m 说明 m 是 n 的整数倍,输出结果为 n。如果 an,执行嵌套的第二个循环,n=n-a,直到 a=n,设循环执行了 y 次,则 n=n-ya,令 b=n-ya,如果 a=b,有 a=n-ya,(y+1)a=n
26、,n/a=y+1,a=m-xn=m-x(y+1)a,m/a=xy+x+1,可见 a 是m、n 的最大公约数。(2)如果 ba,也就是 mn 的情况,继续(1)。 如果认为上述解析难于理解,可代入具体的数据来计算,例如,令 m=24,n=9。38.有如下事件过程: Private Sub Form_Click() Dim n As Integer x=0 n=InputBox(“请输入一个整数“) For i=1 To n For j=1 To i x=x+1 Next j Next i Print x End Sub 程序运行后,单击窗体,如果在输入对话框中输入 5,则在窗体上显示的内容是(分
27、数:2.50)A.13B.14C.15 D.16解析:解析 此题考查嵌套 for 循环的使用。变量 i 从 1 到 5 进行循环,每循环一次,循环体内部变量j 从 1 到 i 进行循环,循环 i 次,x 变量用于累加,每次累加 1,一共累加 15 次。39.有下面的程序段,其功能是按图 1 所示的规律输出数据。 Dim a(3,5) As Integer For i=1 To 3 For j=1 To 5 A(i,j)=i+j Print a(i,j); Next Print Next 若要按图 2 所示的规律继续输出数据,则接在上述程序段后面的程序段应该是_。 图 1 数据输出规律(分数:2
28、.50)A.For i=1 To 5For j=1 To 3For j=1 To 5Print a(j,i); Print a(j,i);Next NextPrint PrintNext Next B.For i=1 To 3C.For j=1 To 5For i=1 To 3 For j=1 To 3Print a(j,i);Print a(i,j);NextNextPrint PrintNext NextD.For i=1 To 5解析:解析 由图 2 可知,输出结果由 5 行 3 列构成,嵌套 for 循环中的外循环可指定行数,内循环指定列数,所以 B 选项不符合要求。C 和 D 选项实
29、质是相同的,输出结果也相同,但是输出内容和图 2 是不同的,正确答案只有 A 选项。40.请阅读程序: Private Sub Form_Click() m=l For i=4 To 1 Step-1 Print Str(m); m=m+1 For j=1 To i Print“*“; Next j Print Next i End Sub 程序运行后,单击窗体,则输出结果是_。(分数:2.50)A.1*2*3*4* B.4*3*2*1*C.*D.*解析:解析 此题主要考查嵌套 for 循环。该程序中,m 的值是从 1 增长到 4,i 的值是从 4 减少到 1。当 i=4,m=1 时,通过 Print Str(m)语句,窗体上第一行第一个位置显示 1,排除选项B、C、D。m=1+1=2,通过内循环一次输出 4 个“*”号。当 i=3、2、1 时,以此类推。需要提醒考生的是:前两个 Print 语句后面有分号,表示输出结果不换行,输出项按紧凑格式输出。最后一个 Print 后面没有分号,表示换行。