将数组a转换成数组c的方法描述如下:
①将数组a中的元素依次存储到数组c中,把当前数组c看作第一层;
②把第一层中的各元素进行如下处理:奇数项值不变,偶数项的值更新为自己与自己前一项的和,将更新后的数组元素看作第二层;
③把第二层中的各元素,按上述方法进行同样操作,更新后的数组元素看作第三层;
④以此类推,直到当前层中仅有一项
止。
例如x=11时,转换过程如图所示:
借助数组c,可快速计算出数组a中前x项的和.例如,数组a中前11项的和,可由表达式c(11)+c(10)+c(8)得到。表达式具体分析过程如下:
①表达式第一项为c(11);
②将下标11转换成二进制数1011,计算该二进制数最右边的“1”所对应的权值,再用11减去此权值得到10,即表达式第二项为c(10);
③按上述方法继续操作,直到计算结果等于0为止。
小龙依据上述方法设计了如下vb程序.请回答下列问题:
Dim n As Integer
Dim a(1 To 1000) As Long, c(1 To 1000) As Long
Private Sub Form_Load()
'读取n个数据,并存储到数组a中(代码略)
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, space As Integer
For i = 1 To n
c(i) = a(i)
Next i
k = 2 ‘当前层第一个偶数项的位置
space = 1 ‘当前层偶数项与前一项的间距
Do While k <= n
For i = k To n Step k
c(i) = c(i) + c(i - space)
Next i
k = k * 2
Loop
End Sub
Private Sub Command2_Click()
Dim x As Integer, sum As Long
x = Val(Text1.Text): sum = 0
Do While x <> 0
sum = sum + c(x)
Loop
Text2.Text = Str(sum)
End Sub
Function lowbit(x As Integer) As Integer
Dim temp As Integer
temp = x: lowbit = 1
Do While
lowbit = lowbit * 2
temp = temp \ 2
Loop
End Function
实现上述功能的VB代码如下。

