相关试卷
-
1、小李同学碰到了一个数学问题:400个同学按顺序进行编号后围成一个大圈,按1至2报数(从1号位置开始),报到2的同学出列,以此一直循环报数下去,问最后剩下的那位同学他的编号是几号?
例如以6个同学编号为例,按1至2报数(从1号位置开始)依次出列的编号次序为2-4-6-3-1-5,那么最后剩下的就是编号为5的同学。为了解决这个问题,小李用VB编写了如下程序尝试解决,其中列表List1显示出列的顺序编号,文本框Text1中显示最后留下的编号,程序代码如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s,f,t As Integer
Dim a(1 To 400) As Boolean
For i=1 To 400
a(i)=False
Next i
s=0:f=0:i=0
Do While f<399
i=i+1
If i=401 Then i=
If a(i)=False Then s=s+1
If s=2 Then
List1.AddItem Str(i)
a(i)=True
f=
End If
Loop
For i=1 To 400
If Then Text1.Text=Str(i)
Next i
End Sub
-
2、单循环赛制是一种较为公平合理的比赛制度,比赛过程中所有参赛队伍均能相遇一次。其秩序编排可采用“逆时针轮转方法”:数字1~n依次作为队伍编号,把编号按U型走向分成均等两边(若n为奇数,则在末尾增加编号0,使总数为偶数),即可得到第一轮的比赛秩序,例如,5个队伍的比赛编排情况如图a所示;第二轮,固定编号1,其余编号均按逆时针方向移动一个位置,即为该轮比赛秩序;以后各轮比赛秩序以此类推,与编号0对阵的表示本轮轮空。
现用VB程序实现上述功能:在文本框Text1中输入参赛队伍数n,单击“编排”按钮Command1,在列表
图a
图b
框List1中输出每轮比赛秩序。程序运行效果如图b所示。
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Private Sub Command1_Click( )
Dim team(1 To 20) As String '存储各队伍编号
Dim n As Integer,c As Integer,result As String
Dim i As Integer,j As Integer,temp As String
n=Val(Text1.Text)
For i=1 To n
team(i)=Str(i)
Next i
c=n+n Mod 2 '变量c存储比赛编排的队伍总数
If c<>n Then team(c)=Str(0)
For i=1 To c-1
result=″ ″
For j=1 To c\2
result=result & team(j) & ″-″&
& ″;″ 'Next j
List1.AddItem ″第″ & Str(i) & ″ 轮″ & result
'固定编号1,其余队伍逆时针移动一个位置
temp=team(c)
For j=c To 2 Step -1
'Next j
team(2)=temp
Next i
End Sub
-
3、编写一个VB程序,将一个长度为n的有序序列a(1)、a(2)、……a(n),以整数t(1≤t≤n)将该有序序列划分为两段,并将序列a的前t个数与后n-t个数对调,且保持这两段(t个数和n-t个数)之间的相对位置不变(即t个数和n-t个数各自有序)。例如,长度为6的有序序列38、42、59、61、69、78,当t=2时重排结果为59、61、69、78、38、42。程序运行时产生n个整数存储在数组a中,在文本框Text1中输入t,单击“对调”按钮Command1,在列表框List2输出t个数与n-t个数对调后的数字序列。为了实现上述功能,请在划线处填入合适的代码。
Const n=10
Dim a(1 To 10) As Integer
Private Sub Form_Load()
'生成n个有序数,显示在List1中,代码略
End Sub
Private Sub Command1_Click()
Dim t As Integer,i As Integer,j As Integer,temp As Integer
For i=t+1 To n
temp=a(i)
For j=i To i+1-t Step-1
Next j
a(j)=
Next i
For i=1 To n
List2.AddItem Str(a(i))
Next i
End Sub
-
4、利用VB程序将两组成绩数据合并为一组并按成绩从高到低排列输出。成绩相同时,第一批学生优先输出。实现上述功能的VB代码如下,但加框处代码有错,请改正:
Dim xm(1 to 1000) as string '存储学生姓名
Dim cj(1 to 1000) as integer '存储学生成绩
Private Sub Form_Load() '该处具体代码省略
'从数据库读取两批学生数据第1批学生的人数rs1,按成绩从高到低的顺序将成绩存入cj(1)、cj(2)…cj(rs1)中,姓名存入xm(1)、xm(2)…xm(rs1)中,第2批人数rs2,按成绩从高到低的顺序将成绩存入cj(rs1+1)、cj(rs1+2)…cj(rs1+rs2)中,姓名存入xm(rs1+1)、xm(rs1+2)…xm(rs1+rs2)中
End Sub
Private Sub Command1_Click()
i=1
j=rs1+1
'以下程序开始按成绩高低逐个输出,每次输出前后两段中,尚未处理的学生中成绩最高的n=1 '①
Do While i<=rs1 And j<=rs1+rs2 '两段都有未输出的情况,输出两段中最大值
n=n+1
If cj(i)>=cj(j) Then
k=i:i=i+1
Else
k=j: j=j+1
End If
List1.AddItem(″第″+Str(n)+″名″+xm(k)+″成绩:″+Str(cj(k)))
Loop
Do While i<=rs1 '剩下第一段还有未输出的,逐个输出
n=n+1
List1.AddItem(″第″+Str(n)+″名″+xm(i)+″成绩:″+Str(cj(i)))
i=i+1
Loop
Do While j<=rs2 '②若第二段还有未输出的,逐个输出
n=n+1
List1.AddItem(″第″+Str(n)+″名″+xm(j)+″成绩:″+Str(cj(j)))
j=j+1
Loop
End Sub
① ② -
5、n个人排成一个圆圈,然后把这n个人按逆时针方向分别编号为1、2、…、n。从编号为1的人开始按逆时针计数,当某人计数为m的倍数时,该人出圈;如此循环下去,直到圈中只有一个人留下。
现用VB6制作一个模拟报数出列的程序,程序界面如下图所示:在文本框Text1中输入人数n,在文本框Text2中输入出列号m,单击按钮模拟报数Command1,在列表框List1中显示出列顺序编号,程序界面如下。
实现上述功能的VB 代码如下, 请在划线处填入合适代码。
Private Sub Command1_Click()
Dim n As Integer, m As Integer
Dim a(1 To 100) 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
List1.AddItem Str(j)
s = s + 1
Loop
Text3.Text = Str(j)
End Sub
-
6、插入排序的基本思想是:把待排序的数据按其值的大小逐个插入到一个已经排好序的有序序列中,直到所有的数据插入完为止,得到一个新的有序序列。例如,已知待排序的一组数据是60,71,49,11,24,3,66。
假设在排序过程中,前3个数据已完成升序排列,构成一个有序序列49,60,71。
将待排序数据中的第4个数据(即11)插入上述有序序列,以得到一个新的含4个数据的有序序列。首先,应找到11的插入位置,再进行插入。可以将11放入数组的第一个元素r(0)中,这个元素称为监视哨,然后从71起从右到左查找,11小于71,将71右移一个位置,11小于60,又将60右移一个位置,11小于49,又再将49右移一个位置,这时再将11与r(0)的值比较,11≥r(0),它的插入位置就是r(1)。假设11大于第一个值r(1),它的插入位置应该在r(1)和r(2)之间,由于60已经右移了,留出来的位置正好留给11,后面的数据依照同样的方法逐个插入到该有序序列中。若数据有n个,须进行n-1趟排序,才能完成。
以下VB程序执行后,数组元素a(1)的值是( )
a(1)=10:a(2)=18:a(3)=12:a(4)=6:a(5)=9
for i=2 to 5
a(0)=a(i)
j=i-1
do while a(0)>a(j)
a(j+1)=a(j)
j=j-1
loop
a(j+1)=a(0)
next i
A、10 B、18 C、6 D、9 -
7、在一升序数组a中插入一个数x,使数组元素仍保持升序。解决该问题的VB程序段如下,在横线处应填入的正确语句以实现功能。
i=n 'n为数组a中的元素个数
do while i>0 and a(i)>x
i=i-1
loop
a(i+1)=x
-
8、双向选择排序算法。在经典的选择排序基础上,如果在选择出最小数的同时,也能选择预见最大数并将两数放置合适位置,这样就使排序效率提高一倍。依照上述双向选择排序的算法,小张编写了一个VB程序,功能如下:在列表框List中显示排序前数据,单击“排序”按钮Command1,在列表框List中显示这些数据按升序排序后的结果。运行效果如下图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const n=10
Dim b(1 To n)As Integer
Private Sub command1_Click( )
Dim i As Integer
Dim t As Integer
For i=1 To
For j=i To
If b(j)<b(i) Then
t=b(i):b(i)=b(j):b(j)=t
End If
If b(j)>b(n-i+1) Then
t=b(j):b(j)=b(n-i+1):b(n-i+1)=t
End If
Next j
Next i
For i=1 To n
List2.AddItem Str(b(i))
Next i
End Sub
Private Sub Form_Load( )
For i=1 To 10
b(i)=1+Int(Rnd*100)
List1.AddItem Str(b(i))
Next i
End Sub
-
9、某排序算法的VB程序段如下:
For i=7 To 5 Step -1
k=i
For j=1 To i-1
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、85,41,75,63,12,11,10 B、85,75,63,41,12,11,10 C、10,11,12,63,75,41,85 D、10,11,12,41,63,75,85 -
10、使用VB程序查找单词最大间距:在文本框Text1中输入一段英文,并在文本框Text2中输入英文段落中的某个单词(或字符串),单击“最大间距”按钮(Command1)后,在文本框Text3中显示该单词在文中某两次出现的最大间距,若只出现一次或不出现则显示值为0。程序运行界面如下图所示:
实现上述功能的VB程序如下,请在划线处填入正确的代码。
Private Sub Command1_Click()
Dim a(1 To 1000)As String '数组a存储文中出现该指定单词(或字符串)的各个位置
Dim s As String,c As String,ch As String
Dim n As Integer,max As Integer,i As Integer
s=Text1.Text
c=Text2.Text
n=0∶Max=0
For i=1 To Len(s)-Len(c)+1
ch=
If ch=c Then
n=n+1
If n>=2 Then
If a(n)-a(n-1)-Len(c)>Max Then Max=a(n)-a(n-1)-Len(c)
End If
End If
Next i
Text3.Text=str(max)
End Sub
-
11、某学校图书管理系统中有10万条图书资料记录(已经索引排序),假设从中取出一条记录并与待查找项进行比较所花时间为10毫秒,则用对分法在该系统中查找任意一本指定图书最多花费的时间约为( )A、100万毫秒 B、50万毫秒 C、10毫秒 D、170毫秒
-
12、采用如下对分查找算法对数组a中7个有序数据“15,38,51,66,77,81,99”进行查找,查找数据为“55”,
i=1∶j=7∶x=55
Do While i<=j
m=(i+j)\2
If a(m)=x Then Exit Do
If a(m)>x Then j=m-1 Else i=m+1
Loop
经过上述代码查找后,下列表述正确的是( )
A、i=m+1 B、i=m-1 C、j>m+1 D、j<m-1 -
13、数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i=1∶j=10
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
If a(m)=Key Then Exit Do ′Exit Do表示退出循环
If Key Mod 2=1 And a(m) Mod 2=0 Then
ElseIf Key Mod 2=0 And a(m) Mod 2=1 Then
Else
End If
Loop
If i>j Then s=“没有找到!” Else s=“位置:”+Str(m)
Text2.Text=s
上述程序中方框处可选语句为:
①i=m+1
②j=m-1
③If Key<a(m) Then j=m-1 Else i=m+1
则方框处语句依次是( )
A、①、②、③ B、①、③、② C、②、①、③ D、③、②、① -
14、数组a中存储的是左右交替上升的n个正整数,如下表所示:
a(1)
a(2)
a(3)
……
a(n-2)
a(n-1)
a(n)
3
25
38
……
55
31
12
依据对分查找思想,设计一个在数组a中查找数据key的程序。实现该功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click( )
Const n=6
Dim a(1 To n) As Integer,flag As Boolean
Dim i As Integer,j As Integer,m As Integer,key As Integer
′读取一组正整数,按上述规则存入数组a中,代码略。
key=Val (Text1.Text)
i=1
j=(n+1)\2
flag=True
Do While
And Not flag′m=(i+j)\2
If key=a(m) Then
flag=True
ElseIf key<a(m) Then
j=m-1
Else
i=m+1
End If
Loop
If Not flag And j>0 Then
m=
If key=a(m) Then flag=True
End If
If flag Then
Text2.Text=Str(m)
Else
Text2.Text=“找不到”
End If
End Sub
其中,加框处应改正为、
-
15、某对分查找算法的VB程序段如下:
i = 1:j = 7:s = ″ ″
key =Int(Rnd * 100)
Do While i <= j
m = (i + j) \ 2
If key = a(m) Then
s = s + ″M″:Exit Do 'Exit Do表示退出循环
ElseIf key < a(m) Then
j = m-1:s = s + ″L″
Else
i = m + 1:s = s + ″R″
End If
Loop
Text1.Text = s
数组元素a(1)到a(9)的值依次为“24,35,38,41,45,69,78”。若该程序段执行后,文本框Text1中显示的内容可能是( )
A、RL B、LMR C、RLR D、LRLM -
16、某对分查找算法的VB程序段如下:
n=0:i=1:j=6
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
n=n+1
If Key=d(m) Then Exit Do
If Key>d(m) Then j=m-1 Else i=m+1
Loop
If i<=j Then s=m-n Else s=n
d(1)到d(6)的值依次为“88,77,53,47,39,28”,输入某个Key值后,运行该程序段后,变量s结果为1,则输入key的值是( )
A、89 B、77 C、47 D、39 -
17、数组a中存放着已排序的n-1个实验数据(a(1)≥a(2)≥……≥a(n-1),a(n)暂未存储数据)。现将文本框Text1中输入的新数据插入到数组a中相应位置,从而使n个数据仍保持有序。完成该功能的VB程序段如下,请在划线处填入正确的语句。
x=Val(Text1.Text)
i=1:j=n-1
Do While i<=j
m=(i+j)\2
If x<a(m) Then i=m+1 Else j=m-1
Loop
For k=n To Step-1
a(k)=a(k-1)
Next k
a(i)=x
-
18、数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i=1:j=10
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
If a(m)=Key Then Exit Do 'Exit Do 表示退出循环
If Key Mod 2=1 And a(m) Mod 2=0 Then
ElseIf Key Mod 2=0 And a(m) Mod 2=1 Then
Else
End If
Loop
If i>j Then s=″没有找到!″ Else s=″位置:″+Str(m)
Text2.Text=s
上述程序中划线处可选语句为:
①i=m+1
②j=m-1
③If Key<a(m) Then j=m-1 Else i=m+1
则横线处语句依次是( )
A、①、②、③ B、①、③、② C、②、①、③ D、③、②、① -
19、某对分查找算法的VB程序段如下:
i=1:j=8:c=0
Do While i<=j
c=c+1
m=Fix((i+j)/2)
If key=b(m) Then Exit Do
If key<b(m) Then j=m-1 Else i=m+1
Loop
数组元素b(1)到b(8)的值依次为“22,32,39,48,71,82,96,106”。若该程序段运行结束后,c的值为2,则key的值是( )
A、48或32 B、48或96 C、32或82 D、82或96 -
20、在数组元素a(1)到a(8)中查找键值为key的数,其顺序查找的VB程序段如下,请在划线处填写正确的语句。
for i=1 to 8
if then
Text1.text=str(i)
exit for
end if
next i
if then
text1.text=″在数组中没有找到″+str(key)
end if