学业水平测试信息技术第四部分 专题三.docx
《学业水平测试信息技术第四部分 专题三.docx》由会员分享,可在线阅读,更多相关《学业水平测试信息技术第四部分 专题三.docx(35页珍藏版)》请在冰豆网上搜索。
学业水平测试信息技术第四部分专题三
专题三 过程及自定义函数、递归算法、VB访问数据库
【考纲标准】
考试内容
考试要求
考试属性
选考规律
1.过程与自定义函数
c
加试
每次选考1个选择题或1个相关非选择题
2.递归算法
a
3.VB访问Access数据库
①通过ADO对象连接数据库
②通过RecordSet对象获取数据表中的数据
a
1.(2015·10浙江选考)某数据加密方法描述如下:
1)以字节为单位进行加密处理;
2)将1个字节的8位二进制数分割成前4位与后4位两个二进制数;
3)分别将上述两个4位二进制数转换为十进制数;
4)将每个十进制数转换为1个加密字符,对应的“密码表”如下:
值(十
进制)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
加密
字符
I
I
i
k
e
C
H
N
p
o
s
t
c
a
r
d
小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:
单击“加密”按钮Command1,程序依次将文本框Text1中每个字符的ASCII码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。
下表显示了字符串中一个字符的加密过程:
程序运行效果如图所示:
实现上述功能的VB程序如下:
(1)请在划线处填入合适代码。
PrivateSubCommand1_Click()
DimnAsInteger,sAsString,iAsInteger,ssAsString
DimaAsInteger′存储加密前字符的ASCII码
Dimb1AsInteger,b2AsInteger′分别存储分割、转换后的两个十进制数
s=Text1.Text
____①____
Fori=1Ton
a=Asc(Mid(s,i,1))
b1=a\16
b2=aMod16
ss=ss+Code2Char(b1)+Code2Char(b2)
Nexti
Text2.Text=ss
EndSub
′十进制值转换为加密字符的函数
FunctionCode2Char(cAsInteger)AsString
DimsAsString
s=″IlikeCHNpostcard″
Code2Char=____②____
EndFunction
(2)若将“密码表”中值为“0”对应的加密字符“I”改为“i”,加密后的密文可能无法解密,原因是________________________________________________________。
解析 变量i表示字符在字符串中的位置,n表示字符串长度。
在自定义函数中,函数名Code2Char将作为返回值,参数c表示某个数字,其值范围在[0,15]之间,当c=0时,对应密码表第1个字符,因此他在密码本中位置为c+1。
加密字符“I”改为“i”,密码本中有两个i,解密成0或2两个数。
答案
(1)①n=Len(s)或n=Len(Text1.Text)
②Mid(s,c+1,1)
(2)加密字符i对应两个值0,2
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班每个学生的单科成绩
…
…
实现上述功能的VB程序如下,请回答下列问题:
(1)根据程序运行界面中的数据及数组a各元素的含义进行分析,数组元素a(5)的值为____________(填写数值)。
(2)分析程序,可知数据库的文件名为________。
(3)请在划线处填入合适的代码。
Dima(1To600)AsInteger ′数组大小满足处理要求
PrivateSubCommand1-Click()
′本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中
DimconnAsNewADODB.Connection
DimrsAsNewADODB.Recordset
conn.ConnectionString=″provider=Microsoft.ACE.OLEDB.12.0;datasource=″+″Score.accdb″
conn.Open
Setrs.ActiveConnection=conn
′本过程的其他语句略
EndSub
PrivateSubCommand2-Click()
′本过程由小李完成,依据数组a中的相关数据统计各班级平均分
DimiAsInteger,jAsInteger,nAsInteger
DimpAsinteger,sumAsInteger,averAsSingle
____①____
p=n+2
Fori=1Ton
sum=0
Forj=1Toa(i+1)
____②____
p=p+1
Nextj
aver=sum/a(i+1)
List1.AddItemStr(i)+″ ″+Str(a(i+1))+″ ″+Str(aver)
Nexti
EndSub
解析
(1)根据题中表格中数组a各元素的含义,a
(2)到a(n-1)分别存储从1班到(n-1)班的各班人数,所以数组元素a(5)存储的是4班的人数,从图中可以看到4班人数为“33”。
(2)考查VB中的ADO访问数据库,从程序中:
“datasoure=”+“Score.accdb”可判断数据库文件名为“Score.accdb”。
(3)分析本过程程序功能为“统计各班级平均分”,程序结构为双重循环,外层循环控制选择第i班,待内层循环求得本班成绩和之后求平均分(aver=sum/a(i+1)),内层循环累加本班成绩和。
从变量p初值为p=n+2和循环中“p=p+1”,结合题目表格中给出的从a(n+2)开始依次存储每个班学生的成绩,可以判断程序中变量n是班级数,a(p)可以依次读取每个学生的成绩。
所以①处为“n=a
(1)”(表格中说明a
(1)存储班级数),②处为累加各班每个学生的成绩到变量sum中,即“sum=sum+a(p)”。
答案
(1)33
(2)Score.accdb (3)①n=a
(1) ②sum=sum+a(p)
一、过程与自定义函数
1.依据结构化程序设计的思想,当需要解决的问题规模较大、复杂时,可以按功能细分成一个个小的功能模块,这样的小程序段,在VB中被称为过程;过程是一段能完成一个或多个特定功能的独立的程序段,并可以被其他过程调用。
程序中多处重复出现处理相同功能的程序段可以通过过程简化。
2.在VB中,过程有两种,一种是Sub子过程,一种是Function函数。
两者的区别在于:
Sub子过程只执行程序而不返回值,而Function函数执行程序后会返回值。
3.事件处理过程基本结构
Sub事件处理过程名(参数表)
语句块
EndSub
其中,事件处理过程名必须符合下面的规则:
对象名_事件的标准名。
VB的一些常用对象上的常见事件的标准名有:
窗体Form:
Form_Load、Form_Unload
文本框Text:
Text1_Click、Text1_KeyPress
命令按钮Command:
Command1_Click、Command1_DblClick
4.自定义函数基本结构
Function函数名(参数表)As类型名
语句块(至少有一个语句是:
函数名=表达式)
EndFunction
函数:
函数是类似于过程的另一个程序模块,不同之处是函数执行完成后,
函数的计算结果被送到函数的调用点上,供程序的后继部分继续进行处理。
例如:
用Sub过程实现求1!
+3!
+5!
。
SubFact(NAsInteger,FAsDouble)
DimIAsInteger
F=1
ForI=1ToN
F=F*I
NextI
EndSub
PrivateSubCommand1_Click()
DimF1AsDouble,F2AsDouble,F3AsDouble
DimsumAsDouble
CallFact(1,F1)′调用Fact过程求1的阶乘
CallFact(3,F2)′调用Fact过程求3的阶乘
CallFact(5,F3)′调用Fact过程求5的阶乘
sum=F1+F2+F3
Text1.Text=″1!
+3!
+5!
=″+Str(sum)
EndSub
注意:
Sub过程通过参数来返回结果。
例如:
利用自定义函数求1!
+3!
+5!
FunctionFact(NAsInteger)AsDouble′自定义函数Fact
DimiAsInteger,FAsDouble
F=1 ′F用于保存阶乘值
Fori=1ToN
F=F*i
Nexti
Fact=F ′给函数过程名赋值
EndFunction
PrivateSubForm_Click()
DimsumAsDouble
′调用函数
sum=sum+Fact
(1)+Fact(3)+Fact(5)
Text1.Text=″1!
+3!
+5!
=″+Str(sum)
EndSub
注意:
1.函数需先定义再调用。
2.函数通过函数名返回结果。
二、VB访问Access数据库
1.通过ADO对象中的Connection对象连接数据库,步骤如下(右边是对应的代码):
2.通过ADO对象中的Recordset对象读取数据库表中记录,步骤如下(右边是对应的代码):
【例】有一Access数据库“school.accdb”存放在f:
\2015Imt[JP]vb文件夹中,其中的“student”数据表用来存储学生的基本情况信息,包括学号(num)、姓名(name)、性别(sex)、分数(score),括号内的为对应字段名。
下列VB程序用来实现根据学号查询并显示学生信息,运行界面如下图所示。
在文本框Text1中输入学生的学号,单击“查询”,在文本框Text2、Text3、Text4中分别显示学生姓名、性别、分数。
为了实现上述目标,在划线处填入合适的语句或表达式:
PrivateSubCommand1_Click()
DimadocnAsNewadodb.Connection
DimadorsAsNewadodb.Recordset
Dimstr2AsString,str1AsString
str1=″Provider-Microsoft.ACE.OLEDB,12.0;datasource=f:
\2015Imt\vb\____①____″
adocn.Openstr1
str2=″select*fromstudentswherenum=″+Text1.Text
adors.Openstr2,adocn,adOpenDynamic,adLockOptimistic
Ifadors,EOF=TureThen
MsgBox″你输入的学号不存在″
Else
Text2.Text=adors.Fields(″name″).Value
Text3.Text=adors.Fields(″sex″).Value
____②____
EndIf
adors:
Close
adocn.Close
EndSub
解析 本题主要考查数据库的访问方法。
划线①处代码设置连接数据库的字符串,“datasource”是指被连接的数据库文件。
划线②处代码是在文本框Text4中输出分数。
答案 ①school.accdb
②Text4.Text=adors.Fields(“score”).Value
考点1 VB过程
【训练1】阅读下面的程序:
PrivateSubCommand1_Click()
Dima(1To4)AsInteger
a
(1)=1∶a
(2)=2∶a(3)=3∶a(4)=4
subPa() ′调用于过程subp
Fori=1To4
Printa(i)
Nexti
EndSub
SubsubP(b()AsInteger)
Fori=1To4
b(i)=2*i
Nexti
EndSub
程序运行后,单击命令按钮,输出结果为( )
A.1B.5C.2D.出错
2 6 4
3 7 6
4 8 8
解析 考查Sub过程的调用。
虽然按钮过程中对a()进行了赋值,但是随后又执行的subp子程序,VB中未指明的参数传送方式按地址传送,子程序中b()的地址即等于调用参数a()的地址,也就是说b()和a()其实是一个变量,只不过名字不同,所以在子程序中对b()的修改也就是对参数a()的修改,在子程序中通过了一个循环对b()赋值,循环值i等于1,2,3,4,b()的值等于i*2也就是2,4,6,8,返回后a()的值当然也就是2,4,6,8。
答案 C
考点2 VB自定义函数
【训练2】如果一个整数是另一个整数的平方,则称该数是“完全平方数”。
如:
1=1×1,4=2×2,9=3×3,所以1、4、9是完全平方数。
下列VB程序可以求出1到n(1≤n≤1000)之间的所有完全平方数之和:
PrivateSubCommand1_Click()
DimsAsLong ′用于存储1到n之间所有完全平方数之和
DimiAsInteger,nAsInteger
n=Val(Text1.Text)
s=0
Fori=1Ton
Ifok(i)Thens=s+i ′当ok函数返回值为True时′执行s=s+i
Nexti
Label1.Caption=Str(s)
EndSub
′ok函数用于判断变量t的值是否为完全平方数
Functionok(tAsInteger)AsBoolean
DimkAsInteger
Ifk*k=tThenok=TrueElseok=False
EndFunction
方框中的正确语句是( )
A.k=Int(Sqr(t))B.t=Int(Sqr(k))
C.k=t^2D.t=k^2
解析 自定义函数ok(t)框中代码用于产生整数k,用于判断k*k=t是否成立。
如果成立为完全平方数,如果不成立则不是完全平方数,k=Int(Sqr(t))。
答案 A
【训练3】下列VB程序用于求2个正整数(均小于10000)的最大公约数:
PrivateSubCommand1_Click()
DimxAsInteger
DimyAsInteger
DimzAsInteger
x=Val(Text1.Text)
y=Val(Text2.Text)
__z__=__gcd(a,__b) ′①
Text3.Text=Str(z)
EndSub
Functiongcd(aAsInteger,bAsInteger)AsInteger
DoWhile a__>__b ′②
Ifa>bThena=a-bElseb=b-a
Loop
gcd=b
EndFunction
其中,划线①,②部分有错,应改为________,________。
解析 ①处需要调用gcd函数,传入x,y的值,得到他们的最大公约数,返回给变量z。
②处循环终止条件应该是a等于b,要使循环运行,只需要a不等于b,而不是a>b。
答案 ①z=gcd(x,y) ②a<>b
【训练4】设计一个二进制数、十进制数、十六进制数混合加法计算的VB程序。
在文本框Text1中输入由数字、大写字母、“+”和“=”组成的加法运算式子,其中每一个数的最后一个大写字母表示它的进制,B表示二进制数、D表示十进数、H表示十六进制数,运算式子以“=”结束,点击“计算”按钮Command1,在标签Label1中输出十进制表示的计算结果,程序运行结果如图所示。
实现上述功能的VB程序如下,请在划线处填入合适的代码。
PrivateSubCommand1_Click()
DimsAsString,cAsString,s1AsString ′变量s1存放不同进制的加数
DimiAsInteger,resultAsInteger
s=Text1.Text
result=0
s1=″ ″
Fori=1ToLen(s)
c=Mid(s,i,1)
Ifc=″+″Orc=″=″Then
result=____①____
s1=″ ″
Else
s1=____②____
EndIf
Nexti
Label1.Caption=Str(result)+″D″
EndSub
Functionxtod(s2AsString)AsInteger ′将不同进制的数转换成十进制数
DimfAsString,cAsString,aAsInteger
DimnAsInteger,iAsInteger
f=Mid(s2,Len(s2),1)
Iff=″B″Then ′识别进制,保存在变量n中
n=2
ElseIff=″D″Then
n=10
ElseIff=″H″Then
n=16
EndIf
m=0
Fori=1ToLen(s2)-1
c=Mid(s2,i,1)
Ifc>=″0″Andc<=″9″Then
a=Asc(c)-Asc(″0″)
ElseIfc>=″A″Andc<=″F″Then
a=____③____
EndIf
xtod=____④____
Nexti
EndFunction
解析 函数xtod的作用是将字符串s2转换成十进制数,并通过函数名返回。
满足条件c>=″A″Andc<=″F″,表示将字母A-F转换数10-15,并通过按权展开法转换成十进制数。
主程序中,如果读取的字符不是+或=,把字符连接起来,作为一个加数,否则通过自定义函数,转换成十进制数并加到结果result中。
答案 ①result+ xtod(s1) ②s1+c ③a=Asc(c)-Asc(″A″)+10 ④xtod*n+a
考点3 递归算法
【训练5】用递归算法求1+2+3+…+100的和,假设递归函数名为s,下列叙述中正确的是( )
A.题目简单,不用编写主程序,只要编写自定义函数即可
B.自定义函数中递归式是:
s=s(n-1)+n
C.自定义函数中递归式是:
s(n)=s(n-1)+n
D.自定义函数中边界条件是:
ifn=1thens
(1)=1
答案 B
【训练6】下列VB程序模块可以计算正整数n阶乘的值。
Functionf(nAsInteger)AsInteger
Ifn<=1Then
f=1
Else
f=n*f(n-1)
EndIf
EndFunction
该模块采用的算法是( )
A.枚举B.查找C.排序D.递归
解析 在自定义函数f(n)中,从f=n*f(n-1)可以判断是递归算法。
答案 D
【训练7】某VB程序使用了递归函数,代码如下:
PrivateSubCommand1_Click()
Text1.Text=f(3)
EndSub
Functionf(xAsInteger)AsString
Ifx=1Then f=1 Else f=f(x-1)+2
EndFunction
运行程序并点击按钮Command1后,文本框Text1中显示的内容是( )
A.1B.3C.5D.7
答案 C
考点4 VB访问Access数据库
【训练8】利用ADO访问数据库的步骤是:
①定义和创建ADO实例变量 ②设置连接参数并打开连接 ③设置命令参数并执行命令 ④设置查询参数并打开记录集 ⑤操作记录集 ⑥关闭、回收有关对象
这些步骤的执行顺序应该是( )
A.①④③②⑤⑥B.①③④②⑤⑥
C.①③④⑤②⑥D.①②③④⑤⑥
解析 利用ADO访问数据库,想要读取数据库中的数据,先要定义和创建ADO对象实例变量,然后下一步就是要与数据库取得连接,接着利用连接参数进行数据库连接,连接后根据SQL命令执行返回记录集,并对记录集进行操作,当操作结束不需要使用连接对象时,要用close方法来关闭连接。
所以答案为D。
答案 D
【训练9】小王编写了一个VB程序,用于读取某数据库中的数据,部分代码如下:
DimconnAsNewADODB.Connection
DimrsAsNewADODB.Recordset
conn.ConnectionString=″Provider=Microsoft.ACE.OLEDB.12.0;DATASource=″&App.Path&″\\mydata.accdb″
Setrs.ActiveConnection=conn
rs.Open″select*fromketi″
n=0
DoWhileNotrs.EOF
n=n+1
rs.MoveNext
Loop
下列对于以上代码的理解正确的有( )
①接的数据库文件名是“mydata”
②“ConnectionString”是conn对象的属性值
③查询的数据表名称是“k