Dim a(1 To 10) As Integer
Dim s As String, n, i As Integer
s = "54851845236": n = Len(s)
For i = 1 To n - 1
a(i) = Val(Mid(s, i, 2))
Next i
For i = 1 To n - 2
k = i
For j = i + 1 To n - 1
If a(k) < a(j) Then k = j
Next
If k <> i Then
t = a(k): a(k) = a(i): a(i) = t
End If
Next i
Text1.Text = Str(a(1))
该程序段运行后,文本框 Text1 中显示的内容是:( )
实现上述功能的VB程序如下:
Dim a(1 To 20) As Integer
Dim n As Integer
Private Sub Text1_KeyPress(KeyAscii As Integer)
‘将输入各队员身高分别存入数组a中,队员个数为n,代码略!
End Sub
Private Sub Command1_Click()
Dim c(1 To 20) As Integer
Dim right As Integer, left As Integer, i As Integer
For i = 1 To n – 1
For j =1 To n-i
If ① Then
t = (j): a(j) = a(j + 1): a(j + 1) = t
End If
Next j
Next i
‘下列程序段实现数组C的合唱队列
m = (1 + n) \ 2
left = m: right = m
c(m) = a(n)
i = 2
Do While i <= n
If i Mod 2 = 0 Then
right = right + 1
c(right) = a(n-i+1)
Else
②
c(left) = a(n-i+1)
End If
i = i + 1
Loop
s = ③
For i = 2 To n
s = s + "," + Str(c(i))
Next i
Text2.Text = s
End Sub
以上程序段运行时,为了实现上述功能,划线处应填入的代码为:
① ; ②; ③。
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
①处填入的代码为。
②处填入的代码为。
For i=1 To 9
For j=10 To i+2 Step-1
If a(j) < a(j-2) Then
t=a(j): a(j)=a(j-2): a(j-2)=t
End If
Next j
Next i
数组元素a(1)到a(10)的值依次为“10,9,8,7,6,5,4,3,2,1”,执行该程序段后,数组元素a(8)中的值为( )
按纪念品价值进行分组,每组总价值不超过限定值w且最多包含两件,要求分组数最少。编写VB程序解决该问题,程序运行时,在文本框Text1中依次输入每件纪念品的价格(不超过w),以逗号分隔,在文本框Text2中输入限定值w,单击“分组”按钮,在标签Label2上输出最少的分组数。程序运行界面如图所示。
Private Sub Command1 Click()
Dim a(1 To 1000), n As Integer, w As Integer, cnt As Integer
Dim i As Integer, j As Integer, t As Integer
Dim s As String, ch As String
Dim p As Integer, q As Integer
s= Text1. Text: w= Val (Text2 Text): n=0
For i= 1 To Len (s)
ch= Mid(s, i, 1)
If ch=“,”Then
n=n+1:a(n)=t:t=0
Else
t=
End If
Next i
For i= n To 2 Step-1
For j= 1 To ‘
If a(i)< a(j+1)Then
t=a(j):a(j)=a(j+1):a(+1)=t
End If
Next j
Next i
cnt=0
p=1:q=n
Do While<p
cnt=cnt+1
If Then
p=p+1: q=q-1
Else
p=p+1
End If
Loop
If p= q Then cnt=cnt+1
Labe12 Caption=Str(cnt)
End Sub
For i=1 To
k=i
For j=i+1 To n-i+1
If a(k)>a(j)Then k=
Next j
If k<>i Then t=a(k):a(k)=a(i):a(i)=t
For j=
If a(j)< a(j+1)Then t=a(j):a(j)=a(j+1):a(j+1)= t
Next j
Next i
上述程序段3个方框处的表达式分别为( )
n = 8
For i= 1 To n
d(i)= Int(Rnd * 10)+1
Next i
For i= 2 To n -1
k = 1
For j=1 To n-i
If d(j)*k>d(j+2)*k Then
Temp=d(j):d(j)=d(j+2):d(j+2)=temp
End If
Next j
Next i
执行该程序段后,d数组各元素可能是( )
图a为初始状态,操作圈中的灯,则该灯与对面的两盏灯都会切换“开/关”状态,如图b所示。假设这些灯的编号为0到6号,“开/关”状态随机产生,并输出到列表框List1中,接着需要从中选出数盏灯进行操作,使得最后所有灯都打开(已证明方案-一定存在且唯一), 并在列表框List2中输出灯的编号。
程序采用枚举策略,一一尝试对每盏灯状态进行“切换”操作,“1”表示对当前灯进行切换,“0”表示不操作。
程序运行界面如图c所示。
Dim a(0 To 6)As Integer,b(0 To 6) As Integer
Private Sub Command1_Click()
Dim i As Integer, x As Integer, pos As Integer
Dim flag As Boolean
List2.Clear
For i = 0 To
x = i:pos = 0:flag = True
For j = 0 To 6
b(j)= a(j)
Next j
Do While x > 0
If x Mod 2 = 1 Then
b(pos)= 1 - b(pos)
b((pos + 3) Mod 7) = 1 – b((pos + 3) Mod 7)
End If
pos = pos + 1
x = x \ 2
Loop
For j = 0 To 6
IfThen flag = False:Exit For
Next j
If flag Then
pos = 0
Do While i > 0
If i Mod 2 = 1 Then List2.AddItem “第” + CStr(pos)+ “号”
i = i \ 2
pos = pos + 1
Loop
Exit For
End If
Next i
End Sub
Private Sub Form_Load() ‘随机生成初始数据
Dim i As Integer
Randomize
List1.Clear
For i = 0 To 6
a(i)= Int(Rnd * 2)
If a(i)= 1 Then
List1.AddItem “第” + CStr(i) + “号:”+ “开”
Else
List1.AddItem “第” + CStr(i) + “号:” + “关”
End If
Next i
End Sub
在使用计算机解决问题时,选择合适的算法,是有效解决问题的关键。
分析下面的问题,请选择最合适的算法:( )
猴子吃桃问题:
小猴有一天摘了若干个桃子,他非常贪吃,当天就吃掉了一半还多一个;第二天接着吃剩下的桃子一半多一个;以后每天都是如此,到了第七天吃桃子时,却发现只剩下一个。请问,小猴那天一共摘了几个桃子?
Dim a(1 To 10) As Integer
Dim n As Integer
Private Sub Command1_Click()
Dim i As Integer , j As Integer, k As Integer, temp As Integer
Dim s As String
Randomize
n = 10
For i = 1 To n
a(i) = Int(Rnd * 10) + 1
Next i
For i = 1 To n - 1
k = i
For j = i + 1 To n
If a(j) < a(k) Then
Next j
If k <> i Then
temp = a(i): a(i) = a(k): a(k) = temp
End If
Next i
s = ""
For i = 1 To n
s = s + Str(a(i))
If i < n Then s = s + ","
Next i
Label1.Caption = s
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, k As Integer
Dim length As Integer, origin As Integer
Dim s As String
k = 1:origin=1:length = 1
For i = 2 To n
If a(i) = a(i - 1) Then
k = k + 1
If k > length Then
length = k
origin =
End If
Else
k = 1
End If
Next i
s = ""
For j = origin To
s = s + Str(j)
Next j
Label2.Caption = s
End Sub
编写VB程序,实现上述算法。程序功能如下:运行程序时,在列表框List1中显示数组a中的原始数据,并在列表框List2中输出去重后的数组a中的数据,即相同的数据仅保留一个。同时在标签Label1中显示删除的数据总个数,运行效果如图所示,程序代码如下:
Const maxn=10
Dim a(1 To maxn)As Integer
Private Sub Form_Load( )
´maxn个数据在数组a中,并在列表框List1中显示
End Sub
Private Sub Command1_Click( )
Dim i As Integer, n As Integer ‘n用于存储当前查找的数字长度
Dim j As Integer, key As Integer ‘key用于存储本次查找的关键字的数据位置
key=1:n=maxn
Do While key<=n
i=n-1
Do While ‘①
i=i-1
Loop
If i=key Then ‘找到重复数据,删除;未找到,设定下一查找关键字
key=key+1
Else
For j=i To n-1
a(j)=a(j+1)
Next j
n=n-1
End If
Loop
For i= 1To n
List2.AddItem a(i)
Next i
Labell.Caption="共删除重复数据:"&___________&"个"
End Sub
def decrypt(code,key):#code:密文key: 密钥
code_ new = "
for s in code:
m= ① #按照输入的key值,做移位运算
if m<97:
②
code_ new + = chr(m)
returm code_ new
code = input(‘请输入密文:’)
key = intinput(‘请输入密钥:’)
code_ new = decrypt(code, key)
print(code_ new)
① ②
Private Sub Command1_Click( )
Dim L As Integer, R As Integer,n As Integer
x As Integer
n=Val(Text1.Text)
L=1
R=n+1
Do While
x=(L+R)\2
if 2^X+3*x-5<=n Then L=x+1
Else R=x-1
Loop
Label1.Cption=“方程2^X+3*x-5<=n的最大正整数解为:”+
End Sub
要使程序实现上述算法思想,则方框上的语句是( )
s = "AAABBBCCCCDDEFF"
i = 1: j = Len(s): Key = "H": v = ""
Do While i <= j
m = (i + j) \ 2
c = Mid(s, m, 1)
If c = Key Then Exit Do
If c > Key Then
j = m - 1: v = v & c
ElseIf c < Key Then
i = m + 1: v = v & c
End If
Loop
执行完以上程序后,v的值为( )
Const n=10
i= 1:j=n- 1
Do While j-i>= 2
m=(i+j)\2
If ⑴ Then
i= m
Else
⑵
End If
Loop
Text1.Text= Str( ⑶ )
上述程序中(1)(2)(3)划线处可选语句有:
①a(j)-a(m)=j-m
②a(m)-a(i)=m-i
③j=m-1
④j=m
⑤a(i)+1
⑥a(i)
则上述程序中(1)、(2)、(3)划线处的代码依次为( )
L=1:R=n
Do While L<=R
m=(L+R)\2
If ① Then
R=m-1
Else
L=m+1
End If
Loop
Text1.Text = ②
为实现上述功能,则程序中①、②处填写的代码是( )
key = Val (Text1. Text)
i=1:j=10
Text2. Text = "”
Do While i< = j
m = Int((i +j)/2+0.5)
If key = a(m) Then Exit Do
If key < a(m) Then j =m-1 Else i=m+1
Text2.Text = Text2.Text + Str (a (m))
Loop
数组元素a(1)到a(10)的值依次为“1,2,3,4,5,6,7,8,9,10",文本框Text1中输入的值是4,执行该程序段,文本框Text2中显示的是( )
For i=1 To 15
a(i) = i
Next i
key = Int (Rnd * 20)
i = 1:j=15:n=0
Do While i<=j
m=(i+j+1)\2
If a(m)< key Then i=m +1 Else j=m-1
n=n+1
Loop
执行该程序段后,变量n的值可能是( )
Private Sub Command1_Click()
Const n = 100
Dim ss As String, t As String, i As Integer
Dim k As Integer, p As Integer, temp As Integer
Dim s(1 To n) As Integer, f(1 To n) As Integer
Dim num(1 To n) As Integer, flag(1 To n) As Boolean
ss = Text1.Text
starttime = 480: endtime = 720 '教室可以安排活动时间为8:00到12:00
k = 0: p = 0
For i = 1 To Len(ss)
ch = Mid(ss, i, 1)
If ch <> "," Then
t = t + ch
Else
p = (k - 1) \ 2 + 1
If k Mod 2 = 1 Then s(p) = convert(t) Else f(p) = convert(t)
t = ""
End If
Next i
For i = 1 To p
num(i) = i
Next i
For i = 1 To p
List1.AddItem Str(num(i)) + " " + ff(s(i)) + " " + ff(f(i))
Next i
For i = 1 To p - 1
For j = p To i + 1 Step -1
If Then
temp = num(j): num(j) = num(j - 1): num(j - 1) = temp
temp = s(j): s(j) = s(j - 1): s(j - 1) = temp
temp = f(j): f(j) = f(j - 1): f(j - 1) = temp
End If
Next j
Next i
For i = 1 To p
If s(i) >= starttime And f(i) <= endtime Then
flag(i) = True
End If
Next i
List2.AddItem "活动号 起始时间 结束时间"
For i = 1 To p
IfThen
List2.AddItem Str(num(i)) + " " + ff(s(i)) + " " + ff(f(i))
End If
Next i
End Sub
Function convert(s As String) As Integer
'把时间格式的s转换为整数,如"08:20"转化为500。代码略
End Function
Function ff(t As Integer) As String
'把整数t转换为时间格式,如500转化为"08:20"。代码略
End Function
i=1:j=7
f=False
key=Val(Text1. Text)
Do While i<=j And Not f
m=(i+j)\2
If a(m)=key Then f=True
If a(m)>key Then i=m-1 Else i=m+1
Loop
List1. AddItem Str(i)+Str(j)+Str(m)
数组元素a(1)到a(7)的值依次为"23,42,58,66,77,83,98",运行上述程序段后,列表框List1中
显示的结果为"5 4 5",则文本框Text1中输入值的范围是( )