Private Sub Command1_Click()
Dim pre(0 to 30)As Long, cur(0 to 30)As Long
Dim s As String, i As Integer, j As Integer
n = Val(Text1.Text)
′I处
For i = 1 To n
s = “”
For j = 1 To i
cur(j)=
′II处
s = s & str(cur(j))& “ ”
Next j
For j = 1 To i
pre(j)= cur(j)
Next j
Next i
Label1.Caption = s
End Sub
方框处的代码会是以下四句中的某一句:
① cur(1)=1 ②pre(1)=1 ③pre(j-1)+ per(j+1) ④pre(j-1)+ per(j)
程序中I、II方框处正确的选项是( )
For i=1To 9
For j=i To 9
a=i*j
List1.AddItem i&"*"&j&"="&a
Next j
Next i
Do While i<10
k=1
i=i+1
Do While k<10
s=s+1
k=k+i
Loop
Loop
①老年人(年龄≥60岁)比非老年人优先就诊;
②老年人按年龄从大到小的顺序就诊,年龄相同的按预约顺序就诊;
③非老年人按预约顺序就诊。
小王根据以上规则编写了一个VB程序,通过引入索引数组temp进行排序,使得age(temp(1))≥age(temp(2))≥age(temp(3))…≥age(temp(n))。如图a所示。
图a
图b
程序运行时,病人的数据显示在列表框List1中,单击“就诊排序”按钮Command1,排序结果显示在列表框List2中,程序运行界面如图b所示。
实现上述功能的VB程序如下,请回答下列问题:
Dim pname(1 To 100)As String ‘存放病人姓名
Dim age(1 To 100)As Integer ‘存放病人年龄
Dim num(1 To 100)As Integer ‘存放病人序号
Dim n As Integer
Private Sub Command1_Click( )
Dim temp1(1 To 100)As Integer, temp2(1 To 100)As Integer ‘索引数组
Dim i As Integer, j As Integer, k1 As Integer, k2 As Integer, t As Integer
k1=0:k2=0
For i=1 To n
If age(i)<60 Then
k1=k1+1
temp1(k1)=num(i)
Else
k2=k2+1
temp2(k2)=num(i)
End If
Next i
For i=1 To k2-1
For j=k2 To i+1 Step-1
If ① Then
t=temp2(j):temp2(j)=temp2(j-1):temp2(j-1)=t
End If
Next j
Next i
List2.Clear
List2.Addltem "就诊号 名单 年龄"
For i=1 To k2
List2.Addltem Str(i)&." "&.pname(temp2(i))&"r/&.Str(age(temp2(i)))
Next i
For j=1 To k1
List2.Addltem ② &" "&pname(templ(j)&" "&.Str(age(templ(j)))
Next j
End Sub
Private Sub Form_Load( )
Dim conn As New ADODB. Connection, rs As New ADODB. Recordset
Conn.ConnectionString="Provider=Microsoft. ACE. OLEDB. 12.0;DataSource="&App. Path&"\pdxt.accdb"
conn.Open
Set rs. ActiveConnection=conn
rs. Open"select*from jzmd"
n=0
List1.AddItem"预约号 名单 年龄"
Do While Not rs. EOF
③
num(n)=n
pname(n)=rs. Fields(1)
age(n)=rs Fields(2)
List1. Addltem Str(num(n))&" "&-pname(n)&." "&.Str(age(n))
rs. MoveNext
Loop
rs.Close:conn.Close
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
s1= “0123456789”: n = Len(s1)
For i=To 10
![]()
n=n-1
Next i
Text1.Text=s
方框中的代码从下列代码中选取:
①s=S+Mid(s1,x,1) ②x= Int(Rnd*n)+1 ③x =Int(Rnd*(n+ 1))
④s1=Mid(s1,1,x) +Mid(s1,x+1,n-x) ⑤s1=Mid(s1,1,x-1)+ Mid(s1,x+1,n-x)
代码顺序正确的选项是( )
sum=0
for i in range(1,6)
sum=sum+i
print(sum, i)
程序的运行结果为( )
for i in range(1,26):
If i%2==0:
c=c+1
Print(c)
上面程序运行结果是( )
Dim i As Integer, c As String, s As String, t As Integer
Dim s2 As String, pwd As String
s= Text1.Text: pwd = "71zhYEAR":s2= ":t= 0
For i= 1 To Len(s)
c= Mid(s, i, 1)
If c>= "0" Andc <= "9" Then
t=t* 10 + Val(c)
Else
s2 = s2 + Mid(pwd, tMod8 + 1, 1)
End If
Next i
Text2.Text= s2
运行该程序段,在文本框Text1中输入“20B13A8",文本框Text2输出的是( )
m = a(1)
i =2
Do While i <= 10
If m < a(i) Then m = a(i)
i =i+ 1
Loop
该程序段执行后,变量m中存储的是( )
l 路线每个点只能向右或向下
l 任何一个岔口优先向右走,右侧不通再向下走
l 一条路线中每个点只能走一次,不能重复
算法思路:探路过程中,记录每个坐标到数组lu;遇到岔路口(向右向下都通),则记录路口坐标到数组cha;遇到前方无路时,需要返回到上一个路口,标记路口右侧坐标为0;当前方无路,岔路口数组也退回到0,说明整体不通,否则根据规则走到右下为止,最后输出整体线路坐标。
实现算法的程序如下,运行结果如图所示。
回答下列问题:
Dim a(1 To 50) As Integer
Private Sub Command1_Click()
Dim i As Integer, j As Integer, zb As Integer
Dim cha(1 To 10) As Integer ‘记录一条线路中各个岔路口坐标
Dim lu(1 To 10) As Integer ‘记录路线经过的坐标
zb = 1: j = 0: lu(1) = 1: i = 1
Do While i <= 9 ‘第1个和最后1个固定,中间有9个需要路过的坐标
If zb Mod 6 <> 0 And a(zb + 1) = 1 Then ‘向右畅通
If zb + 6 <= 30 and a(zb + 6) = 1 Then ‘记录岔路口
j = j + 1
End If
zb = zb + 1
i = i + 1
lu(i) = zb
ElseIf zb + 6 <= 30 And a(zb + 6) = 1 Then ‘向下畅通
zb = zb + 6
i = i + 1
lu(i) = zb
Else ‘坐标退回到上一个岔路口
If j = 0 Then Exit Do
Do While lu(i) <> cha(j)
Loop
a(cha(j) + 1) = 0 ‘标记此路口右侧不可用
j = j - 1
End If
End If
Loop
If j = 0 Then
Text1.Text = "没有畅通道路"
Else
For i = 1 To 10
Text1.Text = Text1.Text + Str(lu(i))
Next i
End If
End Sub
Private Sub Form_Load()
End If ‘生成图形矩阵的数组a各个元素,并在列表框显示,代码略
End Sub
ans = 0: i = 1
Do While i < Int(Sqr(n))
If n / i = Int(n / i) And n / i Mod 2 = 1 Then
ans = ans + 1
End If
i = i + 2
Loop
若变量n的值为81,则执行该程序段后,变量ans的值为( )
s = Text1.Text: k = 1: maxlen = 1
For i = 2 To Len(s)
If Mid(s, i - 1, 1) < Mid(s, i, 1) Then
k = k + 1
If k > maxlen Then maxlen = k
Else
k = 1
End If
Next i
Label1.Caption = Str(maxlen)
在文本框Text1 中输入字符串“B3b8defhADot”,执行该程序段后,则标签Label1 中显示的内容为( )
s = "Errors should never pass silently.”
d={}
for ch in s:
if ch in d:
d[ch] += 1
else:
d[ch] = 1
print(d["e"])
运行该程序段,输出结果是( )
s = input('请输入数据: ')
s[0]
maxt = 0
for i in range (len(s)) :
if s[i] > s[i-1] :
t +=s[i]
if len(t) > maxt:
maxt = len(t)
ans=t
else :
t = s[i]
print (ans)
执行该程序段后,输入“12123234561”,输出的内容是 ( )
list=['a','b','c','d','e','f','g']
list1=[]
list2=[]
for i in range(7):
if i%2==0:
list1.append(list[i])
else:
list2.append(list[i])
print(list1)
print(list1)

Private Sub Command1_Click()
Dim s As String,sum As Integer
Dim i As Integer,j as Integer
s= Text1.Text
n=0
For i=1 To Len(s)
For j=i To Len(s)
List1. AddItem
n= 1+1
Next j
Next i
List1. AddItem "总共有" +Str(n)+ "个子串"
End Sub
s=input("请输入字符: ")
Max=0
c=1
for i in range(1,len(s)):
if s[i]==s[i-1]:
c+=1
if c>Max:
else:
print(Max)
程序代码如上所示,其中①和②处的应填入的代码是( )
分析:在数学运算表达式中,运算符总是置于与之相关的两个运算对象之间,在计算结果时,要考虑括号、运算符号的优先性。为了程序实现的方便,波兰逻辑学家J.Lukasiewicz提出了另一种表示法,将运算符置于其运算对象之后,没有括号,不用考虑运算符号的优先性。这种表达式称为后缀表达式,又叫逆波兰表达式。
如表达式“682-2*3÷+”是四则运算式“6+(8-2)*2÷3”的逆波兰表达式。为了处理方便, 规定表达式中的数均为小于 10 的正整数, 运算符为+ - * ÷。
⑴抽象建模
设计两个栈bds、fh,栈bds用来存放表达式,栈fh用来暂时存放运算符。从左往右扫描四则运算式,遇到数字时,入栈bds;遇到运算符号时,根据运算符号的优先级设计进栈与出栈。
四则运算式“6+(8-2)*2÷3”转换规则的模拟过程如表1所示:
表 1
结合表1的操作过程,用栈bds和栈fh记录每个操作后的栈内情况(见下图),那么在操作2中栈fh里有内容为(请从栈底到栈顶顺序书写)。
⑵设计算法
基于问题的抽象与建模,解决该问题的主要算法描述如下:
从左往右遍历四则运算式s(设中间变量为ch):
1)当ch是数字,直接入栈bds;
2)当ch是运算符:
a.若ch为左括号时,直接入栈fh;
b.若ch为右括号时,则将栈fh元素弹出,压入栈bds,直到遇到左括号(左括号只弹出,不压入栈bds);
c.若ch为其它运算符时,如果运算符ch优先级大于栈fh中栈顶元素的优先级(或栈fh为空),直接入栈fh;否则,将栈fh元素依次弹出,并压入栈bds,直到运算符ch优先级大于栈fh中栈顶元素的优先级(或栈fh为空);
3)将栈bds中元素依次出栈,即为该四则运算s的后缀表达式。
⑶编写程序
实现上述功能的 Python 代码如下,请在划线处填入合适代码。
yxj = {"+":1,"-":1,"*":2,"÷":2} #运算规则的优先级
s = input("请输入四则运算式: ")
fh = [""]*100 #存储运算符
topfh = -1
bds = [""]*100 #存储表达式
top=-1
for ch in s:
if ch.isdigit(): #字符串只包含数字则返回 True 否则返回 False
top+=1
bds[top]=ch
elif ch == "(":
topfh +=1
fh[topfh]=ch
elif ch == ")":
while True:
tmp = fh[topfh]
topfh-=1
if tmp=="(":
top+=1
bds[top]=tmp
elif ch in yxj:
if topfh==-1 or fh[topfh]=="(":
topfh += 1
fh[topfh]=ch
elif :
topfh+=1
fh[topfh]=ch
else:
while fh[topfh]!="(" and topfh!=-1:
if yxj[fh[topfh]]>=yxj[ch]:
top+=1
bds[top]=fh[topfh]
topfh-=1
else:
break
topfh+=1
while topfh!=-1:
top+=1
bds[top]=fh[topfh]
topfh-=1
print("后缀表达式:","".join(bds[:top+1]))