5自定义函数信息技术选考
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.(2017·4月浙江选考)小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。
算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次,分数相同时名次并列。
最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。
程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。
例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。
分数100 99 98 97 96 95 94 0
个数(A数组) 2 0 0 0 1 0 3 0
名次(B数组) 1 3 4 …
,计算结果显示在列表框List2中,程序运行界面如图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)如表所示,若分数93的个数为2,则该分数对应的名次为________。
(2)请在划线处填入合适的代码。
Dim sName(1 To 50) As String ′存放学生姓名
Dim sScore(1 To 50) As Integer ′存放学生分数
Dim recCount As Integer ′存放学生人数
Private Sub Form_Load()
′本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示
′代码略
End Sub
′整数转换成长度固定的字符串
Function ads(x As Integer, n As Integer) As String
Dim sx As String, nx As Integer, i As Integer
sx =Str(x): nx =Len(sx)
For i = 1 To n -nx
sx =" " +sx
Next i
____①____
End Function
Private Sub Command1_Click()
Dim A(0 To 100) As Integer ′存放每个分数的个数
Dim B(0 To 100) As Integer ′存放每个分数的名次
Dim mc As Integer, score As Integer, i As Integer
For i =0 To 100
A(i) =0
Next i
For i = 1 To recCount ′计算每个分数的个数
____②____
Next i
mc = 1
For i =100 To 0 Step -1 ′计算每个分数的名次
If A(i) <> 0 Then
B(i) =mc
____③____
End If
Next i
List2.Clear
List2.AddItem “姓名分数名次”
List2.AddItem “---------”
For i = 1 To recCount
score =sScore(i)
mc =B(sScore(i))
List2.AddItem sName(i) +ads(score, 5) +“第”+ads(mc, 3) +“名”
Next i
End Sub
答案(1)7 (2)①ads=sx ②A(sScore(i))=A(sScore(i))+1
③mc=mc+A(i)或mc=B(i)+A(i)
2.(2016·10月浙江选考)小王与小李合作编写一个成绩统计的VB程序:小王编写一个过程,该过程从数据库读取某一指定科目的相关数据,存储在数组a中:小李编写一个过程,该过程依据数组a中的相关数据统计各班级平均分。
小王与小李约定的数组a各元素含义如表所示。
程序功能如下:在文本框Text1中输入科目名称,单击“读数据库”按钮Command1,程序从数据库读取数据;单击“开始统计”按钮Command2,程序进行统计处理,结果
输出在列表框List1
中。
程序运行界面如
图所示。
数组元素数组元素的含义
a(1) 存储班级数n
a(2)
…
从a(2)到a(n+1)依次存储第1,第2,…,第n个班级的人数a(n+1)
a(n+2)
从a(n+2)开始依次存储第1班每个学生的单科成绩,第2班每…
个学生的单科成绩,…第n班每个学生的单科成绩…
(1)根据程序运行界面中的数据及数组a各元素的含义进行分析,数组元素a(5)的值为____________(填写数值)。
(2)分析程序,可知数据库的文件名为________。
(3)请在划线处填入合适的代码。
Dim a(1 To 600) As Integer′数组大小满足处理要求
Private Sub Command1-Click()
′本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString=”provider=Microsoft.ACE.OLEDB.12.0;data source =”+”Score.accdb”
conn.Open
Set rs.ActiveConnection=conn
′本过程的其他语句略
End Sub
Private Sub Command2-Click()
′本过程由小李完成,依据数组a中的相关数据统计各班级平均分
Dim i As Integer,j As Integer,n As Integer
Dim p As integer,sum As Integer,aver As Single
____①____
p=n+2
For i=1 To n
sum=0
For j=1 To a(i+1)
____②____
p=p+1
Next j
aver=sum/a(i+1)
List1.AddItem Str(i)+””+Str(a(i+1))+””+Str(aver)
Next i
End Sub
答案(1)33(2)Score.accdb(3)①n=a(1)②sum=sum+a(p)
3.某日期加密授权码生成方法描述如下:
(1)授权码由10位字符组成,前8位为日期的密文,后2位为验证码;
(2)取日期的第1位字符,若该字符第一次出现,则直接取其对应加密字符,否则取下一个不重复的加密字符。
按此操作,依次取出该日期余下各位对应的加密字符;
(3)求出所有日期字符数值的和,将和除16取余得到一位验证码字符;若和不小于16,则将和除16取整加1得到另一位验证码字符,否则另一位验证码字符为“X”。
取出验证码重复时,处理规则与(2)相同。
加密(验证码)字符对应表如下:
值(十
进制)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 加密
(验证
码)字
符
K n G j L t W b 0 a P H Z q Y c
如下:在文本框Text1中输入一个8位有效日期,单击“生成授权码”按钮Command1,在标签Label2中显示出该日期的授权码。
运行效果如图所示。
(1)若输入的日期是“20181213”,则该授权码的验证码字符是______________________。
(2)请在划线处填入合适代码。
Dim f(0 To 15) As Integer
Const Code =”KnGjLtWb0aPHZqYc”
Private Sub Command1_Click()
Dim rq As String, sq As String, c As Integer, i As Integer, d As Integer
For i =0 To 15
f(i) =0
Next i
rq =Text1.Text
sq =””:d =0
If Len(rq) <> 8 Then
Labe12.Caption =”请输入8位日期!”
Else
For i =1 To 8
c =Val(Mid(rq, i, 1))
d =d +c
sq =____①____
Next i
If d >=16 Then
yz =GetChar(d Mod 16) +GetChar(d \'16 +1)
Else
yz =____②____
End If
Label2.Caption =sq +yz
End If
End Sub
Function GetChar(x As Integer) As String ′获取不重复的加密字符
Dim flag As Boolean
flag =False
Do While flag =False
f(x) =f(x) +1
If f(x) =1 Then
____③____
f(x) =f(x) +1
flag =True
Else
x =(x +1) Mod 10
End If
Loop
End Function
答案(1)GKn0jLtWba(2)①GetChar(c) +sq
②GetChar(d Mod 16) +”X”③GetChar =Mid(Code, x +1, 1)
4.质数又称素数,是指除了1和本身之外不再有其他因数的数。
如果两个质数的
差为2,则这两个质数称为孪生质数对;编写VB程序,功能:单击“显示孪生质数对”按钮Command1,在列表框List1中显示100 以内的所有孪生质数对(运行效果如图所示)。
实现上述功能的VB代码如下。
请在划线处填入合适代码。
Dim a(1 To 50) As Integer
Private Sub Command1_Click()
Dim i As Integer
k =0: i =3
Do While i <=100
If ____①____Then k =k +1:a(k) =i
i =i +2
Loop
For i =2 To k
If____②____Then
List1.AddItem Str(a(i -1)) +”和”+Str(a(i))
End If
Next i
End Sub
Function prime(x As Integer) As Boolean ′判断是否是质数
prime =True
For i =2 To Int(Sqr(x))
If x Mod i =0 Then
______③____
Exit For
End If
Next i
End Function
答案①prime(i)②a(i)-a(i -1))=2③prime =False
5.以下VB程序段:
Private Sub Command1_Click()
Dim n As Integer, f As Integer
n =Val(Text1.Text)
f =fac(n)
Label2.Caption =Str(f)
End Sub
Function fac(n As Integer) As Integer
If n =1 Then fac =1 Else fac =n * fac(n -1)
End Function
程序运行时,若在文本框Text1中输入8,下列说法正确的是() A.程序运行出错
B.控件Label2中显示1
C.控件Label2中显示8
D.控件Label2中显示40320
答案 A
6.有如下程序:
Private Function f(x As Single, n As Integer) As Single
If n =0 Then
f =1
Else
If n Mod 2 = 1 Then
f =x * f(x, n \2)
Else
f =f(x, n \2) \x
End If
End If
End Function
Private Sub Command1_Click()
Label1.Caption =Str(f(4, 6))
End Sub
程序运行时,单击按钮Command1,标签Label1显示的内容是()
A.1B.4
C.27D.64
答案 B
VB 访问Access 数据库
1.通过ADO对象中的Connection对象连接数据库,步骤如下(右边是对应的代码):
2.通过ADO对象中的Recordset对象读取数据库表中记录,步骤如下(右边是对应的代码):
1. 有一Access数据库“school.accdb”存放在f:\2015Imt[JP]vb文件夹中,其中的“student”数据表用来存储学生的基本情况信息,包括学号(num)、姓名(name)、性别(sex)、分数(score),括号内的为对应字段名。
下列VB程序用来实现根据学号查询并显示学生信息,运行界面如下图所示。
在文本框Text1中输入学生的学号,单击“查询”,在文本框Text2、Text3、Text4中分别显示学生姓名、性别、分数。
为了实现上述目标,在划线处填入合适的语句或表达式:
Private Sub Command1_Click()
Dim adocn As New adodb.Connection
Dim adors As New adodb.Recordset
Dim str2 As String,str1 As String
str1=”Provider-Microsoft.ACE.OLEDB,12.0;data source=f:\2015Imt\vb\ ____①____”
adocn.Open str1
str2=”select * from students where num=”+Text1.Text
adors.Open str2,adocn,adOpenDynamic,adLockOptimistic
If adors,EOF=Ture Then
MsgBox”你输入的学号不存在”
Else
Text2.Text=adors.Fields(”name”).Value
Text3.Text=adors.Fields(”sex”).Value
____②____
End If
adors:Close
adocn.Close
End Sub
答案①school.accdb
②Text4.Text=adors.Fields(“score”).Value
2.小王编写了一个VB程序,用于读取某数据库中的数据,部分代码如下:Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString =”Provider =Microsoft.ACE.OLEDB.12.0;DATA Source=” & App.Path & ”[ML)]ydata.accdb”
Set rs.ActiveConnection =conn
rs.Open ”select * from keti”
n=0
Do While Not rs.EOF
n=n+1
rs.MoveNext
Loop
下列对于以上代码的理解正确的有()
①连接的数据库文件名是“mydata”
②“ConnectionString”是conn对象的属性值
③查询的数据表名称是“keti”
④程序运行后,变量n的值表示该数据表中记录的总数
⑤省略语句“rs.MoveNext”,程序也可以正常运行
A.①②③④B.②③④
C.③④⑤D.③④
答案 D
3. 用VB 程序读取数据库中数据的部分代码如下:
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cnt As Integer
Private Sub Form_Load()
conn.ConnectionString=”Provider=Microsoft.ACE.OLEDB.12.0;DataSource =” &App.Path& ”[99]
est.accdb”
conn.Open
Set rs.ActiveConnection =conn rs.Open ”select * from 学生信息”cnt =0
Do While Not rs.EOF
cnt =cnt +1
List1.AddItem rs.Fields(”姓名”)
rs.MoveNext
Loop
End Sub
下列描述中正确的是()
A.从表中读取的总记录数为:cnt
B.连接的数据库文件名:test
C.程序中读取记录的表名是:test.accdb
D.List1 中显示的内容是所有记录中“学生信息”字段的值
答案 A
4.有如下VB程序:
Private Sub Command1_Click()
Dim a As Integer, b As Integer, s As Integer
a =Val(Text1.Text):
b =Val(text2.Text)
Text3.text=f(a,b)
End Sub
Function f(x As Integer, y As Integer) As String
Dim s As Integer, t As Integer, str As String
str =”0123456789”
s =1: t =1
If x > 0 Then s =s +1
If x > y Then
t =s +t
ElseIf x =y Then
t = 6
Else
t = 5
End If
f =Mid(str,s+1,1)+Mid(str,t+1,1)
End Function
为使运行程序Text3显示的内容是15,则文本框Text1和Text2中依次输入的数字分别为()
A.6和5 B.5和6
C.-6和5 D.-3和-4
答案 C
5.有如下VB程序段:
Private Sub Command1_Click()
Text1.Text =”2012 Hero”
Text2.Text =f(Text1.Text)
End Sub
Function f(s As String) As String
Dim i As Integer, c As String, s As String
For i = 1 To Len(s)
c =Mid(s, i, 1)
If c >=”a” And c <=”z” Then f =f +c
Next i
End Function
该程序段运行后,文本框Text2中显示的内容是()
A.2012 B.Hero
C.ero D.2012 H
答案 C
6.有如下VB程序:
Private Sub Command1_Click()
Dim n As Integer, x As String
n =Val(Text1.Text)
x =f(n)
Label1.Caption =x
End Sub
Function f(n As Integer) As String
Dim r As Integer
If n <> 0 Then
r =n Mod 2
n =n \2
If r =0 Then
f =f(n) +”0”
Else
f =f(n) +”1”
End If
Else
f =”0”
End If
End Function
End Function程序运行后,在Text1文本框中输入35,则在Label1上显示的内容是()
A.0100111 B.0100011
C.1100010 D.1110010
答案 B
7.有如下VB 程序段:
Dim a(1 To 10) As Integer
Sub swap(a As Integer, b As Integer)
t =a: a =b: b =t
End Sub
Private Sub Command1_Click()
Dim min As Integer, n As Integer, i As Integer, j As Integer
n =10
For i =1 To n -1
If i Mod 2 =1 Then min =(i +1) / 2
If i Mod 2 =0 Then min =n +1 -i / 2
For j =(3 +i) \'2 To n -i \'2
If a(j) < a(min) Then min =j
Next j
If i Mod 2 =1 Then Call swap(a((i +1) / 2), a(min))
If i Mod 2 =0 Then Call swap(a(n +1 -i / 2), a(min))
Next i
End Sub
数组元素a(1)~a(10)的初始值依次为26、88、60、10、31、51、64、52、74、43,执行该程序,单击命令按钮Command1 后,a(1)~a(10)的值变为() A.10、31、51、60、74、88、64、52、43、26
B.88、64、52、43、26、10、31、51、60、74
C.10、74、60、52、31、51、88、64、43、26
D.26、31、60、51、88、52、64、43、74、10
答案 A
8.通过ADO 的Recordset Recordset对象实例rs打开的记录,如下图所示。
()
A.a(4)=rs.Fields(2)
B.a(4)=rs.Fields(1)
C.a(4)=rs.Fields(书名)
D.a(4)=rs.Fields(”书号”)
答案 B
9.某个VB应用程序中使用如下代码读取数据库中的信息:
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim n as Integer
Private Sub Form_Load( )
conn.ConnectionString =”Provider=Microsoft.Ace.
OLEDB.12.0;data source =”+App.Path+”[DS)]ata[DS)]ata.accdb”
conn.Open
sql=”select * from student”
Set rs.ActiveConnection=conn
rs.Open sql
n=0
Do while Not rs.EOF
List1.AddItem rs(”name”)
n=n+1
rs.MoveNext
Loop
End Sub
运行上述程序,以下说法不正确的是()
A.当前读取的数据库文件是Data文件夹中的data.accdb文件
B.数据库中存在一个名为student的数据表
C.List1列表框中将显示指定的数据表中所有记录name字段的值
D.窗体加载完成后,读取的数据表中总记录数为n-1
答案 D
10.如果一个整数是另一个整数的平方,则称该数是“完全平方数”。
下列VB 自定义函数用于判断一个数是否是完全平方数。
Function ok(t As Integer) As Boolean
Dim k As Integer
ok=False
____①____
If k*k=t Then ____②____
End Function
请在程序划线处填入合适的代码。
答案①k=Int(Sqr(t))②ok=True
11.下列VB程序用于求2个正整数(均小于10000)的最大公约数:Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer
x=Val(Text1.Text):y=Val(Text2.Text)
____①____
Text3.Text=Str(z)
End Sub
Function gcd(a As Integer, b As Integer) As Integer
Do While a<>b
If a>b Then a=a-b Else b=b-a
Loop
____②____
End Function
请在程序划线处填入合适的代码。
答案①z=gcd(x,y)②gcd=a或gcd=b
12.在VB中,判断一个整数的各位上的数字是否重复的自定义函数:Private Function judge(t As Long) As Boolean
Dim s As String,s1 As String, i As Integer,j As Integer
s=Str(t): judge =False
For i = 1 To Len(s)-1
s1 =Mid(s, i, 1)
For j =i +1 To Len(s)
If____①______ Then Exit Function
Next j
Next i
____②____
End Function
请在程序划线处填入合适的代码。
答案①s1=Mid(s,j,1)②judge =True
13.在VB中,将一个二进制数转化成十六进制的自定义函数代码如下:Function btoh(s As String) As String
Dim i As Integer, s1 As String, t As Integer
Dim str As String, j As Integer
str =”0123456789ABCDEF”
i =Len(s)
Do While i >=1
If____①____Then
s1 =Mid(s, i -3, 4)
Else
s1 =Mid(s, 1, i)
End If
t =0
For j =1 To Len(s1)
t =____②____
Next j
btoh =Mid(str, t +1, 1) +btoh
i =i -4
Loop
End Function
请在程序划线处填入合适的代码。
答案①i>=4②t=t*2+Val(Mid(s1,j,1))
14.有VB自定义函数的功能是求两个数之间被3除多2,被5除多3的所有整数个数
Function f(x1 As Integer, x2 As Integer) As Integer
Dim t As Integer, i As Integer
If x1 < x2 Then t =x1: x1 =x2: x2 =t
For i =____①____
If i Mod 3 = 2 And i Mod 5 = 3 Then____②____
Next i
End Function
请在程序划线处填入合适的代码。
答案①x2 To x1或x1 To x2 Step -1②f=f+1
15.编写一个将十进制数转换为二进制的VB自定义函数,完成划线处应填的语句。
Function dTOb(x As Integer) As String
Dim s As String
Do While x > 0
If x Mod 2=0 Then s=”0” Else s=”1”
______①____
x =x \2
Loop
End Function
请在程序划线处填入合适的代码。
答案①dTob=s+dTob
16.小明编写了一个寻找奇妙整数的VB 程序。
此整数的平方与立方正好用了0~9 的10 个数且每个数只用一次,例如69 的平方为4761,69 的立方为328509,4761 和328509 刚好用了0~9的10数,并且没有重复使用。
现需从1至1000寻找这样的奇妙整数并在列表框List1 中显示。
实现上述功能的VB 程序段如下:
Private Sub Command1_Click()
Dim n As Integer, k As Integer, f As Boolean ′判断字符k 是否重复出现
Dim s1 As String, s2 As String, i As Integer, j As Integer
For n =1 To 1000
For i =0 To 9
a(i) =True
Next i
f =True
s1 =CStr(n ^ 2)
s2 =CStr(n ^ 3)′Cstr()函数的作用是将数字型变量改变成字符型变量For j =1 To Len(s1)
____①____
If a(k) =True Then
a(k) =False
Else
f =False
Exit For
End If
Next j
If ____②____Then
j =0
Do While j <=9
If a(j) =True Then f =False: Exit Do
j =j + 1
Loop
If f =True Then List1.AddItem Str(n)
End If
Next n
End Sub
Function Judge(s As String) As Boolean
Dim i As Integer, k As Integer
i =1: Judge =True
Do While ____③______
k =Val(Mid(s, i, 1))
If a(k) =True Then
a(k) =False
Else
Judge =False
Exit Do
End If
i =i +1
Loop
End Function
请在程序划线处填入合适的代码。
答案①k=Val(Mid(s1,j,1))②Judge(s2)
③Judge =True
17.编程找出100到1000之间满足以下条件的整数:该数和该数平方合并后的数字串中不存在重复的数字。
例如209,其平方数为43681,209和43681合并后的数字串“20943681”中无重复数字,209就是符合条件的数。
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim x As Integer, y As Long, st As String
For x =100 To 1000
y =x ^ 2
st =Str(x) & Str(y)
If judge Then′(1)
List1.AddItem ”x:”& Str(x) & ”x^2: ”& Str(y) & ”x&y: ”& Str(st)
End If
Next x
End Sub
Private Function judge(s As String) As Boolean
Dim a(1 To 100) As String
For i =1 To Len(s)
a(i) =Mid(s, i, 1)
Next i
For i =1 To Len(s) -1
For j =i +1 To Len(s)
If a(j)= a(j + 1)Then Exit Function′(2)
Next j
Next i
judge =True
End Function
答案(1)judge(st)(2)a(j) =a(i)
18.用26个互不重复的ASCII字符作为密码本,根据英文字母在字母表中位置,替换为密码本该位置的字符。
现编写将英文字母加密的VB程序,在文本框Text1中输入明文,单击“加密”按钮Command1,在文本框Text2、Text3中输出产生的密码本和密文。
程序运行界面如下图所示。
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim i As Integer, mw As String, jm As String
mw =Text1.Text:Text2.Text =my(26)
For i =1 To Len(mw)
c =Mid(mw, i, 1)
If c >=”A” And c <=”Z” Or c >=”a” And c <=”z” Then t = Asc(c) Mod 32 + 64′(1)
jm =jm +Mid(Text2.Text, t, 1)
Else
jm =jm +c
End If
Next i
Text3.Text =jm
End Sub
Function my(n As Integer) As String
Dim s As String, i As Integer, x As Integer
s =”ABCDEFGHIJKLMNOPQRSTUVWXYZabc defghijklmnopqrstuvwxyz0123456789”
i =1
Do While i <=n
t =63 -i
x =Int(Rnd() * t +1)
my =Mid(s, x, 1)′(2)
s =Mid(s, 1, x -1) +Mid(s, x +1, t -x)
i =i +1
Loop
End Function
答案(1) t =Asc(c) Mod 32(2)my =my+Mid(s, x, 1)
19.如果一个数从左往右读和从右往左读都一祥,那么这个数就叫做“回文数”。
如果一个数的十进制和二进制表示都是回文数,则把这个数叫做“双重回文数”。
例如,十制数33是回文数,将其转化为二进制表示(10001 )也是回文数,所以33是双重回文数。
编写程序用于查找1000以内的双重回文数。
(1)根据题目描述,十进制数99是否是“双重回文数” __________(填:是/不是)。
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim n As Integer, d As String, b As String
For i =1 To 999
n =i
d =CStr(n)′CStr函数的功能是数值转换为字符串
____①____b =dtob(n)
If ishws(d) And ishws(b) Then
List1.AddItem Str(i) +””+b
End If
Next i
End Sub
Function dtob(k As Integer) As String ′进制转换
Do While k > 0
dtob =CStr(k Mod 2) +dtob
k =k \2
Loop
End Function
Function ishws(x As String) As Boolean
ishws =True
For j =1 To Len(x) \2
If ____②____Mid(x, j, 1) <> Mid(x, Len(x) -j +1, 1) Then
ishws =False
Exit For
End If
Next j
End Function
答案(1)是(2)①b =dtob(n)
②Mid(x, j, 1) <> Mid(x, Len(x) -j +1, 1)
20.学校把各同学选考组合放在一个数据库中,小明编写了一个VB程序,用于查询每个同学的选考组合,程序界面如图所示,在文本框Text1中输入学号,单击“开始查询”按钮(Command1),就开始查找该学号的信息,如果找到对应的信息,就显示所属学生的姓名和选考组合;如果没有找到,则显示“找不到”。
学校共有n名学生,数组a、b分别保存了本次考试所有学生的学号和姓名信息。
数据库数据按学号从小到大排列,第i个学生的学号保存在a(i),对应的姓名保存在b(i),c(i)保存该学生的选考组合。
程序如下,在程序划线处填入适当的代码,把程序补充完整。
Dim n As Integer ,a(1000) As String,
Dim b(1000) As String, c(1000) As String
Private Sub Command1_Click()
Dim x As String, pos As Integer
Dim conn As New ADODB.Connection, rs As New ADODB.Recordset
conn.ConnectionString =”provider=Microsoft.ACE.OLEDB.12.0;data source =” & App.Path & ”tudents.accdb”
conn.Open
Set rs.ActiveConnection =conn
rs.Open ”学生信息”
n =0′考生数初始化
Do While Not rs.EOF
n =n +1
a(n) =rs.Fields(0)
b(n) =rs.Fields(1)
c(n) =rs.Fields(2)
____①____
Loop
x =Text1.Text
____②____
If pos > 0 Then
Text2.Text=b(pos)
Text3.Text=c(pos)
Else
Text2.Text=”找不到”
End If
End Sub
Function Search(Key As String) As Integer
Dim i As Integer, j As Integer,m As Integer
i =1: j =n : Search =0
Do While i <=j m =Fix((i +j) / 2)
If Key =a(m) Then
____③____
Exit Function
ElseIf a(m) > Key Then
j =m -1
Else
i =m +1
End If
Loop
End Function
答案①rs.MoveNext②pos=Search(x)③Search=m。