高考选考信息技术必修3 第一章算法及VB语言.docx
《高考选考信息技术必修3 第一章算法及VB语言.docx》由会员分享,可在线阅读,更多相关《高考选考信息技术必修3 第一章算法及VB语言.docx(24页珍藏版)》请在冰豆网上搜索。
高考选考信息技术必修3第一章算法及VB语言
第一章 算法及VB语言
[考试标准]
考试内容
考试要求
考试属性
1.算法的基本概念及常用表示方法
b
加试
2.面向对象程序设计的基本思想与方法
b
3.类、对象、属性、方法、事件和事件处理的概念及应用
c
4.VB应用程序的调试及运行
c
5.VB基本数据类型、常量、变量与数组
c
6.VB各类基本运算、表达式与常用的标准函数
c
7.常用VB语句
c
8.过程与自定义函数
c
VB应用程序是按模块化的方式组成的,一个程序模块是程序的一部分,每个模块负责解决整个应用问题的一部分任务。
程序模块分为过程和函数两种。
一、过程
可以将程序划分成一个个较小的逻辑单元,这样每个逻辑单元可以构成一个过程。
过程中的代码可以被重复调用,从而避免了不必要的代码的重复编制,减少了编程的工作量。
构造事件处理过程
Sub事件处理过程名(参数表)
语句块
EndSub
其中,事件处理过程名必须符合下面的规则:
对象名_事件的标准名。
VB的一些常用对象上的常见事件的标准名见下表:
对象
事件处理过程名
说明
文本框
Text
Text_Click
在文本框内单击鼠标
Text_DblClick
在文本框内双击鼠标
Text_KeyPress
文本框被激活后,用户在键盘上按下了某个键
命令按钮Command
Command_Click
在命令按钮上单击鼠标
标签Label
Label_Click
在标签上单击鼠标
窗体Form
Form_Load
窗体装载
通过过程:
是一个独立的程序段,不同的事件可能需要使用同一个程序段时,可以把这个程序段单独地建立成一个通用过程,供其他事件处理过程或其他通用过程调用。
二、函数
函数是类似于过程的另一种程序模块,不同之处是函数执行完成后,函数的计算结果被送到函数的调用点上,供程序的后继部分继续进行处理。
自定义函数格式:
Function函数名(参数表)As 类型名
语句块
End__Function
函数名是为函数指定的名称,参数表是对一函数需要的原始数据类型一一地进行说明,As后的类型名,是说明函数的计算结果,即函数返回值的数据类型。
自定义函数的语句块中至少要有一个形如“函数名=表达式”的语句,这样,表达式的计算结果才能作为函数的返回值,被VB送到函数的调用点上。
【例1】 某VB程序如下:
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then
Text2.Text=Text1.Text+Str(5)
EndIf
EndSub
程序运行时,能触发该事件过程的是( )
A.单击文本框Text1
B.单击文本框Text2
C.文本框Text1被激活后,用户在键盘上按下某一个键
D.文本框Text2被激活后,用户在键盘上按下某一个键
解析 事件处理过程名必须符合规则:
对象名_事件的标准名。
Text1_KeyPress(KeyAsciiAsInteger)中Text1是这个事件过程的触发对象,所以排除B、D选项。
KeyAscii是事件过程的参数,意思是键盘输入后传递给程序的ASCII码。
结合if语句,当按下键盘上某一个键传递给程序的ASCII码值等于13的时候执行then后面的语句。
所以答案选C。
答案 C
[变式1] 有如下VB程序段:
DimiAsInteger,cAsString,sAsString,tAsString
s=”China2014IT”:
t=””
Fori=1ToLen(s)
c=Mid(s,i,1)
Ifc>=”a”Andc<=”z”Thent=t+c
Nexti
Label1.Caption=t
该程序段运行后,标签Label1中显示的内容是( )
A.2014B.ChinaITC.hinaD.CIT
解析 该程序的功能是取出字符串s中的小写字母。
答案 C
[变式2] 下面VB程序的功能为:
在文本框Text1和Text2中输入两个整数,单击按钮对象Command1,在标签对象Label1中显示这两个数的差。
Functionlsc(x,y)AsInteger
Ifx>yThen
lsc=x-y
Else
lsc=y-x
EndIf
EndFunction
PrivateSubCommand1_Click()
Dima1AsInteger,a2AsInteger
a1=Val(Text1.Text)
a2=Val(Text2.Text)
Label1.Caption=________
EndSub
要实现上述功能,程序画线处应填入的语句为( )
A.lsc(x,y)
B.lsc(Text1.Text,Text2.Text)
C.lsc
D.lsc(a1,a2)
解析 自定义函数lsc用于求两个整数的差,由于输入的整数为a1、a2,因此画线处应填的语句为lsc(a1,a2),答案为D。
答案 D
[变式3] 某VB应用程序的两个事件过程如下:
PrivateFunctionout(xAsInteger,yAsInteger,zAsInteger)AsInteger
DimtempAsInteger
Ifx>yThentemp=yElsetemp=x
Iftemp>zThentemp=z
out=temp
EndFunction
PrivateSubCommand1_Click()
DimaAsInteger,bAsInteger,cAsInteger
a=1
b=2
c=3
Text1.Text=out(a,b,c)
EndSub
程序运行时,单击命令按钮command1后,在文本框Text1中显示的内容是( )
A.0B.1C.2D.3
解析 自定义函数out的功能是求三个数中的最小数,1、2、3三个数中的最小数为1,因此答案为B。
答案 B
[变式4] 小明在VB中定义了以下函数,功能是求a和b的最大公约数。
Functiongcd(aAsInteger,bAsInteger)AsInteger
DoWhileb>0
c=aModb
a=b
b=c
Loop
EndFunction
调试中发现计算结果一直是0。
经过仔细观察与分析,发现错误的原因是( )
A.函数名有错
B.变量c没有定义
C.函数没有返回值
D.b>0应该改为b>=0
解析 A选项函数名的命名规则同变量名。
VB中可以省略一些变量的定义,未定义的变量即为通用类型,即根据赋值变化数据类型,所以B选项局部变量c未定义,不影响程序运行。
D选项把循环条件改成b>=0反而会使DoWhihe……Loop循环进入死循环。
所以正确答案是C。
答案 C
[变式5] 在VB中,设已定义函数过程f,它有三个实型传值参数。
设a,b,c为实型变量,则下列能调用该函数的正确语句是( )
A.fB.f(a+b,b+c)
C.f(a+b,b+c,c+a)D.fa+b,b+c,c+a
解析 注意函数的格式。
答案 C
【例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
解析 在判断t是否为完全平方数之前,先取出k的值,使k=Int(Sqr(t)),若正好有k*k=t,则得出结论:
t是完全平方数,ok=True。
答案 A
【例3】 (2016·9月嘉兴测试)VisualBsaic程序段如下:
Functiof(xAsSingle,yAsSingle)AsSingle
Ifx>yAndy<0Thenf=x^Abs(y)Elsef=x*Int(Spr(y))
EndFunction
PrivateSubCommand1Click()
DimaAsSingle,bAsSingle
a=Val(Text1.Text):
b=val(Text2.Text)
Text3.Text=Str(f(a,b))
EndSub
该程序段运行后,文本框Text1、Text2分别输入3,2后,单击命令按钮Command1,文本框Text3中显示的是( )
A.2B.3C.6D.9
解析 本题考查简单的自定义函数,程序运行后,输入两个值3和2分别给变量a和b,text3.text=str(f(a,b))调用自定义函数f,自定义函数f将3和2两个参数变量传递给x和y,判断“x>yandy<0”为假,则返回函数值“x*int(sqr(y))”即“3*int(sqr
(2))”,结果为3。
答案 B
【例4】 (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
l
i
k
e
C
H
N
p
o
s
t
c
a
r
d
小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:
单击“加密”按钮Command1,程序依次将文本框Text1中每个字符的ASCII码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。
下表显示了字符串中一个字符的加密过程:
←转换前字符m
←字符m的ASCII码十进制值
←对应的二进制数
←分割、转换后的十进制数
←对应的加密字符
K
程序运行效果如图所示。
实现上述功能的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”,加密后的密文可能无法解密,原因是__________________________________________________________
_____________________________________________________________________
_____________________________________________________________________。
解析 本题考查过程和自定义函数,常用标准函数等。
(1)根据题意,对文本框Text1中输入的字符串逐个字符加密,需算出字符串的长度n,作为循环变量的终值,即n=Len(s)。
加密后的字符串(密文)存储于字符串变量ss中。
②自定义函数Code2Char()中,根据密码表对应的每个十进制数转换为1个加密字符,第一个加密字符对应十进制值为0,故当十进制数值为6时,对应的字符H是第6+1个字符位置,即当十进制数值为c时,对应的字符是第c+1个字符位置,用取子串函数Mid(s,c+1,1)。
(2)若密码表中值为0对应的加密字符I改为i,造成同时对应加密字符i,当解密时,加密字符i对应的十进制有两个值0和2,不唯一而出错,从而无法解密。
答案
(1)①n=Len(s)[或n=Len(Text1.Text)]
②Mid(s,c+1,1)
(2)加密字符i对应两个值0,2
【易错易误】
过程:
将程序划分为一个个较小的逻辑单元,每个逻辑单元构成一个过程。
过程中的代码可以被重复地调用。
过程分成两类:
事件处理过程和通用过程。
事件处理过程:
Sub事件处理过程名(参数表)
语句块
EndSub
VB预设的事件有:
Click(单击)、DblClick(双击)、KeyPress(按键)、Load(装载)、Change(改变)等。
VB的一些常用对象上的常见事件的标准名有:
文本框Text:
Text1_Click、Text1_DblClick、Text1_KeyPress、Text1_Change
命令按钮Command:
Command1_Click
标签Label:
Label1_Click
窗体Form:
Form_Load(窗体装载)
1.字符串变量a的值为“Hello,world!
”,下列VisualBasic表达式的值是“world”的是( )
A.Len(a,6,5)B.Mid(a,6,5)
C.Mid(a,7,4)D.Mid(a,7,5)
解析 Mid(X,n,k)的作用是取字符串X中第n个字符起长度为k的子串。
Mid(a,7,5)的功能是取字符串变量“Hello,world!
”中第7个字符“w”起长度为5的子串,即“world”。
答案 D
2.运行如下VB程序:
PrivateSubCommand1_Click()
DimxAsInteger
DimyAsString
x=Val(Text1.Text)
Ifx>=95Then
y=”非常满意”
ElseIfx>=80Then
y=”满意”
ElseIfx>=60Then
y=”基本满意”
Else
y=”不满意”
EndIf
Label1.Caption=y
EndSub
在文本框Text1中输入50,单击命令按钮Command1后,在标签Label1中显示( )
A.非常满意B.满意
C.基本满意D.不满意
解析 当x=50时,执行y=“不满意”。
答案 D
3.某对象的一个事件过程代码如下:
PrivateSubObj_Click()
s=s+1
Text1.Text=Str(s)
EndSub
下列说法正确的是( )
A.该过程的过程名为“Obj”
B.该对象的类名为“Sub”
C.该对象的对象名为“Obj_Click”
D.该事件是一个“单击”事件
解析 由题中可以看出是一个“单击”事件。
答案 D
4.窗体装载事件过程可以对程序进行初始化。
VB窗体装载事件过程的名称是( )
A.Command1_ClickB.Form_Keypress
C.Form_LoadD.Form_DblClick
答案 C
5.下面VB程序的功能是判断一个数是否为一个完全平方数。
在文本框Text1中输入一个整数,单击按钮对象Command1,如果此数是一个完全平方数,则在标签对象Label1中显示“Yes”,否则显示“No”。
所谓完全平方数,是指一个数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数,也叫平方数。
例如,1、4、9、16等是完全平方数。
Functionjudge(x)AsBoolean
judge=False
Ifx=Sqr(x)^2Then____①____
EndFunction
PrivateSubCommand1_Click()
DimxAsInteger
x=Val(Text1.Text)
Ifjudge(x) Then
Label1.Caption=”Yes”
Else
②____
EndIf
EndSub
为实现上述功能,请分别在画线①和画线②处填入合适的语句。
画线①处应填入的语句为_______________________________________________
_____________________________________________________________________
画线②处应填入的语句为_______________________________________________
_____________________________________________________________________
解析 分析可知,①处代码是完全平方数的情况,因此应填入judge=True;根据题意,如果输入的整数不是完全平方数,则在标签对象Label1中显示“No”,因此②处代码为Label1.Caption=“No”。
答案 ①judge=True ②Label1.Caption=“No”
6.以下是求阶乘和1!
+2!
+……+10!
的程序,单击按钮(Command1)后,结果输出显示在窗体上,使用Function函数计算某个数的阶乘,请将画线处的代码补充完整。
PrivateSubCommand1_Click()
Fori=1To10
Sum=________①________
Nexti
PrintSum
EndSub
Functionjiecheng(num)
jiecheng=1
Fori=1Tonum
________②________
Nexti
EndFunction
答案 ①Sum+jiecheng(i) ②jiecheng=jiecheng*i
7.下列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
DoWhilea>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
8.在VB中,有如下程序:
Functionmax(xAsInteger,yAsInteger)AsInteger
Ifx>yThenmax=xElsemax=y
EndFunction
PrivateSubCommand1_Click()
DimaAsInteger,bAsInteger,cAsInteger
DimdAsInteger,zAsInteger
a=Val(Text1.Text)
b=Val(Text2.Text)
c=Val(Text3.Text)
d=max(a,b)
z=max(d,c)
Text4.Text=Str(d)
Text5.Text=Str(z)
EndSub
运行该程序,在文本框Text1、文本框Text2、文本框Text3中分别输入2、-5、6后,单击命令按钮Command1,文本框Text4中显示的是①________,文本框Text5中显示的是②________。
解析 由程序运行可知,Text4显示2,Text5显示6。
答案 ①2②6
1.下列问题不能用算法描述的是( )
A.已知a、b、c的值,求一元二次方程ax2+bx+c=0(a≠0)的实数根
B.计算某个班级学生身高的平均值
C.列出方程y=2x+1的所有实数解
D.根据三角形三边长度求三角形面积
解析 选项C中,所有的实数解个数有无数个,所以它违背了算法的有穷性特征,因此不能用算法描述。
答案 C
2.在VB数组说明语句Dimd(3To8,4To9)AsBoolean中,数组d的变量类型是( )
A.长整数型B.字符串型
C.单精度实数型D.逻辑型
解析 “Boolean”表示逻辑型数组。
答案 D
3.某宾馆的房间号由5位字符组成(例如A0823表示A幢8层33号房间),末位数字为奇数时表示房间朝南、为偶数时表示房间朝北。
字符串变量s中存储了1个房间号,下列能正确判断房间朝南的VB表达式是( )
A.Val(Mid(s,5,1))Mod2=1
B.Val(Mid(s,5,1))Mod2=0
C.Val(Mid(s,5,1))\2=1
D.Val(Mid(s,5,1))\2=0
解析 要判断房间朝南,则先取出房间号中的第5位数字,然后将其转换为数值后除以2,若余数为1,则表示是奇数。
答案 A
4.下列VB表达式的值等于3的是( )
A.Sqr
(2)+1B.Abs(-1)-2
C.Asc(“1”)+2D.Len(“-2”)+1
解析 Sqr(x)