n=0
s=0
Do While s<=10
n=n+3
s=s+n
loop
⑴将数组a中的n个元素依次分割出若干个数据块,每个数据块有2m个元素,分割时,按尽可能大的数据块进行分割。
⑵对每个分割出的数据块进行求和,将和依次存储在数组b中。
例如:n=13,可将a(1)~a(13)依次分割成3个数据块,元素的个数分别为8、4、1。将3个数据块的和依次存储在b(1)、b(2)、b(3)中。
小明依据上述描述设计了如下VB程序,运行界面如图所示。请回答下列问题:
Const n = 13
Dim a(1 To n) As Integer Dim b(1 To n) As Integer Private Sub Command1_Click()
Dim start As Integer ‘当前未分割数据的第1个元素下标
Dim i As Integer, k As Integer, pb As Integer, left As Integer, m As Integer
'读取n个数据,依次存储到a(1)、a(2)、……a(n)中,并对数组b赋初值为 0,代码略
start = 1: left = n: m = 0
Do While 2 ^ m <= left ‘寻找第1个数据块
①
Loop
m = m - 1
pb = 1
Do While left > 0
For i = start To start + 2 ^ m - 1
②
Next i
List1.AddItem Str(2^m) + " " + Str(b(pb)) pb = pb + 1
‘改错
left = left - 2 ^ m
Do While left < 2 ^ m
m = m - 1
Loop
Loop
End Sub
① ②

控件属性设置如下:
|
对象 |
属性 |
属性值 |
说明 |
|
Form1 |
Caption |
幸运的猪 |
窗体的标题 |
|
Label1 |
Caption |
当天要杀猪的数量 |
标签显示 |
|
Label2 |
Caption |
幸运猪的原始编号 |
标签显示的文字 |
|
Text1 |
Text |
空白 |
文本框的文本 |
|
Text2 |
Text |
空白 |
文本框的文本 |
|
Image1 |
Picture |
Pig.gif |
显示的图片 |
|
Command1 |
Caption |
计算 |
按钮显示的文字 |
Private Sub Command1_Click()
Dim sum, i, pos, last, count As Integer
Dim a(1 To 100) As Integer
For i = 1 To sum
a(i) = 1 '初始状态为1表示还没被杀掉
Next i
count=0
Do while '要杀掉sum-1头猪
Pos=0
For i = 1 To sum
If a(i) <>0 Then
pos = pos + 1 'pos表示报数
If Then '报到奇数的猪被屠宰
count = count + 1
a(i) = 0
End If
End If
Next i
Loop
For i = 1 To sum
If a(i) = 1 Then
Text2.Text = Str(i)
End If
Next i
End Sub
s=0
while s<=29:
s=s+10 #循环体
print(s)
每个方块用一个代表其周围墙的数字之和(0≤p≤15)表示:1 表示西墙,2 表示北墙,4 表示东墙,8 表示南墙。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。城堡至少有两个房间。例如,图a的每个方块对应数字如图b所示。
图a
图b
程序运行界面如图c所示,现已知城堡地形对应的数字矩阵,要求出城堡一共有多少房间,最大 的房间有多大。小金利用深度优先搜索算法解决当 前问题,具体算法如下:
图c
在城堡中按行搜索,找到第一个未被搜索过方块, 以它为起点,分别按左、上、右、下的顺序向其四个方向试探,若发现一个方向上的方块是未被搜索过且可以通往的(无墙),则以这个方块为新起点,再重复上述试探。若当前方块四个方向上均无路可走,则返回上一个方块进行其他方向上的搜索,直至返回开始当前搜索的第一个方块且这个方块四个方向上也无路可走是,则本轮搜索结束。
Const m = 4 Const n = 7
Dim a(1 To m * n * 4) As Integer
Dim f(1 To m * n) As Boolean
Dim c(1 To m * n) As Integer
Private Sub Command1_Click()
Dim i As Integer, j As Integer, x As Integer, y As Integer
Dim area As Integer, max As Integer, cnt As Integer
'城堡地形对应的数字矩阵,存入 c 数组中,并显示在列表框 List1 中,f 数组初值为 false, 代码略
For i = 1 To m * n
x = c(i)
For j = 1 To 4
a((i - 1) * 4 + j) = x Mod 2
x = x \ 2
Next j
Next i
max = 0
For i = 1 To m
For j = 1 To n
IfThen
cnt = cnt + 1
area = Search(i, j)
If max < area Then
max = area
End If
Next j
Next i
Label1.Caption = "城堡一共有" + Str(cnt) + "个房间,最大的房间占" + Str(max) + "块方格."
End Sub
'从方块(x, y)开始搜索,并返回其所在房间所占方块数.
Function Search(ByVal x As Integer, ByVal y As Integer) As Integer
Dim i As Integer, j As Integer, sum As Integer, r As Integer, c As Integer
Dim pre(1 To m * n) As Integer '记录当前房间搜索的路径
Dim row(1 To 4) As Integer, col(1 To 4) As Integer
row(1) = 0: row(2) = -1: row(3) = 0: row(4) = 1
col(1) = -1: col(2) = 0: col(3) = 1: col(4) = 0
sum = 1: j = 1: pre(1) = x * 10 + y
f((x - 1) * n + y) = True
Do While True
For i = 1 To 4
r = x + row(i): c = y + col(i)
If r >= 1 And r <= m And c >= 1 And c <= n Then
If f((r - 1) * n + c) = False AndThen
sum = sum + 1
x = r: y = c
f((x - 1) * n + y) = True
j = j + 1
pre(j) = x * 10 + y
Exit For
End If
End If
Next i
If i > 4 Then
If j = 0 Then
Exit Do
x = pre(j) \ 10: y = pre(j) Mod 10
End If
Loop
Search = sum
End Function
Dim a(1 To 10) As Integer
s = "8+9+10=": n = 1
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "0" And ch <= "9" Then
a(n) = a(n) * 10 + Val(ch)
Else
If a(n) > 0 Then n = n + 1
End If
Next i
Text1.Text = Str(n)
数组a各元素的初始值都为0,若执行该程序后,在文本框Text1中显示的值为( )
原字符串8个字符为一段,分成若干段进行重排处理,尾段剩余字符(个数小于8)为独立段不做处理。
重排规则:从起始段第1个字符开始,从1开始数数,数到m时取出该位置上的字符,拼接到新字符串。然后,从下一个位置继续从1开始数数,数到m时再次取出相应位置上的字符,拼接到新字符串。当数到每段的最后一个字符时,重新从该段首第一个没有取掉的字符继续数数。重复上述操作,直至段内8个字符被取完。注:当某段中的7个字符被取出后,该段最后一个字符不需要数数,直接取出拼接到新字符串即可。
用以上方法逐段取字符,直至除独立段之外的其他字符取完。
独立段字符个数小于8,不需要重排,直接拼接到新字符串的尾部即可。
实现该功能的VB程序功能如下:程序运行时从文本框Text1中输入一段字符串,在文本框Text2输入正整数m,单击“确定”按钮Command1,对字符串按上述方法重排后在文本框Text3中显示(每段以逗号分隔)。程序运行界面如下:

