学业水平测试信息技术第四部分 专题三.docx

上传人:b****3 文档编号:24882571 上传时间:2023-06-02 格式:DOCX 页数:35 大小:179.14KB
下载 相关 举报
学业水平测试信息技术第四部分 专题三.docx_第1页
第1页 / 共35页
学业水平测试信息技术第四部分 专题三.docx_第2页
第2页 / 共35页
学业水平测试信息技术第四部分 专题三.docx_第3页
第3页 / 共35页
学业水平测试信息技术第四部分 专题三.docx_第4页
第4页 / 共35页
学业水平测试信息技术第四部分 专题三.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

学业水平测试信息技术第四部分 专题三.docx

《学业水平测试信息技术第四部分 专题三.docx》由会员分享,可在线阅读,更多相关《学业水平测试信息技术第四部分 专题三.docx(35页珍藏版)》请在冰豆网上搜索。

学业水平测试信息技术第四部分 专题三.docx

学业水平测试信息技术第四部分专题三

专题三 过程及自定义函数、递归算法、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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1