i=1:j=6:flag=False key=Val(Text1.Text)
Do While i<=j And flag = False
m=(i+j)\2
If key=a(m) Then flag=True
If key<a(m) Then j=m-1 Else i=m+1 Loop
数组元素a(1)到a(6)的值依次为“7,9,15,27,34,51”。文本框Text1中输入“27”后运行该程序,运行结束后,下列说法不正确的是( )
⑴预处理。用数组a存放不同的分值,数组b存放相同分数的人数,数组s存放高于此分数的人数,数组下标表示名次。依次从数据库读取每个学生的成绩(数据库中每个学生的成绩已降序存储,即从高到低排列),当读入数与前一个数相同时,该名次的人数加1,当读入数与前一个数不同时,名次加1,即数组下标加1,存储当前分数,求高于本分数的人数并存储。
举例:如果数据库中有一组成绩(降序):95,95,93,93,92,91,90,按上述算法处理,三个数组的最终结果如图所示。
数组/下标 | 1 | 2 | 3 | 4 | 5 |
a | 95 | 93 | 92 | 91 | 90 |
b | 2 | 2 | 1 | 1 | 1 |
s | 0 | 2 | 4 | 5 | 6 |
⑵对需要查找的成绩二分查找。读入需要查找的成绩x,在数组a中二分查找成绩,若找到,输出名次、相同分数的人数和高于本分数的人数;若找不到,输出“查无此分”。
程序代码如下,在横线处填入合适的代码。
Dim rank As Integer
Dim a(1 to 1000) As Integer ‘存放不同的分数值
Dim b(1 to 1000) As Integer ‘存放相同分数的人数
Dim s(1 to 1000) As Integer ‘存放高于此分数的人数
rank=0
Private Sub Form_Load()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim tmp As Integer, n As Integer
tmp=-1: n=0
conn.ConnectionString=“provider=Microsoft.ACE.OLEDB.12.0;data source=“App.Path+”Score.accdb”
conn.open
Set rs.ActiveConnection=conn
rs.open “Select * from score”
n=0
Do While Not rs.EOF
n=n+1
mark=rs.fields(“成绩”)
If mark=tmp Then ‘当前读入分数与上一个分数相同,则对应名次的人数增加1
b(rank)=b(rank)+1
Else ‘当前读入分数与上一个分数不同时
rank= ‘名次增加1
a(rank)= ‘存储当前分数到数组a中
s(rank)= ‘求高于本分数的人数并存储至数组s
b(rank)=1 ‘将自身统计入同分人数
End If
‘更新上一个分数
rs.Movenext
Loop
End Sub
Private Sub Command1_Click()
Dim x As Integer, low As Integer, high As Integer, mid As Integer
x=Val(Text1.Text)
low=1: high=rank
mid=(low+high)\ 2
Do While low <=high and
mid=(low+high)\ 2
If a(mid) < x Then
high=mid-1
Else
low=mid+1
End If
Loop
If a(mid)=x Then
Label1.Caption=“名次:“+mid+”同分人数:“+b(mid)+”高于此分人数:”+s(mid)
Else
Label1.Caption=“查无此分”
End If
End Sub
现有三次方程y=5x^3-55x^2+170x-130,其函数图象如图所示:
观察该函数图象发现函数有一实根在区域(1.2)之间,因此我们取两者的中点m=(1+2)/2代入方程进行检测发现f(1.5)=18.125。因为f(1.5)>0,因此区间应该往左移动,得下一个区间(1,1.5)然后继续进行检测。如果区间差值≤误差率,则认为该中点是方程的根。根据上述方法描述设计一个VB求解程序的根,要求单击求解按钮Command1,在文本框Text1中显示方程的根,部分程序如下。
PrivateSubCommand1_Click()
DimiAsDouble,jAsDouble,mAsDoubleDimrAsDouble,yAsDouble
i=1:j=2:y=1:r=j-iDoWhiley<>0Andr>0.00001
m=(i+j)/2
y=
Ify>0Then
j=m
ElseIfy<0Then
i=m
EndIf
Loop
Text1.Text=m
EndSub
i = 1: j = 8: s =“”
key =“sheep”
Do While i < =j
m =(i+j)\2
If key = a(m) Then
s = s + “M”
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(8)的值依次为“tiger, snake, sheep, rabbit, pig, muse, monkey, dog”,该程序段执行后,文本框Text1中显示的内容是( )
小王编写了一个VB程序,功能如下:在列表List1框中显示i、a(i)、b(i)、a(b(i))在文本框Text1中输入要查找的数据,单击“查找”按钮Command1后,在标签Label3中显示该数据在a数组中的位置。程序运行界面如图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Dim a(1 To 8)As Integer, b(1 To 8)As Integer
Dim n As Integer
Private Sub Form_ Load ( )
‘ n = 8, 对分查找前的8个数据存储在a数组中,每个数据的位次存储在b数组中
‘ 在列表框List1中显示数组下标、a数组、b数组、a(b(i))数组
‘ 代码略
End Sub
Private Sub Command1_ Click ( )
Dim i As Integer, 3 As Integer, k As Integer
Dim m As Integer, key As Integer
key = Val (Text1. Text)
i = 1: j = n
Do While i < = j
m = (i+j) \2
k = ‘①
If key = k Then
Exit Do
Eelseif key > k Then
i = m+1
Else
j = m-1
End if
Loop
If i > j Then
Label13. Caption = “该数据不存在”
Else
Label13. Caption = ‘②
End If
End sub
① ②
请在划线处填入合适代码。
Dim a(1 To 10) As Integer
Private Sub Form_Load()
'产生10个升序的随机数并显示在Label1,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, m As Integer, k As Integer
Dim x As Integer, f As Boolean, s As String
x=Val(Text1.Text)
i=1: j=10: f=False
Do While ①
m=(i+j)\2
If a(m)=x Then
f=True
ElseIf ② Then
i=m+1
Else
j=m-1
End If
Loop
If f=True Then
For k=m To 9
③
Next k
For k=1 To 9 '逐个显示删除后的数组元素
s=s+Str(a(k))+ ""
Next k
Else
s="该数没有找到"
End If
Label2.Caption=s
End Sub
① ② ③
Dim a(1 To 10) As Integer
Dim i As Integer, j As Integer
Dim key As Integer
i = 1: j = 10: n = 0
Randomize
key = Int(Rnd * 10) * 2 + 1
Do While i <= j
m = Int((i + j) / 2 + 0.5)
If key = a(m) Then
Exit Do
ElseIf key > a(m) Then
j = m - 1: n = n - 1
Else
i = m + 1: n = n + 1
End If
Loop
Text1. Text = Str (n)
已知数组元素a(1)至a(10)的值依次为20,19,17,16,14,11,8,5,2,0若执行该程序后,文本框Text1中显示的内容不可能是( )
def f(x):
#定义方程
return x**3-x**2+x-1
a=float(input("请输入解区间的左边界:"))
b=float(input("请输入解区间的右边界:"))
while abs(b-a)>1e-6:
x0=(a+b)/2
if:
b=x0
if:
a=x0
if:
break
print("解为:",x0)
input("运行完毕,请按回车键退出...")
For i = 1 To 6
a(i) = Int(Rnd * 20) + 1: b(i) = i
Next i
For i = 1 To 5
For j = i+1 To 6
If a(b(i))>a(b(j)) Then
t = b(j): b(j) = b(i): b(i) = t
End If
Next j
Next i
i = 1 : j = 6: s="" : Key = Val(Text1.Text)
Do While i <= j
m = (i + j) \ 2
If Key = a(b(m)) Then Exit Do
If Key < a(b(m)) Then j = m - 1 Else i = m + 1
s = s + Str(m)
Loop
Text2.Text = s
在文本框Text1中输入10,运行以上程序段后,文本框Text2中显示的内容为 3 5 4,则 a 数组中 a(1)到 a(6)各元素的值可能的是( )
Key=Val(Text1.Text)
i=1:j=n*2:flag=False
Do While i+1<=j And Not flag
m=(i+j)\2
If Then m=m-1
If a(m)=Key or a(m+1)=Key Then
Flag=True
Elseif a(m)>key Then
Else
End if
Loop
If a(i)=Key Or a(j)=Key Then flag=True
If flag Then Label1.Caption=“yes” Else Label1.Caption=“no”
划线处的代码正确的是( )
n=10:k =Val(Text1.Text)
i=0:j= ①
Do While i<j
m =(i+j+1)\2
If k<a(m) Then j=m-1 Else i= ②
Loop
L= ③
Label1.Caption =">"+Str(k)+"的数据位置为:"+Str(L)
上述程序段横线①②③处的语句依次为( )
key = Val(Text1.Text): cnt=10
For i = 1 To cnt - 1
n = key - a(i)
L = i + 1: R = cnt
Do While L <= R
m = (L + R) \ 2
If a(m) = n Then Exit Do
If a(m) > n Then R = m - 1 Else L = m + 1
Loop
If L <= R Then Text2.Text = Str(key - a(m)) + "," + Str(a(m))
Next i
在数组a(1)~a(10)中存储的数据依次为“1,4,9,16,25,36,49,64,81,100”,在Text1中输入一个不大于200的数,执行该程序后,Text2中显示的内容可能是( )
原1-7号男生身高 |
171 172 180 174 176 179 178 |
筛选排序后序列 |
171 172 174 176 178 179 180 |
“造型设计”后序列 |
180 178 174 171 172 176 179 |
王林同学用VB编写模拟“节目造型”程序,功能如下:从数据库中导出所有学生编号、性别和身高数据;单击“筛选排序”按钮Command1,选出“男生”且按身高升序排列显示在文本框Text1中;单击“设计造型”按钮Command2,根据身高仿“V”字的造型进行有序排列,并将结果显示在文本框Text2 中。程序运行界面如图所示。举例说明如下:
Const n = 7
Dim h2(1 To n) As Integer
Dim height1(1 To n) As Integer, height 2 (1 To n) As Integer
Dim i As Integer, j As Integer, temp As Integer
Dim sex(1 To n) As Boolean ' 男生sex=true
Private Sub Form_Load()
'n名学生的身高和性别由数据库导出,分别存储在数组height1和sex中,代码略!
End Sub
Private Sub Command1_Click()
For i = 1 To n - 1
For j = n To i + 1 Step -1
IfThen
temp = height1(j): height1(j) = height1(j - 1): height1(j - 1) = temp
End If
Next j
Next i
For i = 1 To n
Text1.Text = Text1.Text + " " + Str(height1(i))
Next i
End Sub
Private Sub Command2_Click()
Dim left, right As Integer, i As Integer, mid As Integer
mid = Int((1 + n) / 2)
left = 0: right = 0
For i = 2 To n Step 2
right = right + 1
height2(mid + right) = height1(i)
left = left + 1
Next i
For i = 1 To n
Text2.Text = Text2.Text +“ “ + Str(height2(i))
Next i
End Sub
为实现以上功能,请在画线处填写正确代码。
i=1: j=6: n=0: f= False
key=Val(Text1. Text)
Do While i < = j And f = False
n=n+1
m=(i+j)\2
If key=d(m) Then f = True
If key < d(m) Then j = m-1 Else i=m+1
Loop
数组元素d(1)到d(6)的值依次为“13,18,25,30,35,59”。文本框Text1中输入33后运行该程序,运行结束后下列说法不正确的是( )
另外为了公平,学校决定统一定价,使得最终价格能够让最多对学生成功进行交易。若有多个价格满足条件,则取满足条件的最高价。请你帮助校方完善VB程序,编程计算这批物品的最终定价。
例如,有6个学生打算卖出物品,他们的预期价格如图1所示。
卖方编号 |
1 |
2 |
3 |
4 |
5 |
6 |
预期价格 |
30 |
32 |
31 |
33 |
29 |
35 |
图1
另一有6个学生打算买入物品,他们的预期价格如图2所示。
买方编号 |
1 |
2 |
3 |
4 |
5 |
6 |
预期价格 |
34 |
31 |
29 |
32 |
33 |
31 |
图2
若分别以31元或32元的价格成交,都有3对学生交易成功,故最终定价为32元。
程序运行时,从外部数据库中输入买卖双方价格并显示到列表框List1和List2中,单击命令按钮Command1进行计算,并将最终的计算结果输出到标签Label3中,程序运行界面如图3所示。
Dim n As Integer, m As Integer
Dim a(1 To 20) As Integer, b(1 To 20) As Integer
Private Sub Form_ Load()
'读取卖家人数n以及最低卖出价格,存入数组元素a(1)到a(n)中;
'读取买家人数m以及最高买入价格,存入数组元素b(1)到b(m)中;
'代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, L As Integer, R As Integer
Dim ml As Integer, m2 As Integer, sI As Integer, s2 As Integer
Dim price1 As Integer, price2 As Integer
Dim tot1 As Integer, tot2 As Integer
Dim mini As Integer, maxi As Integer
mini = a(1): maxi = ' mini 和maxi分别为可交易的最低价和最高价
For i=2 To n
If mini > a(i) Then mini = a(i)
Next i
For i=2 To m
If maxi < b(i) Then maxi = b(i)
Next i
L=mini:R=maxi
Do While L<R
s1 =0:s2= 0
m1=(L+R+1)\2
For i=1 To n
If a(i)<=m1 Then s1=s1+1
Next i
For i=1 To m
If b(i)>=m1 Then s2=s2+1
Next i
If s1>s2 Then Else L=m1
Loop
price1=L: tot1 = s1 'price1和tot1分别为价格和交易人数
L=mini:R=maxi
Do While L<R
s1 =0:s2=0
m2=(L+R)\2
For i =1 To n
If a(i) <= m2 Then s1=s1 + 1
Next i
For i=1 To m
If b(i) >= m2 Then s2=s2+1
Next i
If s1<s2 Then L=m2+1 Else R=m2
Loop
price2 = L: tot2 = s2 ' price2和tot2分别为价格和交易人数
If Then
Label3.Caption ="最终定价为" + Str(price1) + "元"
End If
End Sub
fruit=["pear","apple","orange"]
n=len(fruit)
ans=1
i=0
while i<=n-1:
if len(fruit[i])%2==0:
ans=ans*2
else:
ans=ans*2+1
i=i+1
print(ans)
执行该程序段后,输出的结果是 ( )
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
则方框处语句依次是( )
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
上述程序段运行后,下列表达式正确的是( )
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(3) )
上述程序中(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)划线处的代码依次为( )