专项测试九 简单数学方法
1.用蒙特卡洛法求圆周率π的近似值。下列程序是使用随机函数Rnd,根据x2+y2≤1判断落点是否在圆内来求π的近似值。其中,总共投点n次,统计落点在单位圆的点数为s,则
4s/n的值即为所求的π值。具体功能如下:在文本框Text1中输入n,单击“计算”按钮Command1,结果显示在文本框Text2中。程序运行界面如图所示。
蒙特卡洛法又称统计模拟法,是一种使用随机数(或伪随机数)对模拟实验数据进行统计计算从而得出结论的计算方法。具体方法为:用[0,1)之间的2个随机数,根据x2+y2≤1判断点(x,y)是否在圆内来求π的近似值。
(1)要使程序运行时,清空文本框Text1中的内容,可在Form_Load事件过程中添加语句________(单选,填字母:A. Text1.Text=“空” / B.Text.Text1=“ ” / C.Text1.Text=“ ” )。
(2)实现上述功能的VB程序如下,请在程序划线处填入合适的代码。
Private Sub Command1_Click()
Dim i As Long, n As Long, s As Long
Dim a As Double, b As Double, c As Double
Randomize
n = Val(Text1.Text)
i = 1
s = 0
Do While i <= n
a = Rnd: b = Rnd
________①________
If c <= 1 Then
________②________
End If
i = i + 1
Loop
Text2.Text =________③________
End Sub
(3)随着n的增大,π的精确度变化趋势为__________(单选,填字母:A.不变 / B.变高 / C.变低 / D.无法预测)。
解析 本题主要考查的是使用蒙特卡洛法求圆周率π的近似值。根据蒙特卡洛法的算法可知,程序划线①处的语句为c=a^2+b^2 ,也可写作c=a*a+b*b,划线②处的语句为统计落点在单位圆的点数,因此此处代码为s=s+1;4s/n的值即为所求的π值,因此③处的代码为Str(4*s/n)。(3)随着n的增大,π的精确度变化趋势为变高。
答案 (1)C (2)①c=a^2+b^2或 c=a*a+b*b
②s=s+1 ③Str(4*s/n) (3)B
2.下列VB程序实现如下功能:程序运行时,在文本框Text1和Text2中分别输入x和n的值,单击命令按钮Command1后,调用函数f计算s的值,并在文本框Text3中显示计算结果。
s=x+++…+。请在划线处填入合适的代码。
Function f ( x As Single,n As Integer )As Single
Dim sum As Single,i As Integer,t As Single
sum = 0: t = 1
For i = 1 To n
t = t * x / i
sum = ______①______
Next i
f = sum
End Function
Private Sub Command1_Click ( )
Dim x As Single,n As Integer,s As Single
x = Val ( Text1.Text ): n = Val ( Text2.Text ): s = f ( x , n )
Text3.Text =______②______
End Sub
答案 ①Sum+t ②Str(s)
3.分解质因子。一个非素数的正整数可以表示成它的质因子(“1”与其本身除外)的乘积。输入一个整数N,求它所有的质因子以及每个因子出现的次数,最后显示乘积表达式。例如:整数150=2×3×5×5,所以它的质因子是2,3,5,次数分别是1次,1次,2次。
具体功能如下:在文本框Text1中输入一个数,单击“计算”命令按钮Command1,在列表框List1中显示该数的质因子及相应的次数,并显示乘积表达式。程序运行时的界面如下图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim a(1 To 100) As Integer ′数组a存放该整数的质因子出现的次数
Dim i As Integer, m As Integer, n As Integer, k As Integer, s As String
n = Val(Text1.Text)
m = n
k = Int(Sqr(n))
For i = 2 To k
a(i) = 0
Next i
For i = 2 To k
Do While n Mod i = 0
′①
n = n i
If Then ′②
s = s + Str(i) + “×”
Else
s = s + Str(i)
Exit For
End If
Loop
Next i
List1.AddItem “质因子” & “ ” & “次数”
For i = 2 To k
If a(i) < > 0 Then List1.AddItem Str(i) & “ ” & Str(a(i))
Next i
List1.AddItem Str(m) + “=” + s
End Sub
程序中加框①处应改正为____________________________________________;
加框②处应改正为________________________________________________。
解析 本题考查VB程序的综合能力。①处语句表示计算并存储质因子i出现的次数,质因子i出现的次数存储在数组元素a(i)中,因此①处语句应改为a(i) = a(i) + 1。②处语句表示对乘积表达式的处理,当n =1时表示已求出整数n的所有质因子,表达式最后无乘号,只需将质因子拼接在字符串s中即可;当n< >1或n>1时,将质因子拼接在字符串s后还需增加一个乘号。
答案 ①a(i) = a(i) + 1 ②n < > 1或n > 1
4.尼克斯彻定理: 任何一个大于等于1的整数的立方等于一串连续奇数之和,如:13 =1,
23 =3+5,33 =7+9+11。编写一个VB程序验证尼克斯彻定理,程序运行时,在文本框Text1中输入一个大于等于1的整数,单击“验证”按钮Command1,在文本框Text2中显示验证结果,运行界面如下图所示。
实现上述功能的 VB 代码如下,其中加框处代码有错,请改正。
Private Sub Command1_Click()
Dim n As Integer, i As Integer, t As Integer, sum As Long, s As String
n = Val(Text1.Text)
For i = 1 To n ^ 3 Step 2 ′ 变量 i 表示连续奇数的首个整数
sum = 0 : t =i : flag = False
Do While sum <= n^3 And flag = False
sum = sum + t
′(1)
If sum = n ^ 3 Then flag = True
Loop
If flag = True Then Exit For
Next i
s = Str(n) + “^” + Str(3) + “=”
Do While sum > 0
′(2)
If sum = 0 Then
s = s + Str(i)
Else
s = s + Str(i) + “+”
End If
i = i + 2
Loop
Text2.Text = s
End Sub
程序中加框(1)处应改正为_____________________________________________;
加框(2)处应改正为_________________________________________________。
答案 (1)t=t+2 (2)sum=sum-i
5.猴子选大王。有n(n≤100)只猴子举行选大王大会,由于大家谁也不服谁,因此有猴子倡议进行玩游戏的方式来选出大王。首先将n只猴子进行随机编号(编号为1到n,猴子编号不重复),然后产生一个随机数k,游戏规则如下:将n只猴子按编号从小到大的顺序围成一圈,并从编号为1的猴子开始报数(1,2,3……),报到k的猴子出圈(出圈即被淘汰);接着再由出圈的猴子的下一只猴子重新开始报数(1,2,3……),报到k的猴子又出圈,如此继续,直到圈中只剩下一只猴子,它就是猴子大王。要求依次输出出圈的猴子的编号及猴子大王的编号。
例如n=8,k=6,则依次出圈的猴子的编号为:6、4、3、5、8、7、2,最后剩下的猴子的编号为1,即猴子大王的编号为1号。
程序运行时,在文本框Text1中在输入猴子的总数n,单击“产生随机数k”按钮Command1将生成一个随机整数k(1≤k≤n),并在标签Label3中显示k的值,单击“选大王”按钮Command2后,将在文本框Text2中显示依次出圈的猴子的编号,在标签Label6中显示大王的编号。程序运行结果如图所示。
实现上述功能的VB程序如下,请在划线处填入合适的代码。
Dim k As Integer, n As Integer
Private Sub Command1_Click()
Randomize
n = Val(Text1.Text)
k = Int(Rnd * n) + 1
Label3.Caption = Str(k)
End Sub
Private Sub Command2_Click()
Dim a(1 To 100) As Integer ′a(i)=1表示编号为i的猴子在圈上,a(i)=0表示出圈
Dim b(1 To 100) As Integer ′数组元素b(i)=x,表示第i只出圈的猴子的编号为x
Dim i As Integer, st As String, j As Integer
Dim p As Integer, sum As Integer ′p表示出圈的猴子数,sum表示报数
For i = 1 To n
a(i) = 1
Next i
p = 0
j = 0
Do While p < > n-1
________①________
Do While sum < k ′依次报数,直到报到k为止
j = j + 1
If j > n Then j = 1 ′报数至最后时,将重头继续报
sum = sum + a(j)
Loop
a(j) = 0: p = p + 1
________②________
Loop
For i = 1 To p
st = st + Str(b(i))
Next i
Text2.Text = st
i = 1
Do While a(i) < > 1
i = i + 1
Loop
Label6.Caption =________③________
End Sub
解析 变量sum表示每次的报数,一旦有猴子出圈时,将做两个事情:一是记录出圈的猴子的编号及出圈的序号,二是重新进行报数,即变量sum需清零。因此①处应填入的语句为sum = 0,②处应填入的语句为b(p) = j。最后将留在圈上的猴子编号显示在标签Label6上,a(i)< >1表示留在圈上,因此代码中最后的Do While循环停止时的i的值,即为最后剩下的猴子的编号,即为猴子大王,因此③处应填入的语句为Str(i)。
答案 ①sum=0 ②b(p)=j ③Str(i)
6.在平面直角坐标系中,在给定线段AB中寻找一点X,使得X到给定的P点距离最短,求出其最短距离。
寻找点x的算法如下:
(1)取AB线段1/3处的点t1,2/3处的点t2;
(2)计算t1到P点距离ans1,t2到P点距离ans2;
(3)如果t1和t2重合,此时重合的点就是所求的点,ans1就是所求的距离,算法结束;否则,如果ans1
(1)根据本题算法,若输入的A(0,0),B(100,100),P(100,0),所求的最短距离为________。
(2)实现上述功能的VB程序如下,请在程序划线处填入合适的代码:
Dim ax As Double, ay As Double, bx As Double, by As Double, px As Double, py As Double
Dim t1x As Double, t2x As Double, t1y As Double, t2y As Double, ans1 As Double, ans2 As Double
′函数dis(x1, y1, x2, y2)的功能是求点x1和x2间的距离
Function dis(x1 As Double, y1 As Double, x2 As Double, y2 As Double)
dis = Sqr((x1 - x2) * (x1 - x2) + ____①____)
End Function
Private Sub Command1_Click()
ax = Val(Text1.Text)
ay = Val(Text2.Text)
bx = Val(Text3.Text)
by = Val(Text4.Text)
px = Val(Text5.Text)
py = Val(Text6.Text)
Do While True
′(t1x,t1y) 为线段1/3处点坐标
t1x = (2 * ax + bx) / 3
t1y = (2 * ay + by) / 3
′(t2x,t2y) 为线段2/3处点坐标
t2x = (ax + 2 * bx) / 3
t2y = (ay + 2 * by) / 3
ans1 = dis(t1x, t1y, px, py)
ans2 = dis(t2x, t2y, px, py)
′ t1和t2重合,循环结束
If Abs(t1x - t2x) < 0.001 And Abs(t1y - t2y)<0.001 Then Exit Do
If ____②____ Then
bx = t2x :by = t2y
Else
ax = t1x :ay = t1y
End If
Loop
Label8.Caption = Str(____③____)′取整数,要求四舍五入
End Sub
答案 (1)71 (2)①(y1 - y2) * (y1 - y2)
②ans1 < ans2 ③Int(ans1+ 0.5)或Int(ans2+ 0.5)
7.领礼物。圣诞节到了,教室里放满了礼物,大家站在同一位置即原点(0,0)处,根据自己拿礼物的序号轮流去拿礼物,每个人只能拿离自己最近的礼物,每件礼物的位置用坐标(x,y)表示。如果有多个礼物离你的距离相等(精确到小数后二位)且最近,则这些礼物都归你所有。
程序运行时,在文本框Text1中输入共有礼物数n,单击“读取数据”按钮Command1,将从数据库gift.accdb中读取n个礼物的信息存储在相应的数组中,并显示在列表框List1中;在文本框Text2中输入轮到你拿礼物的序号(即第几个拿),单击“计算”按钮Command2,则在列表框List2显示你获得的礼物信息,并在列表框List2最后一行显示获得的礼物总数。程序运行界面如图所示。
实现上述功能的VB程序代码如下,请回答下列问题。
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim bh(1 To 100) As String ′数组bh存储礼物的编号
Dim x(1 To 100) As Single ′数组x存储礼物的横坐标
Dim y(1 To 100) As Single ′数组y存储礼物的纵坐标
Dim dist(1 To 100) As Single ′数组dist存储礼物到原点的距离
Dim n As Integer ′变量n表示礼物数
Private Sub Command1_Click()
Dim i As Integer, q As Integer
conn.ConnectionString = “Provider = Microsoft.ACE.OLEDB.12.0;DATA Source=”&App.Path& “gift.mdb”
conn.Open
Set rs.ActiveConnection = conn
rs.Open “list”
List1.AddItem “编号” + “ x” + “ y” + “ dist”
n = Val(Text1.Text)
q = 0
Do While Not rs.EOF And q q = q + 1
bh(q) = rs.Fields(“bh”)
x(q) = rs.Fields(“x”)
y(q) = rs.Fields(“y”)
dist(q) = ______①______
List1.AddItem bh(q) + “ ” + Str(x(q)) + “ ” + Str(y(q)) + “ ” + Str(dist(q))
rs.MoveNext ′移动到下一条记录
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
Private Sub Command2_Click()
Dim xh As Integer, i As Integer, j As Integer, k As Integer
Dim temp1 As String, temp2 As Single, p As Single, g As Single
xh = Val(Text2.Text)
′将礼物按到原点的距离从小到大排序,代码略
i = 0: j = 1: g = 0
Do While (i < xh) And (j <= n)
If dist(j) < > g Then____②____ : i = i + 1
j = j + 1
Loop
u = 0: d = g
j = j - 1
Do While ________③________
List2.AddItem bh(j) + Str(x(j)) + Str(y(j)) + Str(dist(j))
u = u + 1
j = j + 1
Loop
List2.AddItem “total:” + Str(u)
End Sub
(1)请在程序划线处填入合适的语句。
(2)假设现共有14件礼物,礼物的信息如上图所示,你轮到第10个拿礼物,则你获得的礼物数为________。
解析 (1)①处代码表示计算礼物离原点的距离,因此①处代码为Int((Sqr(x(q) ^ 2 + y(q) ^ 2) * 100 + 0.5)) / 100;②处的循环表示你前面的同学拿走礼物的情况,前面xh-1个同学共拿走了j件礼物,划线②处代码的功能是比较相邻两个礼物是否是等距离的,因此②处代码为g = dist(j);变量d表示你拿的礼物离你的距离,如果有多个礼物的距离等于d,则全部拿走,变量u表示你共拿走的礼物数,因此③处码为dist(j) = d。
(2)本小题是算法的实际应用。你共拿到2件礼物,因此答案为2。
答案 (1)①Int((Sqr(x(q) ^ 2 + y(q) ^ 2) * 100 + 0.5)) / 100 ②g = dist(j) ③dist(j) = d (2)2
专项测试九 简单数学方法
1.用蒙特卡洛法求圆周率π的近似值。下列程序是使用随机函数Rnd,根据x2+y2≤1判断落点是否在圆内来求π的近似值。其中,总共投点n次,统计落点在单位圆的点数为s,则
4s/n的值即为所求的π值。具体功能如下:在文本框Text1中输入n,单击“计算”按钮Command1,结果显示在文本框Text2中。程序运行界面如图所示。
蒙特卡洛法又称统计模拟法,是一种使用随机数(或伪随机数)对模拟实验数据进行统计计算从而得出结论的计算方法。具体方法为:用[0,1)之间的2个随机数,根据x2+y2≤1判断点(x,y)是否在圆内来求π的近似值。
(1)要使程序运行时,清空文本框Text1中的内容,可在Form_Load事件过程中添加语句________(单选,填字母:A. Text1.Text=“空” / B.Text.Text1=“ ” / C.Text1.Text=“ ” )。
(2)实现上述功能的VB程序如下,请在程序划线处填入合适的代码。
Private Sub Command1_Click()
Dim i As Long, n As Long, s As Long
Dim a As Double, b As Double, c As Double
Randomize
n = Val(Text1.Text)
i = 1
s = 0
Do While i <= n
a = Rnd: b = Rnd
________①________
If c <= 1 Then
________②________
End If
i = i + 1
Loop
Text2.Text =________③________
End Sub
(3)随着n的增大,π的精确度变化趋势为__________(单选,填字母:A.不变 / B.变高 / C.变低 / D.无法预测)。
2.下列VB程序实现如下功能:程序运行时,在文本框Text1和Text2中分别输入x和n的值,单击命令按钮Command1后,调用函数f计算s的值,并在文本框Text3中显示计算结果。
s=x+++…+。请在划线处填入合适的代码。
Function f ( x As Single,n As Integer )As Single
Dim sum As Single,i As Integer,t As Single
sum = 0: t = 1
For i = 1 To n
t = t * x / i
sum = ______①______
Next i
f = sum
End Function
Private Sub Command1_Click ( )
Dim x As Single,n As Integer,s As Single
x = Val ( Text1.Text ): n = Val ( Text2.Text ): s = f ( x , n )
Text3.Text =______②______
End Sub
3.分解质因子。一个非素数的正整数可以表示成它的质因子(“1”与其本身除外)的乘积。输入一个整数N,求它所有的质因子以及每个因子出现的次数,最后显示乘积表达式。例如:整数150=2×3×5×5,所以它的质因子是2,3,5,次数分别是1次,1次,2次。
具体功能如下:在文本框Text1中输入一个数,单击“计算”命令按钮Command1,在列表框List1中显示该数的质因子及相应的次数,并显示乘积表达式。程序运行时的界面如下图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim a(1 To 100) As Integer ′数组a存放该整数的质因子出现的次数
Dim i As Integer, m As Integer, n As Integer, k As Integer, s As String
n = Val(Text1.Text)
m = n
k = Int(Sqr(n))
For i = 2 To k
a(i) = 0
Next i
For i = 2 To k
Do While n Mod i = 0
′①
n = n i
If Then ′②
s = s + Str(i) + “×”
Else
s = s + Str(i)
Exit For
End If
Loop
Next i
List1.AddItem “质因子” & “ ” & “次数”
For i = 2 To k
If a(i) < > 0 Then List1.AddItem Str(i) & “ ” & Str(a(i))
Next i
List1.AddItem Str(m) + “=” + s
End Sub
程序中加框①处应改正为____________________________________________;
加框②处应改正为________________________________________________。
4.尼克斯彻定理: 任何一个大于等于1的整数的立方等于一串连续奇数之和,如:13 =1,
23 =3+5,33 =7+9+11。编写一个VB程序验证尼克斯彻定理,程序运行时,在文本框Text1中输入一个大于等于1的整数,单击“验证”按钮Command1,在文本框Text2中显示验证结果,运行界面如下图所示。
实现上述功能的 VB 代码如下,其中加框处代码有错,请改正。
Private Sub Command1_Click()
Dim n As Integer, i As Integer, t As Integer, sum As Long, s As String
n = Val(Text1.Text)
For i = 1 To n ^ 3 Step 2 ′ 变量 i 表示连续奇数的首个整数
sum = 0 : t =i : flag = False
Do While sum <= n^3 And flag = False
sum = sum + t
′(1)
If sum = n ^ 3 Then flag = True
Loop
If flag = True Then Exit For
Next i
s = Str(n) + “^” + Str(3) + “=”
Do While sum > 0
′(2)
If sum = 0 Then
s = s + Str(i)
Else
s = s + Str(i) + “+”
End If
i = i + 2
Loop
Text2.Text = s
End Sub
程序中加框(1)处应改正为_____________________________________________;
加框(2)处应改正为_________________________________________________。
5.猴子选大王。有n(n≤100)只猴子举行选大王大会,由于大家谁也不服谁,因此有猴子倡议进行玩游戏的方式来选出大王。首先将n只猴子进行随机编号(编号为1到n,猴子编号不重复),然后产生一个随机数k,游戏规则如下:将n只猴子按编号从小到大的顺序围成一圈,并从编号为1的猴子开始报数(1,2,3……),报到k的猴子出圈(出圈即被淘汰);接着再由出圈的猴子的下一只猴子重新开始报数(1,2,3……),报到k的猴子又出圈,如此继续,直到圈中只剩下一只猴子,它就是猴子大王。要求依次输出出圈的猴子的编号及猴子大王的编号。
例如n=8,k=6,则依次出圈的猴子的编号为:6、4、3、5、8、7、2,最后剩下的猴子的编号为1,即猴子大王的编号为1号。
程序运行时,在文本框Text1中在输入猴子的总数n,单击“产生随机数k”按钮Command1将生成一个随机整数k(1≤k≤n),并在标签Label3中显示k的值,单击“选大王”按钮Command2后,将在文本框Text2中显示依次出圈的猴子的编号,在标签Label6中显示大王的编号。程序运行结果如图所示。
实现上述功能的VB程序如下,请在划线处填入合适的代码。
Dim k As Integer, n As Integer
Private Sub Command1_Click()
Randomize
n = Val(Text1.Text)
k = Int(Rnd * n) + 1
Label3.Caption = Str(k)
End Sub
Private Sub Command2_Click()
Dim a(1 To 100) As Integer ′a(i)=1表示编号为i的猴子在圈上,a(i)=0表示出圈
Dim b(1 To 100) As Integer ′数组元素b(i)=x,表示第i只出圈的猴子的编号为x
Dim i As Integer, st As String, j As Integer
Dim p As Integer, sum As Integer ′p表示出圈的猴子数,sum表示报数
For i = 1 To n
a(i) = 1
Next i
p = 0
j = 0
Do While p < > n-1
________①________
Do While sum < k ′依次报数,直到报到k为止
j = j + 1
If j > n Then j = 1 ′报数至最后时,将重头继续报
sum = sum + a(j)
Loop
a(j) = 0: p = p + 1
________②________
Loop
For i = 1 To p
st = st + Str(b(i))
Next i
Text2.Text = st
i = 1
Do While a(i) < > 1
i = i + 1
Loop
Label6.Caption =________③________
End Sub
6.在平面直角坐标系中,在给定线段AB中寻找一点X,使得X到给定的P点距离最短,求出其最短距离。
寻找点x的算法如下:
(1)取AB线段1/3处的点t1,2/3处的点t2;
(2)计算t1到P点距离ans1,t2到P点距离ans2;
(3)如果t1和t2重合,此时重合的点就是所求的点,ans1就是所求的距离,算法结束;否则,如果ans1(1)根据本题算法,若输入的A(0,0),B(100,100),P(100,0),所求的最短距离为________。
(2)实现上述功能的VB程序如下,请在程序划线处填入合适的代码:
Dim ax As Double, ay As Double, bx As Double, by As Double, px As Double, py As Double
Dim t1x As Double, t2x As Double, t1y As Double, t2y As Double, ans1 As Double, ans2 As Double
′函数dis(x1, y1, x2, y2)的功能是求点x1和x2间的距离
Function dis(x1 As Double, y1 As Double, x2 As Double, y2 As Double)
dis = Sqr((x1 - x2) * (x1 - x2) + ____①____)
End Function
Private Sub Command1_Click()
ax = Val(Text1.Text)
ay = Val(Text2.Text)
bx = Val(Text3.Text)
by = Val(Text4.Text)
px = Val(Text5.Text)
py = Val(Text6.Text)
Do While True
′(t1x,t1y) 为线段1/3处点坐标
t1x = (2 * ax + bx) / 3
t1y = (2 * ay + by) / 3
′(t2x,t2y) 为线段2/3处点坐标
t2x = (ax + 2 * bx) / 3
t2y = (ay + 2 * by) / 3
ans1 = dis(t1x, t1y, px, py)
ans2 = dis(t2x, t2y, px, py)
′ t1和t2重合,循环结束
If Abs(t1x - t2x) < 0.001 And Abs(t1y - t2y)<0.001 Then Exit Do
If ____②____ Then
bx = t2x :by = t2y
Else
ax = t1x :ay = t1y
End If
Loop
Label8.Caption = Str(____③____)′取整数,要求四舍五入
End Sub
7.领礼物。圣诞节到了,教室里放满了礼物,大家站在同一位置即原点(0,0)处,根据自己拿礼物的序号轮流去拿礼物,每个人只能拿离自己最近的礼物,每件礼物的位置用坐标(x,y)表示。如果有多个礼物离你的距离相等(精确到小数后二位)且最近,则这些礼物都归你所有。
程序运行时,在文本框Text1中输入共有礼物数n,单击“读取数据”按钮Command1,将从数据库gift.accdb中读取n个礼物的信息存储在相应的数组中,并显示在列表框List1中;在文本框Text2中输入轮到你拿礼物的序号(即第几个拿),单击“计算”按钮Command2,则在列表框List2显示你获得的礼物信息,并在列表框List2最后一行显示获得的礼物总数。程序运行界面如图所示。
实现上述功能的VB程序代码如下,请回答下列问题。
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim bh(1 To 100) As String ′数组bh存储礼物的编号
Dim x(1 To 100) As Single ′数组x存储礼物的横坐标
Dim y(1 To 100) As Single ′数组y存储礼物的纵坐标
Dim dist(1 To 100) As Single ′数组dist存储礼物到原点的距离
Dim n As Integer ′变量n表示礼物数
Private Sub Command1_Click()
Dim i As Integer, q As Integer
conn.ConnectionString = “Provider = Microsoft.ACE.OLEDB.12.0;DATA Source=”&App.Path& “gift.mdb”
conn.Open
Set rs.ActiveConnection = conn
rs.Open “list”
List1.AddItem “编号” + “ x” + “ y” + “ dist”
n = Val(Text1.Text)
q = 0
Do While Not rs.EOF And q q = q + 1
bh(q) = rs.Fields(“bh”)
x(q) = rs.Fields(“x”)
y(q) = rs.Fields(“y”)
dist(q) = ______①______
List1.AddItem bh(q) + “ ” + Str(x(q)) + “ ” + Str(y(q)) + “ ” + Str(dist(q))
rs.MoveNext ′移动到下一条记录
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
Private Sub Command2_Click()
Dim xh As Integer, i As Integer, j As Integer, k As Integer
Dim temp1 As String, temp2 As Single, p As Single, g As Single
xh = Val(Text2.Text)
′将礼物按到原点的距离从小到大排序,代码略
i = 0: j = 1: g = 0
Do While (i < xh) And (j <= n)
If dist(j) < > g Then____②____ : i = i + 1
j = j + 1
Loop
u = 0: d = g
j = j - 1
Do While ________③________
List2.AddItem bh(j) + Str(x(j)) + Str(y(j)) + Str(dist(j))
u = u + 1
j = j + 1
Loop
List2.AddItem “total:” + Str(u)
End Sub
(1)请在程序划线处填入合适的语句。
(2)假设现共有14件礼物,礼物的信息如上图所示,你轮到第10个拿礼物,则你获得的礼物数为________。