Private Sub Command1_lick( )
Dim s1 As String, s2 As String
Dim i As Integer, sum As Integer, ed As Integer, n As Integer
Dim m As Integer
s1 = Mid(Text1. Text, 1, Len(Text1. Text)- n)
m = Val(Text2. Text)
s2 = " "
' 字符重排顺序
sum = 0 : i = 1 : ed = 8
Do While Len(s1)< > 0
sum = sum + 1
If sum = m Then
s2 = s2 + Mid(s1, i, 1)
s1 = Mid(s1, 1, i-1)+ Mid(s1, i+1, Len(s1)-i)
ed = ed – 1
sum = 0
Else
i = i + 1
End If
If ed = 1 Then
s2 = s2 + Mid(s1, 1, 1)+ ", "
ed = 8
i = 1
ElseIf Then
i = 1
End If
Loop
' 处理独立段
If n < > 0 Then s2 = s2 + Mid(Text1. Text, Len(Text1. Text)- n + 1, n)+ ", "
Text3. Text = s2
End Sub
则下列程序第3行的横线应该填( )
1)用数组mab分别记录1~96个字符的ASCII值,用数组zm记录对应字符在密码本中位置,如mab(9)=65,表示密码本中第9个字符是“A”,则对应的zm(65)=9;
2)把密钥中每个字符的ASCII值的各个数字进行累加(如Hi分别为(7+2)+(1+0+5)),将累加的和除以9取余数后加7,作为将密码本转换成二维表的列数;
3)每个明文在转换后二维表中位置作为密文,该位置是用十六进制表示的行号和列号。
程序运行的界面如下图所示:
实现上述功能的VB程序如下,请回答以下问题:
Dim Mab(96) As Integer '存储密码本中每个字符的ASCII值
Dim zm(127) As Integer '存储ASCII值32至127的字符在密码本数组mab中的下标
Private Sub Form_Load()
'产生密码本及96个字符在密码本中位置,代码略。
End Sub
Function p(s As String) As Integer
Dim i As Integer, t1 As Long
Dim sum As Integer, s1 As String
t1=0
i=1
Do While i<=Len(s)
s1=Mid(s, i, 1)
t1=Asc(s1)
i=i+1
Loop
p=sum Mod 9+7
End Function
Private Sub Command1_Click()
Dim i As Integer, t As Integer, hang As Integer
Dim s As String, s1 As String, Lie As Integer
List1.Clear
s1=Text1.Text
t=p(s1)
Label5.Caption= “将密码本换成一张”+Str(t)+ “列的二维表”
i=1
Do While i<=96
s=s+Chr(Mab(i))+ “”
If i Mod t=0 Or i=96 Then
List1.AddItem s
s= “”
End If
i=i+1
Loop
wz= “123456789ABCDEF”
s=Text2.Text
For i =1 To Len(s)
s1=Mid(s, i, 1)
hang=(t1-1)\t+1
lie=(t1-1) Mod t+1
s2=
Next i
Text3.Text=s2
End Sub
例如:若n=4,4个仓库中的疫苗数分别为50、13、80、27。若m=2,最小差值为10;若m=3,最小差值为40。
编写VB程序模拟上述功能,在文本框Text1中输入n(n≤15),在文本框Text2中输入m(m≤4),随机生成n个两位正整数,在列表框List1中输出。单击“计算”按钮Command1,在文本框Text3中输出最小差值,在列表框List2中输出每个国家获得疫苗的方案。程序运行界面如图所示。
Private Sub Command1_Click()
Const maxn = 15
Dim n As Integer, i As Long, j As Long, k As Long, p As Integer, m As Integer
Dim a(1 To maxn) As Long, f(1 To maxn) As Long
Dim s(1 To maxn) As String, max As Long, min As Long, ans As Long, ansi As Long
n = Val(Text1.Text): m = Val(Text2.Text)
List1.Clear: List2.Clear: Randomize
For i = 1 To n
①
List1.AddItem Str(a(i))
Next i
ans = 10000
For i = 1 To m ^ n '枚举所有的分配方案
For j = 1 To m
f(j) = 0
Next j
j = i: max = 0: min = 10000
For k = 1 To n
f(p) = f(p) + a(k)
j = j \ m
Next k
For k = 1 To m
If f(k) > max Then max = f(k)
If f(k) < min Then min = f(k)
Next k
If ② Then
ans = max - min
③
End If
Next i
Text3.Text = Str(ans)
For i = 1 To n
j = ansi Mod m
s(j + 1) = s(j + 1) + Str(a(i))
ansi = ansi \ m
Next i
For i = 1 To m
List2.AddItem s(i)
Next i
End Sub
① ② ③
Dim a(1 To 6) As Integer
For i=1 To 6
a(i)= Int(Rnd * 4)+1
If a(i) Mod 2=0 And i Mod 2=0 Then
a(i)=2 * a(i) - a(i - 1)
End If
s=s+Str(a(i))
Next i
执行该程序段后,变量s的值可能是( )
a=[]
for i in range(100):
if i%10==0:
a.append(i)
则程序执行后,a[1]和a[-1]的值分别是( )
……
NEXT B
B . FOR A= 1 TO 3……
NEXT
C . FOR A = 9……
NEXT A
D . FOR A= 6 TO 20for i in range(50 , 1 , -1 ):
print(i)
则输出的最后一个元素值是( )
i=1:sum==0
For j=1 To Len(s)
sum= sum+ Val(chl)
Do While sum > n
ch2= Mid(s,i,1)
i=i+1
Loop
If sum=n Then List1. AddItem (3)
Next j
上述程序段3个方框处的表达式分别为( )
s ="wantsfood"
t = Mid(s, Len(s), 1)
max=0
For i=Len(s)-1 To 1 Step-1
If Mid(s, i + 1, 1) >= Mid(s,i, 1) Then
t = Mid(s, i,1) + t
If Len(t) >= max Then max = Len(t): ans= t
Else
t = Mid(s, i, 1)
End If
Next i
执行该程序段后,变量ans和max的值分别是( )
①填空完善该程序,实现功能:尝试求解Z的近似值(求解关系式为:
②编写完成后原名保存并关闭应用软件。
(π\4=1-1\3+1\5−1\7+⋯)
sum,a,b,t=0.0,1,1.0,1.0 #给各参数依次赋值
while b<1000:
sum=sum+
b=
a=
t=a/b
pi =
print("pi的值是{:.20f}".format(pi)) # 输出20位浮点型数值
Dim a(5) As Integer
Dim i As Integer, j As Integer, k As Integer
For i=0 To 5
a(i) = (Int(Rnd()*5)+1)*2+(iMod 2)
Next i
For i=2 To 5
j=i
k = a(j)
Do While a(j-1)<k And j>1
a(j)=a(j-1)
j=j-1
Loop
a(j) = k
Next i
执行以上程序后,数组a可能的值是( )
LET S=0
FOR I=1 TO 99 STEP 2
S=S+I
NEXT I
PRINT "S=";
END