2021版信息技术新导学大一轮复习浙江专用(课件+精练):五 算法与VB语言基础 (共2份打包)

文档属性

名称 2021版信息技术新导学大一轮复习浙江专用(课件+精练):五 算法与VB语言基础 (共2份打包)
格式 zip
文件大小 2.3MB
资源类型 教案
版本资源 浙教版
科目 信息技术(信息科技)
更新时间 2020-03-10 13:56:04

文档简介

(共124张PPT)
考点一????算法的表示——流程图
考向基础
一、算法及算法的特征
1.算法的概念
算法就是对解题方法的精确而完整的描述,即解决问题的方法和步骤。
2.算法的特征
(1)有穷性。一个算法必须保证它的执行步骤是有限的,即它是能终止的。
(2)确定性。算法中的每个步骤必须有确切的含义,不应当模棱两可。
(3)可行性。算法中的每一个步骤都要足够简单,是实际能运行的,而且能
在有限的时间内完成。
(4)有0个或多个输入。初始数据可从外界输入,也可含于算法之中。
(5)有一个或多个输出。算法一定要有结果且以一定方式输出。
二、算法的三种表示方法
1.自然语言
就像写文章时所列的提纲一样,可以有序地用简洁的自然语言加数学符号
来描述算法。用自然语言描述的算法通俗易懂,但缺乏直观性和简洁性,容
易产生歧义。
2.流程图
流程图也叫程序框图,它是算法的一种图形化的表示方法,与自然语言相
比,它描述的算法形象、直观,更容易理解。最常用的流程图构件如表所
示。
符号名称 图形 功能
起止框 ? 表示算法的开始和结束
输入/输出框 ? 表示算法的输入/输出操作
处理框 ? 表示算法中的各种处理操作
判断框 ? 表示算法中的条件判断操作
流程线 → 表示算法的执行方向
连接框 ? 表示流程图的延续
3.伪代码
伪代码使用某些程序设计语言中的控制结构,来描述算法中各步骤的执行
次序和模式,使用自然语言、数学符号或其他符号,来表示计算步骤要完成
的处理或需要涉及的数据。伪代码是介于自然语言和计算机程序语言之
间的一种算法描述,没有严格的语法限制,是专业软件开发人员描述算法的
一种常用方法。
三、顺序、选择和循环三种基本结构
1.顺序结构:按指令的先后顺序依次执行。
2.选择结构:又称分支结构,根据分支条件判断是否成立,选择某一条路径中
的指令执行。
3.循环结构:首先判断条件是否成立,如果不成立,则直接执行循环体外的指
令,如果条件成立,则执行循环体内的指令,执行完后再次判断条件是否成
立,如果条件成立,再次执行循环体内的指令……,直至条件不成立跳出循
环体为止。
以下是三种基本结构的流程图:
考向突破
循环结构流程图解题技巧
1.常见考法
【考法一】流程图执行完后,求某变量的值。
例1 某算法的部分流程图如图所示,执行这部分流程后,变量c的值是?
(  )
?
A.6  B.7  C.0  D.3
解析 本题考查算法流程图。分析流程图可知,变量c表示循环次数,45反
复减7,减到值小于等于7为止,45-6*7=3,因此是6次。当然也可以将循环过
程全部列出,也能得出正确答案,但比较费时。
答案????A
  【考法二】求循环条件执行几次,循环体执行几次。循环条件一般比
循环体多执行一次。
例2 某算法流程图如图所示,执行该算法后,变量s的值及x←x+1执行的次
数分别为?(  )
?


A.0,3  B.-5,4  C.0,4  D.-5,3
解析 本题考查循环结构流程图。执行过程中变量变化如表所示:
因此退出循环时s=0,循环体执行了4次。
s x
第1次循环 10-1=9 1+1=2
第2次循环 9-2=7 2+1=3
第3次循环 7-3=4 3+1=4
第4次循环 4-4=0 4+1=5
答案????C
  【考法三】执行流程图过程中,输入变量的值,最后求结果。
例3????(2018浙江绍兴柯桥高三选考模拟)某算法部分流程图如图所示。执
行这部分流程,依次输入1、1、2、4、3、5、6、8、0,则输出值是?(???? )
?


A.243568    B.46    C.112358    D.2358
解析 本题考查循环结构流程图。执行过程中变量变化如表所示:
n a b c
第1次输入c 0 1 1 2
第2次输入c 2 1 2 4
第3次输入c 3
第4次输入c 23 2 3 5
第5次输入c 235 3 5 6
第6次输入c 8
第7次输入c 2358 5 8 0
答案????D
2.解题突破口
进入循环体的前提是满足循环条件,因此退出循环时,一定是不满足循环条
件的状态,利用好这一点,可以快速解题。
例4 某算法的部分流程图如图所示,执行这部分流程后,变量a和b的值分
别为?(  )
?
A.5和6  B.11和5  C.6和5  D.-3和-4
解析 本题主要考查循环结构流程图。退出循环时,一定是a<=b的状态,
只有选项A符合。
答案????A
考点二????面向对象程序设计基础
考向基础
1.对象、类、属性、方法、事件、事件处理过程的概念
(1)对象:在现实世界中,我们眼睛看得见摸得着的都是对象,如一本书、一
支笔、一个西瓜、一条狗等都是对象。对象是有着状态和行为的实体。
而在VB程序中,对象是指某个窗体、文本框、标签、命令按钮等控件。
(2)类:具有相同性质的对象的一种抽象,一个对象则是类的一个实例。如
窗体上有两个对象Label1和Label2,这两个对象都属于Label类,是Label类
的两个实例。
常见的控件类有:
对象名 所属类 中文名
如Form1、Form2 Form 窗体
如Text1、Text2 TextBox 文本框
如Label1、Label2 Label 标签
如List1、List2 ListBox 列表框
如Command1、Command2 CommandButton 命令按钮
  (3)属性:对象可以通过属性来描述它的状态。方法一:在属性面板中
设置某个对象的各个属性的属性值;方法二:在程序中通过语句来设置,一
般格式为:
对象名.属性名=属性值
如Label1.Height=1000,可设置Label1对象的高度是1000。
常见的属性有:
属性名 属性值 意义
Name 如:Command1 对象的名称,每个控件都具有的
属性,也是最重要的属性
BackColor 如:&H0000FFFF& 对象的背景色
Left 如:2000 对象的左上角水平坐标
Top 如:1000 对象的左上角垂直坐标
Height 如:500 对象的高度
Width 如:1000 对象的宽度
Font 如:宋体 对象中文字的字体
Caption 如:确定 对象的标题,一般用于设置窗
体、标签、命令按钮
Text 如:10 设置文本框的内容,只有文本框
对象才有此属性,一般用于输入
输出
Picture 如:LoadPicture("1.jpg") 设置对象中显示的图片,常用在
Image和PictureBox控件中
Enable 如:True 设置对象是否有效,如设置计时
器控件的开关
Interval 如:1000 计时器控件的Timer事件触发的
时间间隔,单位为毫秒
  (4)方法:每个对象都有自己的行为,如List1.Clear是List1对象清空自身
所有的列表项,List1.AddItem a是往List1对象中添加一条项目。一般格式为:
对象名.方法名(参数)
(5)事件:事件就是发生在对象上的事情,通常是由用户在对象上做的一种动作。
常见的事件有:
事件名 含义 说明
Load 加载 一般用于窗体对象
Click 单击鼠标左键 可用于各种对象,常用于命令按钮
DblClick 双击鼠标左键 可用于各种对象
KeyPress 在键盘上按键,通过参数
KeyAscii获知按下了键盘上哪
一个键 一般用于文本框
Change 对象内容改变 一般用于文本框
Timer 计时器事件 一般用于计时器
  (6)事件处理过程:一个事件的发生,可以引起某个对象上的某个事件
处理过程(往往是用户编制的一段程序)的执行,这就是面向对象程序设计
中的事件驱动概念。
例1 在Visual Basic中,要在窗体中的标签对象Label1上显示文字“请输
入验证码:”,应改变的标签对象属性是?(  )
A.Width  B.Font  C.Caption  D.Top
解析 标签对象用Caption(标题)属性设置显示文字。
答案????C

2.事件处理过程的代码编写
事件处理过程的一般格式如下:
Private Sub对象名_事件名()
  代码段
End Sub
事件处理过程名称为:对象名_事件名,表示在某个对象上发生某个事件时,
执行代码段里的指令。如:
Private Sub Command1_Click()
  a=b+c
End Sub
则事件处理过程名称为Command1_Click,即当Command1对象上发生鼠标
单击事件时,执行指令a=b+c。
例2????在VB中,双击名为count的时钟后,默认出现的事件是?(  )
A.timer1_Timer()  B.timer1_Click()
C.count_Timer()  D.count_Click()
解析 本题考查对VB事件的掌握。双击控件会出现对应的默认事件过程
代码,其中事件名由对象名、下划线、事件名组成,本题中对象名为count,
是Timer控件,Timer控件的事件名为Timer。
答案????C

