相关试卷
-
1、下列Visual basic表达式的值等于13的是( )A、Val("11")+2 B、Len("11")+2 C、Sqr(11)+2 D、Str(11)+2
-
2、下列可以作为Visual Basic变量名的是( )A、5AD B、A+C C、Ab_3 D、B&C
-
3、数组是一组相同类型的变量集合,集合中的每个元素都是一个独立的变量。定义一个数组如下:Dim A(10) as Single,关于该数组描述错误的是( )。A、这个数组中有11个元素A(0)……A(10) B、这个数组中所有的元素数据类型都是Single C、这个数组中有10个元素A(1)……A(10) D、这个数组的数组名为A
-
4、下列关于VB中数组的叙述,错误的是( )。A、数组是一种基本数据类型 B、数组是一组相同类型的变量集合 C、数组中的所有元素可看作一个整体 D、数组元素的引用形式为“数组名(下标)”
-
5、有一个报数游戏,n个人排成一圈,游戏开始时规定个报数号m,然后从其中一个人开始按顺时针报数1,2,3,…,n,当某人报到的数为m的倍数时,即被淘汰,其他人继续游戏,直到最后。现用VB设计了一个程序,程序界面如下图所示。在文本框Text1中输入参加游戏的人数n,在文本框Text2中输入报数号m,单击“报数”按钮,即在列表框List1中显示每次被淘汰的人的顺序号。
实现上述功能的VB代码如下,但加框处有错,请改正。
Private Sub Command1_Click()
Dim n As Integer, m As Integer
Dim a(1 To 50)As Integer
n= Val(Text1. Text)
m= Val(Text2. Text)
For i= 1 To n
Next i
s=0;j=0
Do While s <n
t=0
Do While t <m
①
t=t+ a(j)
Loop
a(j)=0
s=s+1
List1. Additem"第"+Str(s)+"次:"+Str(j)
Loop
End sub
(1)、“报数”按钮的对象名称是。(2)、程序代码中,加框处有错,请改正。(3)、程序代码中,将①处语句补充完整。(4)、程序运行结束后,变量t的值是。 -
6、某对分查找算法的VB程序段如下:
i= 1 : j =9 : n =0
key=Val(Text1.Text)
Do While i<= j
N=n+1
M=Fix((i + j) / 2)
If key = d(m) Then Exit Do
If key<d(m) Then j= m - 1 Else i=m+1
Loop
数组元素d(l)到d(9)的值依次为“7,12,18,25,39,58,61,72,86”。若该程序段运行结束后,n的值为2,则key的值是( )
A、39 B、18或61 C、18或72 D、12或61 -
7、某对分查找算法的VB程序段如下:
Dim d(1 To 63) As Integer, i As Integer, s As Integer
For i=1 To 63
d(i)=i
Next i
Key=Int(Rnd*3)+1
s=0: i=1: j=63
Do While i<=j
m=(i+j)\2
If Key=d(m) Then Exit Do 'Exit Do表退出循环
If Key<d(m) Then
j=m-1: s=2*s
Else
i=m+1: s=2*s+1
End If
Loop
Label1.Caption=str(s)
若运行该程序段后,标签Label1中显示的结果是28,则查找的key值是( )
A、28 B、29 C、57 D、58 -
8、小李编写了一个成语接龙的VB程序,功能如下:在文本框Text1中输入一个成语,单击“接龙”按钮Command1,在列表框List1中显示接龙的成语。程序运行界面如下图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Dim n As Integer, cy(30000) As String
Private Sub Form_Load()
'从数据库中读入n条成语,并存数组cy中
'代码略
End Sub
Private Sub Command1_Click()
Dim s As String, i As Integer, j As Integer
Dim m As Integer, flag As, Boolean
Dim s1 As Siring, s2 As String
s=Text1.Text
flag=True
Do While flag
'①i=1
j=n
Do While<= j
m= Int((i+j)/2)
s2=Mid(cy(m), 1, 1)
If s2=s1 Then
Exit Do
ElseIf s2<s1 Then
i=m+1
Else
j=m-1
End If
Loop
If
Then '②List1.AddItem s+ "— —"+cy(m)
s=cy(m)
Else
List1.AddItem "接不下去了"
flag=False
End If
Loop
End Sub
① ②
-
9、对分查找算法可用于求解方程的近似解。现要求方程x3-4x2+x+5=0的一个近似解,可设f(x)=x3-4x2+x+5,若有区间[a,b],使f(a)与f(b)异号,则该区间内必存在该方程的一个解。小吴为比编写了VB程序,功能如下:分别在本框Text1和Text2中输入求解的区间值a和b(a<b),单击“计算”按钮Command1,若该区间必有解,则求解出该区间内的一个近似解(精确到10-5)否则提示“重新输入区间”,计算后的相关结果显示在列表框List1中。程序运行界面如下图所示。
实现上述功能的VB程序如下,请在划线处填上合适的代码。
Private Sub Command1_Click()
Dim a As Double, b As Double, m As Double, x As Double
Dim ym As Double, yb As Double
a=Val(Text1.text):b=Val(Text2.Text)
If a>b Then t=a: a=b: b=t
Do While ①
m=(a+b)/2
ym=m^3-4*m^2+m+5
yb=b^3-4*b^2+b+5
If Abs(ym)<0.00001 Then Exit Do
If ② Then
b=m
Else
a=m
End If
Loop
Text3.Text=Str(Int(m*10000)/10000)
End Sub
① ②
-
10、某对分查找算法的VB程序段如下:
i=1: j=8: t=0
Key=Int(Rnd( )*18)+4
Do While i<=j
m=Int((i+j)/2)
t=t+1
If a(m)=Key Then
Exit Do
Else
If a(m)>Key Then j=m-1 Else i=m+1
End If
Loop
数组元素a(1)到a(8)的值依次为“2,3,12,15,18,19,20,22”,该程序段运行结束后,变量t达到最大值时的Key值可能是( )
A、5 B、18 C、21 D、23 -
11、某对分查找算法的VB程序段如下:
flag=False
i=0: j=7: c=0
Do While<= j And flag=False
m=Fix((i+j)/2+0.5)
If Key=a(m) Then flag=True
If Key< a(m) Then j=m-1 Else i=m+1
c=c+1
Loop
数组元素a(0)到a(7)的值依次为“1,3,30,46,6S,72,84,90”,key的值为85。若该程序段执行后,以下说法中正确的是( )
A、i=6 B、j=7 C、m=7 D、c=4 -
12、把学生成绩由高到低排序后,按姓名在前、成绩在后的顺序依次存储在数组a中。例如(“张三”“97”“李四”“92”“王五”“87”,……)。设计一个VB程序,利用对分查找思想实现在数组a中查找成绩为Key的学生姓名。程序段如下:
i=1: j=n 'n代表学生的数量
Key=Val(Text1.Text)
Do While i<=j
m=
If Val(a(m))>Key Then i=m\2+1 Else j=m\2-1
Loop
List1.Clear
j=j+1
Do While i<=n
If Val(a(2*j))=Key Then List1.AddItem a(2*j-1)+""+a(2*j)
Else exit do
j=j+1
Loop
上述程序中方框处可能的语句是( )
A、(i+j)\2 B、(i+h)/2 C、((i+j)12)*2 D、((i+j)\2)/2 -
13、1.某对分查找算法的VB程序段如下:
i=1: j=8: t=0
Key=Int (rnd( )*20)+10
Do While i<m=j
m=Int((i+j)/2)
t=t+1
If a(m)=Key Then
Exit Do
Else If a(m)> Key Then
j=m-1
Else
i=m+1
End If
Loop
数组元素a(1)到a(8)的值依次为“2,11,14,15,18,19,25,32”,该程序段运行结束后,变量t的最大值可能是( )
A、1 B、2 C、3 D、4 -
14、“轮转后有序数组(RotatedSortedArray)”是将有序数组取其中某一个数为分点,将其之前的所有数都轮转到数组的末尾所得。比如{7,11,13,17:2,3,5}就是一个轮转后的有序数组,原有序数组中的子串{2,3,5}被轮转到了数组的末尾处。
对于一个轮转后有序数组arr可以进行二分查找,算法思路如下(以升序为例):
每次根据查找的左侧位置L和右侧位置R求出中间位置M后,M左边,M和右边[M+1,R],这两部分中至少一个是有序的(可根据中间位置数据和边界数据的大小关系判断)。
arr[M]和待查找数据Key比较
①arr[M]=key,返回M的值
②若M位置的右侧有序,当待查找数据在右侧,则下次在右侧查找,否则在M左侧查找
③若M位置的左侧有序,当待查找数据在左侧,则下次在左侧查找,否则在M右侧查找
(1)、对于轮转后有序数组{7,11,13,17,2,3,5}使用以上函数search( )查找key值3,所需要的查找次数为。(2)、以下VB函数Search( )实现了对轮转后有序数组arr进行二分查找的过程,如果查询成功,返回m值,查询失败则返回-1。请补充程序中①②③划线处的代码:Function Search (key As Integer, L As Integer, R As Integer) As Integer
①
Do While L<=R And Search=-1
M=(L+R)\2
If arr(M)=key Then
Search=M
Else
If ② Then
If arr(L)<=key And key<arr(M) Then
R=M-1
Else
L=M+1
End If
Else
If ③ Then
L=M+1
Else
R=M-1
End If
End If
End If
Loop
① ② ③
-
15、(加试题)数组a中存储的是一组正整数,特征是:①以三个数为一组的话,每组中任意一个数都比前面一组中的任意一个数要大;②每组中三个数依次递减;③数组中数的总个数为3的倍数。依据对分查找思想,设计一个在数组a中查找数据key的程序。实现该功能的VB程序如下,但加框处代码有错,请改正。
……
Private Sub Command1_Click()
Const n = 15
Dim a(1 To n) As Integer, search As Integer, key As Integer
Dim i As Integer, j As Integer, m As Integer
'读取一组正整数,按上述规则存入数组a中,代码略。
key = Val(Text1.Text)
i = 1: j = n: search = 0
Do While i <= j
m = (i + j) \ 2
If m Mod 3 <> 0 Then
'① 把m调整到三个一组的最后一个数的位置If key = a(m) Then
search = m : Exit Do
ElseIf key < a(m) Then
j = m - 3
ElseIf
Then '②i = m + 1
ElseIf key = a(m - 2) Then
search = m - 2 : Exit Do
ElseIf key = a(m - 1) Then
search = m - 1 : Exit Do
Else
search = 0 : Exit Do
End If
Loop
If search <> 0 Then
Text2.Text = Str(search)
Else
Text2.Text = "找不到"
End If
End Sub
加①②
-
16、某查找算法的部分VB程序代码如下:
i=1:j=8:k=0
key=95
Do While i<=j
k=k+1
m=Int((i+j)/2)
If key=a(m) Then Exit Do
If key<a(m) Then j=m-1 Else i=m+1
Loop
数组元素a(1)到a(8)的数据依次为“12,28,49,56,57,88,95,100”,该程序运行过程中,当变量k的值为2时,对应查找的a(m)值是( )
A、28 B、56 C、88 D、95 -
17、已知一无序数组A中的元素为“90,15,40,72,65,32,81,6”通过引入数组a元素按升序排列时的下标,b数组元素为“8,2,6,3,5,4,7,1”,使得a(b(1))<=a(b(2))<=a(b(3))…<=a(b(n)),从对数组a中的数据进行对分查找。部分程序如下:
i=1: j=8: c=0
Key=Val(Text1.Text)
Do While i<= j
m=Int((i+j)/2)
t=b(m)
c=c+1
If a(t)=Key Then p=t: Exit Do
If a(t)< Key Then
i=m+1
Else
j=m-1
End If
Loop
当文本框Text1输的值为32时,程序运行结束后变量c的值是( )
A、1 B、2 C、3 D、4 -
18、编写VB程序,实现如下功能:在文本框Text1中输整数x,单击“查找删除”按钮Command1,在数组a(从小到大排列并显示在标签Label1中)中查找该数。若找到,则从数组a中删除该数(该数后的数组元素都往前移一位),并在标签Label2中显示删除后的结果(运行效果如图所示);否则在标签Label2中显示“该数没有找到”。
请在划线处填入合适代码。
Dim a(1 To 10) As Integer
Private Sub Form_Load()
'产生10个升序的随机数并显示在Label1,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, m As Integer, k As Integer
Dim x As Integer, f As Boolean, s As String
x=Val(Text1.Text)
i=1: j=10: f=False
Do While ①
m=(i+j)\2
If a(m)=x Then
f=True
ElseIf ② Then
i=m+1
Else
j=m-1
End If
Loop
If f=True Then
For k=m To 9
③
Next k
For k=1 To 9 '逐个显示删除后的数组元素
s=s+Str(a(k))+ ""
Next k
Else
s="该数没有找到"
End If
Label2.Caption=s
End Sub
① ② ③
-
19、已知数组元素a(1)到a(8)的值依次为89,78,57,56,45,34,23,12,若在Text1中输入12,然后执行以下程序段:
Key=Val(Text1.text)
Text2.Text= ""
i=1: j=8: f=False
Do While i <=j And Not f
m=(i+j)\2
If a(m)\10+a(m) mod 10 =Key Then
search =m: f=True
ElseIf a(m)\10+a(m) mod 10> Key Then
i=m+1
Else
j=m+1
End If
Text2.Text=Text2.Text+Str(m)
Loop
则在执行该程序段后,Text2中显示的内容是( )
A、56 78 67 B、4 6 5 C、4 2 3 D、56 34 45 -
20、数组a为一组循环有序不重复的数组,如(a(1)=25,a(2)=41,a(3)=100,a(4)=5,a(5)=7,a(6)=9)。依据对分查找思想:设计个在数组a中查找数据Key并显示在列表框的程序,界面如图所示。实现该功能的VB程序段如下:
1=1:r=6
Key=Val(Text1.Text)
Do While <=r
m=Int((1+r)\2)
If a(m)=Key Then
Exit Do
Elself a(m)>=a(1) Then
ElseIf a(m)<a(1) Then
End If
Loop
上述程序中方框处可选语句为:
①If a(m)<Key And a(r)>Key Then 1=m+1
Else r=m-1
②List1.AddItem "第"+Str(m)+ "值是"+Str(a(m))
③If a(m)>Key And a(1)<=Key Then r=m-1
Else=m+1
则(1)、(2)、(3)处语句依次是( )
A、③①② B、②①③ C、①③② D、②③①