1、学业水平测试信息技术第四部分 专题三专题三过程及自定义函数、递归算法、VB访问数据库【考纲标准】考试内容考试要求考试属性选考规律1.过程与自定义函数c加试每次选考1个选择题或1个相关非选择题2.递归算法a3.VB 访问 Access 数据库通过 ADO 对象连接数据库通过 RecordSet 对象获取数据表中的数据a1.(201510浙江选考)某数据加密方法描述如下:1)以字节为单位进行加密处理;2)将1个字节的8位二进制数分割成前4位与后4位两个二进制数;3)分别将上述两个4位二进制数转换为十进制数;4)将每个十进制数转换为1个加密字符,对应的“密码表”如下:值(十进制)0123456789
2、101112131415加密字符IIikeCHNpostcard小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中每个字符的ASCII码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。下表显示了字符串中一个字符的加密过程:程序运行效果如图所示:实现上述功能的VB程序如下:(1)请在划线处填入合适代码。Private Sub Command1_Click()Dim n As Integer,s As String,i As Integer,ss As Stri
3、ngDim a As Integer 存储加密前字符的ASCII码Dim b1 As Integer,b2 As Integer 分别存储分割、转换后的两个十进制数sText1.Text_For i1 To naAsc(Mid(s,i,1)b1a16b2a Mod 16ssssCode2Char(b1)Code2Char(b2)Next iText2.TextssEnd Sub十进制值转换为加密字符的函数Function Code2Char(c As Integer)As StringDim s As StringsIlikeCHNpostcardCode2Char_End Function(
4、2)若将“密码表”中值为“0”对应的加密字符“I”改为“i”,加密后的密文可能无法解密,原因是_。解析变量i表示字符在字符串中的位置,n表示字符串长度。在自定义函数中,函数名Code2Char将作为返回值,参数c表示某个数字,其值范围在0,15之间,当c0时,对应密码表第1个字符,因此他在密码本中位置为c1。加密字符“I”改为“i”,密码本中有两个i,解密成0或2两个数。答案(1)nLen(s)或nLen(Text1.Text)Mid(s,c1,1)(2)加密字符i对应两个值0,22.(201610浙江选考)小王与小李合作编写一个成绩统计的VB程序:小王编写一个过程,该过程从数据库读取某一指定
5、科目的相关数据,存储在数组a中:小李编写一个过程,该过程依据数组a中的相关数据统计各班级平均分。小王与小李约定的数组a各元素含义如表所示。程序功能如下:在文本框Text1中输入科目名称,单击“读数据库”按钮Command1,程序从数据库读取数据;单击“开始统计”按钮Command2,程序进行统计处理,结果输出在列表框List1中。程序运行界面如图所示。数组元素数组元素的含义a(1)存储班级数na(2)从a(2)到a(n1)依次存储第1,第2,第n个班级的人数a(n1)a(n2)从a(n2)开始依次存储第1班每个学生的单科成绩,第2班每个学生的单科成绩,第n班每个学生的单科成绩实现上述功能的VB
6、程序如下,请回答下列问题:(1)根据程序运行界面中的数据及数组a各元素的含义进行分析,数组元素a(5)的值为_(填写数值)。(2)分析程序,可知数据库的文件名为_。(3)请在划线处填入合适的代码。Dim a(1 To 600) As Integer数组大小满足处理要求Private Sub Command1Click()本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中Dim conn As New ADODB.ConnectionDim rs As New ADODB.Recordsetconn.ConnectionStringproviderMicrosoft.ACE.OL
7、EDB.12.0;data sourceScore.accdbconn.OpenSet rs.ActiveConnectionconn本过程的其他语句略End SubPrivate Sub Command2Click()本过程由小李完成,依据数组a中的相关数据统计各班级平均分Dim i As Integer,j As Integer,n As IntegerDim p As integer,sum As Integer,aver As Single_pn2For i1 To n sum0 For j1 To a(i1) _ pp1 Next j aversum/a(i1) List1.AddI
8、tem Str(i)Str(a(i1)Str(aver)Next iEnd Sub解析(1)根据题中表格中数组a各元素的含义,a(2)到a(n1)分别存储从1班到(n1)班的各班人数,所以数组元素a(5)存储的是4班的人数,从图中可以看到4班人数为“33”。(2)考查VB中的ADO访问数据库,从程序中:“data soure” “Score.accdb”可判断数据库文件名为“Score.accdb”。(3)分析本过程程序功能为“统计各班级平均分”,程序结构为双重循环,外层循环控制选择第i班,待内层循环求得本班成绩和之后求平均分(aversum/a(i1),内层循环累加本班成绩和。从变量p初值为
9、pn2和循环中“pp1”,结合题目表格中给出的从a(n2)开始依次存储每个班学生的成绩,可以判断程序中变量n是班级数,a(p)可以依次读取每个学生的成绩。所以处为“na(1)”(表格中说明a(1)存储班级数),处为累加各班每个学生的成绩到变量sum中, 即“sumsuma(p)”。答案(1)33(2)Score.accdb(3)na(1) sumsuma(p)一、过程与自定义函数1.依据结构化程序设计的思想,当需要解决的问题规模较大、复杂时,可以按功能细分成一个个小的功能模块,这样的小程序段,在VB中被称为过程; 过程是一段能完成一个或多个特定功能的独立的程序段,并可以被其他过程调用。程序中多
10、处重复出现处理相同功能的程序段可以通过过程简化。2.在VB中,过程有两种,一种是Sub子过程,一种是Function函数。两者的区别在于:Sub子过程只执行程序而不返回值,而Function函数执行程序后会返回值。3.事件处理过程基本结构 Sub事件处理过程名(参数表)语句块End Sub其中,事件处理过程名必须符合下面的规则:对象名_事件的标准名。VB的一些常用对象上的常见事件的标准名有:窗体Form: Form_Load、Form_Unload文本框Text:Text1_Click、Text1_KeyPress命令按钮Command:Command1_Click、Command1_DblC
11、lick4.自定义函数基本结构 Function函数名(参数表) As 类型名语句块(至少有一个语句是: 函数名表达式)End Function函数:函数是类似于过程的另一个程序模块,不同之处是函数执行完成后,函数的计算结果被送到函数的调用点上,供程序的后继部分继续进行处理。例如:用Sub过程实现求1!3!5!。Sub Fact(N As Integer, F As Double)Dim I As IntegerF 1For I 1 To NF F * INext IEnd SubPrivate Sub Command1_Click()Dim F1 As Double, F2 As Doubl
12、e, F3 As DoubleDim sum As DoubleCall Fact(1, F1)调用Fact过程求1的阶乘Call Fact(3, F2)调用Fact过程求3的阶乘Call Fact(5, F3)调用Fact过程求5的阶乘sum F1 F2 F3Text1.Text1!3!5!Str(sum)End Sub注意:Sub过程通过参数来返回结果。例如:利用自定义函数求1!3!5!Function Fact(N As Integer) As Double 自定义函数FactDim i As Integer, F As DoubleF 1 F用于保存阶乘值For i 1 To NF F
13、 * iNext iFact F 给函数过程名赋值End FunctionPrivate Sub Form_Click()Dim sum As Double调用函数sum sum Fact(1) Fact(3) Fact(5)Text1.Text1!3!5!Str(sum)End Sub注意:1.函数需先定义再调用。2.函数通过函数名返回结果。二、VB 访问 Access 数据库1.通过ADO对象中的Connection对象连接数据库,步骤如下(右边是对应的代码):2.通过ADO对象中的Recordset对象读取数据库表中记录,步骤如下(右边是对应的代码):【例】 有一Access数据库“sc
14、hool.accdb”存放在f:2015ImtJPvb文件夹中,其中的“student”数据表用来存储学生的基本情况信息,包括学号(num)、姓名(name)、性别(sex)、分数(score),括号内的为对应字段名。下列VB程序用来实现根据学号查询并显示学生信息,运行界面如下图所示。在文本框Text1中输入学生的学号,单击“查询”,在文本框Text2、Text3、Text4中分别显示学生姓名、性别、分数。为了实现上述目标,在划线处填入合适的语句或表达式:Private Sub Command1_Click()Dim adocn As New adodb.ConnectionDim adors
15、 As New adodb.RecordsetDim str2 As String,str1 As Stringstr1ProviderMicrosoft.ACE.OLEDB,12.0;data sourcef:2015Imtvb_adocn.Open str1str2select * from students where numText1.Textadors.Open str2,adocn,adOpenDynamic,adLockOptimisticIf adors,EOFTure ThenMsgBox你输入的学号不存在ElseText2.Textadors.Fields(name).Va
16、lueText3.Textadors.Fields(sex).Value_End Ifadors:Closeadocn.CloseEnd Sub解析本题主要考查数据库的访问方法。划线处代码设置连接数据库的字符串,“data source”是指被连接的数据库文件。划线处代码是在文本框Text4中输出分数。答案school.accdbText4.Textadors.Fields(“score”).Value考点1VB过程【训练1】 阅读下面的程序:Private Sub Command1_Click()Dim a(1 To 4) As Integera(1) 1 a(2) 2 a(3) 3 a(4
17、) 4subP a()调用于过程subpFor i 1 To 4Print a(i)Next iEnd SubSub subP(b() As Integer)For i 1 To 4b(i) 2 * iNext iEnd Sub程序运行后,单击命令按钮,输出结果为()A. 1 B.5 C.2 D.出错 2 6 4 3 7 6 4 8 8解析考查Sub过程的调用。虽然按钮过程中对a()进行了赋值,但是随后又执行的subp子程序,VB中未指明的参数传送方式按地址传送,子程序中b()的地址即等于调用参数a()的地址,也就是说b()和a()其实是一个变量,只不过名字不同,所以在子程序中对b()的修改也
18、就是对参数a()的修改,在子程序中通过了一个循环对b()赋值,循环值i等于1,2,3,4,b()的值等于i*2也就是2,4,6,8,返回后a()的值当然也就是2,4,6,8。答案C考点2VB自定义函数【训练2】 如果一个整数是另一个整数的平方,则称该数是“完全平方数”。如:111,422,933,所以1、4、9是完全平方数。下列VB程序可以求出1到n(1n1000)之间的所有完全平方数之和:Private Sub Command1_Click()Dim s As Long用于存储1到n之间所有完全平方数之和Dim i As Integer, n As Integern Val(Text1.Te
19、xt)s 0For i 1 To nIf ok(i) Then s s i 当ok函数返回值为True时执行s s iNext iLabel1.Caption Str(s)End Subok函数用于判断变量t的值是否为完全平方数Function ok(t As Integer) As Boolean Dim k As Integer If k * k t Then ok True Else ok FalseEnd Function方框中的正确语句是()A.k Int(Sqr(t) B.t Int(Sqr(k)C.k t2 D.tk2解析自定义函数ok(t)框中代码用于产生整数k,用于判断k *
20、 k t是否成立。如果成立为完全平方数,如果不成立则不是完全平方数,k Int(Sqr(t)。答案A【训练3】 下列VB程序用于求2个正整数(均小于10000)的最大公约数:Private Sub Command1_Click()Dim x As IntegerDim y As IntegerDim z As Integerx Val(Text1.Text)y Val(Text2.Text)_z_gcd(a,_b)Text3.Text Str(z)End SubFunction gcd(a As Integer, b As Integer) As IntegerDo Whilea_bIf a
21、b Then a a b Else b b aLoopgcd bEnd Function其中,划线,部分有错,应改为_,_。解析处需要调用gcd函数,传入x,y的值,得到他们的最大公约数,返回给变量z。处循环终止条件应该是a等于b,要使循环运行,只需要a不等于b,而不是ab。答案z gcd(x, y)a b【训练4】 设计一个二进制数、十进制数、十六进制数混合加法计算的VB程序。在文本框Text1中输入由数字、大写字母、“”和“”组成的加法运算式子,其中每一个数的最后一个大写字母表示它的进制,B表示二进制数、D表示十进数、H表示十六进制数,运算式子以“”结束,点击“计算”按钮Command1,
22、在标签Label1中输出十进制表示的计算结果,程序运行结果如图所示。实现上述功能的VB程序如下,请在划线处填入合适的代码。Private Sub Command1_Click()Dim s As String, c As String, s1 As String 变量s1存放不同进制的加数Dim i As Integer, result As Integers Text1.Textresult 0s1 For i 1 To Len(s)c Mid(s, i, 1)If c Or c Then result _ s1 Else s1 _End IfNext iLabel1.Caption Str
23、(result) DEnd SubFunction xtod(s2 As String) As Integer将不同进制的数转换成十进制数Dim f As String, c As String, a As IntegerDim n As Integer, i As Integerf Mid(s2, Len(s2), 1)If f B Then识别进制,保存在变量n中n 2ElseIf f D Thenn 10ElseIf f H Thenn 16End Ifm 0For i 1 To Len(s2) 1c Mid(s2, i, 1)If c 0 And c A And c A And c F
24、,表示将字母AF转换数1015,并通过按权展开法转换成十进制数。主程序中,如果读取的字符不是或,把字符连接起来,作为一个加数,否则通过自定义函数,转换成十进制数并加到结果result中。答案result xtod(s1)s1caAsc(c)Asc(A)10xtod*na考点3递归算法【训练5】 用递归算法求123100的和,假设递归函数名为s,下列叙述中正确的是()A.题目简单,不用编写主程序,只要编写自定义函数即可B.自定义函数中递归式是:ss(n1)nC.自定义函数中递归式是:s(n)s(n1)n D.自定义函数中边界条件是:if n1 then s(1)1答案B【训练6】 下列VB程序模
25、块可以计算正整数n阶乘的值。 Function f(n As Integer) As IntegerIf n 1 Thenf 1Elsef n * f(n 1)End IfEnd Function该模块采用的算法是()A.枚举 B.查找 C.排序 D.递归解析在自定义函数f(n)中,从f n * f(n 1)可以判断是递归算法。答案D【训练7】 某VB程序使用了递归函数,代码如下:Private Sub Command1_Click()Text1.Text f(3)End SubFunction f(x As Integer) As StringIf x 1 Thenf 1Elsef f(x
26、1) 2End Function运行程序并点击按钮Command1后,文本框Text1中显示的内容是()A.1 B.3 C.5 D. 7答案C考点4VB 访问 Access 数据库【训练8】 利用ADO访问数据库的步骤是: 定义和创建ADO实例变量设置连接参数并打开连接设置命令参数并执行命令设置查询参数并打开记录集操作记录集关闭、回收有关对象这些步骤的执行顺序应该是()A. B.C. D.解析利用ADO访问数据库,想要读取数据库中的数据,先要定义和创建ADO对象实例变量,然后下一步就是要与数据库取得连接,接着利用连接参数进行数据库连接,连接后根据SQL命令执行返回记录集,并对记录集进行操作,当
27、操作结束不需要使用连接对象时,要用close方法来关闭连接。所以答案为D。答案D【训练9】 小王编写了一个VB程序,用于读取某数据库中的数据,部分代码如下:Dim conn As New ADODB.ConnectionDim rs As New ADODB.Recordsetconn.ConnectionString Provider Microsoft.ACE.OLEDB.12.0;DATA Source & App.Path & mydata.accdbSet rs.ActiveConnection connrs.Open select * from ketin0Do While Not rs.EOFnn1rs.MoveNextLoop下列对于以上代码的理解正确的有()接的数据库文件名是“mydata”“ConnectionString”是conn对象的属性值查询的数据表名称是“k
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1