3.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.常考控件及其属性和方法
控件名 属性或方法 含义 实例
窗体(Form) Caption(属性) 标题 Load(加载)
标签(Label)
命令按钮
(CommandButton) Click(鼠标单击)
文本框(TextBox) Text(属性) 内容
列表框(ListBox) AddItem(方法) 添加列表项
计时器(Timer) Interval(属性) 间隔 Timer(计时事件)
Enabled(属性) 可用
代码 作用 说明
Label1.Caption=
"面积:" 将标签Label1的标题设置为"面
积:" 要注意文本框没有Caption属性
Text1.Text="hello!" 将文本框Text1的内容设置为"
hello!" 只有文本框才有Text属性,通过
设置文本框的Text属性可实现
输入输出
Text1.Text="" 将文本框Text1清空
List1.AddItem "abc" 在列表框List1中输出字符串
“abc” AddItem是方法,其后不能加
“=”
List1.Clear 清空列表框List1中的所有内容
Timer1.Interval=1000 表示每隔1秒启动计时器事件 时间间隔的单位是毫秒
使用举例:
Timer1.Enabled=True 表示开启计时器 True表示开启,False表示关闭
Form_Load() 窗体装载事件 该事件在程序启动时自动触发,
因此程序的初始化代码可放在
该事件处理过程中
Command1_Click 按钮上的鼠标单击事件
例1 编写如下程序:
?
在设计应用程序界面时,应使用图b所示“控件工具箱”中的 ????(填写相
应编号)添加标签“Label1”。要在按钮“Command1”上显示“计算”
字样,可以修改“Command1”的属性 ????的属性值。
答案 4;Caption
例2 在设计程序界面时,要清空文本框中的显示内容,应修改该文本框中
的 ????属性。
答案 Text
2.事件处理过程
事件处理过程名:对象名_事件名(),如Command1_Click()。
例3 代码“Private Sub Command1_Click()”中的Click是   ????。(单
选,填字母:A.对象名/B.属性名/C.事件名)
解析 Command1_Click是事件处理过程名,Command1是对象名,Click是
事件名。
答案????C????
考点三????VB语言基础
考向基础
一、VB基本数据类型
在VB中,常用的基本数据类型有以下几种:Integer(整数型)、Long(长整数
型)、Single(单精度实数型)、Double(双精度实数型)、String(字符串型)、
Boolean(逻辑型)、Date(日期型)。
二、常量、变量
1.常量
常量是在程序执行过程中其值不变的存储单元或数据。在VB中,常量有
整数常量、实数常量、字符串常量和逻辑常量这几种类型。如整数常量1
5、20等;实数常量3.14159、-2.01等;字符串常量“VB”“15”等;逻辑常
量True、False。
直接用值的常量叫直接常量,还有一类常量是符号常量。为了方便程序修
改、调试及使程序具有更好的可阅读性,我们通常将某个常量定义成符号
常量,并且在代码中使用该符号来代替实际值。如下列语句定义了符号常
量PI,来代替圆周率的近似值:
Const PI=3.1416
符号常量在定义时同时赋值,代码中凡是用到符号“PI”的地方,运算时实
际用了值3.1416。而且PI一旦被定义为符号常量,则后续代码中不允许对
“PI”进行再次赋值。
2.变量
在程序运行时,值一开始不确定,或者运行过程中可能会发生改变的存储单
元称为变量。每个变量都要有确定的变量名和数据类型。
变量的命名规则:
(1)由字母、数字或下划线等字符组成,必须以字母开头;
(2)变量名最长为255个字符;
(3)VB中不区分变量名的大小写;
(4)不能使用VB中的关键字。
变量说明语句的常用形式为:
Dim 变量名 As 变量的类型
例1 在Visual Basic中,下列能作为变量名的是?(  )
A.x+1  B.x_1  C.Or  D.If
解析????本题考查变量的命名规则。变量的名称由字母、数字或下划线等
字符组成,且必须以字母开头。“x+1”中“+”是不允许用的。题目中
Or、If在VB中有特定用途,不能作为变量名。
答案????B
例2 用变量存储诗朗诵比赛中选手的平均得分(保留2位小数),则变量的
数据类型应说明为?(  )
A.Integer  B.Long  C.Single  D.Date
解析 Integer是整型,Long是长整型,Single是单精度实数型,Date是日期
型。
答案????C????
例3 下列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 647。1010明显超过了32 767,如果存到Integer型的变量
s中,就发生了“溢出”错误。
答案????A????
三、VB中常用的标准函数
1.常用数学函数:Abs(X)、Int(X)、Sqr(X)、Exp(X)、Log(X)、Sin(X)、
Cos(X)、Tan(X)。
2.常用类型转换函数和字符串函数:Asc(X)、Chr(X)、Val(X)、Str(X)、
Len(X)、Mid(X,n,k)、Fix(X)。
3.随机函数Rnd:产生一个大于或等于0且小于1的单精度随机数。
例4 在Visual Basic中,a=-100,表达式“360”+Str(a)的值是?(  )
A.260  B.360-100  C.460  D.360100
解析 类型转换函数Str(x)的功能是将数值x转换为字符串。a=-100,Str(a)
=“-100”,“360”+Str(a)=“360-100”,完成字符串的连接运算。
答案????B????
四、算术、关系、逻辑三类基本运算及表达式
1.VB的基本运算包括算术运算、关系运算和逻辑运算三大类。
算术类基本运算有:^、-(取负)、*、/、\、Mod、+、-(减法)。
关系类基本运算有:=、<>、<、>、<=、>=。
逻辑类基本运算有:Not、And、Or。
2.表达式主要用来规定值的计算过程,以及对于某些情况或条件的判断。
一个表达式中可能包括算术运算、关系运算和逻辑运算等多种基本运算,
以及这些基本运算所涉及的数据(变量和常量)。
例5 能正确判断x为偶数的VB表达式是?(  )
A.x Mod 2=0  B.Int(x/2)=0
C.x/2=0  D.x\2=0
解析 判断“x是不是偶数”的条件是x能否被2整除,其Visual Basic条件
表达式是x Mod 2=0,即x除以2余数为0。
答案????A????
例6 已知a=1,b=2,c=3,下列表达式中值为True的是
(  )
A.Not(ab And b>c  C.ac  D.a>c
解析 本题考查关系表达式和逻辑表达式的运算方法。当ab的值为False并且b>c的值为False时,a>b And b>c的值为False。当ac的值为False时,ac的值为True。a>c的值为False。
答案????C????

考向突破
一、VB基本数据类型
VB中常用的数据类型如下表:
数据类型名 说明 性质
Integer 整数型 -32 768~32 767范围内的任何整数
Long 长整数型 -2 147 483 648~2 147 483 647范围内的任何整数
Single 单精度实数型 绝对值在1.401 298E-45到3.402 823E38内的任何实数,有效数字约6~7位
Double 双精度实数型 绝对值在10E-324到1.79E308内的任何实数,有效数字约14~15位
String 字符串型 一段文字和符号,放在一对双引
号(英文状态)之间
Boolean 逻辑型 判断的结果,其值为真(True)或
假(False)
Date 日期型 日期和时间
其中逻辑(Boolean)数据类型只有两个值True或False。将逻辑型转换成整
型时,True为-1,False为0;其他数据转换成逻辑型时,非0为True,0为False。
例1 运行如下Visual Basic程序,单击命令按钮Command1,出现如图所示
的出错信息。
Private Sub Command1_Click()
 Dim p As String,a As String
 p="" ’①
 a="abcd" ’②
 b=p+a ’③
 Label1.Caption=Str(p)’④
End Sub
?
发生“类型不匹配”错误时所执行的语句是?(  )
A.①  B.②  C.③  D.④
解析 程序执行到Label1.Caption=Str(p)时出现错误,类型转换函数Str(p)
的作用是将数值转换为字符串,而p是字符串型,于是出现“类型不匹配”
的问题。正确写法应该是Label1.Caption=p。
答案????D????
例2 在VB中,下列表达式的值属于字符串常量的是?(  )
A.Abs(100)  B.“false”  C.Val(“100”)  D.True
解析 本题考查VB的基本数据类型。A和C的值都为100,是整数型,D为逻
辑型,B中false本来是逻辑型,但加了双引号,则为字符串型。
答案????B????
二、基本运算与表达式
VB的基本运算包括算术运算、关系运算和逻辑运算三大类。把变量、常
量、运算符、函数和圆括号按一定的规则组合起来,构成一个表达式,用来
描述值的计算过程,或描述对于某种情况下所遇到的条件的判断。
(1)算术类运算符
基本运算 运算符号 优先级 举例 结果
乘幂 ^ 1 2^3 8
取负 - 2 -a a的相反数
乘法 * 3 2*3 6
实数除法 / 3 5/2 2.5
整数除法 \ 4 5\2 2
求余数 Mod 5 5 Mod 2 1
加法 + 6 2+3 5
减法 - 6 2-3 -1
  数字越大,优先级越低,在一个表达式中先执行优先级高的运算,同优
先级则按自左向右顺序执行,若有括号,则先计算括号内的表达式,如果有
多层括号,则按由内向外的顺序进行计算。
①整数除法的优先级比乘法和实数除法的优先级低一级,因此表达式15\8/
4相当于15\(8/4),结果为7。此外整数除法要求被除数与除数也必须是整
数,得到的商取整。
②求余数的运算符Mod是唯一一个由字母构成的运算符,注意与标准函数
的区别,函数有参数,而运算符没有参数。Mod运算要求被除数与除数都必
须是整数,得到的余数也是整数。Mod的优先级是5级,比整数除法低一级,
比加减法优先级高。
(2)关系运算符
所有关系运算具有相同的优先级。
基本运算 运算符号 优先级 举例 结果
相等 = 7 1=2 False
不相等 <> 7 1<>2 True
小于 < 7 1<2 True
大于 > 7 1>2 False
小于等于 <= 7 1<=2 True
大于等于 >= 7 1>=2 False
  ①关系运算主要是比较运算符两边数据的大小关系。在VB中,可以
对数值进行比较;也可以对字符进行比较,字符的ASCII值大的,字符值就
大;还可以对字符串进行比较,先比较第一个字符,如果相等,则比较第二个
字符,依此类推,因此字符串“final”<“find”。
②关系运算的结果是逻辑值真(True)或假(False),表示该表达式成立或不
成立。
③“1<=2”相当于“1<2 或1=2”,“或”运算只要其中一个条件成立,结
果即为真(True)。
④特别注意数值区间的写法,数学上的“33
And x<10”。
(3)逻辑运算符
基本运算 运算符号 优先级 举例 结果
非 Not 8 Not(1<2) False
与 And 9 3<4 And 4>5 False
或 Or 10 3<4 Or 4>5 True
①三个逻辑运算符的优先级是不一样的。“非”最高,“与”其次,
“或”最低。但都比其他类型运算符低。
②“与”运算中,只要“与”两边有一个表达式不成立,“与”运算结果就是False;“与”两边的表达式都成立,最后结果才是True。
③“或”运算中,只要“或”两边有一个表达式成立,“或”运算结果就是True;“或”两边的表达式都不成立,结果才是False。
(4)表达式书写注意点
①乘号不能省略,如表达式a=2*b+1写成a=2b+1会报错,写成a=b2+1不会


②条件表达式中区间的判断不能连写,比如判断a是否在区间[1,10]内,不能
写成1<=a<=10,应该写成a>=1 And a<=10;判断a,b,c三个变量是否相等,不
能写成a=b=c,应该写成a=b And b=c。
③要注意运算的优先级,比如求根公式应该写成(-b-Sqr(b*b-4*a*c))/(2*a),
而不是(-b-Sqr(b*b-4*a*c))/2*a
例3????(2018温州新力量联盟)已知a=30,b=10,c=3,则表达式Int(Sqr(a)) Mod
b\c的值为?(  )
A.1  B.2  C.0  D.1.67
解析 a=30,Int(Sqr(a))=5,“\”的优先级高于“Mod”,因此先算b\c=3,再
算5 Mod 3=2。
答案????B????
报错,但是程序会把b2看成一个变量名,因此运算结果也是不正确的。
例4 在VB中,设x=2019,能正确得到其十位数字“1”的表达式是?(???? )
A.x Mod 100  B.x Mod 100\10
C.x\10 Mod 10  D.x\100 Mod 10
解析 Mod运算和\运算有一些特殊的功能,比如x Mod 10,可取出x的个位
数;x Mod 100可取出x的十位和个位,依次类推。x\10相当于划去个位,x\10
0相当于划去十位和个位,依次类推。因此取十位数字表达式为x\10 Mod 1
0,取百位数字表达式为x\100 Mod 10,依次类推。注意“Mod”运算的优
先级比“\”运算的优先级低。A选项值为2019 Mod 100=19;B选项值为20
19 Mod 10=9;C选项值为201 Mod 10=1;D选项值为20 Mod 10=0。
答案????C??
??三、常用标准函数
常用的数学函数:
  随机函数在书写时可以不要参数,括号也可省略,函数返回值是一个大
于等于0且小于1的单精度随机数。产生[a,b]区间内的随机整数的表达式:
函数名 函数的功能 应用举例 函数返回值
Abs(X) 求X的绝对值 Abs(-3.5) 3.5
Int(X) 求不大于X的最大整数 Int(4.1)
Int(-4.1) 4
-5
Sqr(X) 求X的算术平方根 Sqr(4)
Sqr(6) 2
2.44948
Rnd() 产生一个[0,1)之间的随
机实数 Rnd() 例如:0.32
Int(Rnd*(b-a+1)+a)。如:产生[1,100]的随机整数,表达式为Int(Rnd*100+1)。
常用的类型转换函数和字符串函数:
函数名 函数的功能 应用举例 函数返回值
Asc(X) 求字符的ASCII值 Asc(“A”) 65
Chr(X) ASCII值转换为字符 Chr(48) “0”
Val(X) 数字字符串转换为数
值 Val(“-170”) -170
Str(X) 数值转换成字符串 Str(-170) “-170”
Len(X) 计算字符串的长度 Len(“asd”) 3
Mid(X,n,k) 取字符串X中第n个字
符起长度为k的子串 Mid(“abcd”,3,2) “cd”
Fix(X) 截掉数据的小数部分 Fix(2.56) 2
  ①Asc()、Val()、Len()三个函数的参数是字符串型,函数返回值是数
值型。Chr()、Str()两个函数的参数是数值型,函数返回值是字符串型。
Mid()函数有三个参数,函数返回值是字符串型。
②Len()函数与Mid()函数组合使用,可以取出一个字符串的所有字符。代
码如下:
n=Len(s)
For i=1 to n
Print Mid(s,i,1)
Next
例5 下列VB表达式的值等于23的是?(  )
A.Str(20)+“3”    B.Len(“-20”)+20
C.Val(“-20”)+20  D.Abs(Int(-23.3))
解析 本题考查VB标准函数。A选项值为“203”,B选项值为23(即3+20),
C选项值为0(即-20+20),D选项Int(X)函数是取不大于X的最大整数,因此Int
(-23.3)=-24,取绝对值后是24。
答案????B????
例6 产生一个随机大写字母的VB表达式是?(  )
A.Chr(Int(Rnd*25+65))  B.Asc(Int(Rnd*25+65))
C.Chr(Int(Rnd*26+65))  D.Asc(Int(Rnd*26+65))
解析 “A”的ASCII码值为65,“A~Z”共26个字母,因此产生随机数的
范围应该是[65,90],随机数公式为Int(Rnd*26+65)。Chr()是将ASCII值转换
为相应的字符,Asc()是求字符的ASCII值。因此答案为C。
答案????C????
考点四????VB基本语句
考向基础
一、赋值语句
赋值语句的作用是把等号右边的表达式的计算结果存储到等号左边的变
量中,或某个对象的属性中。其格式为:
变量名=表达式  或 ????对象名.属性名=表达式
说明:
①如果在同一行中出现多个赋值语句,则语句之间用冒号(:)隔开。如:
a=b:b=c:c=a
该行代码中包含了三个赋值语句,最后的结果是变量b和c中的值被交换。
②对某个对象的某个属性进行赋值,如:Label1.Caption=“结果”,表示将标
签Label1的标题设置为“结果”两字。
③“=”号两边的数据类型应该一致。
二、选择语句
选择语句又称为条件语句、分支语句或判断语句。用于实现三种基本结
构中的分支结构。条件语句用If语句来表示,有行If语句和块If语句两种语
句格式。
1.行If语句
行If语句必须在一行内写完。语法格式如下:
If 条件表达式 Then 语句1 Else 语句2

If 条件表达式 Then 语句
该指令执行过程是:先判断条件表达式,如果成立,则执行语句1,如果不成
立,则执行语句2。
2.块If语句
单个分支:
If 条件表达式 Then
语句块
End If
两个分支:
If 条件表达式 Then
语句块1
Else
语句块2
End If
多个分支:
If 条件表达式1 Then
语句块1
ElseIf 条件表达式2 Then
语句块2
ElseIf 条件表达式3 Then
……
Else
语句块n
End If
注意:块If语句必须要以End If结束,如下代码:
For i=1 To 10
 If i Mod 2=0 Then
Print “偶数”
 Else
  Print “奇数”
Next
运行后,会出现如下提示,错误原因并非缺少Next,而是缺少了End If。
?
3.If语句的嵌套
If 条件表达式1 Then
语句块1
 If 条件表达式2 Then
语句块2
 Else
   语句块3
 End If
Else
语句块4
End If
这是一个If语句的双层嵌套,内层If语句是嵌套在外层的Then分支中。因
此有如下结论:
条件表达式1成立 执行:语句块1 条件表达式2成立 执行:语句块2
条件表达式2不成立 执行:语句块3
条件表达式1不成立 执行:语句块4
三、循环语句
1.For循环,也称计数型循环,语法结构如下:
For 循环变量=初值 To 终值 [Step步长]
循环体
Next [循环变量]
步长=1时,可省略Step。
流程图如下:
?
例1 有如下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
解析 本题考查程序阅读。程序运行过程如下:
i x=n/ i 执行n=n+1后的n sum
1 0 1 0
2 1/2 2 1/2
3 2/3 3 1/2+2/3
4 3/4 4 1/2+2/3+3/4
5 4/5 5 1/2+2/3+3/4+4/5
退出循环
答案????C????
2.Do循环,也称当型循环,语法结构如下:
Do While 条件表达式
  循环体
Loop
Do语句的执行过程画成流程图如下:
Do语句的执行过程相对简单,先判断条件,成立则执行循环体,然后再次判
断条件,成立则再次执行循环体,每执行完一次循环体,则回到条件判断,直
到条件不成立,则退出循环。在事先不知道循环次数的情况下,可使用Do
语句,但是要设置好循环条件,否则有可能陷入死循环。当知道循环次数
时,既可使用Do语句,也可使用For语句,以下是等价的两个程序段:
For i=1 To 5
循环体
Next=i=1
Do While i<=5
循环体
i=i+1
Loop
例2 阅读如下程序段,程序运行结束时,k和s的值分别是?(  )
k=0:s=0
Do While k <=10
s=s+1
k=k+1
Loop
A.k=10,s=10  B.k=10,s=11
C.k=11,s=10  D.k=11,s=11
解析 k和s的初值都为0,每循环一次,s加1,k加1;循环变量k从0开始,一直
到k=10,故一共循环11次,所以程序结束时,s=11,最后一次循环完成后k=1
1。当k=11时,循环条件不满足,退出循环。所以程序结束时,k=11,s=11。
答案????D
例3 现要求刚好输出1 至100 内所有能被7 整除的数,下列程序不能实现
的是?(  )
A.
????For i=1 To 100
 If i Mod 7=0 Then
  List1.AddItem i
 End If
Next i   B.
????For i=7 To 100 Step 7
 List1.AddItem i
Next i
C.
????i=1: s=7
Do While s <=100
 List1.AddItem s
 i=i+1
 s=i*7
Loop  D.
????s=0
Do While s <=100
 s=s+7
 List1.AddItem s
Loop
解析 A选项i从1循环到100,步长为1,当i Mod 7=0(即i能被7整除)时输出i;
B选项i从7开始循环到100,步长为7;C选项i从1开始,执行s=i*7再输出s,直到
s大于100停止;D选项最后一次循环s=98,执行s=s+7=105,因此多输出了105。
答案????D
  3.循环语句的应用
计数器:定义一个变量如c作为计数器,赋初值为0,在循环体内执行指令如c
=c+1。则每当循环体被执行一次,就执行一次c=c+1,从而实现计数功能。
累加器:定义一个变量如s作为累加器,赋初值为0,在循环体内执行指令如s
=s+i或s=s+a(i),可实现数值累加或数组元素的相加。
4.循环语句的中途跳出:指令Exit For或Exit Do,如果是循环嵌套,则退出Ex-
it指令所在的这一层循环。
5.循环的嵌套——多重循环语句
有如下双重循环:
For i=1 To 10
 语句块1
 For j=1 To 10
语句块2
 Next j
 语句块3
Next i
则:语句块1、语句块3在外层循环中,分别执行10次;语句块2在内层循环
中,执行100次。
例4 有如下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

四、注释语句
注释是以单引号(’)开头的一串文字,可以出现在程序中需要说明的位置
上,通过这一串文字,对附近的程序段进行简要的说明,增加程序的可读
性。注释对程序的执行效果没有任何影响,程序运行时自动跳过注释。考
试时,有时可通过注释语句分析变量和算法,帮助解题。
如:
Dim n As Integer ’变量n用于存储班级总人数
五、输入、输出语句
1.输入语句
Inputbox()输入函数
①语法格式:Inputbox(提示信息,标题)。
②语法解释:
提示信息:指对输入数据的提示,显示在输入窗口中,不能省略;
标题:输入窗口的标题,可省略;
③该函数一般不单独作为一个语句使用,通常是用赋值语句的形式将输入
的内容赋值给某个变量。例:x=InputBox(“A=”,“输入”)。
该代码执行后,屏幕上将出现一个输入窗口,标题为“输入”,窗口中的提
示信息为“A=”,如图所示。
?
2.输出语句
(1)Msgbox()输出函数
①语法格式:Msgbox(消息,按钮类型,标题)。
②语法解释:
消息:输出的消息,不能省略;
按钮类型:弹出窗口包含的按钮,可省略;
标题:消息窗口的标题,可省略。
如:Msgbox(s),在弹出窗口中输出变量s的值。
如:Msgbox(“兔子的数量为”+str(s)),在弹出窗口中输出如“兔子的数量
为5”(假设s=5)。
(2)Print打印
Print方法是输出数据、文本的一个重要方法。
①基本格式:Print 输出内容。
在这里,输出内容可以是数、变量、表达式,也可以是用双引号括起来的字
符串。
②如果输出的内容是变量或表达式,则输出的是变量或表达式的值。如果
是用双引号括起来的字符串,则原样输出。
例如:语句 Print 3的输出结果为:3;
语句 Print 2+2的输出结果为:4;
语句Print “2+2”的输出结果为:2+2;
语句Print “你好”的输出结果为:你好。
输出内容后面有一个分号,表示输出完本内容后不换行;输出内容后面没有
符号,则输出完本行内容后换行;如果Print中没有输出内容,则表示输出一
个空行。
例如:A=5,B=3。
那么执行以下四行语句:
Print “A=”;
Print A
Print “B=”;
Print B
输出结果为:A=5
B=3
3.其他输入、输出方法
(1)文本框输入、输出:
输入:x=Val(Text1.Text),说明:将文本框Text1中输入的内容(数字字符串)赋
给数值型变量x。
输出:Text1.Text=Str(x),说明:将数值型变量x的值输出到文本框Text1中。
(2)标签输出:Label1.Caption Str(x),说明:将数值型变量x的值输出到标签
Label1中。
(3)列表框输出:List1.AddItem Str(x),说明:将数值型变量x的值输出到列表
框List1中。
考向突破
一、赋值语句
(1)与关系表达式的区别:关系表达式中的“=”用于判断等号两边是否相
等。赋值语句中的“=”是赋值。如果等式出现在If语句或Do语句的条件
表达式中,则该等式一定是关系表达式。
(2)作为输入输出语句时,“=”左右两边的内容不要写反。
Text1.Text=Str(a)是输出a,b=Val(Text2.Text)是输入b。
(3)赋值语句的执行过程:先计算右边表达式的值,再赋值给左边的变量。
如:a=a+5,该行代码执行前,如果a=3,则该行代码执行后,a=8。
例1 下面给出的赋值语句中错误的是?(  )
A.x=x=y         B.x+y=3
C.Label1.Caption=“hello”  D.x=-b
解析 A选项正确,第1个等号是赋值,第2个等号是“相等”运算,B选项
“=”左侧是算术表达式,格式错误。C和D选项都是正确的赋值语句。
答案????B????
例2 下面VB程序的功能是    ????。
a=a+b:b=a-b:a=a-b
解析 如一开始a=3,b=4。执行a=a+b后,a=7,b不变。执行b=a-b后,b=7-4=
3,a不变。执行a=a-b后,a=7-3=4,b不变。因此最后得到a=4,b=3,这样就实现
了变量a、b的互换。要实现两数交换最常用的是以下指令:t=a:a=b:b=t。
这里的t相当于一个临时变量,暂时存放交换前a的值。需要注意的是,语句
a=b:b=a不能实现交换。
答案????交换变量a、b的值
例3 变量a的初值为0,在下列语句中,每执行一次能使变量a的值在5、0两
数值上交替出现的是?(  )
A.a=5-a  B.a=-a
C.a=a+5  D.a=a-5
解析 当a=5时,执行5-a=5-5,得a=0;当a=0时,执行5-a=5-0,得a=5。
答案????A????
二、If语句
(1)If语句的多种形式,造成代码理解困难,一定要注意行If语句和块If语句
的开始和结束位置,尤其是If语句和If语句嵌套,If语句和循环语句嵌套。考
试时,可以将语句的开始和结束位置进行配对,有助于分析程序。
(2)If语句的条件:
逻辑运算符And:所有分项都是真,则值为真;只要有一个分项都是假,则值为假。
逻辑运算符Or:只要有一个分项是真,则值为真;所有分项是假,则值为假。



例4 若x=5,执行以下代码:
If x>3 Then x=x+3
If x>6 Then
 x=x-2
Else
 x=x+5
End If
最后x的值为?(  )
A.8  B.10  C.13  D.6
解析 代码中有两个If语句,一个是行If,一个是块If,依次执行,不互斥。第一个If语句条件成立,执行x=x+3=8;到第二个If语句,条件成立,执行分支x=x-2=6。
答案????D????
例5 有如下VB程序段:
a=3:b=4:c=5
If a>=b And a>=c Then
 y=a
ElseIf b>=c Then
 y=b
Else
 y=c
End If
该程序段运行之后,整数型变量y的值为?(  )
A.0  B.3  C.4  D.5
解析 本题考查块If语句的执行过程。当a=3,b=4,c=5时,条件表达式a>=b
And a>=c为False,表达式b>=c的值为False,程序执行y=c语句。
答案????D????
例6 有如下VB程序段:
Dim a As Single, b As Single
a = Val(Text1.Text)
If a >= 15 Then
 b = a ^ 2
Else If a>= 0 Then
 b = 10*a
Else
 b = a
End If
Text1.Text=Str(b)
若要测试所有分支程序代码是否正确,以下测试数据中,最恰当的一组是?
(  )
A.-1,0,1  B.16,0,-2
C.-5,2,10  D.15,25,-1
解析 本题主要考查分支结构。分支一:a≥15;分支二:0≤a<15;分支三:a<
0。为测试所有分支代码是否正确,应选择B选项。
答案????B???
?三、循环语句的循环次数
1.For 循环:
For 循环变量=初值 To终值 Step 步长
语句块
Next 循环变量
循环次数=Int((终值-初值)/步长)+1。
以下情况,循环次数是0次:初值大于终值,且步长为正数;初值小于终值,且
步长为负数。
以下情况,循环次数是1次:(终值-初值)/步长<1。
如果终值≠初值,并且步长=0,则程序陷入死循环。
例7 以下程序段运行之后,变量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????
例8 有以下一段语句:
For i=1 To 5 Step 10
 Print i
Next i
则循环体语句执行次数为?(  )
A.1  B.5  C.10  D.2
解析 本题中(终值-初值)/步长<1,执行次数是1次。
答案????A????
2.Do循环:首次检验条件表达式,如果发现是假,则循环体执行次数是0次。
例9????(2018绍兴期末调测)有如下 VB 程序段:
n =Val(Text1.Text)
i = 2: flag = True
Do While i <= Int(Sqr(n))
 If n Mod i = 0 Then
  flag = False
 Else
  i=i+1
 End If
Loop
"If flag Then Label1.Caption = "Yes" Else Label1.Caption = "No"
该程序段运行后,若在文本框 Text1 中输入“15”,则下列说法正确的是(  )?
A.flag 的值为 True
B.Label1 中输出“No”
C.程序将进入死循环
D.条件表达式 n Mod i=0 等价于 Int(n/i)=n\i
解析 i=2,n=15,因此n Mod i=0不成立,执行i=i+1=3;第2次循环, n Mod i=0
成立,因此执行flag=False,不执行i=i+1,i值不变,因此条件n Mod i=0 一直成
立,i值一直为3,循环条件一直成立,因此程序进入死循环。
答案????C????
考点五????数组的定义及使用
考向基础
数组是由一批同类型的变量构成的一个序列,组成数组的每一个变量被称
为数组的元素,也称为下标变量,下标是一个整数,用来指出某个元素在数
组中的位置,数组中每个元素的位置由它的下标唯一确定。
一维数组的常用形式为:
Dim 数组变量名(A1 To A2) As 元素的类型
经典的数组问题:
1.求数组中的最小值、最大值。
k=a(1)
For i=2 To n
 If a(i)Next
代码运行完后,k中存储的是数组a中的最小值;将a(i)k,则k中是
最大值。
2.求数组中最小值(最大值)所在的位置。
k=1
For i=2 To n
 If a(i)Next
3.判断一个10位数n中数字刚好是0123456789的不同组合,不重复,不缺失
(即每个数字均只出现一次)。
Dim a(0 To 9) As Integer
Do While n > 0
a(n Mod 10) = 1
  n = n \ 10
Loop
s = 0
For i = 0 To 9
 s = s + a(i)
Next
If s = 10 Then Print "yes"
4.统计字符串s中出现次数最多的小写字母。
Dim a(1 To 26) As Integer
For i = 1 To Len(s)
 c = Mid(s,i,1)
 If c >= "a" And c <= "z" Then
  n =Asc(c) - Asc("a") + 1
  a(n) = a(n) + 1
 End If
Next
Max = 1
For i = 2 To 26
 If a(i) > a(Max) Then Max = i
Next
PrintChr(Asc("a") + Max - 1)
数组是考试重点,也是难点。数组下标的灵活运用,可以实现很多算法,同
时也增加了考试难度。甚至在数组中再引入另一个数组做下标变量,如a(b
(i))、a(b(c(i)))等,大大增加了解题难度。对于此类题型,没有捷径,唯有多练多总结,同时也要熟练掌握循环语句,才能在考试时,做到胸有成竹、不慌不乱。
例1 有如下程序段,运行时程序出现如下错误提示,出错语句的位置是 ?
(  )
Private Sub Command1_Click()
 Dim i As Integer
 Dim a(1 to 10)As Integer  ’①
 For i=1 To 10 ’②
  a(i)=Rnd* 100 ’③
 Next i
 Label1.Caption=Str(a(i)) ’④
End Sub
?
A.①  B.②  C.③  D.④
解析 循环结束后i= 11, 数组a下标范围为 1~10,因此语句④中a(i),也即a(1
1)出现下标越界。
答案????D????
例2 有如下VB程序:
Private Sub Command1_Click()
 Dim a(1 To 5) As Integer
 a(5)=Val(Text1.Text)
 For i=4 To 1 Step -1
   a(i)=a(i+1)\2
 Next i
 Label1.Caption=Str(a(1))
End Sub
在文本框Text1中输入“100”,单击命令按钮Command1后,标签Label1中
显示的内容是?(  )
A.25  B.6  C.12  D.50
解析 根据代码可知前一项是后一项的一半(整数除),因此a(5)=100,a(4)=5
0,a(3)=25,a(2)=12,a(1)=6。
答案????B????
例3 有如下程序段:
key =5 : pmin = a(1)
For i = 2 To 6
 If a(i) > key And a(i) < pmin Then pmin = a(i)
Next i
数组元素 a(1)到 a(6)的值依次为“9,1,7,3,8,4”,执行程序后,变量pmin 的
值为?(  )
A.1  B.4  C.7  D.9
解析 本题是找出数组中的最小值,但加了一个条件a(i) > key,也即在大于
5的元素里找出最小值,应该是7。
答案????C????
考向突破
一、产生不重复的数
产生10个1至100的不重复的数:
方法一:利用数组做标记
Dim f(1 To 100) As Boolean
For i = 1 To 10
 a(i) = Int(Rnd * 100) + 1
 Do While f(a(i)) = True
  a(i) = Int(Rnd * 100) + 1
 Loop
 f(a(i)) = True
Next
利用数组f做标记,如果某数值x已经产生,则f(x)=true。
方法二:通过查找的方法
For i = 1 To 10
 a(i) = Int(Rnd * 100) + 1
 For j = 1 To i - 1
  If a(j) = a(i) Then i = i - 1: Exit For
 Next j
Next i
利用顺序查找,查找第i次产生的随机数是否与前i-1个数有相同,如果有相

同,则重新产生,此处i=i-1是一个巧妙的运用。
方法三:利用自定义函数
Dim a(1 To 10) As Integer
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 10
 a(i) = Int(Rnd * 100) + 1
 Do While f(i)
  a(i) = Int(Rnd * 100) + 1
 Loop
Next
End Sub
Public Function f(n As Integer) As Boolean
f = False
For i = 1 To n - 1
 If a(i) = a(n) Then f = True: Exit For
Next
End Function
自定义函数f的作用是判断第i个数是否已经产生,在函数中利用顺序查找,
查找第i个数是否与前i-1个数有相同,如果有相同则返回函数值True。因为
有两个过程要使用数组,因此数组定义为通用变量。
二、在数组中插入或删除数
1.在数组a的第k个位置删除一个数,并将第k+1至第n个数依次往前移。
For j = i To n - 1
 a(j) = a(j + 1)
Next
n = n-1 ’总个数减1
2.在数组a的第i个位置插入一个数key,并将第i至第n个数依次往后移。
For j = n + 1 To i + 1 Step -1
 a(j) =a(j - 1)
Next
a(i)=key
3.去除数组中的重复数。
i = 2  ’从第2个数开始找重复数
Do While i <= n
 For j = 1 To i - 1  ’第i个数与前i-1个数比较
  If a(i) = a(j) Then
   a(i) = a(n)  ’若a(i)是重复数,将最后位置的数直接替换a(i)
   n = n - 1  ’总个数减1
i = i - 1  ’这步操作很重要,因为移过去的数可能也是重复的,要重新判

   Exit For  ’当前数已经被删除,不用再比较
  End If
 Next
i = i + 1
Loop
例1????(2018绍兴期末调测)某数组 a(1)~a(10)中的数值分别为 5,3,5,10,3,5,1
2,96,12,10,经过去重后,a(1)~a(5)的数值为 5,3,10,12,96,部分程序如下:
i = 1:n=10
Do While i <= n
 j=i+1
 Do While j <=n
  If  ①????Then
   For k = j To n - 1
 ②????
   Next k
   n=n-1
  Else
   j=j+1
  End If
 Loop
 i=i+1
Loop
为实现以上功能,划线①②处应分别填写?(  )
A.①a(j)=a(j+1) ②a(k)=a(k+1)
B.①a(j)=a(i) ②a(k)=a(k+1)
C.①a(j)=a(j+1) ②a(k)=a(k-1)
D.①a(j)=a(i) ②a(k)=a(k-1)
解析 这是一个数组的去重问题。变量i从1至n,表示对数组中每个a(i)都
进行一次去重,变量j从i+1到n,表示每遍去重的方法是:将a(i)与其后的所有
元素进行比较,如果有a(j)=a(i),则将a(j)删去,并将a(j)后的数依次往前移。
因此①处填a(j)=a(i),②处填a(k)=a(k+1),表示将所有元素依次往前移一个
位置。
答案????B????
三、可能与不可能问题
通过随机函数产生数组,并经过一系列操作后,选出可能或不可能的状态,
这是近来比较热门的考题,难度往往也比较大。解这类题目的关键是:①注
意随机数的范围;②注意元素的奇偶性和奇偶位置;③通过模拟代码执行,
找出规律或程序的目的,有助于提高解题速度。
例2????(2019浙江名校新高考研究联盟(Z20联盟)第二次联考)有如下VB程
序段:
For i = 1 To 8
 a(i) = Int(Rnd * 2)
Next i
sum = 0
For i = 1 To 8 Step 3
 For j =i To 8
  a(j) = 1 - a(j)
 Next j
 sum = sum + a(i)
Next i
Text1.Text = Str(sum)
执行程序段后, 文本框 Text1中显示的内容不可能是?(  )
A.0  B.2  C.3  D.4
解析 本题考查随机函数和数组的综合应用。从a(i) = Int(Rnd * 2)可知,a
(i)的值要么是0,要么是1。第一次循环i=1,将第1个到第8个数的值取反(0
变1,1变0),并且将a(1)值累加至sum;第二次循环i=4,将第5个到第8个数的值
取反, 并且将a(4)值累加至sum;第三次循环i=7,将第7个到第8个数的值取
反, 并且将a(7)值累加至sum。显然不必研究数组中8个元素的值到底是多
少,因为sum中最多只加了3个元素(要么0,要么1),所以sum的值不可能是4。
答案????D????
例3????(2018期末调研测试卷)有如下 VB 程序段:
i = 1: n = 5
Do While i <= n
 x = Int(Rnd() * 9) + 1
 If x Mod 2 = 1 Then
  a(i) = x
 Else
  a(n) = x
  n = n - 1
 End If
 i = i + 1
Loop
数组元素的初值均为0, 执行该程序段后, 在下列选项中 a(1)至 a(5)各元素
值不可能的是?(  )
A. 7 1 3 9 8  B. 3 3 0 8 8
C. 0 1 0 4 2  D. 1 3 5 5 0
解析 分析代码可知,随机数的范围是[1,9],奇数赋给数组的头,偶数赋给
数组的尾,变量i是头,变量n是尾,但要注意的是,语句n=n-1是在分支语句中
的,也即数组尾赋值后才执行,而i=i+1是在分支语句外的,不管本次有没有
赋值,都会执行,因此当产生的是偶数时,数组头会被跳过,保持原值0。A选
项的产生序列是:7、1、3、9、8,B选项的产生序列是:3、3、8、8,C选项
的产生序列是:2、1、4。D选项不可能。
答案????D????
考点六????过程与自定义函数
考向基础
1.模块化程序设计的基本思想
当某一段程序需要反复书写时,可以将它封装成一个通用过程或函数,这样
可以大大减少程序的总代码量,并且提高程序的可阅读性。过程强调的是
动作,函数强调的是值的计算。函数有返回值,过程没有返回值。
2.通用过程
Public Sub 过程名(参数1,参数2,……)
[局部变量和常数声明]
语句块
[Exit Sub]
[语句块]
End Sub
如果过程没有参数,调用写法是:[Call]过程名,其中Call可省略。
如果过程有参数,调用写法有:
过程名 参数1,参数2,……
或:
Call 过程名(参数1,参数2,……)
注意使用Call时,参数必须在括号内。
注:自定义过程的调用选考不作要求。
3.自定义函数
自定义函数类似于过程,不同之处是函数执行完成后,函数的计算结果(即
“函数返回值”)被送到函数的调用点上(即调用函数的程序位置),供程序
的后续部分继续进行处理。
虽然VB提供了很多常用的标准函数,用户可以调用这些函数来实现某些
数学计算或数据类型的转换,但有一些程序需要自己来定义函数,来实现一
些特殊的功能。
自定义函数格式如下:
Public Function 函数名(参数1,参数2……)[As 类型名]
[局部变量和常数声明]
语句块
[Exit Function]
[语句块]
函数名=表达式
End Sub
①函数名的命名规则与变量名的命名规则相同,长度不超过40个字符。
②参数表是函数调用的纽带。在定义函数时,参数表里定义的变量是形参
(不知道具体的数值,但必须知道数据类型),当程序的其他模块调用函数时,
参数值一般就得到确认了,因此函数调用时,调用语句中参数表里填写的是
实参(也就是实际的参数,有值的参数),要求实参的个数和类型必须与形参
的个数和类型相匹配。通过函数调用,代入参数值,求出函数的返回值,并
返回调用点。
③由于自定义函数有函数返回值,因此在定义函数时应指定返回值的类型,
如果省略As子句,缺省类型是可变型(Variant)。
④在程序体中,至少有一个形如“函数名=表达式”的语句,这样,表达式的
计算结果才能作为函数的返回值,被送回调用点。函数名就像普通变量一
样使用。
⑤自定义函数的调用跟VB中标准函数的调用方法相同。
⑥自定义函数执行过程中,可随时退出函数过程,使用语句:Exit Function从
函数过程中退出。
例 素数:只能被1和它本身整除的自然数。要求编写VB程序找出任意两
个整数之间所有的素数及个数,程序运行界面如图所示。
请根据算法将下列程序补充完整。
Function prime(a As Integer) As Boolean
  Dim j As Integer
  prime=True
  j=2
  Do While prime And j<=a\2
   If a Mod j=0 Then
     prime=False
     Exit Do
   End If
    ①   ????
  Loop
End Function
Private Sub Command1_Click( )
  Dim i As Integer,a As Integer,b As Integer
  Dim count As Integer
  a=Val(Text1.Text)
  b=Val(Text2.Text)
  For i=a To b
    If  ② ????=True Then
      List1.AddItem Str(i)
      count=count + 1
    End If
  Next i
  Label1.Caption="素数共有" + Str(count) + "个!"
End Sub
答案 ①j=j+1 ②prime(i)
解析 ①自定义函数prime的功能是判断变量a是不是素数,判断的方法是
用循环语句逐个测试2到a\2的整数中,是否存在能把a整除的数,如果有,那
么a就不是素数,用变量j来记录测试的整数,因此每测试完一个j,需要将j加1。
②该处是判断数i是不是素数,通过调用函数prime检验。
专题五 算法与VB语言基础
探考情 悟真题
【考情探究】
考点 考试内容 考试要求 5年考情 预测热度
考题示例 考向 难度
算法 及VB 语言 基础 1.算法的表示——流程图 b 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分; 2019浙江4月选考,6,2分; 2019浙江6月学考,5,2分 循环结构流程图 ★★☆ ★★★
2.面向对象程序设计基础 b 注:主观题第一个程序题第1小题,分值为1分,整合至其他考点,真题此处不再罗列 程序界面设计中的控件、属性、事件、方法等知识和概念 ★☆☆ ★★★
3. VB 语言 基础 VB基本数据类型 c 注:本知识点是VB基础知识中的重点,虽然考题中没有直接考查该知识点,但其是读懂代码、分析代码的基础,分值整合至其他知识点中,真题此处不再罗列 整型、字符串型和逻辑型是热门考点 ★★☆ ★★★
常量、变量的定义及使用 c 分析变量的作用和类型,是读懂程序的关键,变量定义语句后的注释语句有时可作为参考 ★★☆ ★★★
基本运算、表达式及常用标准函数 c 2018浙江6月学考,11,5分; 2019浙江1月学考,5,2分 取整函数Int、整数除\、求余Mod、随机函数Rnd、字符串处理函数Mid和Len是学考热门考点 ★★☆ ★★★
4.VB 基本 语句 赋值语句 c 2016浙江10月选考,11,2分; 2019浙江4月选考,14,5分 每一道程序题都是VB语句的综合应用,需要熟练掌握这三种基本语句 ★☆☆ ★★★
判断语句 ★★☆ ★★★
循环语句 ★★★ ★★★
5.数组的定义及使用 c 2015浙江10月选考,12,2分; 2017浙江11月选考,11,2分; 2017浙江11月选考,17,6分; 2018浙江4月选考,11,2分; 2018浙江11月选考,11,2分;2019浙江4月选考,11,2分 数组加循环 ★★★ ★★★
6.过程与自定义函数 c 2015浙江10月选考,17,3分; 2017浙江4月选考,17,6分; 2018浙江4月选考,17,6分; 2019浙江4月选考,17,6分 ★★★ ★★★


分析解读  选、学卷分开后,整份试卷中,算法与程序的分值加大了,由原来的20分增加到26分,分值组成如下:
合卷时20分包括:3个选择题(1个流程图分析题、第11题和第12题,共6分)和3个填空题(第14题5分、第16题3分和第17题6分)。
分卷时26分包括:6个选择题(第7至第12题,每题2分)和2个填空题(第15题7分和第16题7分)。
可见分卷后,对算法和程序的考查加强了。到目前为止,分卷的学考卷已经有两份(2019年1月和2019年6月),分卷的选考卷尚且没有(2020年1月为第一次),只有样卷。分析样卷,可以发现程序的题型和考法变得多样。
1.6个选择题预测如下:
①流程图保留,题型为选择题,容易题。
②新增考查表达式、运算符和函数,题型为选择题,容易题。
③新增考查字符串处理和循环语句,题型为选择题,中等难度。
④新增考查数组和循环语句,题型为选择题,中等难度。也可能考查数据库连接的相关知识。
⑤第11题或第12题中必有一题考对分算法或排序算法,较难。
⑥第11题或第12题中通常有一个数组运用题,较难。
2.2个填空题预测如下:
第15题:相当于将合卷时的第14题和第16题整合,共7分,第1小题仍然考查面向对象基础知识;后3个小题,一般是2个代码填空,1个代码改错。可能还有一个算法分析填空。一般考排序算法或对分算法的运用,中等偏上的难度。
第16题:相当于合卷时的第17题,通常有1个算法分析填空,3个代码填空。一般考数组、自定义函数及算法的综合运用,比较热门的有:矩阵、动态规划、加密解密、压缩解压、区间合并等问题。本题是考卷的最难题,往往花费较多时间,需要考生合理分配时间。
熟练掌握数组和VB基本语句语法,是解题的关键点。分卷后对数组的考查明显加强了,难题和大题往往都是数组和语句的综合运用,甚至排序算法和查找算法也是基于数组和语句的运用。
破考点 练考向
【考点集训】
考点一 算法的表示——流程图
1.(2019金华十校期末调研考试)某算法的部分流程如图所示,输入“40”并执行这部分流程后,输出的sum的值是(  )
                    

A.91 B.90 C.21 D.1275
答案 A 
2.(2018宁波十校联考,5,2分)某算法流程图如图所示,执行这部分流程,变量sum的值为(  )

A.1 B.3 C.4 D.0
答案 A 本题考查循环结构流程图。变量x与sum的变化过程如下:初值x=11,sum=0;第1次进循环,sum=0+1-11 mod 2=0,x=5;第2次进循环,sum=0+1-5 mod 2=0,x=2;第3次进循环,sum=0+1-2 mod 2=1,x=1;第4次进循环,sum=1+1-1 mod 2=1,x=0;退出循环。因此sum=1。


3.(2018 浙南名校联盟期末考试)某算法的部分流程图如图所示。执行这部分流程图后,输出s的值是(  )

A.15 B.-4 C.-5 D.-6
答案 B 
4.(2019宁波新高考选考适应性考试)某算法流程图如图所示,执行该算法,输出s的值是(  )

A.1.333333 B.0.5 C.-2 D.3
答案 C 
考点二 面向对象程序设计基础
1.在Visual Basic窗体中,当前对象的属性窗口如图所示,下列说法正确的是(  )

A.Command1是对象名 B.True为属性名
C.Font为属性值 D.该对象的宽度值为495
答案 A 
2.(2018绍兴期末调测)要使程序运行时,按钮Command1上显示“转换”,下列方法不可行的是  (单选,填字母:A.界面设计时,选中对象 Command1,设置 Caption 属性为“转换” /B.在 Form_Load 事件处理过程中添加语句 Command1.Caption = "转换" / C.在Form_Load事件处理过程中添加语句 Command1.Text="转换")。?
答案 C 
3.(2018浙江十校联盟选考适应性考试,14,1分)编写如下程序:

设计如图所示的程序界面,至少要使用   个类(填数字)。?
答案 4


考点三 VB语言基础
1.(2019浙南名校联盟第一次联考)下列VB 表达式中,只随机产生9 到99 之间偶数的是(  )
A.Int(Rnd*90+10) B.Int(Rnd*90+9)
C.Int(Rnd*45)*2+10 D.Int(Rnd*45)*2+9
答案 C 
2.(2019浙江“七彩阳光”联盟期初联考)下列表达式的运算结果与其他选项不同的是(  )
A.6 Mod 3 * 3 B.Asc(“F”) -64
C.Int(Sqr(50)) -1 D.Mid(“123456”, 6, 1)
答案 D 
3.(2019第一学期五校联考)如果一个整数是另一个整数的平方,则称该数是“完全平方数”。下列表达式能判断整数 m 为完全平方数的是(  )
①(Sqr(m))^2=m
②Int(Sqr(m))=Sqr(m)
③m/Int(Sqr(m))= m\Int(Sqr(m))
④Int(Sqr(m))^2=m
A.①② B.②③ C.②④ D.③④
答案 C 
考点四 VB基本语句
1.有一VB程序的功能如下:在文本框Text1中输入一串数字,以逗号分割。程序运行后,在标签Label1中输出字符串中的最大数。例:在文本框Text1中输入“12,23,9,45,98,58,”,运行结果为在标签Label1中显示“98”。部分程序如下:
s = Text1.Text
j=1:n=0
Do While j <= Len(s)
c = Mid(s, j, 1)
If c = "," Then
  ① ?
If x > Max Then Max = x
n = 0
 Else
 ② ?
 End If
 ③ ?
Loop
Label1.Caption = "最大值:" +Str(Max)
程序段划线处应填(  )
A.①x =Val(Mid(s, j - n, n)) ②n=n+1 ③j=j+1
B.①x =Val(Mid(s, j - n, n)) ②j=j+1 ③n=n+1
C.①x =Val(Mid(s, j -n + 1,n)) ②n=n+1 ③j=j+1
D.①x =Val(Mid(s, j - n + 1, n)) ②j=j+1 ③n=n+1
答案 A 
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.(2018浙江十校联盟选考适应性考试)有如下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.有如下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) = 10: a(10) = 5
End Sub
Private Sub Command1_Click()
Dim i As Integer, t As Integer
s(1) = a(1)
For i = 2 To 10
  s(i) = s(i - 1) + a(i)
