专题五 算法与VB语言基础
挖命题
【考情探究】
考点
考试内容
考试要求
5年考情
预测热度
考题示例
考向
难度
算法
及算
法的
表示
计算机解决问题的一般过程
a
★★★
算法的概念
a
算法的特征
b
算法的表示
c
2015浙江10月学考+选考,5,2分;2016浙江4月学考+选考,5,2分;2016浙江10月学考+选考,5,2分;2017浙江4月学考+选考,6,2分;2017浙江11月学考+选考,5,2分;2018浙江4月学考+选考,7,2分;2018浙江6月学考,5,2分;2018浙江11月学考+选考,5,2分
循环结构流程图
★★★
算法的三种基本结构
b
面向
对象
程序
设计
面向对象程序设计的基本思想
a
★★★
类、对象、属性、方法、事件、事件处理过程的概念
c
2015浙江10月学考+选考,14,1分;2016浙江4月学考+选考,14,1分;2016浙江10月学考+选考,14,1分;2017浙江4月学考+选考,14,1分;2017浙江11月学考+选考,14,1分;2018浙江4月学考+选考,14,1分;2018浙江6月学考,11,1分;2018浙江11月学考+选考,14,1分
程序界面设计中的控件、属性、事件、方法等知识和概念
★☆☆
事件处理过程的代码编写
c
面向
对象
程序
设计
VB程序的建立、调试和保存
c
2016浙江4月学考+选考,17,1分;2016浙江10月学考+选考,14,2分;2017浙江4月学考+选考,17,1分;2017浙江11月学考+选考,14,2分;2017浙江11月学考+选考,17,1分;2018浙江4月学考+选考,14,2分;2018浙江4月学考+选考,17,2分;2018浙江11月学考+选考,17,2分
根据算法分析实例,得出结果,一般学考程序大题及选考最后一个大题都有一空是程序分析题
★★★
★★★
VB程
序设
计初
步
基本数
据类型、
常量和
变量
VB基本数据类型
b
2015浙江10月学考+选考,12,2分
整型、字符串型和逻辑型是热门考点
★★☆
★★★
常量、变量
b
★★★
数组
c
2016浙江4月学考+选考,16,2分;2016浙江4月学考+选考,17,2分;2017浙江4月学考+选考,17,4分;2017浙江11月学考+选考,17,4分;2018浙江4月学考+选考,17,4分;2018浙江11月学考+选考,17,4分
数组加循环语句是选考题中的热门题型
★★★
★★★
基本运
算与表
达式
算术、关系、逻辑三种基本运算
c
2016浙江10月学考+选考,14,2分
取整函数Int、整数除、求余Mod、随机函数Rnd是热门考点
★★☆
★★★
常用标准函数
c
2018浙江6月学考,11,2分
字符串处理函数Mid和Len是学考热门考点
★★☆
★★★
VB基本
语句与
语法
赋值语句
c
2016浙江4月学考+选考,17,3分;2016浙江10月学考+选考,11,2分;2017浙江4月学考+选考,14,2分;2018浙江6月学考,11,2分;2018浙江11月学考+选考,14,4分
学考程序大题一般考单层循环+选择语句;选考程序大题一般考双重循环+选择语句
★★☆
★★★
选择语句
c
★★☆
★★★
循环语句
c
★★★
★★★
注释语句
a
模块
化程
序设
计
模块化程序设计的基本思想
b
★☆☆
过程的定义及使用方法
b
自定义过程一般不考
★☆☆
自定义函数的定义及调用方法
c
2017浙江4月学考+选考,17,1分;2018浙江4月学考+选考,17,1分
学考不要求,是选考的热门考点
★★★
★★★
分析解读 本专题的内容涉及算法及算法的表示、VB程序设计环境、VB程序设计基础知识三个方面。从学考和选考试题来看,以选择题和非选择题形式考查学生对基本知识的理解掌握。复习时应着重提高VB程序设计的实战能力。
在目前出现的真题中,有些题型是比较固定的,比如在选择题(学考部分)中均有一题考查循环结构流程图;第14题的第(1)小题均考查了面向对象程序设计的基础知识;在程序大题中经常出现分析题,题目中给出算法分析及代码,然后给出一个实例,求该实例的结果。
加试题中除了要求对几个经典算法熟练掌握之外,题中还有大量一维数组的应用,事实上经典算法如排序、查找也是基于一维数组与循环语句的综合应用。因此熟练掌握数组和VB基本语句语法,才是解题的关键点。
以目前的真题来看,一般选择题第11题和第12题,会考到一个数组运用,不一定是经典算法,该题主要考查数组和语句综合运用,通常该题需要较长的解题时间。此外第17题大题一般也不考经典算法,而是考查数组的综合运用,比如加密解密问题、压缩解压缩问题、矩阵问题等,该题往往是整卷最难的题,做题时,需要合理分配时间,并且可以考虑分步拿分。
破考点
【考点集训】
考点一 算法及算法的表示
1.(2015浙江10月学考+选考,5,2分)某算法的部分流程图如图所示。执行这部分流程后,“x←x-2”被执行的次数为( )
/
A.0 B.1
C.2 D.3
答案 C
2.(2018宁波十校联考,5,2分)某算法流程图如图所示,执行这部分流程,变量sum的值为( )
/
A.1 B.3 C.4 D.0
答案 A
考点二 面向对象程序设计基础
1.(2017浙江11月学考+选考,14,1分)要使程序运行时,窗体Form1标题显示“字符串生成”,可在Form_Load事件过程中添加语句 (单选,填字母:A.Form1="字符串生成" / B.Form1.Text="字符串生成"/ C.Form1.Caption="字符串生成")。?
答案 C
2.(2015浙江10月学考+选考,14,1分)编写VB程序,实现如下功能:在文本框Text1和Text2中分别输入一个整数,单击命令按钮Command1,在列表框List1中显示结果,运行效果如图a所示。结果包含两列数据,第1列为两数之间的摄氏温度值(间隔1度、升序),第2列为对应的华氏温度值。
/
图a
/
图b
要使命令按钮Command1上显示的文本改为“转换”,可在其属性窗口(如图b所示)中将 属性的属性值修改为“转换”。?
答案 Caption
3.(浙江十校联盟2018年下半年选考适应性考试,14,1分)编写如下程序:
/
设计如图所示的程序界面,至少要使用 个类(填数字)。?
答案 4
考点三 VB程序设计初步
1.(2018浙江十校联盟选考适应性考试,11,2分)【加试题】有如下VB程序段:
For i=1 To 10
b(a(i) Mod 10)=b(a(i) Mod 10)+1
b(a(i) 10)=b(a(i) 10)+1
Next i
num=0
For i=0 To 9
If b(i) >num Then num=b(i)
Next i
数组b各元素初始值为0,数组元素a(1)到a(10)的值依次为“68,17,24,30,36,40,55,58,61,66”,执行该程序段后,num的值为( )
A.2 B.3 C.4 D.5
答案 D
2.(2018浙江绍兴柯桥高三选考,14,5分)编写一个“二进制转十六进制”的 VB 程序,实现如下功能:在文本框 Text1中输入一个二进制数,单击“转换”按钮 Command1,在文本框 Text2 中显示对应的十六进制数。程序界面如图所示:
/
(1)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Const w="0123456789ABCDEF"
Dim i As Integer,n As Integer,c As String,s As String,s2 As String
s=Text1.Text
For i=1 To 4-Len(s)Mod 4
s="0"+s
Next i
i=1:n=0
Do While i <=Len(s)
① n=n*2+Val(c)?
If ② Then?
s2=s2+Mid(w,n+1,1)
n=0
End If
i=i+1
Loop
Text2.Text=s2
End Sub
(2)若删除程序中加框部分的代码,在文本框 Text1 中输入“1101011010”,单击“转换”按钮后,文本框 Text2 中显示的内容是 。?
答案 (1)①c=Mid(s,i,1) ②i Mod 4=0 (2)D6
考点四 模块化程序设计
1.某游戏规则如下:将2*n位队员按2人一组分成n个队(n<10),地面上有一排格子,共2*n个,每个格子都对应一个小于10的随机正整数。游戏开始后,所有队员都选择站到一个空的格子里,等他们站满格子后,开始为每位队员进行记分。记分规则:每组包括甲乙两个队员,甲队员的分数是从自己所站的格子开始,按照格子序号递减,将这些格子中的数字一直累加到第1个格子。乙队员的分数是从自己所站的格子开始,按照格子序号递增,一直将格子中的数字累加到第2*n个格子。如果同一队的两名队员得到的分数相同,则该组参赛队获胜。
例如:如图所示,有4个队8位队员,地上一排格子的数字依次为:2、1、1、7、9、2、5、6。若某队甲队员站在第4个格子,则其分数为2+1+1+7=11;乙队员站在第7个格子,则其分数为5+6=11。两者相等,则该队获胜。
/
(1)假设有3组队员,地上一排格子的数字依次为6、7、3、4、3、9。若某组甲队员站在第3个格子上,那么该组乙队员站在第 个格子上才能获胜。?
/
(2)实现上述功能的VB程序如下。请在划线处填入合适的代码。
Dim n As Integer
Dim gz(1 To 20) As Integer
Private Sub Command1_Click()
Dim dfa As Integer,dfb As Integer
Dim ta As Integer,tb As Integer
① ?
Randomize
For i=1 To 2*n
gz(i)=Int(Rnd*9+1)
List1.AddItem "gz(" & i & ")" & gz(i)
Next i
num=1
For j=1 To 2*n
ta=j
dfa=zwdf(ta,True)
For k=1 To 2 * n
tb=k
② ?
If dfa=dfb Then
List2.AddItem num & "甲队员(" & j &")得分=" & dfa & "乙队员(" & k & ")得分=" & dfb
num=num+1
End If
Next k
Next j
List2.AddItem "获胜的站法共有:"+ ③ + "种"?
End Sub
Function zwdf(p As Integer,r As Boolean) As Integer
Dim fs As Integer
If r=True Then
④ ?
fs=fs+gz(i)
Next i
Else
For i=p To 2*n
fs=fs+gz (i)
Next i
End If
zwdf=fs
End Function
答案 (1)4 (2)①n=Val(Text1.Text)
②dfb=zwdf(tb,False)或dfb=zwdf(k,False)
③Str(num-1) ④For i=p To 1 Step -1 或 For i=1 To p
2.颜色反相是Photoshop中一种常用的操作,其实现原理是把每个像素的颜色用24位二进制数来表示,将其每位二进制数取反(0改为1,1改为0),即变为另一种颜色。某同学使用VB编写了计算反相颜色的程序,其功能如下:程序运行时,在文本框Text1中输入一个十六进制表示的颜色值,单击“颜色反相”按钮后,在标签Label1中输出该颜色对应的反相颜色(使用RGB表示),比如输入#FE1205,则在标签Label1中输出 RGB(1,237,250)。程序运行界面如图所示。
/
十六进制颜色与 RGB 颜色表示对照表如下:
颜色
R
G
B
十进制
100
255
10
十六进制
64
FF
0A
例如,十六进制颜色#64FF0A,用 RGB 颜色表示为 RGB(100,255,10),每个 RGB 颜色分量对应两位十六进制数。
实现上述功能的 VB 程序如下,请回答下列问题:
(1)程序运行时,在文本框中输入“#D507F2”,则标签 Label1上显示的内容为 。?
(2)请在划线处填上合适的代码。
Private Sub Command1_Click()
Dim i As Integer,j As Integer,x As Integer
Dim s As String,ch As String
Dim a(0 To 23) As Integer
For i=0 To 23
a(i)=1
Next i
s =Mid(Text1.Text,2,6)
For i=1 To 6
ch=Mid(s,i,1)
If ch >="0" And ch <="9" Then
x =Val(ch)
Else
① ?
End If
j=4*i-1
Do While x>0
a(j)= ② ?
x=x 2
j=j- 1
Loop
Next i
s="": x=0
For j=0 To 23
③ ?
If j Mod 8=7 Then
If j < 23 Then
s=s +Str(x) &","
Else
s=s +Str(x)
End If
x=0
End If
Next j
Label1.Caption="RGB("& s &")"
End Sub
答案 (1)RGB(42,248,13)
(2)①x=Asc(ch)-55 或者 x=Asc(ch)-Asc("A")+10
②1- x Mod 2
③x=x+a(j)*2^(7- j Mod 8)或其他等价答案
过专题
【五年高考】
考点一 算法及算法的表示
A组 2014—2018年真题·基础题组
1.(2017浙江11月学考+选考,5,2分)某算法的部分流程图如图所示,执行这部分流程后,输出a,b的值分别是( )
/
A.5,8 B.4,8 C.5,11 D.4,11
答案 C
2.(2016浙江10月学考+选考,5,2分)某算法的部分流程图如图所示,执行这部分流程后,变量a,b的值分别是( )
/
A.3,3 B.3,4 C.6,6 D.7,11
答案 D
3.(2016浙江4月学考+选考,5,2分)某算法的部分流程图如图所示,执行这部分流程后,变量x的值是( )
/
A.0 B.1 C.2 D.3
答案 B
B组 2014—2018年真题·提升题组
1.(2018浙江11月学考+选考,5,2分)某算法的部分流程图如图所示。执行这部分流程,分别输入35、50、60,则输出值依次为( )
/
A.10,3 B.10,4 C.7,10,4 D.10,12,3
答案 B
2.(2018浙江6月学考,5,2分)某算法的部分流程图如图所示,以下说法正确的是( )
/
A.该流程执行后,变量k的值是-1
B.该流程执行后,变量a的值是16
C.该流程用于计算并输出1+8-16的值
D.该流程完整执行1次,“a<32?”共执行了3次
答案 D
3.(2017浙江4月学考+选考,6,2分)某算法的部分流程图如图所示。执行这部分流程,依次输入3,4,-1,则输出s的值是( )
/
A.-2 B.-1 C.0 D.1
答案 B
考点二 面向对象程序设计基础
考点三 VB程序设计初步
A组 2014—2018年真题·基础题组
1.(2015浙江3月学考,3分)下列属于Visual Basic实数常量的
是( )
A.0.618 B.1/2 C.True D.“2014-9-1”
答案 A
2.(2015浙江3月学考,3分)在Visual Basic中,若x是3的倍数,则下列表达式值一定为真的是( )
A.x/3=0 B.x*3=0 C.x mod 3=0 D.3-x=0
答案 C
3.(2018 浙江 11 月选考,14,5 分)在平面坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框Text1中依次输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这条折线的长度,结果显示在Label1中。例如,三个点的坐标为(5,10),(8,12),(6,17)输入格式如图所示。
/
(1)Cmd对象属于 类(单选,填字母:A.Form / B.Label/C.TextBox/D.CommandButton)。?
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Cmd_Click()
Dim i As Integer,j As Integer,k As Integer
Dim x1 As Single,y1 As Single,x2 As Single,y2 As Single
Dim d As Single,Totald As Single,v As Single,s As String
s= ① ?
x1=0∶y1=0 ’出发点为坐标原点
k=1∶j=1∶Totald=0
For i=1 To Len(s)
If Mid(s,i,1)="," Then
v=Val(Mid(s,j,i-j))’提取坐标值,保存在变量v中
j=i+1
If ② Then?
x2=v
Else
y2=v
d=Sqr((x2-x1)^2+(y2-y1)^2)
Totald=Totald+d
x1=x2:y1=y2
End If
k=k+1
End If
Next i
Label1.Caption=Str(Totald)
End Sub
(3)运行该程序,输入题干中的数据,程序执行到循环结束时,变量k为 。?
答案 (1)D (2)①Text1.Text ②k Mod 2=1 (3)7
4.(2017 浙江 11 月选考,14,5 分)编写“字符串生成”程序,实现如下功能:在文本框Text1 中(字符位置)输入多个正整数(以“,”为分隔符和结束符),单击“生成”按钮 Command1,程序以这些整数为位置信息,依次从文本框 Text2 中(字典内容)提取字符并连接成字符串,最后将字符串显示在标签 Label1 中(生成内容)。程序运行界面如图所示。
/
(1)要使程序运行时,窗体Form1标题显示“字符串生成”,可在Form_Load事件过程中添加语句 (单选,填字母:A.Form1="字符串生成"/ B.Form1.Text="字符串生成"/ C.Form1.Caption="字符串生成")。?
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, t As String, c As String
Dim i As Integer, p As Integer
s="":t=""
For i=1 To Len(Text1.Text)
c=Mid(Text1.Text, i, 1)
If c="," Then
p=Val(t)
s=s+Mid(Text2.Text, p, 1)
t=""
Else
t= ① ?
End If
Next i
Label1.Caption= ② ?
End Sub
(3)若文本框Text1中输入内容的结束符缺失(即输入内容为1,18,9,9),单击“生成”按钮后,标签Label1中显示的内容是 。?
答案 (1)C (2)①t+c(或 t&c) ②s (3)pas
B组 2014—2018年真题·提升题组
1.(2018浙江11月选考,11,2分)【加试题】有如下VB程序段:
For i=1 To 6
a(i)=Int(Rnd*10)+1
Next i
For i=1 To 5
If i Mod 2=1 And a(i) > a(i+1) Then
t=a(i):a(i)=a(i+1):a(i+1)=t
Else
a(i)=a(i)+1
End If
Next i
执行程序后,a数组各元素可能是( )
A.11,11,7,9,3,9 B.6,2,8,10,5,9
C.6,9,3,7,8,12 D.3,9,0,8,2,7
答案 A
2.(2018浙江11月选考,12,2分)【加试题】下列VB程序功能为:根据文本框Text1中各字符的大小关系,计算各字符升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~ y(4)各元素的值分别为“4,1,2,3”。
s=Text1.Text
n=Len(s)
For i=1 To n
y(i)=1
Next i
For i=1 To (1)
For j= (2) To n
If (3) Then
y(j)=y(j)+1
Else
y(i)=y(i)+1
End If
Next j
Next i
上述程序段3个加框处的表达式分别为( )
A.(1)n (2)1 (3)Mid(s, j, 1)>=Mid(s, i, 1)
B.(1)n (2)1 (3)Mid(s, j, 1)>Mid(s, i, 1)
C.(1)n-1 (2)i+1 (3)Mid(s, j, 1)>=Mid(s, i, 1)
D.(1)n-1 (2)i+1 (3)Mid(s, j, 1)>Mid(s, i, 1)
答案 C
3.(2018 浙江 4 月选考,11,2 分)【加试题】有如下VB程序段:
a(1)=1:a(2)=1
b(1)=1:b(2)=2
For i=3 To 5
a(i)=a(i-1)+a(i-2)
b(i)=b(i-1)+a(i)
Next i
执行该程序段后,数组元素 b(5)的值为( )
A.12 B.8 C.5 D.4
答案 A
4.(2017 浙江 11 月选考,11,2 分)【加试题】有如下 VB 程序段:
n=0
For i=1 To Len(Text1.Text)
c=Mid(Text1.Text,i,1)
If c>=“0”And c<=“9” Then m=1 Else m=2
a(m)= a(m)+1
If a(m)=1 Then n=n+1
Next i
数组a中各元素的初始值都为0,文本框Text1中的内容为“Happy2017”。执行该程序段后,变量n的值为( )
A.1 B.2 C.4 D.9
答案 B
5.(2018浙江 11 月选考,17,6 分)【加试题】某种数据加密方法描述如下(加密前后的数值都在0~ 255之间):
1)以m个数据为一段,将n个待加密数据依次分割成若干个数据段,剩余数据(个数小于m)为独立数据段。
2)数据加密规则:
数据个数等于m的数据段,先进行值变换,再进行位置变换,得到加密数据段。
数据个数小于m的数据段,只进行值变换,直接得到加密数据段。
3)依次合并加密数据段,即为最后的加密数据。
4)值变换:用值变换密钥数组x(元素个数为m,值为0~255的整数),将待加密数据段中的数据进行值变换,方法如下:
值变换后第i个元素=(待加密数据段第i个元素+x(i))Mod 256,其中i=1,2,……,m。
5)位置变换:用位置变换密钥数组y(元素个数为m,值为1~m的不重复整数),将上述值变换后的m个元素进行段内位置变换,方法如下:加密后数据段第y(i)个元素=值变换后第i个元素,其中i=1,2,……,m。
例如,n=5,m=3的数据加密过程如下:
/
(1)已知m=3,数组x与数组y中的数据如下表所示,则待加密数据段“155,1,250”加密后的数据段为 (填数据,用逗号分隔)。?
x(1)
x(2)
x(3)
10
20
30
y(1)
y(2)
y(3)
3
1
2
(2)小张根据上述加密算法,设计了一个对应的解密程序,其VB代码如下,请在划线处填入合适的代码(解密与加密使用相同的密钥数据)。
Private Sub Command1_Click()
Const n=100
Const m=6
Dim i As Integer, j As Integer
Dim a(1 To n) As Integer, b(1 To n) As Integer
Dim x(1 To n) As Integer, y(1 To n) As Integer
’读取值变换与位置变换密钥数据,分别保存在数组x与y中,代码略
’读取待解密数据,保存在数组a中,代码略
’下面进行位置变换,位置变换后数据保存到数组b中
For i=1 To ① ?
For j=1 To m
② ?
Next j
Next i
For i=(n m) * m+1 To n
b(i)=a(i)
Next i
’下面进行值变换,值变换后数据仍保存到数组b中
j=1
For i=1 To n
b(i)= ③ ?
j=j+1
If j>m Then j=1
Next i
’输出解密后数据,代码略
End Sub
答案 (1)21、24、165 (2)①nm 或 Int(n/m)
②b((i-1)*m+j)=a((i-1)*m+y(j))
③(b(i)+256-x(j)) Mod 256 或(b(i)+256-x((i-1)) Mod m+1)) Mod 256
考点四 模块化程序设计
2014—2018年真题·提升题组
1.(2018浙江4月选考,17,6分)【加试题】为分析数组 a 中各元素依次变化的情况,进行如下定义:
1)变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)
2)波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1 个,终点是峰顶后所有连续下降段中的最后 1 个。
3)对称波峰:上升段与下降段个数相同的波峰称为对称波峰。
下图为一组数据的变化段及波峰示意图。
/
现要求统计数组 a 各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计如下VB 程序。请回答下列问题:
(1)数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为 。?
(2)请在划线处填入合适的代码。
Const n=20
Dim a(1 To n) As Integer
Private Sub Form_Load()
’读取数据,并存储到数组 a 中,代码略
End Sub
Private Sub Command1_Click()
Dim flag As Integer ’存储变化段的状态:1 表示升,-1 表示降,0 表示平
Dim count As Integer ’存储对称波峰的个数
Dim steps As Integer
Dim i As Integer
flag=0:steps=0:count=0
For i= ① To n?
If a(i)>a(i-1) Then
If IsSymPeak(flag, steps) Then count=count+1
If flag=0 Or flag=-1 Then
② ?
Else
steps=steps+1
End If
flag=1
ElseIf a(i)=a(i-1) Then
If IsSymPeak(flag, steps) Then count=count+1
steps=0
flag=0
Else
steps=steps-1
flag=-1
End If
Next i
If IsSymPeak(flag, steps) Then count=count+1
Text1.Text=Str(count)
End Sub
Function IsSymPeak(flag As Integer, steps As Integer) As Boolean
If ③ Then?
IsSymPeak=True
Else
IsSymPeak=False
End If
End Function
答案 (1)3 (2)①2 ②steps=1 ③flag=-1 And steps=0
2.(2017浙江4月学考+选考,17,6分)【加试题】小王编写了一个依据成绩计算名次的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
…
程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框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=A(i)+B(i) 或 mc=mc+A(i)
教师专用题组
1.(2016浙江10月学考+选考,11,2分)【加试题】对称字符串的特征是从左到右读和从右到左读完全一样。如“abba”是对称的,“abcba”也是对称的。判断字符串是否对称的VB程序段如下:
n=Len(s)
k=0:j=n
For i=1 To n/2
Next i
If k=0 Then
Label1.Caption="对称"
Else
Label1.Caption="不对称"
方框中的代码由以下三部分组成:
①j=j-1
②If c1 <>c2 Then k=k + 1
③c1= Mid(s,i,1):c2=Mid(s,j,1)
代码顺序正确的选项是( )
A.①③② B.②③① C.③②① D.②①③
答案 C
2.(2015浙江10月学考+选考,12,2分)【加试题】有如下VB程序段:
Dim a(l To 5) As Integer, i As Integer, c As Integer
a(l)=2:a(2)=1:a(3)=3:a(4)=4:a(5)=5
c=0
For i=3 To 5
If a(i- 2) + a(i - 1)=a(i) Then c=c + 1
Next i
Text1.Text=Str(c)
该程序段运行后,文本框Text1中显示的内容是( )
A.1 B.2 C.3 D.4
答案 B
3.(2013浙江3月高考,5,3分)如果一个整数是另一个整数的平方,则称该数是“完全平方数”。如:1=1×1,4=2×2,9=3×3,所以1、4、9是完全平方数。下列VB程序可以求出1到n(1≤n≤1 000)之间的所有完全平方数之和:
Private Sub Command1_Click()
Dim s As Long ’用于存储1到n之间所有完全平方数之和
Dim i As Integer,n As Integer
n=Val(Text1.Text)
s=0
For i=1 To n
If ok(i) Then s=s+i ’当ok函数返回值为True时,执行s=s+i
Next i
Label1.Caption=Str(s)
End Sub
’ok函数用于判断变量t的值是否为完全平方数
Function ok(t As Integer)As Boolean
Dim k As Integer
If k*k=t Then ok=True Else ok=False
End Function
方框中的正确语句是( )
A.k=Int(Sqr(t)) B.t=Int(Sqr(k))
C.k=t^2 D.t=k^2
答案 A
4.(2015浙江9月学考,上机考,3分)计算s=1×2×3×4×5的某算法流程图如图所示:
/
若要计算s=2×4×6×8×10,则可将上述流程图中的“s←s×a”改为( )
A.s←a×2 B.s←s×2
C.s←s×(a×2) D.s←s+s×(a×2)
答案 C
5.(2014浙江3月高考,5,3分)某算法流程图如图所示。
/
对于该算法,下列说法正确的是( )
A.当n的值为800时,条件“n≤2000?”会被执行
B.当n为任意整数时,条件“n≤800?”必定会被执行
C.当n的值为2000时,输出p的值为0.25
D.输出p的值有可能为0
答案 B
6.(2016浙江4月学考+选考,16,3分)【加试题】某地1900~1999年的平均降水量数据保存在数据库中。现要求找出相邻两年年平均降水量变化(即本年度与上年度“年平均降水量”差值的绝对值)最大的年份区间。如果有多个符合要求的年份区间,只输入距今最近的。小吴为此编写了VB程序,程序运行时,单击按钮Command1后,在文本框Text1中输出运行结果。实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim w(1 To 100) As Single’依次存储1900~1999年的年平均降水量数据
Const n=100
Private Sub Form_Load()
’本过程从数据库中按1900~1999年依次读取年平均降水量数据,并存储在数组w中
’代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, imax As Integer
imax= 1 ’(1)
For i=3 To n
If Abs(w(i)-w(i-1)) >=Abs(w(i - 1)-w(i - 2))Then imax=i ’(2)
Next i
Text1.Text="年平均降水量变化最大的年份区间是" + Str(imax + 1898) + "-" + Str(imax + 1899)
End Sub
答案 (1) 2 (2) Abs(w(imax)-w(imax-1))
7.(2016浙江4月学考+选考,14,5分)编写VB程序,实现如下功能:在文本框Text1中输入某一年份,单击“天干地支与生肖”按钮Command1,在列表框List1中输出该年份开始的12个年份及对应的“天干地支”与“生肖”,运行界面如图所示,程序代码如下。
/
(1)代码“Private Sub Command1_Click()”中的Click是 (单选,填字母:A.对象名/B.属性名/C.事件名)。?
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a As Integer, b As Integer
Dim i As Integer, n As Integer
Dim c1 As String, s1 As String
Dim c2 As String, s2 As String
Dim c3 As String, s3 As String
List1.Clear
s1="甲乙丙丁戊己庚辛壬癸"
s2="子丑寅卯辰巳午未申酉戌亥"
s3="鼠牛虎兔龙蛇马羊猴鸡狗猪"
n=Val(Text1.Text)
For i=n To ① ?
a=(i+6) Mod 10
b=(i+8) Mod 12
c1=Mid(s1, a+1, 1)
c2=Mid(s2, b+1, 1)
c3=Mid(s3, b+1, 1)
List1.AddItem ② + "年" +c1+c2+" "+c3?
Next i
End Sub
(3)由上述算法可知,2024年对应的“天干地支”为 。?
答案 (1)C (2)① n+11 ② str(i) (3)甲辰
8.(2017浙江11月选考,17,6分)【加试题】由数组 a 生成数组 b 的方法描述如下:
1)将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割。
2)对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储到数组b中。
3)数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。
例如n=140时,可依次分割出3个数据块,元素个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。
“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。
以3×3 数据块为例,转换过程如图所示:
/
小明依据上述描述设计了如下 VB 程序。请回答下列问题:
(1)当n=120时,分割出的第3个数据块元素个数为 。?
(2)请在划线处填入合适的代码。
Const n=120
Dim a(1 To n)As Integer
Dim b(1 To n)As Integer
Private Sub Command1_Click()
Dim m As Integer,i As Integer
Dim Start As Integer ’当前未分割数据的第1个元素下标
Dim Left As Integer ’当前未分割数据的个数
Dim pa As Integer ’数组a的下标
Dim pb As Integer ’数组b的下标
’读取n个转换前的数据,依次存储到a(1)、a(2)、……、a(n)中,代码略
m=8
Start=1
Left=n
Do While Left>3
If Left m= ① ?
Else
pa=Start
pb=Start
For i=1 To m*m
b(pb)=a(pa)
pb=pb+1
If i Mod m=0 Then
② ?
Else
pa=pa+m
End If
Next i
③ ?
Start=Start+m*m
End If
Loop
For i=Start To n
b(i)=a(i)
Next i
’依次输出转换后的数据 b(1)、b(2)、……、b(n),代码略
End Sub
答案 (1)4 (2)①m-1 或其他等价表达式
②pa=Start+im 或 pa=pa-(m-1)*m+1或其他等价语句
③Left=Left-m*m 或 Left=n-Start-m*m+1或其他等价语句
9.(2016浙江4月学考+选考,17,6分)【加试题】某数据压缩方法描述如下:
1)原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;
2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个为0,第2个为0;
3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个为0,第2个为重复数的个数,第3个为该数本身;
根据上述压缩方法,对应的解压缩方法示例如图a所示。
/
图a
小明编写了一个解压缩VB程序,功能如下:窗体加载时,自动读取压缩数据,依次存储在数组元素a(1)、a(2)、a(3)……中,压缩数据的个数存储在变量n中,压缩数据显示在文本框Text1中。单击“解压缩”按钮Command1,程序对压缩数据依次进行解压缩处理,解压缩数据显示在文本框Text2中。程序运行界面如图b所示。
/
图b
(1)如果压缩数据为“23,0,21,66,0,0,77,0,5,0”,则解压缩数据的个数是 。?
(2)实现上述功能的VB程序如下。请在划线处填入合适代码。
Dim a(1 To 100) As Integer ’存储压缩数据,最大处理个数为100
Dim b(1 To 1000) As Integer ’存储解压缩数据,最大处理个数为1000
Dim n As Integer ’存储压缩数据的个数
Private Sub Form_Load()
’压缩数据由上述压缩方法生成
’本过程用于读取压缩数据并存储在数组a中,压缩数据个数存储在变量n中
’代码略
End Sub
Private Sub Command1_Click()
Dim pa As Integer ’存储压缩数组当前处理位置
Dim pb As Integer ’存储解压缩数组当前处理位置
Dim firstdata As Integer, count As Integer, i As Integer
pa=1:pb=1
Do While pa <=n
firstdata=a(pa)
If firstdata <> 0 Then ’示例1)情况处理
b(pb)=firstdata
pa=pa+1:pb=pb+1
Else
count=a(pa+1)
If count=0 Then ’示例2)情况处理
b(pb)=0
pa= ① :pb=pb+1?
Else ’示例3)情况处理
For i=1 To count
② ?
Next i
pa=pa+3: pb=pb+count
End If
End If
Loop
Text2.Text=Str(b(1))
For i=2 To ③ ?
Text2.Text=Text2.Text+","+Str(b(i))
Next i
End Sub
答案 (1)29 (2)①pa+2 ②b(pb+i-1)=a(pa+2)
③pb-1
10.(2015浙江10月学考+选考,17,5分)【加试题】某数据加密方法描述如下:
(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
109
0
1
1
0
1
1
0
1
6
13
H
a
←转换前字符m←字符m的ASCII码十进制值←对应的二进制数←分割、转换后的十进制数←对应的加密字符
程序运行效果如图所示。
/
实现上述功能的VB程序如下:
(1)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim n As Integer, s As String, i As Integer, ss As String
Dim a As Integer ’存储加密前字符的ASCII码
Dim b1 As Integer, b2 As Integer ’分别存储分割、转换后的两个十进制数
s=Text1.Text
① ?
For i=1 To n
a=Asc(Mid(s, i, 1))
b1=a 16
b2=a Mod 16
ss=ss + Code2Char(b1) + Code2Char(b2)
Text2.Text=ss
Next i
End Sub
’十进制值转换为加密字符的函数
Function Code2Char(c As Integer) As String
Dim s As String
s="IlikeCHNpostcard"
Code2Char= ② ?
End Function
(2)若将“密码表”中“0”对应的加密字符“I”改成“i”,加密后的密文可能无法解密,原因是 。?
答案 (1)①n=Len(s)或 n=Len(Text1.Text) ②Mid(s,c + 1, 1) (2)加密字符i对应两个值0,2
【三年模拟】
A组 2017—2019年模拟·考点题组
考点一 算法及算法的表示
1.某流程图如图所示。执行该算法,下面说法错误的是( )
/
A.s的值最终为-5
B.语句“k=k+1”共执行了4 次
C.语句“s≤0”共判断了5 次
D.该算法转成VB 代码时能用Do 循环语句实现
答案 A
2.某算法的部分流程图如图所示:
/
执行该算法,依次输入a的值2,5,4 后,变量b的值为( )
A.0.5 B.2 C.4 D.5
答案 B
3.(2018浙江“五校联考”第一次考试,6,2分)某算法的部分流程图如图所示,执行这部分流程,变量s的值为( )
/
A.10 B.24 C.6 D.23
答案 B
4.(2018绍兴选考科目诊断性考试,5,2分)某算法的部分流程图如图所示,执行这部分流程后,变量x的值是( )
/
A.5 B.4 C.6 D.10
答案 B
5.(2018温州选考适应性测试,7,2分)某算法的部分流程图如图所示。输入s值为2018,执行这部分流程后,s和i分别是( )
/
A.1,3 B.1,4 C.2,3 D.2,4
答案 D
6.(2018稽阳联谊学校联考,7,2分)某算法的部分流程图如图所示,执行该部分流程后,输出a,b的值分别为( )
/
A.1,25 B.1,24 C.3,24 D.3,25
答案 A
考点二 面向对象程序设计基础
1.有如下Visual Basic 语句,书写格式正确的是( )
A.Label1.Caption=“Hello!”
B.Label1.Caption=(-b+sqr(b^2-4ac)) / 2
C.List1.AddItem=“Hello!”
D.Text1.Text=str(“Hello!”)
答案 A
2.用VB模拟设计某软件的登录界面,如图所示,当鼠标单击“<请输入账号>”所在的文本框Text1时,文字内容就消失。则此事件处理的过程名应该是( )
/
A.登录窗口_Click B.Text1_KeyPress
C.Command1_Click D.Text1_Click
答案 D
3.现有一倒计时程序功能如下,初始状态下,任意输入一个非负整数(如图a所示),点击“开始”按钮,开始按秒倒计时,按钮显示内容变为“暂停”(如图b 所示),点击“暂停”按钮后,暂停倒计时,按钮内容变为“开始”,如此循环,程序如下:
/
Private Sub Command1_Click()
If Command1.Caption=“开始” Then
① ?
Command1.Caption=“暂停”
Else
Timer1.Enabled=False
Command1.Caption=“开始”
End If
End Sub
Private Sub Timer1_Timer()
Dim s As Integer
s=Val(Text1.Text)
② ?
End Sub
(1)计时器Timer1 的Interval 属性应该设置为 。?
(2)按要求完成填空:
① 。?
② 。?
答案 (1)1000 (2)①Timer1.Enabled=True ②Text1.Text=Str(s-1)
考点三 VB程序设计初步
1.某Visual Basic程序的一个事件过程如下:
Private Sub Command1_Click()
Dim r As Single
Dim pi As Double
r=100
pi=3.14
Label1.Caption=“圆面积为:”+pi*r*r
End Sub
运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,引起该错误的语句是( )
/
A.Dim r As Single
B.Dim pi As Double
C.pi=3.14
D.Label1.Caption=“圆面积为:”+pi*r*r
答案 D
2.下列VB 表达式的值等于2018 的是( )
A.Sqr(2000)+18
B.Mid(“2000”,1,2)+ “18”
C.Abs(-2014)+Len(“view”)
D.Str(2000)+Str(18)
答案 C
3.在Visual Basic 中,能表示整数x是完全平方数(如9=3×3,9是完全平方数)的表达式是( )
A.x^2=x×x B.Sqr(x)= x2
C.Int(sqr(x))^2=x D.(x2)^2=x
答案 C
4.求半径为r 的圆的面积,保留两位小数且四舍五入的表达式是( )
A.Int( 3.14* r * r *10 + 0.5) / 10
B.Int( 3.14* r * r * 100 + 0.5) / 100
C.Int( 3.14* r * r *1000+ 0.5) / 1000
D.Int( 3.14* r * 2 * 100 + 0.5) / 100
答案 B
5.求 1+(1+2)+…+(1+2+…+100)的值的 VB 程序段如下:
Private Sub Command1_Click()
Dim n As Integer, sum, sum1 As Long
sum=0:sum1=0
Next n
Print "1+(1+2)+…+(1+2+…+100)= "; sum1
End Sub
方框中的代码由以下三行组成:
①For n=1 To 100
②sum1=sum1 + sum
③sum=sum + n
代码顺序正确的选项是( )
A.①③② B.②③① C.③②① D.②①③
答案 A
6.斐波那契数列是指从第3项开始,每一项的值为前两项之和。如:1,1,2,3,5,8,13,…,下面程序用于求斐波那契数列的第n项的值:
Dim f1 As long,f2 As long,f As long
n=Val(Text1.Text)
f1=1
f2=1
For k=3 To n
Next k
Label1.Caption="斐波那契数列第"+str(n)+"项的值为"+str(f)
方框中的代码由以下三部分组成:
①f2=f ②f1=f2 ③f=f1+f2
代码顺序正确的选项是( )
A.①②③ B.③②① C.②③① D.②①③
答案 B
7.【加试题】根据以下程序,在Text1 文本框中输入3,最后在List1 中输出的是( )
Private Sub Command1_Click()
Dim i As Integer
Dim t As Integer
Dim s As String
i=1:t=1:n=Text1.Text
List1.Clear
Do While t <= n
s=s + “*”
If i=t Then
List1.AddItem s
t=t + 1
i=0
End If
i=i + 1
Loop
End Sub
** ** * *
B.** * ** * * * * *
C.***
D.* * ** **
答案 B
8.【加试题】下列程序执行后文本框 Text1 显示的内容是( )
s="ERROR:Divisor must not be zero!"
flag=False:m=0
For i=1 To Len(s)
ch=Mid(s, i, 1)
If ch >= "a" And ch <= "z" Then
If Not flag Then
m=m+1:flag=True
End If
Else
flag=False
End If
Next i
Text1.Text=Str(m)
A.4 B.5 C.6 D.19
答案 B
9.【加试题】有如下 VB 程序段:
n=Text1.Text:s=""
For i=1 To Len(n)
c=Mid(n, i, 1)
If c >= "a" And c <= "z" Then
p=1
ElseIf c >= "A" And c <= "Z" Then
p=2
Else
p=3
End If
a(p)=a(p) + 1
If a(p)=1 Then s=s + c
Next i
数组a中各元素的初始值都为 0,文本框 Text1 的内容为“GoodLuck2018”。执行程序后,变量 s 的值为( )
A.Go2 B.GL2 C.GoLu D.GoLu2
答案 A
10.【加试题】某程序部分代码如下:
Dim i As Integer, s As String
Dim a(1 To 10) As Integer,b(1 To 10) As Integer
a(1)=82:a(2)=96:a(3)=68:a(4)=93:a(5)=87
a(6)=95:a(7)=84:a(8)=91:a(9)=80:a(10)=98
For i=1 To 10
b(a(i)10)=b(a(i)10) + 1
Next i
For i=1 To 10
If b(i) > 0 Then
s=s &Str(b(i)) &" "
End If
Next i
Text1.Text=s
运行该程序后,在文本框 Text1 中显示的内容为( )
A.5 4 1 B.1 1 3 5 C.1 4 5 D.5 3 1 1
答案 C
11.【加试题】 有如下 VB 程序段:
n=10:dp=0:max=-100
For i=1 To n
If dp > 0 Then
dp=dp + a(i)
Else
dp=a(i)
End If
If dp > max Then max=dp
Next i
已知数组 a(1)到 a(10)的原始数据为 6,-6,8,-7,7,2,-2,-1,-2,4。程序执行后,变量 max 的值为( )
A.9 B.10 C.27 D.4
答案 B
12.(2018稽阳联谊学校联考,14,5分)编写一个删除数字字符串s中的最大和次大数字字符的程序。具体功能如下:在文本框Text1中输入一个数字字符串,单击“删数”按钮Command1,将删除后的结果显示在文本框Text2中。程序运行界面如图所示。
/
(1)要使程序运行时,按钮Command1上显示的标题为“删数”,可在Form_Load事件处理过程中添加语句 (单选,填字母:A.Caption.Command1="删数" / B.Command1.Caption="删数" / C.Caption="删数")。?
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, ch As String
Dim i As Integer, n As Integer
Dim max1 As Integer, max2 As Integer
s=Text1.Text:n=Len(Text1.Text)
If Mid(s, 1, 1) > Mid(s, 2, 1) Then
max1=1:max2=2
Else
max1=2:max2=1
End If
For i=3 To n
ch=Mid(s, i, 1)
If ch>Mid(s, max1, 1) Then
① ?
max1=i
ElseIf ch >= Mid(s, max2, 1) Then
max2=i
End If
Next i
For i=1 To n
If ② Then Text2.Text=Text2.Text & Mid(s, i, 1)?
Next i
End Sub
(3)若在文本框Text1中输入的内容为“82176736”,单击按钮Command1,文本框Text2中显示的内容是 。?
答案 (1)B (2)①max2=max1 ②i <> max1 And i <> max2或其他等价的答案 (3)217636
13.一个十进制整数的二进制表示中,如果数字“1”的个数多于数字“0”的个数,则称该整数为A类数。如十进制整数26的二进制表示为11010,26是一个A类数。下列VB程序的功能是:寻找前1000个自然数中所有A类数在List1中输出,并将统计个数在Text1中输出。
请回答以下问题。
(1)十进制数 37 (选填:是/不是)A 类数。?
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim i As Integer, n As Integer
Dim s As Integer ’s为A类数的个数
Dim t As Integer ’t为二进制数中"1"的个数
Dim k As Integer ’k为二进制数中"0"的个数
s=0
For i=1 To 1000
n=i:t=0:k=0
Do While n > 0
If ① Then t=t + 1 Else k= k + 1?
② ?
Loop
If t>k Then
List1.AddItem str(i)
s=s + 1
End If
Next i
Text1.Text=Str(s)
End Sub
答案 (1) 不是 (2)①n Mod 2 <>0 或 n Mod 2=1
② n=n2
14.在VB程序中,长整数型变量存储的数值位数最多为10,要处理位数更长的整数需要通过设计高精度算法解决。小杜实现了高精度减法运算,基本思想是用字符串类型变量存储数据,然后模拟减法计算过程。功能如下:在文本框Text1中输入被减数s1,在文本框Text2中输入减数s2(s2 小于 s1),单击“计算”按钮Command1 后,在标签Label2 上显示结果。程序运行界面如图a所示。
/
(1)在设计程序界面时,图b中所选的“Label”是 (填字母:A.对象名/B.方法名/C.类名/D.事件名)。?
(2)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim s1 As String,s2 As String,ans As String
Dim t As Integer,f As Boolean ’f 标记是否有借位
s1=Text1.Text:s2=Text2.Text
For i=1 To Len(s1)- Len(s2)
s2="0" + s2
Next i
t=0:f=False:ans=""
For i=Len(s1) To 1 Step -1 ’从个位开始逐位相减
If f=True Then
t=Val(Mid(s1,i,1))- Val(Mid(s2,ik,1))- 1
f=False
Else
t= ① ?
End If
If t < 0 Then t=t + 10:f=True
ans= ② ?
Next i
Label2.Caption="结果为:" + ans
End Sub
(3)运行该程序,在文本框Text1和Text2中分别输入2017123123123、1824,单击“计算”按钮,则语句“f=True”被执行 次。?
答案 (1)C (2)①Val(Mid(s1,i,1))- Val(Mid(s2,i,1)) ②Str(t)+ans (3)3
15.【加试题】小明设计了一种纸牌游戏,每张纸牌上都有一个 100 以内的数字,每个数字对应的纸牌只有一张。 初始时所有的纸牌从上到下按数字大小顺序叠成一堆,如果从中抽走一张,小明就按抽走的纸牌位置分成两堆,对于每堆纸牌,小明采用记忆最顶端牌的数字和这堆牌张数的方法来记录。 如剩余的牌为 1,2,3,5,6,11,牌分成 3 堆,记录为(1,3),(5,2),(11,1)。 现在有些牌采用如下规则要放回牌堆,有 4 种情况:
①上靠,例如放回的牌数字为 7,可以把牌放在第 2 堆的最下面,则原来登记的记录变成(1,3), (5,3), (11,1),牌还是3 堆。
②下靠,例如放回的牌数字为 10,可以把牌放在第 3 堆的最上面,则原来登记的记录变成(1,3), (5,2), (10,2),牌还是 3 堆。
③上下不靠,例如放回的牌数字为 9,则单独放一堆,登记的记录变成(1,3),(5,2),(9,1),(11,1),牌变成 4 堆。
④上下靠,例如放回的牌数字为 4,则合并第 1 堆和第 2 堆,登记的记录变成(1,6),(11,1),牌变成 2 堆。
小王依据上述描述设计了如下 VB 程序。 请回答下列问题:
(1)现在有 3 堆牌,分别记录为(1,5),(7,3),(11,20),要把牌 10 放回牌堆,则登记的记录变成 。?
(2)请在划线处填入合适的代码。
Const n=5000
Dim a(0 To n) As Integer ’a(i)保存第 i 条记录的最顶端的牌
Dim b(0 To n) As Integer ’b(i)保存第 i 堆牌的张数
Dim c As Integer, k As Integer, sp As Integer ’k为原始记录数
’读取原始 k 条记录的数据,依次存入 a(1),b(1),a(2),b(2)…a(k),b(k),代码略
a(0)=0:b(0)=0:sp=k + 1 :a(sp)=10000 :b(sp)=0
Private Sub Command1_Click()
Dim i As Integer
c=Val(Text1.Text) ’c为放回的牌号
i=1
Do While a(i) < c ’查找牌 c 放的位置
i=i + 1
Loop
i=i - 1
’下面为放牌过程
If a(i) + b(i)=c Then
If ① Then ’第 4 种情况,上下靠?
b(i)=b(i) + 1 + b(i + 1)
For j=i + 1 To sp - 1
a(j)=a(j + 1):b(j)=b(j + 1)
Next j
sp=sp - 1
Else ’第 1 种情况,上靠
b(i)=b(i) + 1
End If
ElseIf c + 1=a(i + 1) Then’第 2 种情况,下靠
a(i + 1)=c:b(i + 1)=b(i + 1) + 1
Else ’第 3 种情况,上下不靠
For j= ② ?
a(j)=a(j - 1) :b(j)=b(j - 1)
Next j
a(i + 1)=c:b(i + 1)=1:sp=sp + 1
End If
’下面为输出登记的记录,不包括虚设的两条记录
For i=1 To ③ ?
List3.AddItem "第" & Str(i) & "记录(" & Str(a(i)) & "," & Str(b(i)) & ")"
Next i
End Sub
答案 (1)(1,5),(7,24)
(2)① c+1=a(i+1)(注:或其他等效的式子)
②sp+1 To i+2 Step -1 或 sp+1 To i+1 Step -1
③sp-1
考点四 模块化程序设计
1.【加试题】某程序段如下:
Private Sub Command1_Click()
Dim s As Integer, m As Integer, i As Integer
m=5:s=0
For i=1 To m
s=s + add(i)
Next i
Text1.Text=Str(s)
End Sub
Function add(n As Integer) As Integer
If n=1 Or n=2 Then
add=1
Else
add=2*(add(n - 1)+ add(n - 2))
End Function
若运行该段程序后,标签 Text1 中显示的值是( )
A.16 B.44 C.6 D.32
答案 B
2.【加试题】输入任意的正整数 n,计算 1+2-5+…+(n*3-4)*(-1)^n 的值,VB 程序代码如下:
Function xs(k As Long)As Long
xs= ① ?
End Function
Private Sub Command1_Click()
Dim s As Long, i As Long
n=Val(Text1.Text)
s=0
For i=1 To n
s=s+ ② ?
Next i
Text2.Text=Str(s)
End Sub
为了实现上述程序,划线处的语句应为( )
A.①(-1)^k*(k*3-4) ②xs((-1)^k*(k*3-4))
B.①(-1)^(k+1)*(k*3-4) ②xs((-1)^k*(k*3-4))
C.①(-1)^k*(k*3-4) ②xs(i)
D.①(-1)^(k+1)*(k*3-4) ②xs(i)
答案 C
3.【加试题】十进制整数换成二进制整数采用“除2倒取余”法。十进制小数转换成二进制小数采用“乘2顺取整”法,具体做法是:用2乘十进制数的小数部分,得到一个积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。小刘根据以上方法编写了VB程序,运行界面如图所示。程序运行时,在文本框Text1中输入一个带小数的正十进制数(小于32767),点击“转换”按钮Command1,在文本框Text2中输出转化后的带小数的二进制数,精确到3位小数。实现上述功能的VB程序如下,请回答下列问题:
/
(1)按照本程序的功能,在 Text1 中输入数据 9.78,点击“转换”按钮 Command1,在 Text2 中输出 。?
(2)请在画线处填入合适的代码。
Private Sub Command1_Click()
Dim i As Integer, pos As Integer
Dim s As String, c As String, result As String
Dim s1 As Single, s2 As Single
result="":i=1
s=Text1.Text
c=Mid(s, i, 1)
Do While c <> "."
i=i + 1
c=Mid(s, i, 1)
Loop
pos=i
① ?
s2=Val("0." + Mid(s, pos + 1))
result=convert(s1) & "." & convert(s2)
Text2.Text=result
End Sub
Function convert(x As Single) As String
Dim temp As Integer, k As Integer
If x >= 1 Then ’整数转化为二进制
temp=x Mod 2
result=temp & result
x=x 2
Do While x <> 0
temp=x Mod 2
result=temp & result
x=x 2
Loop
Else ’小数转化为二进制,保留 3 位小数
k=1
Do While ② ?
temp=Int(x*2)
result=result & temp
③ ?
k=k + 1
Loop
End If
convert=result
End Function
答案 (1)1001.110 (2)①s1=Val(Mid(s,1,pos-1))或者 s1=Val(Mid(s,1,i-1) ②x<>0 And k<4 ③x=x*2-temp
4.【加试题】德国数学家哥德巴赫曾猜测:任何大于 6 的偶数都可以分解成两个素数(素数对)的和。 但有些偶数可以分解成多种素数对的和,如:10=3+7,10=5+5,即 10 可以分解成两种不同的素数对。小敏编写了一个 VB 程序,用来求一个偶数(6 到 1 000 之间)可能存在多少这样的素数对(注:A+B 与 B+A 认为是相同素数对,不重复统计),并把这些结果输出到一个列表框中,通过逻辑推理,小敏发现这些素数对都是奇数,所以她只需要验证奇数的素数对即可。 程序运行界面如图所示,程序代码如下。 但加框处代码有错,请改正。
/
Dim IsPrime(1000) As Boolean ’用来存储是否素数,True为素数,False为非素数
Private Sub Command1_Click()
Dim x As Integer, y As Integer, i As Integer,num As Integer
Call Init ’调用 Init 函数
x=Val(Text1.Text)
y=x 2
num=0
For i=3 To y Step 2
If IsPrime(i) Then ’①
num=num + 1
List1.AddItem Str(x)+"="+Str(i)+"+"+Str(x - i)
End If
Next i
Label2.Caption="偶数" + Str(x) + "共有" +Str(num) + "个素数对。"
End Sub
Sub Init() 初始化 IsPrime 数组的值
Dim i As Integer, j As Integer, x As Integer
For i=3 To 1000 Step 2
x=Int(Sqr(i))
For j=2 To x Step 2 ’(2)
If i Mod j=0 Then Exit For
Next j
If j>x Then IsPrime (i)=True Else IsPrime(i)=False
Next i
End Sub
答案 (1)IsPrime(i) And IsPrime(x-i) (2)j=3 To x 或者j=3 To i 或者 j=3 To Int(Sqr(i)) 或者 j=3 To i 2或者类似的表达式
B组 2017年—2019年模拟·综合题组
1.某算法部分流程如图所示,执行该部分流程图后,变量s和变量i的值分别为( )
/
A.9和5 B.9和7 C.16和5 D.16 和 7
答案 B
2.(2018浙江名校协作体试题,6,2分)某算法流程图如图所示:
/
执行该流程图后,输出i,k的值分别是( )
A.102,9 B.102,8 C.100,9 D.100,8
答案 A
3.(2018浙江十校联盟选考适应性考试,6,2分)某算法流程图如图所示,若输入 m 和 n 的值分别为 189 和 161,执行这部分流程后,变量m 的值为( )
/
A.1 B.7 C.23 D.27
答案 B
4.有如下Visual Basic 程序:
Private Sub Command1_Click()
Dim sum As Double, x As Double
sum=0
n=0
For i=1 To 5
x=n / i
n=n + 1
sum=sum + x
Next
End Sub
该程序通过For循环计算sum的值,下列表达式的值与sum相等的是( )
A.1+1/2+2/3+3/4+4/5
B.1+1/2+2/3+3/4
C.1/2+2/3+3/4+4/5
D.1+1/2+1/3+1/4+1/5
答案 C 5.(2018浙江名校协作体试题,11,2分)【加试题】有如下VB程序段:
a=1:b=1:n=12
f(1)=a:f(2)=b
For i=3 To n
c=a + b
f(i)=c Mod 4
a=b
b=c
Next i
执行该段程序后,数组元素f(12)的值为( )
A.0 B.1 C.2 D.3
答案 A
6.【加试题】有如下程序段:
Dim a(1 To 9) As Integer
Dim m As Integer, k As Integer, i As Integer
a(1)=2:a(2)=8:a(3)=6:a(4)=5:a(5)=4:a(6)=3:a(7)=9:a(8)=7:a(9)=1
m=1:k=1
For i=2 To 9
If a(i) < a(i - 1) Then
k=k + 1
If k > m Then m=k
Else
k=1
End If
Next i
Label1.Caption=Str(m)
该段程序运行后,标签Label1中显示的内容是( )
A.3 B.4 C.5 D.9
答案 C
7.【加试题】有如下VB程序段:
Dim a(1 To 10) As Integer
Dim s(1 To 10) As Integer
Private Sub Form_Load()
a(1)=3:a(2)=6:a(3)=8:a(4)=4:a(5)=9
a(6)=5:a(7)=3:a(8)=3:a(9)=8:a(10)=6
End Sub
Private Sub Command1_Click()
Dim max As Integer, i As Integer, j As Integer, k As Integer
max=0
For i=1 To 10
k=0
For j=10 To i Step -1
If a(j)=a(i) Then k=j:
Exit For
Next j
If k > 0 And k - i > max Then max=k - i
Next i
Text1.Text=Str(max)
End Sub
程序运行后,文本框Text1 显示的内容是( )
A.5 B.6 C.7 D.8
答案 D
8.【加试题】有如下VB 程序段:
Dim i As Integer, j As Integer, t As Integer
Dim p(1 To 20) As Integer
For i=1 To 20
p(i)=0
Next i
p(1)=-1
For i=2 To 20
If p(i)=0 Then
For j=2 To 20 i
p(i* j)=-1
Next j
End If
Next i
t=20
For i=1 To 20
t=t + p(i)
Next i
Text1.Text=Str(t)
程序运行后,文本框Text1 显示的内容是( )
A.20 B.12 C.10 D.8
答案 D
9.(2018浙江绍兴柯桥选考模拟技术试题,11,2分)【加试题】有如下 VB 程序段:
Private Sub Command1_Click()
Dim i As Integer, ch As String, s As String
s="I like Python"
For i=1 To Len(s)
ch=Mid(s, i, 1)
If f(ch) Then
n=n + 1
ElseIf n <> 0 Then
t=t + 1
n=0
End If
Next i
If n <> 0 Then t=t + 1
Label1.Caption=Str(t)
End Sub
Function f(c As String) As Boolean
If c >= "A" And c <= "Z" Or c >= "a" And c <= "z" Then f=True Else f=False
End Function
执行该程序段后,标签 Label1 上显示的内容是( )
A.1 B.2 C.3 D.6
答案 C
10.(2018稽阳联谊学校联考,11,2分)【加试题】有如下程序段:
Const n=6
Dim a(1 To n) As Integer
Dim i As Integer,j As Integer,t As Integer
Do While True
For i=1 To n-1
If a(i)>a(i+1) then Exit For
Next i
If i < n Then
For i=1 To n
j=Int(Rnd * 6) + 1
t=a(j):a(j)=a(i):a(i)=t
Next i
Else
Exit Do
End If
Loop
数组中a(1)到a(6)的值依次为“56,34,48,87,65,96”,上述程序段执行后a(1)到a(6)的值依次为( )
A.96 87 65 56 48 34
B.34 48 56 65 87 96
C.选项A和B都有可能
D.选项A和B都不可能
答案 B
11.贝贝有 n 个桃子,吃完后每三个桃核可以换一个桃子,编写一个程序计算贝贝总共能够吃到几个桃子。
(1)若贝贝总共有 7 个桃子,则他最后可以吃到 个桃子。?
(2)修改程序中的错误。程序代码如下:
Private Sub Command 1_Click()
Dim n As Integer,ans As Integer
n=Val(Text1.Text)
ans=n
Do Whilen>3 ’①
ans=ans + n3
n=n3 ’②
Loop
Label2.Caption="总共能吃到的桃子数为:"+Str(ans)+"个"
End Sub
答案 (1)10 (2) ①n >= 3 ②n 3+n Mod 3
12.(2018浙江“ 七彩阳光 ”联盟期初联考,14,5分)用户注册某APP时,密码有如下要求:至少为8个字符,并且必须含有数字和字母。小林编写了一个VB程序,对用户设定的密码进行合法性验证,如图所示。在文本框Text1中输入密码字符串s,单击“验证”按钮,在标签Label1中显示验证结果“符合要求”或“不符合要求”。
/
(1)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub CmdJudge_Click()
Dim a1 As Integer, a2 As Integer, flag As Boolean
Dim s As String, c As String, i As Integer, n As Integer
a1=0:a2=0:flag=False
s=Text1.Text: ① ?
i=1
Do While i<= n And Not flag
c=Mid(s, i, 1)
If c>="A"And c<="Z" Or c>="a" And c<="z" Then
a1=1
ElseIf c >= "0" And c <= "9" Then
a2=1
End If
If ② Then flag=True?
i=i + 1
Loop
If flag And n >= 8 Then
Label1.Caption="符合要求"
Else
Label1.Caption="不符合要求"
End Sub
(2)代码“Private Sub CmdJudge_Click()”中的“CmdJudge”是 (单选,填字母:A.过程名 / B.属性名 / C.事件名 / D.对象名)。?
(3)运行该程序,在文本框 Text1 中输入“Wd6b$ksss”,单击“统计”按钮后,语句 c=Mid(s, i,1)共执行了 次。?
答案 (1)①n=Len(s) ②a1+a2=2或a1+a2 >=2或a1=1 And a2=1 (2)D (3)3
13.【加试题】设某汉字由7×7的0、1点阵图案组成。依照以下规则生成压缩码:连续一组数值,从汉字点阵图案的第一行第一个符号开始计算,按书写顺序由左到右,从上到下。压缩码第一个数表示起始的数字(例如0),第二个数表示连续有几个0,第三个数表示接下来连续有几个1,第四个数表示接下来连续有几个0,第五个数表示接下来连续有几个1,以此类推……
例如,以下汉字点阵图案:
0001000
0001000
0001111
0001000
0001000
0001000
1111111
对应的压缩码是031616431616137,表示开始数字是0,有3个,接下来1个1,6个0,1个1……。
(1)修改程序中的错误。
Private Sub Command1 _Click()
Dim code As String, c As Integer, res As String,k As Integer
code=Text1.Text
k=0
res=""
c=Val(Mid (code,1,1))
For i=2 To Len(code)
For j=1 ToMid(code, j,1)’①
res=res +Str(c)
k= k+1
If k=7 Then
List1.AddItem res
k=0
res=""
End If
Next j
c=1 ’②
Next i
End Sub
(2)现给出如下点阵图:
/
则压缩码为 。?
答案 (1)①Mid(code, i, 1) ②1-c (2)0383591123482
14.【加试题】字符串旋转。将字符串旋转一次,等价于把字符串的最后一个字符放到第一个字符的前面,例如:将字符串“abcdefg”旋转一次,结果为“gabcdef”。现在我们在文本框Text1输入一个字符串存入变量str1,在文本框Text2、Text3、Text4分别输入一个整数并存入变量s,t和c,表示将字符串str1的第s个到第t个字符组成的这段字符串旋转c次。例如:str1=“abcdefg”,s=2,t=6,c=2,即将“bcdef”旋转两次,最后结果为“aefbcdg”。实现上述功能的VB代码如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim str1 As String, str2 As String
str1=Text1.Text ’原字符串
s=Val(Text2.Text) ’开始位置
t=Val(Text3.Text) ’结束位置
c=Val(Text4.Text) ’旋转次数
str2=Mid(str1,s, ① ) ’将参与旋转的第s 个到第t 个字符取出?
len1=Len(str1)
len2=Len(str2)
c=c Mod len2 ’如果旋转的次数超过长度,会重复旋转,只取余即可
For i=1 To c ’进行c 次旋转
str2=Mid(str2, len2, 1)+ ② ?
Next i
’将c 次旋转的结果重新拼接到字符串str1 中
str1=Mid(str1,1,s-1)+ ③ +Mid(str1,t+1,len1-t+1)?
Text5.Text=str1
End Sub
答案 ①t-s+1 ②Mid(str2,1,len2-1) ③str2
15.(2016宁波选考适应性考试,16,4分)【加试题】有一英文单词处理的Visual Basic程序,程序运行效果如图所示。在界面上方的文本框Text1中输入英文语句,单击“统计”按钮(Command1),在右下方的列表框List1中显示英文单词及其在语句中出现的位置,并在按钮上方的标签框Label2中显示单词个数(假定每个单词中不包含英文字母以外的其他字符)。
/
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim a(1 To 1000) As String
Dim d(1 To 1000) As Integer
List1.Clear
s=Text1.Text
slen=Len(s)
j=0
k=1
b=1
For i=1 To slen
c=Mid(s, i, 1)
If(c < "a" Or c > "z") Or (c < "A" Or c > "Z")
Then ’(1)
If j <> 0 Then
a(k)=Mid(s, b, j)
d(k)=b
k=k + 1
j=0
End If
b=i + 1
Else
j=j + 1
End If
Next i
For i=1 To k - 1
List1.AddItemd(i)+ " " + a(i) ’(2)
Next
Label2.Caption=Str(k - 1) + "个"
End Sub
答案 (1)(c < "a" Or c > "z") And (c < "A" Or c > "Z") (2)Str(d(i))
16.【加试题】现有1个有序序列12,23,39,50,67。从文本框Text1中输入一个数33,插入上述有序序列,得到一个新的有序序列:12,23,33,39,50,67。其思路如下:首先,应找到33的插入位置。从右到左查找,33小于67,将67右移一个位置,33小于50,又将50右移一个位置,33小于39,再将39右移一个位置,这时将33与23比较,而当33大于或等于数组中数据时,记录该位置,然后把33插入即可。程序界面如图所示,在列表框List1中输出原始数据,在列表框List2中输出插入后的数据。
/
实现上述功能的VB 程序如下,但加框处有错,请改正。
Private Sub Command1_Click()
Dim a(20) As Integer
Dim x As Integer
x=Val(Text1.Text)
List1.Clear
List2.Clear
a(1)=12:a(2)=23:a(3)=39:a(4)=50:a(5)=67
For i=1 To 5
List1.AddItem Str(a(i))
Next i
i=5
Do Whilea(i)<> x ’(1)
a(i + 1)=a(i)
i=i - 1
Loop
a(i)=x’(2)
For i=1 To 6
List2.AddItem Str(a(i))
Next i
End Sub
答案 (1)a(i) > x (2)a(i + 1)=x
课件122张PPT。考点清单
考点一 算法及算法的表示考向基础
1.计算机解决问题的一般过程
(1)分析问题:确定要用计算机做什么,即确定解题的任务。
(2)寻求解决问题的途径和方法。
(3)用计算机进行处理。
2.算法的概念
算法就是计算机解决问题的步骤。3.算法的特征
(1)有穷性:一个算法必须保证它的执行步骤是有限的,即它是能终止的。
(2)确定性:算法中的每个步骤必须有确切的含义,不应当模棱两可。(3)可行性:算法中的每个步骤都要足够简单,是能实现的,而且能在有限的时间内完成。
(4)有0个或多个输入。
(5)有一个或多个输出。
注:(4)(5)两个特征也可以用一句话来概括:不一定要有输入,但一定要有输出。例 在求解“一元二次方程实数根”的算法中,如果方程不存在实数解,也要求输出结果“无实数根”。此要求主要体现了算法特征中的?
( )
A.有穷性 B.有输出
C.确定性 D.唯一性解析 算法具有有穷性、可行性、确定性、零个或多个输入、一个或多个输出等特点。本题体现了算法一定有输出的特征。答案????B4.算法的表示
(1)自然语言:自然语言是指人们在日常生活中使用的语言,用自然语言描述的算法通俗易懂,但缺乏直观性和简洁性,还容易产生歧义。
(2)流程图:也称程序框图,它是算法的一种图形化的表示方法,与自然语言相比,它描述的算法形象、直观、更容易理解。常用的流程图构件如表所示:(3)伪代码:是介于自然语言和程序设计语言之间的一种类自然语言的表示方法,书写形式自由,容易转换为程序。
5.算法的三种基本结构
(1)顺序结构:按指令的先后顺序依次执行。
?
(2)选择结构:也称分支结构或判断结构。判断条件是否成立,选择某一分支执行。?
(3)循环结构:判断条件是否成立,不成立则直接绕过循环体执行循环体后的指令;如果成立则执行循环体内的指令,执行完后,再次判断条件是否成立,如果成立,则再次执行循环体,直至条件不成立,退出循环体。?
选择结构和循环结构中都有条件判断,它们的区别是:选择结构根据条件判断选择某一分支,只执行一次;而循环结构通过条件判断,重复执行循环体的指令,直到条件不成立为止。例1 某算法的部分流程图如图所示,执行这部分流程后,变量c的值是?( )
?
A.6 B.7 C.0 D.3考向突破
循环结构流程图
1.常见考法
【考法一】流程图执行完后,求某变量的值。解析 本题考查算法流程图。根据循环条件,第1次循环后,c=1,a=38,b=7;第2次循环后,c=2,a=31,b=7;第3次循环后,c=3,a=24,b=7;第4次循环后,c=4,a=17,b=7;第5次循环后,c=5,a=10,b=7;第6次循环后,c=6,a=3,b=7,a?
A.0,3 B.-5,4 C.0,4 D.-5,3解析 本题考查循环结构流程图。执行过程中变量变化如表所示:因此退出循环时s=0,循环体执行了4次。答案????C例3????(2018浙江绍兴柯桥高三选考模拟)某算法部分流程图如图所示。执行这部分流程,依次输入1、1、2、4、3、5、6、8、0,则输出值是?
( )
?
A.243568 B.46 C.112358 D.2358【考法三】执行流程图过程中,输入变量的值,最后求结果。解析 本题考查循环结构流程图。执行过程中变量变化如表所示:答案????D2.解题突破口
进入循环体的前提是满足循环条件,因此退出循环时,一定是不满足循环条件的状态,这是解题的突破口。例4 某算法的部分流程图如图所示,执行这部分流程后,变量a和b的值分别为?( )
?
A.5和6 B.11和5 C.6和5 D.-3和-4解析 本题主要考查循环结构流程图。退出循环时,一定是a<=b的状态,只有选项A符合。答案????A考点二 面向对象程序设计基础考向基础
1.面向对象程序设计的基本思想
面向对象程序设计(object oriented programming,OOP)可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接收数据、处理数据,并将数据传达给其他对象,因此它们都可以被看作一个小型的“机器”,即对象。面向对象程序设计提高了程序的灵活性和可维护性。2.对象、类、属性、方法、事件、事件处理过程的概念
(1)对象:在现实世界中,我们眼睛看得见摸得着的都是对象,如一本书、
一支笔、一个西瓜、一条狗等都是对象。对象是有着状态和行为的实体。而在VB程序中,对象是指某个窗体、文本框、标签、命令按钮等控件。
(2)类:具有相同性质的对象的一种抽象,一个对象则是类的一个实例。如窗体上有两个对象Label1和Label2,这两个对象都属于Label类,是La-bel类的两个实例。常见的控件类有:(3)属性:对象可以通过属性来描述它的状态。方法一:在属性面板中设置某个对象的各个属性的属性值;方法二:在程序中通过语句来设置,一般格式为:
对象名.属性名=属性值
如Label1.Height=1000,可设置Label1对象的高度是1000。
常见的属性有: (4)方法:每个对象都有自己的行为,如List1.Clear是List1对象清空自身所有的列表项,List1.Additem a是往List1对象中添加一条项目。一般格式为:
对象名.方法名(参数)
(5)事件:事件就是发生在对象上的事情,通常是由用户在对象上做的一种动作。常见的事件有: (6)事件处理过程:一个事件的发生,可以引起某个对象上的某个事件处理过程(往往是用户编制的一段程序)的执行,这就是面向对象程序设计中的事件驱动概念。例1 在Visual Basic中,放入窗体中的控件被称为?( )
A.类 B.事件 C.属性 D.对象解析 在VB程序中,对象是指某个窗体、文本框、标签、命令按钮等控件。答案????D例2 在Visual Basic中,要在窗体中的标签对象Label1上显示文字“请输入验证码:”,应改变的标签对象属性是?( )
A.Width B.Font C.Caption D.Top解析 标签对象用Caption(标题)属性设置显示文字。答案????C3.事件处理过程的代码编写
事件处理过程的一般格式如下:
事件处理过程名称为:对象名_事件名,表示在某个对象上发生某个事件时,执行代码段里的指令。如:则事件处理过程名称为Command1_Click,即当Command1对象上发生鼠标单击事件时,执行指令a=b+c。例3????在VB中,双击名为count的时钟后,默认出现的事件是?( )
A.timer1_Timer() B.timer1_Click()
C.count_Timer() D.count_Click()解析 本题考查对VB事件的掌握。双击控件会出现对应的默认事件过程代码,其中事件名由对象名、下划线、事件名组成,本题中对象名为count,是Timer控件,Timer控件的事件名为Timer。答案????C4.VB程序的建立、调试和保存
(1)VB程序设计环境如图所示:
?(2)VB程序设计的一般步骤
建立窗体→添加控件→修改控件的属性→添加事件处理过程→编写代码→运行测试→保存源文件→导出exe可执行程序。
(3)窗体
窗体设计即程序的界面设计,从VB界面图中的“窗体”上可看到该程序界面共有三个对象,分别是一个窗体、一个文本框、一个按钮。
如果在代码中访问窗体中没有的对象(第一种情况是窗体没有该对象;第二种情况是窗体中有该对象,但是代码中访问时名称写错),则程序运行时会报如下错误:?
(4)工程资源管理器
从VB界面图中的“工程资源管理器”中可看到该程序工程对象的对象名为“工程1”,窗体对象的对象名为“Form1”。该程序只有保存以后才有工程文件和窗体文件,文件名分别是“工程1.vbp”和“test.
frm”。?
(5)属性面板
从VB界面图中的“属性面板”中可看到当前选中的控件是Cmd1,属于CommandButton(命令按钮)类。该控件的对象名是Cmd1,在属性面板中左边一列是该控件所具有的属性名称,右边一列是对应的属性值,可看到
该控件的“Caption”(标题)属性设置为“计算”。?
(6)程序的运行和调试
程序的界面设计、代码编写全部完成后,就可以运行程序来进行测试。点击菜单栏里的“运行”按钮或按快捷键F5,可直接运行程序。如果程序中有语法错误,则程序运行时会提示“编译错误”,并会提示错误类型和错误的位置,如图所示:
如果程序运行正常,但是结果是错误的,则说明没有语法错误,但是算法设计错误,则需要通过“调试”,添加变量监视,按快捷键F8让指令逐条运行,并同时观察变量值的变化过程,找到逻辑错误所在。
(7)保存和导出
VB程序保存时会生成两个重要文件,一个是工程文件,后缀名为“.vbp”,一个是窗体文件,后缀名为“.frm”。窗体文件又称源文件,包含了窗体的对象属性以及事件过程代码。工程文件包含了窗体、模块及添加的引用、使用的控件等相关信息,没有其他代码,仅仅是工程的相关设置。
程序调试完成后,可通过菜单下的“生成工程.exe”命令,将程序编译成可执行程序。考向突破
面向对象程序设计基础
学考的程序大题第一空一般考查面向对象程序设计的相关知识,共1分,比较简单。
1.常考控件及属性和方法
? 例1 编写如下程序:
?
(1)在设计应用程序界面时,应使用图b所示“控件工具箱”中的 ????(填写相应编号)添加标签“Label1”。要在按钮“ Command1”上显示“计算”字样,可以修改“Command1”的属性 ????的属性值。答案 4;Caption例2 在设计程序界面时,要清空文本框中的显示内容,应修改该文本框中的 ????属性。答案 Text2.事件处理过程
常考的事件名如下:事件处理过程名:对象名_事件名(),如Command1_Click()。例3 (1)代码“Private Sub Command1_Click()”中的Click是 ????????。(单选,填字母:A.对象名/B.属性名/C.事件名)答案????C考向基础
1.基本数据类型、常量和变量
(1)VB基本数据类型
数据是信息的一种记录形式。应用程序中的数据种类是多种多样的(如Excel中的数据类型有文本、数值、日期等)。有的数据用来记录数值信息,例如一本书的页数(一个整数),或某个时刻的温度(一个实数),而有的数据用来记录一封信的内容(一段文字),等等。在程序中使用的数据也同样有不同类型。不同类型的数据,它们的用途、书写规则、在计算机内部的存储格式都是不相同的。考点三 VB程序设计初步VB中常用的数据类型如下表:(E表示乘方的底数为10)
(2)常量
常量是指在程序执行过程中其值不能改变的存储单元或数据。常量有直接常量和符号常量。
①直接常量:直接用数字或字符书写的常量,如②符号常量:为了增加代码的可读性,常用一个符号来代表常量,即符号常量。符号常量分系统符号常量和自定义符号常量。
系统符号常量如vbRed、vbYes等。
自定义符号常量需要先声明才能使用。
符号常量的声明方法为:Const 常量名=值。
符号常量在声明的同时被赋值,符号常量一旦被声明,在后面的指令中将不能再次对它进行赋值。例如:Const pi=3.14159,则程序中所有的符号pi会被VB转换成实数3.14159。符号常量的第二个好处是代码修改方便,只要修改一处即可。
(3)变量
变量是指在程序执行过程中值可以改变的存储单元,变量必须先声明才能使用。变量的声明:
Dim 变量名 As 变量的类型
如:Dim a As Integer,声明了一个整数型的变量,变量名为a。
声明变量是为了给变量指定数据类型,并且在内存中给它分配相应的空间,因为不同类型的数据存储空间是不一样的,因此尽量把程序中的变量定义成合理的数据类型,既能满足程序所需,又要尽量节省运行空间。变量一旦声明成某种类型,在后面的指令中,对变量赋值时,应该赋相同类型的值,否则可能出现以下三种情况:
①存储数据被破坏,比如将实数型值存入整数型变量时,小数部分四舍五入后被全部截去。②程序出错:比如给一个整数型变量赋超过32 767的值,运行时会报错“溢出”。
?
③程序出错:比如给一个字符串类型变量赋整数型值时,运行时会报错“类型不匹配”。?
注意:VB中的常量名和变量名不区分大小写,符号常量与变量的命名规则是:
①必须以字母或汉字开头,由字母、数字和下划线组成,长度不超过255个字符。②不能使用VB中的关键字。
如有以下程序段:
程序中的数值“3.14159”“3”“2”是直接常量;pi是一个符号常量,代表实数3.14159;r、s、c是变量。例1 用变量存储诗朗诵比赛中选手的平均得分(保留2位小数),则变量的数据类型应说明为?( )
A.Integer B.Long C.Single D.Date解析 Integer是整型,Long是长整型,Single是单精度实数型,Date是日期型。平均得分应使用Single类型。答案????C例2 以下Visual Basic程序用于计算1010的值:
Private Sub Command1_Click()
Dim n As Integer,s As Integer
n=10
s=10^n
Text1.Text=Str(s)
End Sub
运行程序时,单击命令按钮Command1后弹出如图所示的出错信息提示,引起该错误的原因是?( )?
A.变量s的数据类型说明不当
B.变量n的数据类型说明不当
C.文本框Text1的宽度不够
D.s值太大,因此不能在文本框Text1中输出解析 每种数据类型的存储空间是不一样的。存储空间也决定了数据类型的取值范围,比如Integer型占两个字节,最大为32 767,而Long型占四个字节,最大为2 147 483 467。1010明显超过了32 767,如果存到Inte-ger型的变量s中,就发生了“溢出”错误。答案????A(4)一维数组
数组是由一批同类型的变量构成的一个序列,组成数组的每一个变量被称为数组的元素,也称为下标变量,下标是一个整数,用来指出某个元素在数组中的位置。
一维数组的声明方法为:
Dim数组变量名(A1 To A2)As元素的类型
如:Dim a(1 to 10) As Integer,即定义了一个名为a的一维数组,该数组包括10个整数型的元素,分别为a(1)、a(2)、……、a(10)。
注意:
①数组名与变量名的命名规则相同。②一维数组的元素个数为:上界-下界+1,即A2-A1+1,A1和A2必须是整数,A1不一定是1,可以是任意整数。
③使用数组元素时,下标值应在声明的范围内,否则将出现“下标越界”错误。
?如以下代码:
循环结束时,变量i=11,因此最后一条指令相当于print a(11),下标越界。
④声明一维数组时,如果下界值为0,也可以省略。如:Dim a(10) As Inte-ger,则相当于Dim a(0 To 10) As Integer。例3 【加试题】在Visual Basic 中可以定义只包含10个元素的一维数组的语句是?( )
A.Dim a(10) As Integer
B.Dim a(1,10) As Integer
C.Dim a(1 To 10) As Integer
D.Dim a(11) As Integer解析 本题考查VB数组的定义。A选项定义的是a(0)~a(10),共11个元素。B选项定义的是一个二维数组:a(0,0)~a(1,10),共2×11=22个元素。D选项定义的是a(0)~a(11),共12个元素。答案????C2.基本运算与表达式
(1)算术类运算符 注意:
①整数除法的优先级比乘法和实数除法的优先级低一级,因此表达式158/4相当于15(8/4),结果为7。此外整数除法要求被除数与除数也必须是整数,得到的商取整。
②求余数的运算符Mod,是唯一一个由字母构成的运算符,注意与标准函数的区别,函数有参数,而运算符没有参数。Mod运算要求被除数与除数都必须是整数,得到的余数也是整数。Mod的优先级是5级,比整数除法低一级,比加减法优先级高。(2)关系运算符注意:
①关系运算主要是比较运算符两边数据的大小关系。在VB中,可以对数值进行比较;也可以对字符进行比较,字符的ASCII值大的,字符值就大;还可以对字符串进行比较,先比较第一个字符,如果相等,则比较第二个字符,依此类推,因此字符串“final”<“find”。
②关系运算的结果是逻辑值,真(True)或假(False),表示该表达式成立或不成立。
③“1<=2”相当于“1<2 或1=2”,“或”运算只要其中一个条件成立,结果即为真(True)。
④特别注意数值区间的写法,数学上的“33 And x<10”。(3)逻辑运算符①三个逻辑运算符的优先级是不一样的。“非”最高,“与”其次,“或”最低。但都比其他类型运算符低。
②“与”运算中,只要“与”两边有一个表达式不成立,“与”运算结果就是False;“与”两边的表达式都成立,最后结果才是True。
③“或”运算中,只要“或”两边有一个表达式成立,“或”运算结果就是True;“或”两边的表达式都不成立,结果才是False。(4)常用标准函数
VB提供了大量的标准函数,可供用户编写程序时直接使用。
常用的数学函数:注意:
随机函数在书写时可以不要参数,其括号也可省略,函数返回值是一个大于等于0且小于1的单精度随机数。产生[a,b]区间内的随机整数的Vi-sual Basic表达式为Int(Rnd*(b-a+1)+a)。如:产生[1,100]的随机整数,表达式为Int(Rnd*100+1) 。
常用的类型转换函数和字符串函数:注意:
①Asc()、Val()、Len()三个函数的参数类型是字符串型,函数返回值是数值型。Chr()、Str()两个函数的参数类型是数值型,函数返回值是字符串型。
②Len()函数与Mid()函数组合使用,可以取出一个字符串的所有字符。代码如下:3.VB基本语句和语法
(1)赋值语句
赋值语句的作用是把等号右边的表达式的计算结果存储到等号左边的变量中,或某个对象的属性中。其格式为:
变量名=表达式 或 ????对象名.属性名=表达式
①如果在同一行中出现多个赋值语句,则语句之间用冒号(:)隔开。如:
该行代码中包含了三个赋值语句,最后的结果是变量a和b中的值被交换。②对某个对象的某个属性进行赋值,如:Label1.Caption=“结果”,表示将标签Label1的标题设置为“结果”。
③“=”号两边的数据类型应该一致,比如数值型的值应该赋给数值型
的变量,否则程序可能会报错。
? 例4 某VB 程序的一个事件过程代码如下所示:
Private Sub Command1_Click()
Dim A As Single,x As Single,z As Single
A=Val(Text1.Text)
x=(A+10) / (A*A+8)
y=(A-1) / (x+A)
z=Sqr(x-y)
Text2.Text=Str(z)
End Sub
程序运行时在文本框Text1 中输入-1,单击命令按钮Command1,弹出如图所示的错误提示信息,产生此错误的语句是?( )?
A.A=Val(Text1.Text) B.x=(A+10) / (A*A+8)
C.y=(A-1) / (x+A) D.z=Sqr(x-y)解析 本题考查VB语句的执行过程。输入-1,A的值为-1,计算得出x 的值为1,则y=-2/0,所以产生除数为零的错误。答案????C(2)选择语句
选择语句又称为条件语句、分支语句或判断语句。用于实现三种基本结构中的分支结构。条件语句用If语句来表示,有行If语句和块If语句两种语句格式。
①行If语句
行If语句必须在一行内写完。语法格式如下:
If 条件表达式 Then 语句1 Else 语句2
或
If 条件表达式 Then 语句
该指令执行过程是:先判断条件表达式,如果成立,则执行语句1,如果不成立,则执行语句2。
②块If语句
单个分支:
两个分支:
多个分支:注意:块If语句必须要以End If结束,如下代码:
运行后,会出现如下提示,错误原因并非缺少Next,而是缺少了End If。③If语句的嵌套 这是一个If语句的双层嵌套,内层If语句是嵌套在外层的Then分支中。因此有如下结论:例5 下面程序段用于计算分段函数y=?的值,不正确的是?
( )解析 本题考查VB 选择结构语句的书写。C选项中语句条件范围存在重叠。答案????C(3)循环语句
循环语句用于实现三种基本结构中的循环结构。我们主要要求掌握两种循环语句。
①For循环,也称计数型循环,语法结构如下:
For语句的执行过程画成流程图如下:?
步长=1时,可省略Step。
For语句的循环次数可用以下公式计算:
循环次数=Int((终值-初值)/步长)+1
因此一般情况下,只有事先知道循环次数,才能使用For语句。如果计算结果是负数,则循环次数为0次。
例6 以下程序段运行之后,变量s的值为?( )
Dim i,s As Integer
s=0
For i=1 To 5 Step -1
s=s+i
Next i
A.15 B.10 C.0 D.程序错误解析 该For循环语句的循环次数是0次,因此s的值为初值。答案????C②Do循环,也称当型循环,语法结构如下:
Do语句的执行过程画成流程图如下:Do语句的执行过程相对简单,先判断条件,成立则执行循环体,然后再次判断条件,成立则再次执行循环体,每执行完一次循环体,则回到条件判断,直到条件不成立,则退出循环。在事先不知道循环次数的情况下,可使用Do语句,但是要设置好循环条件,否则有可能陷入死循环。当知道循
环次数时,既可使用Do语句,也可使用For语句,以下是等价的两个程序段:例7 阅读如下程序段,程序运行结束时,k和s的值分别是?( )
A.k=10,s=10 B.k=10,s=11
C.k=11,s=10 D.k=11,s=11解析 本题主要考查VB循环结构。
Do-Loop循环是未知循环次数的循环,只要循环变量的值满足条件,就一直循环。程序段中,k和s的初值都为0,每循环一次,s加1,k加1;循环变量k从0开始,一直到k=10,进入最后一次循环,故一共循环11次,所以程序结束时,s=11,这一次循环完成后k=11。当k=11时,不满足k<=10进入循环的条件,故循环停止。所以程序结束时,k=11,s=11。答案????D例8 现要求刚好输出1 至100 内所有能被7 整除的数,下列程序不能实现的是?( )解析 本题考查对循环结构的掌握。A选项利用了枚举法,i从1循环到100,步长为1,当i Mod 7 为0( 即i 能被7整除)时输出i,可以实现;B选项i从7开始循环到100,步长为7,输出的也是所有100内能被7整除的数字;C选项利用i的值,从1开始步长为1不断循环,每次输出i*7 的值,直到s大于100 停止,也可以实现;D 选项看似没有问题,但是s 超出100后的第一个能被7整除的数还是会被输出,程序有缺陷。答案????D③循环语句的应用
计数器:定义一个变量如c做为计数器,赋初值为0,在循环体内加一条指令:c=c+1。则每当循环体被执行一次,就执行一次c=c+1,即在原来的基础上加1,从而实现计数功能。
累加器:定义一个变量如s做为累加器,赋初值为0,在循环体里加一条指令:s=s+a(i),可实现数组a中各个元素的累加。
④循环语句的中途跳出:Exit For或Exit Do。
⑤循环的嵌套——多重循环语句有如下双重循环:
则语句块1、语句块3在外层循环中分别执行10次;语句块2在内层循环中执行100次。例9 【加试题】有如下Visual Basic程序段:
s=0
For i=1 To 10
For j=1 To i
s=s+j*j
Next j
s=s+i*i
Next i
则该程序段运行后,语句“s=s+j*j”执行的次数为 ????。 解析 本题考查双重循环。外循环i从1到10共10次,内循环是i次,因此内循环中循环体总的执行次数是:1+2+3+4+5+6+7+8+9+10=55。答案 55(4)注释语句
注释是以单引号(’)或Rem开头的一串文字,可以出现在程序中需要说明的位置上,通过这一串文字,对附近的程序段进行简要的说明,增加程序的可读性。注释对程序的执行效果没有任何影响,程序运行时自动跳过注释。
如:Dim n As Integer ’变量n用于存储班级总人数考向突破
1.数值型数据处理相关知识
(1)重要运算或函数 (2)求整数n的各位数字的表达式: (3)四舍五入保留小数: (4)判断n能否被m整除的条件表达式:
(5)判断n是不是完全平方数的条件表达式:(6)质数(素数)的判断:除了1与它本身之外不再有其他的因数,这
样的数称为质数。f=True
For i=2 To n-1
If n Mod i=0 Then f=False:Exit For
Next
注:循环终值也可以设置为n2或Sqr(n)。最后判断f的值为True则为质数,否则为合数。
2.字符串处理相关知识
(1)几个常用字符的内码值:(2)字符串处理相关函数:注:Asc(x)和Chr(x)是选考要求,学考不作要求。
(3)字符串相加:
用"+"号:运算符两边必须都是字符串型,如"1"+"2"="12",而1+"2"则出错。用"&"号:会自动将两边的数据转成字符串型再拼接。如
"1"&"2"="12",1&"2"="12"。
注意:字符串相加前后位置对调,结果不一样,"1"+"2"="12",而"2"+"1"="21"。
(4)不同类型字符的判断: (5)字符转换:例1 十进制数转换为二进制数。小明用VB编写了一个程序,把输入的十进制数转换为二进制数,并判断二进制数中的"0"和"1"的个数是否相等。程序运行界面如图所示,在文本
框Text1中输入要转换的十进制数。单击“确定”按钮Command1后,在文本框Text2中输出其对应的二进制数,在标签Label3中显示“相等”或“不相等”。
?(1) 程序运行界面中使用的对象个数为 ????,要使按钮Command1上的文字显示为“确定”,应修改的属性名为 ????。
(2)为实现上述功能,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim st As String,x As Integer,xl As Integer,cl As Integer
Dim i As Integer,j As Integer,v As Integer,c0 As Integer
c0=0 : cl=0 : st=""
x= ① ????
Do While x<>0
y= ② ????
If y=0 Then c0=c0+1 Else c1=c1+1 st=y&st
x=x2
Loop
Text2.Text=st
If ③ ????Then
Label3.Caption="相等"
Else
Label3.Caption="不相等"
End If
End Sub解析 本题考查十进制转为二进制,并统计 0和 1个数。(1) Form1也是控件。 (2) ①略。②求余数。③分析下方语句可知,判断条件为0和 1个数是否相等。c0统计0的个数,c1统计1的个数。答案 (1) 7;Caption (2)①Val(Text1.Text )
②x Mod 2 ③c0=c1例2 用VB编写一个“加减法运算”程序,实现如下功能:在文本框Text1中输入多个正整数加减算式(只包含数字和“+”“-”字符,以“=”为结束符),单击“计算”按钮Command1,计算结果在标签Label1上显示。程序运行界面如图所示。
?
(1)程序运行时清空Label1上的内容,则可在Form_Load事件过程中添加语句 ????(单选,填字母:A.Form1.Caption=""/ B.Form1.Text=""/ C.Label1.Caption=""/ D.Label1.Text="")。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String,t As Integer
s=Text1.Text
t=0: p=0: flag=1
For i=1 To Len(s)
ch=Mid(s,i,1)
If ch>="0" And ch<="9" Then
p= ① ???? Else
t= ② ????
p=0
If ch="-" Then
flag=-1
ElseIf ch ="+" Then
flag=1
End If
End If
Next i
Label1.Caption=Str(t)
End Sub(3)若文本框Text1中输入内容的结束符“=”缺失(即输入内容为12+28-15+50),单击“计算”按钮后,标签Label1上显示的内容是 ????。解析 本题解题关键在于理解非数字字符的操作。For语句遍历字符串值,If语句判断字符类型。(1)略。(2)①分析判断条件可知,要执行数字相连。原值p乘10加新出现的值Val(ch)组成新值。②随着非数字符号出现,要把前值放入累加器t中,flag存放前值符号,因此要累加flag*p。(3)当ch是非数字时,才执行加法运算,因此输入“12+28-15+50”时,最后一个“50”不会加至结果中,因此结果就是12+28-15=25。答案????(1)C (2)①p*10+Val(ch) ②t+flag*p (3)253.数组的运用
数组是加试题考试重点,也是难点。数组下标的灵活运用,可以实现很多算法,同时也增加了考试难度。甚至在数组中再引入另一个数组做下标变量,如a(b(i))、a(b(c(i)))等,大大增加了解题难度。对于处理此类题型,没有捷径,唯有多练多总结,同时也要熟练掌握循环语句,才能在考试时,做到胸有成竹、不慌不乱。例3 【加试题】某VB程序段如下:
For i=1 To 5
b(a(i))=b(a(i))+1
Next i
pa=0
For j=1 To 10
For k=1 To b(j)
pa=pa+1∶a(pa)=j
Next k
Next ja(1)到a(5)的初值依次是7、5、9、4、3,程序段运行后,数组a的值依次
是?( )
A.7、9、5、4、3 B.3、4、5、7、9
C.4、5、7、9、3 D.9、7、5、4、3解析 由于a数组初始值是7、5、9、4、3,因此第一个For循环后,b数组中b(3)、b(4)、b(5)、b(7)、b(9)的值分别1,那么接下来的双重For循环里,只在j等于3、4、5、7、9的时候内部的For k=1 To b(j)循环里的语句才会执行,例如循环到j=3时,由于b(3)=1,For k=1 To b(3)循环里的语句就会执行一遍,pa变成了1,那么a(1)=3,当循环到j=5的时候,pa就变成了2,a(2)=5,依此类推,每次pa加1,并且a(pa)=j,相当于给a数组的1到5元素重新赋值,巧妙实现了排序的功能,所以答案为B。答案????B考向基础
1.模块化程序设计的基本思想
VB应用程序是按模块化的方式组成的,一个程序模块是程序的一部分,每个模块负责解决整个程序的某个任务。
当某一段程序需要反复书写时,也可以将它封装成一个过程或函数,这样可以大大减少程序的总代码量,并且提高程序的可阅读性。
程序中的模块分为过程和函数两种。过程强调的是动作,函数强调的是值的计算。考点四 模块化程序设计2.过程的定义及使用方法
过程分为两类:
①事件处理过程:面向对象程序设计的最重要理念就是对象的事件驱
动。在一个公司里,各个部门的人员各司其职,做好自己的事情,那么整个公司就能正常运行起来。面向对象程序设计的理念也是如此,各个对象(控件)通过事件驱动去执行对应的事件处理过程中的代码,以实现整个程序的某个功能。因此一个VB程序无非是多个对象的多个事件处理过程的总和。比如一个程序通过Form_Load事件处理过程来实现数据的初始化,通过Text1_Keypress事件处理过程来输入数据,通过Com-mand1_Click事件处理过程来计算并输出结果。事件处理过程的一般写法:
②通用过程:当程序的很多位置需要重复使用一段相同的代码时,可以考虑将这段代码封装成一个通用过程,然后在需要的位置调用这个过程,这样可以大大减少程序的代码量。
添加一个通用过程的方法:
方法一,点击菜单里的“工具”→“添加过程”命令,然后在弹出的对话框“名称”栏中输入自定义的过程名,注意不能跟VB中的关键词同名。
?按确定后,在代码窗口出现以下代码:
方法二,直接在代码窗口中输入以上代码,然后在该过程中编写代码。
调用过程的方法:在调用位置上输入[Call]过程名,其中Call可省略。
注:自定义过程的调用选考不作要求。3.自定义函数的定义及调用方法
自定义函数类似于过程,不同之处是函数执行完成后,函数的计算结果(即“函数返回值”)被送到函数的调用点上(即调用函数的程序位置),供程序的后继部分继续进行处理。
虽然VB提供了很多常用的标准函数,用户可以调用这些函数来实现某
些数学计算或数据类型的转换,但有一些程序需要自己来定义函数,来实现一些特殊的功能。
添加自定义函数的方法与添加过程的方法相同,在“类型”中选择“函数”,按确定后,在代码窗口出现以下代码,也可以直接在代码窗口输入代码。考向突破
自定义函数与过程
1.函数与过程的区别
函数有返回值,过程没有返回值。
2.通用过程的调用和参数传递
通用过程在调用时可以传递参数,完整的过程定义如下:如果过程没有参数,调用写法为:[Call]过程名,其中Call可省略。
如果过程有参数,调用写法为:
过程名 参数1,参数2,……
或
Call 过程名(参数1,参数2,……)
注意使用Call时,参数必须在括号内。
注:自定义过程的调用选考不作要求。3.自定义函数的调用和参数传递
(1)完整的自定义函数定义如下:(2)由于自定义函数有函数返回值,因此在定义函数时应指定返回值的类型,如果省略As子句,缺省类型是可变型(Variant)。
(3)在程序体中,至少有一个形如“函数名=表达式”的语句,这样,表达式的计算结果才能作为函数的返回值,被送回调用点。函数名就像普通变量一样使用。
(4)自定义函数的调用:自定义函数的调用跟VB中标准函数的调用方法相同。
注:自定义函数是选考要求,学考不作要求。例 找出所有两位整数中的“镜反平方数对”。所谓“镜反平方数对”是指数对n与m,它们满足条件:①n与m不含有数字0,且n小于m;②n的反序数是m,n的平方数的反序数等于m的平方。例如12与21,12的平方是144,其反序数是441,而21的平方正好等于441。所以12与21是镜反平方数对,请完善以下程序代码。
Private Sub Command1_Click()
Dim i As Integer,fm As Integer,st As String,n As Integer
For i=11 To 99
If ① ????Then
n=i : fm=fx(n)
If validate(i,fm) And i < fm Then st=i & “^2=” & i^2 & “,” & fm & “^2=” & fm^2
List1.AddItem st
End If
End If
Next i
End Sub
Private Function fx(j As Integer) As Integer
Dim s As String
Do While j<>0
② ????
j=j10Loop
fx=Val(s)
End Function
Private Function validate(p As Integer,q As Integer) As Boolean
If fx(p^2)=q^2 Then validate=True
End Function解析 本题考查的是镜反平方数对。根据题意中描述 n 与 m 不含有数字 0,而语句For i=11 To 99 进行枚举,所以①空的答案是 i Mod 10<>0。函数 fx(j)的功能是求反序数,而 s 是字符串类型,所以②空的答案是 s=s+Str(j Mod 10);函数 validate(p,q)的功能是判断 p 的平方数的反序数是否等于 q 的平方。答案 ①i Mod 10<>0 ②s=s+Str(j Mod 10)