相关试卷
-
1、某对分查找算法的VB程序段如下:
i=1 : j=10 : s=" "
Key= Va1(Text1. Text)
Do While i <=j
m=Fix((i+j+1) / 2)
s=s+Str(m)
If Key=a(m) Then Exit Do 'Exit Do表示退出循环
ElseIf Key<a(m) Then
j=m-1
Else
i= m+1
End If
Loop
Text2. Text=s
数组元素a(1)到a(10)的值依次为“3,10,25,34,40,52,61,72,83,90”。若该程序段执行后,下列说法中正确的是( )
A、待查找的数据只能是整数 B、在文本框Text1中输入任意正整数进行查找,则查找的次数介于1和5之间
C、在文本框Text1中输入10,则文本框Text2中显示的内容为52 D、若在某次查找中,i=j时,条件“Key=a(m)”仍不成立,表示查找的数据不存在 -
2、对分查找程序如下,数组a的值依次为{3,8,9,21,37,56,68,72,89,96,100},对数组中的每个元素进行对分查我,则查找成功的平均查找次数是( )
i=1: j=11
Do While i <=j
m=(i+j) \ 2
If a(m)=key Then Text1. Text=“查找成功”: Exit Do
If key<a(m) Thenj=m- 1
If key > a(m) Then i=m+1
Loop
A、32/11 B、33/11 C、34/11 D、35/11 -
3、有VB程序段如下:
n= Va1(Text1. Text)
k=0
left= 1
right= n
Do While left < = right
k=k+1
m=(left+ right)\2
If m-left< right- m Then
left=m+1
Else
right= m- 1
End If
Loop
在文本框Text1l中输入16,执行该程序段,下列说法错误的是( )
A、程序运行后k的值是4 B、程序运行后m的值是16 C、程序运行后right的值是15 D、程序运行后left的值是16 -
4、有如下程序段:
i=1 : j=10 : key= 20
Do While i<=j
m=(i+j)\2
If a(m)> key Then
j=m- 1
Else
i=m+1
End If
Loop
如a数组中的元素依次为2,9,10,12,15,20,20,20,21,25,下列各变量值正确的是( )
A、i=9 B、j=9 C、i=6 D、j=6 -
5、下列有关查找的说法,正确的是( )A、顺序查找时,被查找的数据必须有序 B、对分查找时,被查找的数据不一定有序 C、顺序查找总能找到要查找的关键字 D、一般情况下,对分查找的效率较高
-
6、某数组有7个元素,依次为200、202、204、205、210、215、218,若采用对分查找法在该数组中查找数据210,需要查找的次数是( )A、1 B、2 C、3 D、4
-
7、某对分查找算法的VB程序段如下:
i=1:j=7:key= 50
Do While i<=j
m=(i+j)\2
If a(m)= key Then Exit Do 'Exit Do的功能是退出Do循环
If a(m)> key Then
j=m-1
Else
i=m+1
End if
Loop
数组元素a(1)到a(7)的值依次为“11,41,53,67,73,83,95”,运行上述程序段查找key后,下列条件表达式成立的是( )
A、i=m+1 B、j=m-1 C、i>m+1 D、j<m-1 -
8、某7位男生的肺活量数据放在数组元素a(1)到a(7)中,其数据依次为“3205、3408、3471、3498、3621、3829、4233”。使用对分查找算法查找数据4233,则共需查找次数为( )A、0 B、1 C、3 D、4
-
9、某查找算法的部分VB代码如下:
t= false
i= 0
Do While i<7 And t= False
i=i+ 1
If a(i)= Key Then t= True
Loop
If t= False Then i=0
数组元素a(1)到a(7)的数据依次为“3,5,1,5,8,9,5”,当变量key值为5时,运用该算法处理后,变量i的值是( )
A、0 B、2 C、4 D、7 -
10、小炫报名参加“智力大冲浪”节目。比赛规则如下:
比赛开始时参赛者将预先得到M元奖金。
比赛时间分为N个时间段(N≤100),有N个小游戏,每个时间段可完成1个游戏,第i个小游戏必须在规定期限t(i)时段前完成(1≤t(i)≤N),否则要从奖金M元中扣去奖金w(i),w(i)为自然数,不同的游戏扣去的奖金是不一样的。每个游戏必须从整时段开始。注意:比赛绝对不会让参赛者赔钱!
例如:当N=5,M=100时,
游戏编号
1
2
3
4
5
完成期限t(i)
1
4
2
3
2
扣除奖金数w(i)
5
4
10
8
7
在这种情况下,小炫依次完成编号为5、3、4、2、1的小游戏,获得了最高奖金95元。
他的算法思想:让扣款高的游戏尽量准时完成,扣除的奖金越少,则最后赢取的奖金越多。
1)按扣款数值从大到小排序,在样例中,排序后游戏编号依次为3、4、5、1、2;
2)对于游戏i,在时间段1到t(i)完成,效果都是一样的,所以尽量放置的时间段t(i)完成,若该时段已经被占用,则依次考察时间段t(i)-1,t(i)-2,……,1。在样例中,
①考虑游戏3,放置在时间段2完成(注:t(3)=2);
②考虑游戏4,放置在时间段3完成(注:t(4)=3);
③考虑游戏5,时间段2已被游戏3占用,放置在时间段1完成(注:t(5)-1=1);
④考虑游戏1,时间段1已被游戏5占用,不能按时完成,放到时间段5;
⑤考虑游戏2,放置在时间段4完成(注:t(2)=4)。
小炫按如上算法编写了一个VB程序,计算“智力大冲浪”游戏中玩家最多可赢取的奖金,将结果输出到文本框Text1中。
VB程序代码如下所示,请在划线处填入合适代码。
Dim n As Integer, m As Integer
Dim t (1 To 100)As Integer '变量t(i)表示第i个游戏的完成期限
Dim w (1 To 100) As Integer '变量w(i)表示第i个游戏未完成要扣除的奖金
Dim f (1 To 100)As Boolean '变量f(i)表示第i个时段是否已经被占用
Private Sub Form_ Load()
'初始化游戏设置信息,时段数量n、初始奖金数m、数组t、数组w
'代码略
End Sub
Sub swap(x As Integer, y As Integer) '自定义过程,可以用Call语句来调用该过程
Dim z As Integer
z=x:x=y:y=z
End Sub
Sub sort() '自定义过程,可以用Call语句来调用该过程
Dim x As Integer, i As Integer, j As Integer
For i=1 To n-1
For j=i+1 To n
If w(i)< w(j) Then
Call swap(w(i), w(j)) '调用自定义过程
End if
Next j
Next i
End Sub
Private Sub Command1_Click()
Dim i As Integer, k As Integer, p As Integer
Call sort '调用自定义过程
tot=0
For i=1 To n
f(i)= True
Next i
For i=1 To n '对每个游戏从该游戏的规定期限开始往左找可用时间段
'找到则完成该游戏,否则放弃该游戏
p=-1
k=t(i)
Do While k >0 And p=-1
If f(k)= True Then
p=k
f(k)= False
Else
End if
Loop
If p=-1 Then tot=tot +w(i)
Next i
Text1. text= str(ans)
End Sub
-
11、某协会进行钓鱼比赛,最后有十人进入决赛,录入员编制了如下Visual Basic程序,功能是根据成绩进行排序,程序中数组a保存所有参赛者的成绩,数组b保存此成绩对应的姓名,第i位参赛者的成绩保存在a(i)中,姓名保存在b(i)中程序界面如图所示,左边列表框List1 中显示原始数据(成绩和相应的姓名),单击“排序”按钮(Command1),排序后的结果按成绩从高到低显示在列表框List2中。
解决此问题的算法流程图如图所示,排序部分的程序段如下:
Dim a(1 To 10) As Single
Dim b(1 To 10) As String
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, x As Single, y As String
For i=1 To 9
k=i
For j=i+1 To 10
If ① Then k=j
Next j
If k<>i Then
x=a(i) : a(i)=a(k) : ②
y=b(i) : b(i)=b(k) : b(k)=y
End If
Next i
For i=1 To 10
List2. AddItem Str(a(i))+" "+ b(i)
Next i
End Sub
Private Sub Form_ Load()
'此过程用于对数组a和数组b进行初始赋值,代码略
End Sub
(1)、解决此问题的算法是。(选填:冒泡排序或选择排序)(2)、在程序划线处,填入适当的语句或表达式,把程序补充完整① ②
-
12、设计如下VB程序:输人行数m(≤10)与列数n(≤10),单击按钮产生a(1)~a((m- 1)* n)个不重复2位正奇数,并显示在List1中,计算每列数据的和,并依次存储在第m行对应的数组元素中,最后对数组元素进行升序排序并显示在List2中。
Dim m As Integer
Dim n As Integer
Dim a(1 To 100) As Integer
Function sum(y As Integer) As Integer '函数功能是计算每列数据的和
sum=0
For i= ①
sum= sum+a(i)
Next i
End Function
Private Sub Cmd1_Click( )
Dim i As Integer, j As Integer, flag As Boolean, s As String
Randomize
m= Va1(Text1. Text) : n= Va1(Text2. Text)
For i=1 To (m-1) * n
For j=1 To i-1
If a(i) = a(j) Then ② :
Exit For
Next j
Next i
For i=1 To (m-1) * n
s=s+Str(a(i))
If ③ Then
List1. AddItem s
s=" "
End If
Next i
For i=1 To n
a(i+(m-1)*n)=sum(i)
Next i
'对数组元素进行升序排序并显示在List1,代码略
End Sub
(1)、观察程序代码可知,“输出矩阵”按钮的对象名为。(2)、实现上述功能的VB程序如下,请在划线处填入合适的代码。① ② ③
(3)、程序中加框处代码有错,请改正。 -
13、分段排序:小王对输入的数据进行分段排序,并将排序后的数据输出。例如输入:“2:23,12,3:34,12,5”,表示第1段有2个数据依次为23,12;第二段有3个数据依次为:34,12,5.按上述要求,编写一个VB程序,功能如下:在文本框输人数据,单击“排序:按钮Command1,将排序后的结果显示在列表框List1中,程序运行的界面如下图所示。
Const n= 100
Private Sub Command1_ Click()
Dima(1 To n) As Integer '依次存储每段数据个数
Dim b(1 To n) As Integer '依次存储每段数据
Dim ed As Integer, k As Integer, d As Integer, x As Integer, s As String
Dim i As Integer, j As Integer, c As String, tmp As String, t As Integer
k=0 : tmp=""
s= Text1. Text
①
For i=1 To Len(s)
c= Mid(s, i, 1)
If Not
Then
tmp= tmp+C
ElseIf c=":”Then
k=k + 1 : a(k)= Val(tmp) : tmp=""
ElseIf c="," Then
b(d)= Val(tmp): d=d + 1: tmp=""
End If
Next i
x=1 : ed=a(x)
For i=1 To d-1
k=i
If i>ed Then x=x+1: ②
For j=i+1 To ed
If b(j) < b(k) Then k=j
Next j
If k <> i Then t=b(i): b(i)=b(k): b(k)=t
Next i
'输出代码略
End Sub
(1)、该程序界面中,共有类对象(仅填写数字)。(2)、实现上述功能的VB程序如下,请在划线处填入合适的代码。① ②
(3)、加框处的代码有错误,请改正。 -
14、左右交替上升排序:小王编写了一个VB程序,其功能如下:在文本框Text1中输入多个正整数(以“,”为分割符),单击“排序”命令按钮Command1,对这些数进行排序,排序后生成左右交替上升的数据序列(如下表),并在文本框Text2中输出排序后的结果。实现上述功能的VB程序如下,程序运行界面如图所示:
a(1)
a(2)
a(3)
……
a(n-2)
a(n-1)
a(b)
1
22
44
……
55
33
11
请回答下列问题:
(1)、如图所示,若输入数据为“3,15,56, 34,27,42”,运行程序后输出数据为。(2)、请在划线处填入合适的代码。Private Sub Command1_ Click()
Dim a(1 To 100) As Integer
Dim s As String, ch As String, k As Integer, t As Integer
Dim n As Integer, i As Integer, j As Integer
s= Text1. Text: n=0
For i=1 To Len(s)
ch= Mid(s, i, 1)
If ch="," Then
n=n+1
a(n)=
j=0
Else
j=j+ 1
End If
Next i
For i=1 To n\2
For j=i+ 1 To n-i+1
If a(k) > a(j) Then k=j
Next j
If k<> i Then t=a(k) : a(k)=a(i) : a(i)=t
For j=i+ 1 To
If a(j)<a(j+1) Then t=a(j): a(j)=a(j+1): a(j + 1)=t
Next j
Next i
For i=1 To n
Text2.Text = Text2. Text+Str(a(i))
Next i
End Sub
-
15、有如下程序段:
tot= 0
For i=1 To 4
yes= False
For j=5 To i+1 Step -1
If a(j)> a(i) Then
yes= True
tot=tot+1
t=a(j) : a(j)=a(i) : a(i)=t
End If
Next j
If yes= False Then Exit For
Next i
数组元素a(1)到a(5)的值依次为“33,24,4,16,77”,经过该程序段“加工”后,变量tot的值为( )
A、2 B、3 C、4 D、5 -
16、有如下程序段:
s=" "
For i=1 To 3
For j=7 To i +1 Step -1
If a(j)<a(j- 1)Then
k=a(j):a(j)=a(j-1):a(j-1)=k
End If
Next j
s=s+Str(a(i))
Next i
Text1. Text=s
数组元素a(1)到a(7)的数据依次为“4,15,11,7,9,16,12”,经过该程序段“加工”后,文本框Text1中显示的内容是( )
A、4 7 9 B、16 15 12 C、4 15 11 7 D、4 7 9 11 -
17、有如下程序段:
For i=1 To 2
For j=1 To 6-i
If a(j) < a(j+1) Then
k=a(j) : a(j)=a(j+1) : a(j+1)=k
End If
Next j
Next i
数组元素a(1)到a(6)的值依次为“71,54,58,29,31,78”,经过该程序段“加工”后,数组元素a(1)到a(6)的值依次为( )
A、29,31,54,58,71,78 B、78,71,58,54,31,29 C、54,29,31,58,71,78 D、71,58,54,78,31,29 -
18、下列有关排序的说法,正确的是( )A、选择排序是在一列数据中把较小的数据逐次向上推移的一种排序技术 B、在冒泡排序时,每一遍加工是把较小的数据找出来与最上面数据进行交换的过程 C、冒泡排序是对选择排序的改进,具有较高的效率 D、一般来说,在选择排序时,交换数据的次数比冒泡排序少
-
19、实现某排序算法的部分VB程序如下:
For i=1 To 6
k=i
For j=i+1 To 7
If a(j)<a(k) Then k=j
Next j
If i<>k then
t=a(i) : a(i)=a(k) : a(k)=t
End If
Next i
则该程序运行后,数组元素a(1)到a(5)的值依次为( )
A、31,41,66,83,70 B、83,70,66,41,31 C、83, 66,70,41,31 D、31,41 ,66,70,83 -
20、实现某排序算法的部分VB程序如下:
For i=1 To 6
k=i
For j=i+1 To 7
If a(j)<a(k) Then k=j
Next j
If i<>k then
t=a(i) : a(i)=a(k) : a(k)=t
End If
Next i
在排序过程中,经过某一遍排序“加工”后,数组元素a(1)到a(7)的数据依次为“10,41,75,12,63,11,85”,则下一遍排序“加工”后数组元素a(1)到a(7)的数据依次是( )
A、10,11,41,75,12,63,85 B、10,11,75,12,63,41,85 C、10,11,12,75,63,41,85 D、10,11,12,41,63,75,85