Next i
t =s(8) - s(4)
Text1.Text = Str(t)
End Sub
程序运行后,文本框Text1显示的内容是(  )
A.24 B.12 C.7 D.20
答案 D 
3.有如下VB程序段:
Dim a(1 To 5)As Integer,i As Integer,c As Integer
a(1)=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 
4.某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 j
a(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
答案 B 
考点六 过程与自定义函数
1.找出所有两位整数中的“镜反平方数对”。所谓“镜反平方数对”是指数对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 = j \ 10
Loop
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
答案 ①i Mod 10 <> 0 ②s = s + Str(j Mod 10)


2.某游戏规则如下:将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

【五年高考】
考点一 算法的表示——流程图
2015—2019年真题·提升题组
1.(2019浙江6月学考,5,2分)十进制数转换为二进制数的算法流程图如图所示,当输入十进制数 63 时,该流程图中循环体执行的次数为(  )
                    
A.4 B.5 C.6 D.7

答案 C 
2.(2019浙江4月选考,6,2分)某算法的部分流程图如图所示。执行这部分流程后,输出 c,s的值分别是(  )

A.8,10 B.10,14 C.12,6 D.12,24
答案 B 
3.(2018浙江11月选考,5,2分)某算法的部分流程图如图所示。执行这部分流程,分别输入35、50、60,则输出值依次为(  )

A.10,3 B.10,4 C.7,10,4 D.10,12,3
答案 B 
4.(2018浙江6月学考,5,2分)某算法的部分流程图如图所示,以下说法正确的是(  )

A.该流程执行后,变量k的值是-1
B.该流程执行后,变量a的值是16
C.该流程用于计算并输出1+8-16的值
D.该流程完整执行1次,“a<32?”共执行了3次
答案 D 
s k a
初值 1 1 8
第1次循环 1+1*8=9 0 16
第2次循环 9+0*16=9 1 32


最后k=1,a=32,s=1+1*8+0*16=9。变量k的值在0和1之间切换。循环体进入2次,循环条件判断了3次,最后一次条件不成立,退出循环。
5.(2018浙江4月选考,7,2分)某算法部分流程图如图所示。执行这部分流程,依次输入 12、-5、29、18、7,则输出值是(  )

A.12 B.-5 C.29 D.7
答案 C 
6.(2017浙江11月选考,5,2分)某算法的部分流程图如图所示,执行这部分流程后,输出a,b的值分别是(  )

A.5,8 B.4,8 C.5,11 D.4,11
答案 C 
7.(2017浙江4月选考,6,2分)某算法的部分流程图如图所示。执行这部分流程,依次输入3,4,-1,则输出s的值是(  )

A.-2 B.-1 C.0 D.1
答案 B  

8.(2016浙江10月选考,5,2分)某算法的部分流程图如图所示,执行这部分流程后,变量a,b的值分别是(  )

A.3,3 B.3,4 C.6,6 D.7,11
答案 D 
9.(2016浙江4月选考,5,2分)某算法的部分流程图如图所示,执行这部分流程后,变量x的值是(  )

A.0 B.1 C.2 D.3
答案 B 
考点二 面向对象程序设计基础
考点三 VB语言基础
2015—2019年真题·提升题组
1.(2019浙江1月学考,5,2分)下列 VB 表达式的值等于8的是(  )
A.Abs(-8.3) B.Int(Rnd*7+1)
C.Len(“2+6”) D.18 Mod 10
答案 D 
2.(2015浙江3月学考,3分)下列属于Visual Basic实数常量的
是(  )
A.0.618 B.1/2 C.True D.“2014-9-1”
答案 A 
3.(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 
4.(2018浙江6月学考,11,5分)素数只能被1和它本身整除,不能被其他自然数整除。编写VB程序实现如下功能:单击“产生奇数并判断”按钮Command1,随机产生一个三位正奇数显示在文本框Text1中,并在文本框Text2中显示其是不是素数的判断结果。例如,当随机产生的三位正奇数为953时,程序运行界面如图a所示。

 图a            图b
(1)在设计程序界面时,应使用图b所示“控件工具箱”中的    (填写相应编号)添加文本框Text1。?
(2)实现上述功能的VB程序如下,请在划线处填写合适的代码。
 Private Sub Command1_Click()
  Dim n As Integer, i As Integer
  Dim flag As Boolean ’用于标记是不是素数
  Randomize
  n = Int(  ①  )*2-1?
  Text1.Text = Str(n)
  flag = True ’标记为素数
  i = 3
  Do While i <= n - 1 And flag = True
   If n Mod i = 0 Then
    flag = False
   End If
   i = i + 2
  Loop
  If  ②   Then?
   Text2.Text = Str(n) + "是素数"
  Else
   Text2.Text = Str(n) + "不是素数"
  End If
 End Sub
(3)以下选项中,与加框处表达式“n Mod i = 0”等价的是  (单选,填字母)。?
A.n \ i = Int(n / i) B.n \ i = n/ i C.n Mod i = n \ i
答案 (1)② (2)①Rnd*450+51 或其他等价表达式
②flag或flag=True或 i>n-1或i=n或i>=n或其他等价表达式 (3)B
考点四 VB基本语句
2015—2019年真题·提升题组
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.(2019浙江4月选考,14,5分)小王设计“模拟撤销”程序,需要用一个“历史记录”, “历史记录”是在对字符串s进行插入或删除时,将每步操作信息依次存储得到的,操作信息由操作符(“+”表示插入,“-”表示删除)、操作位置和操作字符串(只包含英文字母)构成,例如,“+23abc”表示在字符串s第23个位置插入了“abc”, “模拟撤销”过程按照“历史记录”的逆序进行,将字符串s的内容恢复到初始状态。对字符串“Book”的操作与撤销过程,如图a所示。

图a
小王编写的“模拟撤销”VB程序如下,文本框 Text1中的内容是撤销前字符串,文本框Text2中的内容是历史记录,单击“撤销”按钮Command1后,在标签Label1中显示撤销过程,程序运行界面如图b所示。

图b
(1)实现上述功能的VB程序如下,在程序中出现的对象没有Caption属性的是    。(选填,填字母:A.Label1/B.Command1/C.Text1和Text2)?
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
 Dim s As String, t As String,ch As String
 Dim c As String, num As String, ss As String
 Dim n As Integer,i As Integer
 s = Text1.Text: t = Text2.Text
 c = "": num = "": ss = s
 For i = Len(t) To 1 Step -1
    ① ?
  If ch >= "a" And ch <= "z" Or ch >= "A" And ch = "Z" Then
   c =ch + c
  ElseIf ch >= "0" And ch <= "9" Then
   num =ch + num
  Else
   n = Val(num)
   If ch = "-" Then
    s = Mid(s, 1, n - 1) + ② ?
   Else
    s = Mid(s, 1, n - 1) + Mid(s, n + Len(c), Len(s) - n - Len(c) + 1)
   End If
   ss = ss + "→" + s
   c = "": num = ""
  End If
 Next i
 Label1.Caption = ss
End Sub
(3)运行该程序,若文本框Text1中的内容是"April",文本框Text2中的内容是"-3p+3ri-6e",单击撤销按钮,For循环语句执行完成后,字符串s的值是"    "。?
答案 (1)C (2)①ch=Mid(t,i,1) ②c+Mid(s,n,Len(s)-n+1) (3)Apple

考点五 数组的定义及使用
2015—2019年真题·提升题组
1.(2019浙江4月选考,11,2分)有如下VB程序段:
flag = true : i = 1
Do While i <= 6
  x =Int(Rnd * 100) + 1
  If flag Or x >50 Then
     a(i)=x
     flag = Not flag
     i = i + 1
  End If
Loop
执行该程序段后,在下列选项中,a(1)~a(6)各元素值不可能的是(  )
A.52,95,46,74,77,83 B.50,55,46,70,21,97
C.62,78,57,61,69,50 D.31,54,48,72,50,82
答案 C 
2.(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 
3.(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                    
4.(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 
5.(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 
6.(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+i\m 或 pa=pa-(m-1)*m+1或其他等价语句
③Left=Left-m*m 或 Left=n-Start-m*m+1或其他等价语句
7.(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

考点六 过程与自定义函数
2015—2019年真题·提升题组
1.(2019浙江4月选考,17,6分)给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将数组依次分割成m+1个段。具体分割方法如下:
?第1段是从数组首个元素开始,元素值都属于第1区间的最长连续元素段,如果首个元素不属于第1区间,则第1段元素个数为0;
?第1段分割后的剩余元素,用同样的方法来依次分割第2段、第3段、…、第m段;
?第m段分割后的剩余元素分割到第m+1段(剩余段)。
若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第p段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分割到m段“非重叠块”,第m段“重叠块”的元素个数为0。一个数组分段示例如图。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间, 因此第2段只包含10和20两个元素。第3段末尾连续3个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含33,58,46,第3段“重叠块”包含55,62,69。

(1)给定2个区间依次为[10,50],[30,80],数组各元素为“12,44,34,45,66,50,45,70”,则第1段“重叠块”中的元素个数为    。?
(2)小李根据上述描述,设计了一个统计各段“非重叠块”“重叠块”和剩余段中元素个数的算法。算法的VB程序如下,请在划线处填入合适的代码。
Const n = 18: m = 6
Dim a(1 To n) As Integer
Dim b(1 To 2 * m) As Integer
’b(1)、b(2)为第1区间的下限和上限,b(3)、b(4)为第2区间的下限和上限,…
Dim c(1 To 2 * m + 1) As Integer
’数组c用于保存统计结果:
’c(1)、c(2)分别存储第1段“非重叠块”和“重叠块”的元素个数,
’c(3)、c(4)分别存储第2段“非重叠块”和“重叠块”的元素个数,…
’c(2* m-1)存储第m段“非重叠块”元素个数,c(2 m)存储第m段“重叠块”的元素个数(值为0)
’c(2* m+1)存储剩余段元素个数
Private Sub Command1_Click()
 Dim i As Integer, p As Integer, L As Integer, LL As Integer
 ’读取n个数据并保存在数组a中,代码略
 ’读取m个区间的下限和上限并保存在数组b中,代码略
 For i = 1 To 2 * m + 1
  c(i) = 0
 Next i
 i = 1: p = 1
 L = 0: LL = 0
 Do While  ① ?
  If IsIn(i, p) Then
   If IsIn(i,p+1) Then
    LL = LL + 1
   Else
      ②  ?
    LL = 0
   End If
   i = i + 1
  Else
   c(2 * p - 1) = L
   c(2 * p) = LL
   L = 0
   LL=0
   p = p + 1
  End If
 Loop
 If i <= n Then
  c(2*p-1)=n-i+1
 Else
  c(2 * p - 1) = L
  c(2 * p) = LL
 End If
 ’输出统计结果,代码略
End Sub
’函数IsIn用来判断a(i)值是否属于第p区间
Function IsIn(i As Integer, p As Integer) As Boolean
 If p>m Then
 IsIn=False
Else
  If ③ Then IsIn=True Else IsIn=False?
End If
End Function
答案 (1) 3(2)①i<=n And p<=m或其他等价表达式
②L=L+LL+1或等价语句
③a(i)>=b(2*p-1) And a(i)<=b(2*p)

2.(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

                    
3.(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)根据排名方法:最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。93分之前的有效分数是94分,排第4名,并且有3个94分,因此4+3=7即为93分的名次。
(2)由于分数和名次的数据位数不一样,为了保证输出的时候能排列整齐,因此自定义一个函数ads来处理。在自定义函数结束前,必须要给函数名赋值,确保有函数的返回值。变量sx是处理完毕的字符串,因此将sx赋值给函数名,所以①处为ads=sx。变量recCount存储学生的总人数,数组sScore存储每位学生的分数,因此sScore(1)、sScore(2)、……、sScore(recCount)分别是第1位、第2位、……、第recCount位学生的分数。数组A存放每个分数的人数,如A(90)存的是90分的人数。用For语句将所有学生的分数统计一遍,计算方法是:A(sScore(i))=A(sScore(i))+1,如统计到第i位学生,若分数是90,则sScore(i)=90,则相当于A(90)=A(90)+1,即90分的人数加1。数组B存放每个分数的名次。从③处前一行代码:B(i)=mc可得出,mc中存放当前有效分数的名次值,因此③处应该计算下一个有效分数的名次值。当前分数的名次B(i)与个数A(i)之和即为下一个有效分数的名次,因此下一个有效分数的名次为mc=A(i)+B(i)。而mc在赋值之前,存的是当前分数的名次B(i),因此③处也可以填mc=A(i)+mc。
 教师专用题组
                    
1.(2016浙江温州十校联考,11,2分)VB表达式9\8/2+12 Mod 3*3的值是(  )
A.0.5 B.7 C.3.5 D.5
答案 D 
2.下列Visual Basic表达式中,与表达式Not x>1功能相同的是(  )
A.x<1 B.x>1 C.x>=1 D.x<=1
答案 D 
3.下面四个程序段中,运行后变量a的值最小的是(  )
A.a=35
n=4
For i=1 To n
 a=a*i
 a=a\i
Next i     B.a=35
n=4
For i=1 To n
 a=a\i
 a=a*i
Next i
C.a=35
n=4
For i=n To 1 step-1
 a=a*i
 a=a\i
Next i D.a=35
n=4
For i=n To 1 Step-1
 a=a\i
 a=a*i
Next i
答案 D 
4.(2016浙江名校新高考研究联盟第一次选考联考,14,5分)编写VB程序,实现如下功能:在文本框Text1中输入发放红包的总金额s,在文本框Text2中输入发放红包的个数n,单击“分配”按钮(Command1),为n个红包随机分配金额,并在列表框List1中显示分配后的这些金额,界面如图1所示。

图1图2
(1)在设计应用程序界面时,应使用图2所示“控件工具箱”中的    (填写相应编号)添加列表框List1。?
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
 Dim s As Single,x As Single,n As Integer,i As Integer
 Randomize
 List1.Clear
 s=Val(Text1.Text)
 n=  ①  ?
 For i=1 To   ②  ?
  x=Int((Rnd()*s/(n-i)+0.005)*100)/100
  List1.AddItem Str(x)
  s=  ③  ?
 Next i
 x=Int((s+0.005)*100)/100
 List1.AddItem Str(x)
End Sub
答案 (1)4 (2)①Val(Text2.Text) ②n-1 ③s-x

5.贝贝有n个桃子,吃完后每三个桃核可以换一个桃子,编写一个程序计算贝贝总共能够吃到几个桃子。
(1)若贝贝总共有7个桃子,则他最后可以吃到   个桃子。?
(2)修改程序中的错误。程序代码如下:
Private Sub Command1_Click()
Dim n As Integer,ans As Integer
n=Val(Text1.Text)
ans=n
Do While n>3  ’①
 ans=ans+n\3
 n=n\3 ’②
Loop
Label2.Caption="总共能吃到的桃子数为:"+Str(ans)+"个"
End Sub
答案 (1)10 (2)①n>=3 ②n\3+n Mod 3

6.小明编写统计字符串中出现最多的字母和数字的程序。程序运行如下:在文本框Text1中输入一个仅包含字母和数字的字符串。单击按钮Command1后,在标签Label1上显示出现最多的数字字符,在标签Label2上显示出现最多的字母字符(字母不区分大小写,例如字母G和g统计在一起)。程序运行界面如图所示。

实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a (1 To 10) As Integer’存储0~9每个数字出现的次数
Dim b(1 To 26) As Integer’存储a~z每个字母出现的次数
Dim zf As String,x As String,p As Integer
Dim maxa As Integer,maxb As Integer
  ①  ?
For i=1 To Len(zf)
 x=Mid(zf,i,1)
 If pd(x)=1 Then
  p=Asc(x)-Asc("0")+1
  a(p)=a(p)+1
    ②  ?
  p=Asc(x)-Asc("A")+1
  b(p)=b(p)+1
 Else
  p=Asc(x)-Asc("a")+1
  b(p)=b(p)+1
 End If
Next i
k=a(1):maxa=1
For i=2 To 10
 If a(i)>k Then k=a(i):maxa=i
Next i
k=b(1):maxb=1
For i=2 To 26
 If  ③  Then k=b(i):maxb=i?
Next i
Label1.Caption="出现最多的数字是"+Chr(maxa+Asc("0")-1)
Label2.Caption="出现最多的字母是"+Chr(maxb+Asc("A")-1)
End Sub
Function pd(ch As String) As Integer’函数用于判断每个字符的类型
 If ch>="0" And ch<="9" Then pd=2
 If ch>="A" And ch<="Z" Then pd=2
 If ch>="a" And ch<="z" Then pd=3
End Function
答案 ①zf=Text1.Text ②ElseIf pd(x)=2 Then
③b(i)>k

7.趣味数学题。小明使用VB编写程序解一道有趣的数学题:将1到9这九个数字分成三个三位数,不能有重复,三个数字之间比例满足1∶2∶3,求所有三位数组合。
程序界面如图所示,当单击“求解”按钮Command1时,在列表框List1中显示所有满足条件的组合。

程序代码如下,请在划线处填上合适的代码。
Dim a (0 To 9) As Integer
Private Sub Command1_Click()
 Dim i,n,m As Integer
 For i=123 To 333
  For n=1 To 9
   a(n)=0
  Next n
  s=0
  call fenjie(i)’使用call调用自定义过程,下同
  call fenjie(2*i)
  call fenjie(3*i)
  For m=1 To 9
s=   ①   ?
  Next m
  If s=9 Then List1.AddItem i&""&2*i&""&3*i
 Next i
End Sub
Sub fenjie(xAs Integer) ’自定义过程,将3位数分解并修改对应下标元素的值
 a(x Mod 10)=1
     ②    ?
 a(x\100)=1
End Sub
答案 ①s+a(m) ②a(x\10 Mod 10)=1或等价答案

8.(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  ????①
For i=3 To n
 If abs(w(i)-w(i-1))>=Abs(w(i-1)-w(i-2))Then imax=i????②
Next i
Text1.Text="年平均降水量变化最大的年份区间是"+Str(imax+1989)+"-"+Str(imax+1899)
End Sub
答案 ①2 ②Abs(w(imax)-w(imax-1)) 

9.(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中输出加密结果。下表显示了字符串中一个字符的加密过程:

程序运行效果如图所示。

实现上述功能的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组 2018—2020年模拟·考点题组
考点一 算法的表示——流程图
1.某流程图如图所示。执行该算法,下面说法错误的是(  )

                    
A.s的值最终为-5
B.语句“k=k+1”共执行了4 次
C.语句“s≤0”共判断了5 次
D.该算法转成VB 代码时能用Do 循环语句实现
答案 A 


2.(2018浙江五校联考第一次考试,6,2分)某算法的部分流程图如图所示,执行这部分流程,变量s的值为(  )

A.10 B.24 C.6 D.23
答案 B 
3.(2018绍兴选考科目诊断性考试,5,2分)某算法的部分流程图如图所示,执行这部分流程后,变量x的值是(  )

A.5 B.4 C.6 D.10
答案 B 
4.(2018宁波十校联考,5,2分)某算法流程图如图所示,执行这部分流程,变量sum的值为(  )

A.1 B.3 C.4 D.0
答案 A 
5.(2019浙南名校联盟第一次联考)某算法的部分流程图如图所示,执行这部分流程后,下列分析正确的是(  )

A.当x输入2,y输入1时,输出结果是16
B.当x输入2,y输入2时,输出结果是4
C.当x输入2,y输入1时,“b=b*x”共被执行5次
D.当x输入2,y输入2时,“a=a\x”共被执行4次
答案 A 
6.(2019金丽衢十二校第一次联考)某算法的部分流程图如图所示,执行这部分流程后,s的值为(  )

A.27 B.10 C.37 D.18
答案 A 
考点二 面向对象程序设计基础
1.某Visual Basic程序的一个事件过程如下:
Private Sub Form_Load()
 Command1.Caption="计算"
End Sub
在程序运行时,能触发该事件的是(  )
A.窗体装载 B.单击窗体
C.单击命令按钮Command1 D.双击窗体
答案 A 
2.小李在设计VB程序时所使用复选框对象的属性窗口如图所示,他想编制该复选框单击事件的处理过程,则该事件处理过程名是(  )

A.CheckBox_Click() B.加粗_Click()
C.Check1_Click() D.复选框_Click()
答案 C 
3.VB语句List1.AddItem d(i)的作用是把数组d的数据添加到列表框对象List1中。该语句中的“AddItem”是(  )
A.属性名 B.属性值 C.方法 D.事件
答案 C 
4.要使程序运行时,按钮Command1上的文字显示为“计算”,可在   事件过程中添加语句Command1.Caption="计算"。(单选,填字母:A.Command1_Click/B.Form_Load/C.Command1_DblClick)。?
答案 B 
5.一个VB程序的运行界面如图所示。下列说法不正确的是(  )

A.文本框Text1的Caption属性值为“H”
B.标签Label1的Caption属性值为“输入字符”
C.命令按钮Command1的Caption属性值为“查询”
D.窗体的Caption属性值为“查询字符ASCII码”
答案 A 

考点三 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.求半径为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 
4.(2020届金华十校期末调研考试)在VB中,若x是能被7整除的正整数,则下列表达式的值一定为真的是(  )
A.x Mod 7=0 B.x\7=0 C.Int(x/7)=0 D.7 Mod x=0
答案 A 
5.(2018舟山第二学期期末检测)已知字符型变量ch存放了一个大写字母,下列表达式能正确求得该字母在26个英文字母中序号的是(  )
A.Asc(ch)-Asc(“A”)+1 B.Asc(ch)-Asc(“A”)-1
C.Asc(ch-“A”)+1 D.Asc(ch-“A”)-1
答案 A 
6.(2018舟山第二学期期末检测)Visual Basic表达式3+27\2 Mod 3*2,正确的值是(  )
A.0 B.2 C.3 D.4
答案 D 
7.变量a中存储了一个字符,能够正确判断该字符为数字字符“0”~“9”的VB表达式是(  )
A.Asc(a)>=0 Or Asc(a)<=9
B.“0”<=a<=“9”
C.a<=“0” Or a>=“9”
D.a>=“0” And a<=“9”
答案 D 
8.(2020届名校协作体信息技术试题)随机产生集合{-1,1}中任意一个数的VB表达式是(  )
A.Int(Rnd*2)-1 B.Int(Rnd*3)-1
C.Int(Rnd*3)\2-1 D.Int(Rnd*2)*2-1
答案 D 

考点四 VB基本语句
1.求 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 
2.斐波那契数列是指从第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 
3.根据以下程序,在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
                    
A.
 *
* *
* * * B.
 *
* * *
* * * * * *
C.
 *
*
* D.
 * * *
* *
*
答案 B 
4.下列程序执行后文本框 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 
5.有如下 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 
6.(2020届金华十校期末调研考试)统计连续小写字母最长的个数,编写VB代码如下:
s=Text1.Text
 (1) ?
ans=0
For i=1 To Len(s)
 t=Mid(s,i,1)
 If t>="a" And t<="z" Then
  c=c+1
   (2) ?
 Else
   (3) ?
 End If
Next i
Text2.Text=Str(ans)
填空处的代码可由以下部分组成:
①c=0 ②c=1 ③If c>ans Then ans=c ④If c正确的代码顺序是(  )
A.②③① B.①④⑤ C.②④② D.①③①
答案 D 
7.(2019嘉兴第二学期期末)小虞编写了一个程序,求数列、、、、、……前10项的和,代码如下:
s=1/2+2/3:t=1:b=2
For i=3 To 10
        
Next i
Label1.Caption="前10项的和是:"+Str(s)
方框中的代码由以下四部分组成:
①b=r ②t=b ③r=t+b ④s=s+r/(r+b)
代码顺序正确的选项是(  )
A.④③①② B.④③②①
C.③④①② D.③④②①
答案 D 
8.有如下VB程序段:
s=Text1.Text
s1=""
For i=1 To Len(s)
 c=Mid(s,i,1)
 If c>="A" And c<="Z" Then
  c=Chr(Asc(c)+32)
 ElseIf c>="a" And c<="z" Then
  c=Chr(Asc(c)-32)
 End If
 s1=c+s1
Next i
Text2.Text=s1
该程序段运行后,若在文本框Text1中输入“Ab12CD”,则文本框Text2中显示的内容是(  )
A.aBcd B.dcBa C.aB12cd D.dc21Ba
答案 D 
9.(2020届名校协作体信息技术试题)在文本框Text1中输入一串字符串,单击“运行”按钮后,程序在列表框List1中输出该字符串的所有子串,程序运行界面如图所示,VB代码如下。

  s=Text1.Text
  For i=1 To Len(s)
    For j=  ①  ?
      List1.AddItem ②  ?
    Next j
  Next i
为实现上述功能,程序段两个划线处的语句分别为(  )
A.①i To Len(s)       ②Mid(s,i,j-i+1)
B.①1 To Len(s)-i+1 ②Mid(s,j,i)
C.①i To Len(s)-i+1 ②Mid(s,i,j-i+1)
D.①1 To Len(s) ②Mid(s,j,i)
答案 A 
10.(2019金丽衢十二校第一次联考)有如下VB程序段:
Private Sub Command1_Click()
Dim f As Integer,i As Integer
Dim s AsDouble’①
f=1:i=1:s=0
Do While i<=11’②
 s=s+f*1/i
 f=-1*f
 i=i+2
Loop
Text1.Text=Str(s)
End Sub
下列说法正确的是(  )
A.该程序段没有输入语句,也没有输出语句
B.输出结果为表达式1-1/3+1/5-1/7+1/9-1/11的值
C.若将加框处①改为Integer,输出结果约为0.74
D.若将加框处②改为“i<=12”,计算结果会出错
答案 B 
11.生成0~9组成的10位随机密码,无重复数字出现的VB程序段如下:
s1="0123456789"
n=Len(s1)
For i=1 To 10
       
  n=n-1
Next i
Text1.Text=s
方框中的代码由以下三部分组成:
①s=s+Mid(s1,x,1)
②x=Int(Rnd*n)+1
③s1=Mid(s1,1,x-1)+Mid(s1,x+1)
代码顺序正确的选项是(  )
                    
A.①②③ B.③②① C.②①③ D.②③①
答案 C 
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.(2019衢州教学质量检测)工资问题:某古老的工作和工资计算方式比较奇特,其工作要求如下:必须从1月1日当天开始工作,且连续工作n(n<=365)天才一次性结算得到工资。某年(假设当年为平年)的工资计算细则是:第1天获得1枚金币,接下来的2天(第2天和第3天)每天获得2枚金币,再接下来的3天(第4、5、6天)每天获得3枚金币……,依次类推,即当连续n天每天获得n枚金币后,会在之后的连续n+1天里,每天获得n+1枚金币。小王用VB编写了工资计算程序,当输入连续工作的最后一天的日期后,单击“计算”按钮Command1,程序自动计算工资总额,其运行界面如图所示。

实现上述功能的VB程序如下,请回答下列问题:
(1)下列选项中,属于鼠标“单击”事件的是  。(单选,填字母:A.DblClick/B.Load/C.Click)?
(2)请在划线处填入合适的代码。
(3)加框处的代码有错误,请改正。
Private Sub Command1_Click()
Dim i As Integer,j As Integer,k As Integer
Dim m As Integer,d As Integer,n As Integer
Dim md As String,sum As Integer
md="312831303130313130313031"
n=0
m=Val(Text1.Text)
d=Val(Text2.Text)
For i=1 To m-1
 n= ① ?
Next i
n=n+d
i=0:j=0
sum=0:k=1
Do While i sum=sum+j
 j=j+1
 If ② Then?
  j=0
  k=k+1
 End If
 i=i+1
Loop
Text3.Text=Str(sum)
End Sub
答案 (1)C (2)①n+Val(Mid(md,2*i-1,2))②j=k或k=j (3)sum+k

考点五 数组的定义及使用
1.某程序部分代码如下:
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 
2.(2019五校联考)某VB段程序如下:
Dim a (1 To 5) As Integer
Randomize
s=0
Do While s<5
 t=Int(Rnd*5+1)
 a(t)=a(t)+1
 If a(t)=1 Then s=s+a(t)
Loop
已知数组a(1)到a(5)的初值均为0,该段程序运行后,下列说法正确的是(  )
A.循环至多循环5次
B.数组a(1)到a(5)的值有可能为3,2,1,5,9
C.程序运行过程中可能会出现“下标越界”的错误提示
D.加框处语句改为“s<=5”,程序仍能正常运行
答案 B 
                    
3.(2020届浙江十校联盟联考)有如下VB程序段:
For i=1 To 100
 For j=i To 100
  If j Mod i=0 Then a(j)=a(j)+1
 Next j
Next i
Text1.Text=Str(a(30))
数组a各元素的初值为0,执行上述程序段后,文本框Text1中输出的内容为(  )
A.30 B.9 C.8 D.7
答案 C 
4.(2019金丽衢十二校第一次联考)有如下程序段:
Private Sub Command1_Click()
Dim i As Integer,j As Integer,k As Integer
For i=1 To n
 k=0
 For j=1 To n
  If a(j)>a(i) Then k=k+1
 Next j
      ?
Next i
For i=1 To n
List2.AddItem Str(a(i))+""+Str(mc(i))
Next i
End Sub
若要实现对数组a按降序排名次(最高分为第1名,当a中出现相同数字,排名相同),划线处应填写的语句为(  )
A.mc(i)=k+1 B.mc(i)=mc(i)+1
C.mc(j)=k+1 D.mc(j)=mc(j)+1
答案 A 
5.(2019诸暨第二学期期末)有如下VB程序段:
Dim a (1 To 2) As Integer
s=Text1.Text
For i=2 To Len(s)
 If Mid(s,i,1)>Mid(s,i-1,1) Then
  m=1
 Else
  m=2
 End If
 a(m)=a(m)+1
Next i
Text2.Text=Str(a(1))+Str(a(2))
在文本框Text1中输入“python”(不包括引号),则执行程序后Text2中显示的值为(  )
A.11 B.23 C.32 D.45
答案 B 
6.(2019衢州教学质量检测)有VB程序段如下:
s="2019appreciate":sum=0
For i=1 To Len(s)
 ch=Mid(s,i,1)
 If ch>="a" And ch<="z" Then
  m=Asc(ch)-Asc("a")+1
  a(m)=a(m)+1
 End If
Next i
For i=1 To 10
 If a(i)>0 Then sum=sum+1
Next i
数组a各元素的初始值都为0,执行该程序段后,变量sum的值为(  )
A.10 B.7 C.4 D.3
答案 C 
7.(2018温州十五校联合体联考)有VB程序段如下:
s="2019.06VisualBasic6.0":n=0
For i=1 To Len(s)
 ch=Mid(s,i,1)
 If ch>="0" And ch<="9" Then
  m=Asc(ch)-Asc("0")+1
  a(m)=a(m)+1
 End If
Next i
For i=1 To 10
 If a(i)>1 Then n=n+i
Next i
数组a各元素的初始值都为0,执行该程序段后,变量n的值为(  )
A.2 B.4 C.8 D.10
答案 C 

8.(2019浙江“七彩阳光”联盟考试)有如下VB程序段:
For i=1 To 5
 a(i)=Int(Rnd*10)
Next i
For i=2 To 5
 If a(i)  a(i)=a(i)+1
 ElseIf a(i) Mod 2=0 And i Mod 2=0 Then
  a(i)=a(i-1)-1
 End If
Next i
执行程序后,a数组各元素不可能是(  )
A.6,6,4,3,3 B.0,-1,9,8,4
C.4,3,5,8,7 D.0,1,3,2,0
答案 C 
9.小明利用Visual Basic编写了“查找第二小数”的程序,界面如图所示。程序随机产生50个范围在1~ 1000之间的随机整数,单击“Command1”按钮,能够在标签Label1中显示第二小的数字。

Private Sub Command1_Click()
Dim n As Integer,i As Integer
Dim a (1 To 50) As Integer
Randomize
For i=1 To 50
  ① ?
 List1.AddItem Str(a(i))
Next i
If a(1) firstmin=a(1)
 secondmin=a(2)
Else
 firstmin=a(2)
 secondmin=a(1)
End If
For i=3 To 50
 If a(i)  If ②  Then?
   secondmin=firstmin
   firstmin=a(i)
  Else
     ③  ?
  End If
 End If
Next i
Label1.Caption="第二小的数是"&Str(secondmin)
End Sub
(1)为了在列表框List1中加入随机产生的数字,小明在程序中写了语句“List1.AddItem Str(a(i))”,其中AddItem是List1对象的  。(填字母:A.属性/B.事件/C.方法)?
(2)为实现上述功能,请在划线处填入合适的代码。
答案 (1)C (2)①a(i)=Int(Rnd*1000)+1 ②a(i)
10.小明设计了一种纸牌游戏,每张纸牌上都有一个 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

11.(2019宁波新高考选考适应性考试)幸运数。一组由1开始的奇数数列为:
1,3,5,7,9,11,13,15,17,19,21,23,25,……
此数列的第二项为3,将此数列的第3n个数删除,留下的数为:
1,3,7,9,13,15,19,21,25,……
新数列的第三项为7,将新数列的第7n个数删除,留下的数为:
1,3,7,9,13,15,21,25,……
若一直重复上述步骤,最后剩下的数就是幸运数。
下列程序的功能是找出1000以内的幸运数,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim a(500) As Integer,b(500) As Integer
Dim i As Integer,m As Integer,k As Integer
Dim top As Integer,bott As Integer
’产生由1开始的奇数数列,依次存储在数组a中,代码略
top=2:bott=500
Do While top k=top  ’(1)
 For i=1 To bott
  If i Mod a(top)<>0 Then
   b(k)=a(i)
   k=k+1
  End If
 Next i
 bott=bott-1  ’(2)
 top=top+1
 For i=1 To bott
  a(i)=b(i)
 Next i
Loop
For i=1 To bott
 List1.AddItem Str(a(i))
Next i
End Sub
答案 (1)k=1 (2)bott=k-1
12.(2018台州期末质量评估)筷子颜色配对问题。现有不同颜色的筷子若干(筷子的颜色用数字编号1~10表示),颜色相同的筷子才能组成一双,其中有几根筷子是落单的,现要求找出落单筷子的颜色以及能够配对的筷子数量。编写程序解决该问题,程序运行时,在文本框Text1中依次输入筷子的颜色编号(数据都用逗号分隔并以逗号结尾),单击“查找”按钮,在列表框List1中输出落单筷子的颜色编号,在标签Label1中显示能够配对的筷子数量,运行界面如图所示。

实现上述功能的VB程序如下:
Private Sub Cmd1_Click()
Dim a (1 To 10) As Integer
’数组a存放不同颜色筷子的数量,各元素默认初值为0
Dim s As String,ch As String
Dim n As Integer,i As Integer,h As Integer
 ① :n=0?
For i=1 To Len(s)
 If Mid(s,i,1)="," Then
  h=Val(ch)
   ② ?
  ch=""
 Else
  ch=ch+Mid(s,i,1)
 End If
Next i
For i=1 To 10
 If ③ Then List1.AddItem "落单筷子的颜色为"+Str(i)?
 n=n+a(i)
Next i
Label1.Caption="能够配对的筷子有"+Str(n)+"双"
End Sub
请回答下列问题:
(1)由程序代码可知,命令按钮“查找”的对象名是   。?
(2)加框处程序代码有错,请改正。
(3)请在划线处填入合适的代码。
(4)运行该程序,若文本框Text1中输入的内容是“2,5,2,3,4,3,6,3,”,单击“查找”按钮,标签Label1中显示的内容是          。?
答案 (1)Cmd1 (2)n+a(i)\2 (3)①s=Text1.Text
②a(h)=a(h)+1 ③a(i) Mod 2=1
(4)能够配对的筷子有2双


考点六 过程与自定义函数
1.(2020浙江名校新高考研究联盟(Z20联盟)第一次联考)若在文本框Text1、Text2、Text3中分别输入2,5,6,下列程序段运行后,标签Label2中显示的内容是(  )
Private Sub Command1_Click()
Dim a As Integer,b As Integer,c As Integer
a=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text)
Label2.Caption=Str(fx(a,b,c))
End Sub
Function fx(x As Integer,y As Integer,z As Integer) As Integer
If xIf x>y Then fx=y Else fx=x
End Function
A.2 B.5 C.6 D.0
答案 A 
2.某程序段如下:
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 
3.(2018温州新力量联盟期末)有如下VB程序段:
Private Sub Command1_Click()
Const s1="efg"
s2="&auif,+eg$Ymfhe":s3=""
For i=1 To Len(s2)
 If being(Mid(s2,i,1),s1) Then
 s3=s3+Str(i)+","
End If
Next i
Text1.Text=s3
End Sub
Function being(x As String,y As String)As Boolean
being=False
For i=1 To Len(y)
 If x=Mid(y,i,1) Then
 being=True:Exit Function
End If
Next i
End Function
执行后文本Text1中显示的内容是(  )
A.4,5,6,9,10 B.5,8,9,13,15,
C.2,1,3,3,1, D.4,5,6,13,15,
答案 B 
4.十进制整数换成二进制整数采用“除2倒取余”法。十进制小数转换成二进制小数采用“乘2顺取整”法,具体做法是:用2乘十进制数的小数部分,得到一个积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。小刘根据以上方法编写了VB程序,运行界面如图所示。程序运行时,在文本框Text1中输入一个带小数的正十进制数(小于32 767),点击“转换”按钮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

5.(2018舟山期末检测)罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字,即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法如下:
①相同的数字连写,所表示的数等于这些数字相加得到的数,如Ⅲ=3;
②小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如Ⅷ=8、Ⅻ=12;
③小的数字(限于Ⅰ、X和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如Ⅳ=4、Ⅸ=9;
王老师设计了一个将罗马数字转换成阿拉伯数字的程序,实现该功能的程序代码如下:
Private Sub Command1_Click()
Dim a(1 To 10) As String
Dim b(0 To 10) As Integer
Dim x As String,c As Integer,j As Integer
x=Text1.Text
j=Len(x)
b(0)=0
c=0
For i=1 To j
 a(i)=Mid(x,j-i+1,1)
 b(i)=zh(a(i))
 If ① Then?
  c=c-b(i)
 Else
  c=c+b(i)
 End If
Next i
Label2.Caption="结果:"+Str(c)
End Sub
Function zh(x As String) As Integer
s="IVXLCDM"
zh=1
For i=1 To 7
 If s=Mid(x,i,1)Then
  Exit For
 ElseIf ② Then?
  zh=zh*5
 Else
  zh=zh*2
 End If
Next i
End Function

(1)程序界面如图所示,程序中共包含   个对象。?
(2)加框处代码有错,应改为   。?
(3)为完善程序,在划线处填入合适的代码。
(4)罗马数字MCMLXXX转换成阿拉伯数字为   。?
答案 (1)5 (2)x=Mid(s,i,1) (3)①b(i)
B组 2018—2020年模拟·综合题组
1.(2018温州选考适应性测试)某算法的部分流程图如图所示。输入s值为2018,执行这部分流程图后,s和i的值分别是(  )
                    

A.1,3 B.1,4 C.2,3 D.2,4
答案 D 
2.(2018浙江名校协作体试题)某算法流程图如图所示:

执行该流程图后,输出i,k的值分别是(  )
A.102,9 B.102,8 C.100,9 D.100,8
答案 A 
3.(2019五校联考试题)某算法部分流程图如图所示。执行这部分流程,输入a,b的值分别为60,27,则输出值为(  )

A.1 B.3 C.6 D.9
答案 B 
4.用VB模拟设计某软件的登录界面,如图所示,当鼠标单击“<请输入账号>”所在的文本框Text1时,文字内容就消失。则此事件处理的过程名应该是(  )

A.登录窗口_Click B.Text1_KeyPress
C.Command1_Click D.Text1_Click
答案 D 
5.(2018期末调研测试卷)下列表达式的运算结果与其他选项不同的是(  )
A.Len("123")+2^2
B.Abs(Int(-6.8))
C.Asc(Mid("789",1,1))
D.Val("9")-Sqr(4)
答案 C 

6.有如下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 
7.有如下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 
8.(2019浙江十二校联考)有如下VB程序段:
Dim i As Integer,sum As Integer
Dim a (1 To 6) As Integer,b(1 To 6) As Integer
Sum=0
a(6)=18:a(5)=7:b(6)=14:b(5)=16
For i=4 To 1 Step -1
 a(i)=a(i+2)-a(i+1)
 b(i)=b(i+2)-a(i)
 If b(i) Mod 3=0 Then sum=sum+b(i)
Next i
Text1.Text=Str(sum)
该程序段运行后,文本框Text1中显示的内容是(  )
A.39 B.30 C.-9 D.12
答案 B 
9.(2018温州普通高中选考适应性测试)有如下VB程序段:
Dim a (1 To 6) As Integer
Sum=0
For i=1 To 6
 For j=i+1 To 6
  If j Mod i=0 Then a(j)=1-a(j)
 Next j
Next i
For i=1 To 6
 Sum=Sum+a(i)
Next i
Text1.Text=Str(Sum)
该程序段运行后,文本框Text1中显示的内容是(  )
A.3 B.4 C.5 D.6
答案 B 
10.(2018稽阳联谊学校联考)有如下程序段:
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.(2018金丽衢十二校第三次联考)在Text1文本框内输入字符串,单击去重按钮,将字符串后面相同的字符删除,并在Text2中输出经过删除的字符串。程序界面如图所示。请在下面划线处填入合适的代码。

Private Sub Command1_Click()
Dim s As String,s1 As String,c As String
s=Text1.Text
For i=1 To Len(s)
 c=Mid(s,i,1)
 s1= (1) ?
 For j= (2) ?
  If c<>Mid(s,j,1) Then
   s1=s1+Mid(s,j,1)
  End If
 Next j
  (3) ?
Next i
Text2.Text=s
End Sub
A.(1)Mid(s,1,1) (2)i+1 To Len(s) (3)s1=s
B.(1)Mid(s,1,1) (2)i To Len(s) (3)s1=s
C.(1)Mid(s,1,i) (2)i To Len(s) (3)s=s1
D.(1)Mid(s,1,i) (2)i+1 To Len(s) (3)s=s1
答案 D 
12.已知数组元素值:a(1)=2,a(2)=8,a(3)=3,a(4)=4,a(5)=5,a(6)=6,a(7)=1,a(8)=7,a(9)=9。
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
Text1.Text=Str(m)
该程序段运行后,文本框Text1中显示的内容是(  )
A.4 B.6 C.8 D.9
答案 A 
13.(2019衢州教学质量检测)有VB程序段如下:
Randomize
For i=1 To 6
 a(i)=Int(Rnd*20)+1
 If a(i)Mod 2=i Mod 2 Then
  a(i)=a(i)-1
 Else
  a(i)=a(i)+2
 End If
Next i
执行该程序段后,a(1)~a(6)各元素可能的是(  )
A.13,2,7,12,5,18 B.22,7,0,15,4,19
C.20,9,18,23,4,7 D.6,0,4,21,18,17
答案 B 
14.(2019浙江普通高中学考选考模拟)统计不同单词个数,在Text1中输入一行单词,点击“统计”按钮后在Text2中输出不同单词的个数。单词字母有大小写,同一单词的大小字母视为相同,句子以符号结尾,程序运行界面如图所示。

(1)观察以下代码,该代码中Command1_Click()是   。(单选:A.对象名/B.事件名/C.事件处理过程名)?
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a (1 To 100)As String,s As String,ch As String,word As String
Dim i As Integer,j As Integer,k As Integer,numb As Integer
s=Text1.Text:k=0:word=""
For i=1 To Len(s)
ch=Mid(s,i,1)
 If ch>="a"And ch<="z"Or ch>="A"And ch<="Z"Then
  If ch>="A"And ch<="Z"Then ① ?
  word=word+ch
 Else
  flag=False
  For j=1 To k
   If a(j)=word Then flag=True
  Next j
  If Not flag And word<>""Then
    ② ?
   a(k)=word
   numb=numb+1
  End If
   ③ ?
 End If
Next i
Text2.Text=Str(numb)
End Sub
答案 (1)C (2)①ch=Chr(Asc(ch)+32)或ch=Chr(Asc(ch)+Asc("a")-Asc("A")) ②k=k+1 ③word=""

15.(2018浙江“七彩阳光”联盟期初联考)用户注册某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

16.设某汉字由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



17.编写VB程序,模拟考场安排,将编号从1开始的n(n为平方数)个学生按m×m方阵以S型进行排列。程序功能如下:在文本框Text1中输入考场人数,点击“排列”按钮Command1,在列表框List1中输出排列结果。以4×4方阵为例,考生编号为1~16,排列规则如图a所示,运行界面如图b所示。

     图a         图b
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim a (1 To 100) As Integer’用来存储重新排列后的编号
Dim n As Integer,i As Integer,j As Integer,k As Integer,pa As Integer
Dim s As String
n=Val(Text1.Text)
i=1
m=n ’(1)
For k=1 To m
 If k Mod 2=1 Then
  pa=k
  For j=1 To m
    a(pa)=i
    pa=pa+m
    i=i+1
  Next j
 Else
  pa=(m-1)*m+k
  For j=1 To m
    a(pa)=i
    pa=pa+m  ’(2)
    i=i+1
  Next j
 End If
Next k
i=1
For k=1 To m  ’按行对考生编号进行输出
 s=""
 For j=1 To m
  s=s+Str(a(i))
  i=i+1
 Next j
 List1.AddItem s
Next k
End Sub
答案 (1)m=Sqr(n) (2)pa=pa-m


同课章节目录