第八单元 算法及VB语言基础
单元小结
知识系统构建
/
第八单元 算法及VB语言基础
单元检测题组
/时间:40分钟 /分值:65分
一、选择题(每题3分,共42分)
1.(2019浙江十二校高三第一次联考,5,3分)某流程图如图所示:
/
若输入k的值为9,最终i、s的值分别为( )
A.11 0 B. 11 -11 C. 9 0 D. 9 -9
答案 B 本题考查循环结构流程图。各变量在执行过程中变化如下:
变量
k
i
s
进循环前
9
1
0
第一次循环后
9
3
0+3
第二次循环后
9
5
0+3-5
第三次循环后
9
7
0+3-5-7
第四次循环后
9
9
0+3-5-7+9
第五次循环后
9
11
0+3-5-7+9-11
退出循环
2.(2019浙江名校新高考研究联盟第一次联考,6,3分)某算法的部分流程图如图所示。执行这部分流程后,输出m的值是( )
/
A.0 B. 1 C.2 D.9
答案 D 本题考查循环结构流程图。各变量变化如下:
变量
x
y
m
进循环前
192
0
0
第一次循环后
19
2
2
第二次循环后
1
9
9
第三次循环后
0
1
9
退出循环
本程序本质上是找出数值x的各位数中值最大的那位数。
3.在Visual Basic中,能表示整数x是完全平方数(如9=3*3,9是完全平方数)的表达式是( )
A.x^2=x*x B.sqr(x)=x2
C.int(sqr(x))^2=x D.(x2)^2=x
答案 C 本题考查VB基本函数的应用。Sqr(x)是开平方函数,Int(x)是取不大于x的最大整数。根据题意可知选C。
4.有如下程序:
Private Sub Command1_Click()
Dim a(5) as Integer
Dim n as Integer, i as Integer
n = Val(Text1.Text)
i = 0
a(1) = 1
a(2) = 1
For i = 3 To n
a(i) = a(i-1) + a(i-2)
Next i
Label1.Caption = a(i)
End Sub
若在Text1中输入5,则点击按钮后的运行结果为( )
A.Label1中输出5 B.Label1中输出10
C.报“下标越界”错误 D.Label1中无内容
答案 C 本题考查对VB循环语句和数组的掌握。当输入5时,首先初始化数组元素a(1)为1,a(2)为1,进入For循环,第一次循环i为3,计算出a(3)的值为a(1)+a(2)=2,i的值加1,第二次循环计算出a(4)的值为3,i的值加1,第三次循环计算出a(5)的值为5,i的值加1,最后跳出循环,i的值为6,a(5)的值为5。而程序要求输出a(6),但是由定义语句Dim a(5) as Integer可知a数组的范围是0~ 5,所以不存在下标为6的数组元素a(6),属于数组下标越界错误。
5.用VB模拟设计某软件的登录界面,如图所示,当鼠标单击“<请输入账号>”所在的文本框Text1时,文字内容消失。则此事件处理的过程名应该是( )
/
A.登录窗口_Click B.Text1_KeyPress
C.Command1_Click D.Text1_Click
答案 D 本题考查对VB事件的掌握。点击文本框Text1的事件名为Text1_Click,其中Text1为文本框的名称,Click代表是点击事件。
6.(2019浙江十二校高三第一次联考,11,3分)有如下VB程序段:
Dim i As Integer, Sum As Integer
Dim a(l To 6) As Integer, b(l To 6) As Integer
Sum = 0
a(6) = 18: a(5) = 7: b(6) = 14: b(5) = 16
For i = 4 To 1 Step -1
a(i) = a(i + 2)-a(i + 1)
b(i) = b(i + 2)-a(i)
If b(i) Mod 3 = 0 Then Sum = Sum + b(i)
Next i
Textl .Text = Str(Sum)
该程序段运行后,文本框text1中显示的内容是( )
A.39 B. 30 C. -9 D. 12
答案 B 本题考查数组的运算。当i=4时,计算得到a(4)=a(6)-a(5)=18-7=11,
b(4)=b(6)-a(4)=14-11=3,得到sum=3;当i=3时,计算得到a(3)=a(5)-a(4)=7-11=-4,
b(3)=b(5)-a(3)=16-(-4)=20,sum仍然是3;当i=2时,计算得到b(2)=b(4)-a(2)
=3-15=-12,得到sum=3-12=-9;当i=1时,计算得到a(1)=a(3)-a(2)=-4-15=-19,
b(1)=b(3)-a(1)=20-(-19)=39,得到sum=-9+39=30。
7.在Visual Basic中,有如下程序:
Private Sub Command1_Click()
Dim a As Integer,b As Integer,c As Integer
Dim d As Integer
a=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text)
d=min(a,b)+min(b,c)
Text4.Text=Str(d)
End Sub
Function min(x As Integer,y As Integer)As Integer
If xEnd Function
运行该程序,在文本框Text1、文本框Text2、文本框Text3中分别输入2、-5、6后,单击命令按钮Command1,文本框Text4中显示的是( )
A.-10 B.-5 C.2 D.6
答案 A 本题考查自定义函数。自定义函数min的功能是比较两个参数的大小,返回小的值。输入后a=2,b=-5,c=6,d=min(a,b)+min(b,c)=-5+(-5)=-10。
8.模拟剪刀石头布的游戏,用1~3这3个数分别代表剪刀、石头、布这三种情况,使用Rnd随机函数可以表示为( )
A.Int(Rnd(3)+1) B.Int(Rnd*2+1)
C.Int(Rnd(2)+1) D.Int(Rnd*3+1)
答案 D 本题考查随机函数Rnd的使用。Rnd能产生一个大于或等于0且小于1的单精度随机数。产生[a,b]区间的随机整数,公式应该是:Int(Rnd*(b-a+1)+a)。
9.在Visual Basic程序中,设x=389,能得到其百位数字“3”的表达式是( )
A.Int(x/10)*10 B.Int(x/100)*100
C.x-Int(x/10)*10 D.Int(x/100)
答案 D 本题考查基本的算术运算表达式。Int(x/10)*10表达式的值是380,Int(x/100)*100表达式的值是300,x-Int(x/10)*10表达式的值为9,Int(x/100)表达式的值是3。
10.已知字符串变量x的值是“H”,则VB表达式Chr(Asc(x)+1)的值是(已知字符“A”的ASCII码是65)( )
A.“I” B.“G” C.72 D. 74
答案 A 本题考查两个字符转换函数Chr(x) 及Asc(x)的功能。Chr(Asc(“H”)+1)可以理解为比“H”的ASCII值大1的字符。
11.以下程序运行后,s的值为( )
Dim i As Integer, s As String
i = 0
Do While i < 5
s = Str(i) + s
i = i + 1
Loop
A.“01234” B.“12345” C.“54321” D.“43210”
答案 D 本题考查对VB循环结构和字符串操作的掌握。i的初值为0,s为空字符串,进入循环体,首先s和i连接,s的值为“0”,i的值加1,第二次进入循环,s的值为“01”(注意程序中连接的顺序),i的值加1,最后当i等于5时跳出循环,字符串s连接到4为止,所以为“43210”。
12.数组元素值a(1)=2 : a(2)=8 : a(3)=3 : a(4)=4 : a(5)=5 :a(6)=6 : a(7)=1 : a(8)=7 : a(9)=9。m = 1: k = 1
For i = 2 To 9
If a(i) > a(i-1) Then
k = k + 1
If k > m Then m = k
Else
k = 1
End If
Next i
Text1.Text = Str(m)
该程序段运行后,文本框Text1中显示的内容是( )
A.4 B.6 C.8 D.9
答案 A 该程序实现的功能是求最大连续递增序列的个数。a(3)=3 : a(4)=4 : a(5)=5 :a(6)=6,这四个元素为最大连续递增序列。也可采用代入法进行逐步计算。变量k的值在不断变化,变量m用于记录k的最大值。
13.如下VB程序段:
x=Text1.Text
p=0
For i=1 to Len(x)
If Mid(x,i,1)=“a” Then p=p+1
Next i
Print p
若程序运行时,在文本框Text1中键入“Are you happy”,则运行结果是( )
A.0 B.1 C.2 D.11
答案 B 本题主要考查For语句和字符串处理函数。Len()函数是求字符串的长度,Mid()函数是求字符串的子串。变量x=Text1.Text=“Are you happy”,For语句的作用是统计字符串x中字母“a”的个数,用变量p计数,最后输出p。注意“A”不等于“a”。
14.有10个数据23、15、51、36、78、47、39、9、88、96依次存放在数组a(1 To 10)中,使用如下程序段找出最大值:
max=a(1)
For i=2 To 10
If a(i) > max Then max=a(i)
Next i
当虚线框内的语句刚好执行完第6次后(此时循环变量i的值为7),变量max的值是( )
A.23 B.39 C.78 D.96
答案 C 本题中代码用于寻找数组中的最大值。它的思想方法是先假设数组的第一项是最大的,并赋值给变量max,然后把从第二项开始的所有数组元素跟变量max进行比较,如果比max大,则把该元素赋值给max。这样循环结束后,变量max中存储的就是该数组中的最大值。而本题不是循环结束后,而是循环6次以后,也就是比较了6次,max中存储的应该是前7个数中的最大值,即为78。
二、非选择题(共23分)
15.(2016浙江高中联盟第二学期开学考试,16,4分)任意一个大于或等于4的偶数,都可以用两个素数之和表示,这就是哥德巴赫猜想。如:4=2+2,6=3+3,8=3+5, 10=5+5,12=5+7,
98=19+79。
编写一个验证哥德巴赫猜想的VB程序:程序运行时,在文本框Text1中输入一个大于或等于4的偶数,单击“验证”按钮Command1后,如果哥德巴赫猜想验证成功,则在文本框Text2中显示“Yes”,并在列表框List1中显示用两个素数表示该偶数的等式,否则显示“No”。程序运行效果如图所示。
/
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Function judge(x As Integer)As Boolean
’函数judge的功能是判断整数x是不是素数,若是素数则返回True,否则返回False
Dim j As Integer
judge=True
j=2
Do While j<=x-1 And judge=True
If x Mod j=0 Then
judge=False
Else
j=j+1
End If
Loop
End Function
Private Sub Command1_Click()
Dim n As Integer,p As Integer,q As Integer,flag As Boolean
n=Val(Text1.Text)
p=1
flag=False
Do While flag=True And pp=p+1
q=q+1 ’②
If judge(p)And judge(q)Then
Text2.Text=“Yes”
flag=True
List1.AddItem Str(n)+“=”+Str(p)+“+”+Str(q)
End If
Loop
If flag=False Then
Text2.Text=“No”
End Sub
答案 ①flag=False 或not flag 或flag<>True ②q=n-p
解析 本题验证哥德巴赫猜想:在文本框Text1中输入任意一个大于或等于4的偶数,输出以两个素数和的形式显示在列表框List1中,并在文本框Text2中显示验证结果。变量flag用于标识是否找到方案,初始值为false,表示未找到,枚举过程中若找到则变为True,故Do while语句的条件是:方案未找到(flag=False)且(And)仍在查找范围内(p16.有一个数组data存放了n个数据,现从中删除了一个元素,其余的元素依次向前递补(假设删除的是第3个元素,则要将第4个元素移到第3个元素处,第5个元素移到第4个元素处,以此类推),然后输出数组内容。程序输入要删除数的位置,点击“删除”按钮后删除指定数,并把剩余的数字依次输出到List2中,程序如图所示。
/
Dim data(10) As Integer ’①
Dim n As Integer ’n表示总元素个数
Private Sub Command1_Click()
Dim t As Integer
t = Val(Text1.Text)
For i = t To n-1
②
Next i
n = n - 1
For i = 1 To n
③
Next i
End Sub
Private Sub Form_Load()
Dim i As Integer
n = 10
For i = 1 To n
data(i) = i * 2
List1.AddItem Str(data(i))
Next i
End Sub
(1)与①处语句功能一样的是(填字母) (A.Dim data(0 To 10) As Integer/B.Dim data(1 To 10) As Integer)。?
(2)为实现程序功能,请在划线处填入合适的代码。
②处的代码为 。 ?
③处的代码为 。 ?
答案 (1)A
(2)data(i) = data(i + 1);List2.AddItem Str(data(i))
解析 (1)本题考查数组元素的定义方法。
(2)②将当前数data(i)填充为后面的数data(i+1),相当于后面的数往前移动一位,数字总数n=n-1,指定位置的数已删除。③利用Listbox的AddItem方法添加数据。
17.(2016浙江高中联盟第二学期开学考试,17,5分)竞选班长。编号分别为1、2、3、4、5的五位候选人参加班长竞选,现要设计一个计票程序,根据回收的选票信息统计各位候选人的得票数,得票数最多的被选为班长,并输出班长的编号。选票信息为一个数字序列,由每张选票的投票结果构成,如某选票序列为101233303,其含义见如下表所示。
选票
序列
1
0
1
2
3
3
3
0
3
含义
第1张选票投给1号
第2张
选票
弃权
第3张选票投给1号
第4张选票投给2号
第5张选票投给3号
第6张选票投给3号
第7张选票投给3号
第8张
选票
弃权
第9张
选票投
给3号
备注:选票序列101233303,序列中的数字i,表示投票给编号为i的人,即编号为i的人得1票,其中数字0表示不投给任何人,即为弃权。表中选票序列的投票结果为:1号得2票,2号得1票,3号4得票,4号、5号均为0票(没人投),所以3号得票数最高,被选为班长。
程序运行时,在文本框Text1中输入选票信息,单击“计算”按钮Command1后,被选为班长的编号显示在文本框Text2中。程序运行效果如图所示。
/
实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a(1 To 5)As Integer
’数组元素a(1)~a(5)依次存放编号为1~5的五位候选人的得票数
Dim st As String,i As Integer,j As Integer,n As Integer
Dim ans As Integer ’变量ans存放被选为班长的人的编号
Dim max As Integer ’变量max存放最多的得票数
st=Text1.Text
① ?
For i=1 To 5
a(i)=0
Next i
For i=1 To 5
For j=1 To n
If ② Then ?
a(i)=a(i)+1
Next j
Next i
max=0
For i=1 To 5
If a(i)>max Then
max=a(i):ans=i
Next i
③ ?
End Sub
答案 ①n=Len(st) ②Val(Mid(st,j,1))=i
③Text2.Text=Str(ans)
解析 算法主要思想:将输入的字符串,利用Mid函数逐位提取,并将判断结果存入到相应数组变量中,然后通过比较求出数组元素的最大值及对应编号。代码实现:将Text1中的选票序列读入字符串变量st,使用Len函数计算字符串长度存入变量n,使用For j=1 To n依次提取每一位,通过Val函数转换为数值类型,并与编号进行比较,统计到相应候选人对应的数组元素中。变量max用于存储最大票数,变量ans用于存储最大票数的候选人编号。题目要求在Text2中输出最大票数候选人的编号,故输出值为ans。
18.小明编写了一个数据插入程序。程序输入一个数字,将该数字插入一列有序数据:-5,3,4,12,20,45,70,并使数据序列保持有序。设计的算法是从前往后找位置插入。
/
Private Sub Command1_Click()
Dim a(1 To 8) As Integer
Dim n, i, j, x As Integer
List1.Clear
List2.Clear
a(1) = -5: a(2) = 3: a(3) = 4: a(4) = 12: a(5) = 20: a(6) = 45: a(7) = 70
For j = 1 To 7
List1.AddItem Str(a(j))
Next j
x = Val(Text1.Text)
i = 1
Do While x > a(i) And i < 8 ’找x的插入位置
①
Loop
For j = 8 To i + 1 Step -1 ’移动数据
②
Next j
a(i) = x
For j = 1 To 8
List2.AddItem Str(a(j))
Next j
Label1.Caption = “插入的位置是” &Str(i)
End Sub
(1)代码“List1.Clear”中的Clear是 。(单选,填字母:A.属性名/B.事件名/C.方法名)?
(2)为实现程序功能,请在划线处填入合适的代码。
①处填入的代码为 。 ?
②处填入的代码为 。 ?
答案 (1)C
(2)i = i + 1;a(j) = a(j - 1)
解析 (1)略。
(2)本题在一个递增序列中插入一个新数。①i表示新数的位置,新数若比当前数大,则位置往后移动。②从后往前依次将元素后移一位。