资源简介 (共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 答案????D2.解题突破口进入循环体的前提是满足循环条件,因此退出循环时,一定是不满足循环条件的状态,利用好这一点,可以快速解题。例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(标题)属性设置显示文字。答案????C2.事件处理过程的代码编写事件处理过程的一般格式如下:Private Sub对象名_事件名() 代码段End Sub事件处理过程名称为:对象名_事件名,表示在某个对象上发生某个事件时,执行代码段里的指令。如:Private Sub Command1_Click() a=b+cEnd 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。答案????C3.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 在设计程序界面时,要清空文本框中的显示内容,应修改该文本框中的 ????属性。答案 Text2.事件处理过程事件处理过程名:对象名_事件名(),如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中,常量有整数常量、实数常量、字符串常量和逻辑常量这几种类型。如整数常量15、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)=0C.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\10C.x\10 Mod 10 D.x\100 Mod 10解析 Mod运算和\运算有一些特殊的功能,比如x Mod 10,可取出x的个位数;x Mod 100可取出x的十位和个位,依次类推。x\10相当于划去个位,x\100相当于划去十位和个位,依次类推。因此取十位数字表达式为x\10 Mod 10,取百位数字表达式为x\100 Mod 10,依次类推。注意“Mod”运算的优先级比“\”运算的优先级低。A选项值为2019 Mod 100=19;B选项值为2019 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) 22.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 nPrint Mid(s,i,1)Next例5 下列VB表达式的值等于23的是?( )A.Str(20)+“3” B.Len(“-20”)+20C.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语句块1Else语句块2End If多个分支:If 条件表达式1 Then语句块1ElseIf 条件表达式2 Then语句块2ElseIf 条件表达式3 Then……Else语句块nEnd If注意:块If语句必须要以End If结束,如下代码:For i=1 To 10 If i Mod 2=0 ThenPrint “偶数” Else Print “奇数”Next运行后,会出现如下提示,错误原因并非缺少Next,而是缺少了End If。?3.If语句的嵌套If 条件表达式1 Then语句块1 If 条件表达式2 Then语句块2 Else 语句块3 End IfElse语句块4End 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 NextEnd Sub该程序通过For循环计算sum的值,下列表达式的值与sum相等的是?(????)A.1+1/2+2/3+3/4+4/5B.1+1/2+2/3+3/4C.1/2+2/3+3/4+4/5D.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 条件表达式 循环体LoopDo语句的执行过程画成流程图如下:Do语句的执行过程相对简单,先判断条件,成立则执行循环体,然后再次判断条件,成立则再次执行循环体,每执行完一次循环体,则回到条件判断,直到条件不成立,则退出循环。在事先不知道循环次数的情况下,可使用Do语句,但是要设置好循环条件,否则有可能陷入死循环。当知道循环次数时,既可使用Do语句,也可使用For语句,以下是等价的两个程序段:For i=1 To 5循环体Next=i=1Do While i<=5循环体i=i+1Loop例2 阅读如下程序段,程序运行结束时,k和s的值分别是?( )k=0:s=0Do While k <=10s=s+1k=k+1LoopA.k=10,s=10 B.k=10,s=11C.k=11,s=10 D.k=11,s=11解析 k和s的初值都为0,每循环一次,s加1,k加1;循环变量k从0开始,一直到k=10,故一共循环11次,所以程序结束时,s=11,最后一次循环完成后k=11。当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 IfNext i B.????For i=7 To 100 Step 7 List1.AddItem iNext iC.????i=1: s=7Do While s <=100 List1.AddItem s i=i+1 s=i*7Loop D.????s=0Do While s <=100 s=s+7 List1.AddItem sLoop解析 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 语句块3Next i则:语句块1、语句块3在外层循环中,分别执行10次;语句块2在内层循环中,执行100次。例4 有如下Visual Basic程序段:s=0For i=1 To 10 For j=1 To is=s+j*j Next j s=s+i*iNext 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 APrint “B=”;Print B输出结果为:A=5B=33.其他输入、输出方法(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=3C.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=-aC.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+3If x>6 Then x=x-2Else x=x+5End 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=5If a>=b And a>=c Then y=aElseIf b>=c Then y=bElse y=cEnd 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 Singlea = Val(Text1.Text)If a >= 15 Then b = a ^ 2Else If a>= 0 Then b = 10*aElse b = aEnd IfText1.Text=Str(b)若要测试所有分支程序代码是否正确,以下测试数据中,最恰当的一组是?( )A.-1,0,1 B.16,0,-2C.-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 Integers = 0For i= 1 To 5 Step -1 s = s + iNext iA.15 B.10 C.0 D.程序错误解析 该For循环语句的循环次数是0次,因此s的值不变。答案????C????例8 有以下一段语句:For i=1 To 5 Step 10 Print iNext 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 = TrueDo While i <= Int(Sqr(n)) If n Mod i = 0 Then flag = False Else i=i+1 End IfLoop"If flag Then Label1.Caption = "Yes" Else Label1.Caption = "No"该程序段运行后,若在文本框 Text1 中输入“15”,则下列说法正确的是( )?A.flag 的值为 TrueB.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=1For i=2 To n If a(i)Next3.判断一个10位数n中数字刚好是0123456789的不同组合,不重复,不缺失(即每个数字均只出现一次)。Dim a(0 To 9) As IntegerDo While n > 0a(n Mod 10) = 1 n = n \ 10Loops = 0For i = 0 To 9 s = s + a(i)NextIf s = 10 Then Print "yes"4.统计字符串s中出现次数最多的小写字母。Dim a(1 To 26) As IntegerFor 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 IfNextMax = 1For i = 2 To 26 If a(i) > a(Max) Then Max = iNextPrintChr(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(11)出现下标越界。答案????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)=50,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 BooleanFor 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)) = TrueNext利用数组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 jNext i利用顺序查找,查找第i次产生的随机数是否与前i-1个数有相同,如果有相同,则重新产生,此处i=i-1是一个巧妙的运用。方法三:利用自定义函数Dim a(1 To 10) As IntegerPrivate Sub Command1_Click()Dim i As IntegerFor i = 1 To 10 a(i) = Int(Rnd * 100) + 1 Do While f(i) a(i) = Int(Rnd * 100) + 1 LoopNextEnd SubPublic Function f(n As Integer) As Booleanf = FalseFor i = 1 To n - 1 If a(i) = a(n) Then f = True: Exit ForNextEnd Function自定义函数f的作用是判断第i个数是否已经产生,在函数中利用顺序查找,查找第i个数是否与前i-1个数有相同,如果有相同则返回函数值True。因为有两个过程要使用数组,因此数组定义为通用变量。二、在数组中插入或删除数1.在数组a的第k个位置删除一个数,并将第k+1至第n个数依次往前移。For j = i To n - 1 a(j) = a(j + 1)Nextn = n-1 ’总个数减12.在数组a的第i个位置插入一个数key,并将第i至第n个数依次往后移。For j = n + 1 To i + 1 Step -1 a(j) =a(j - 1)Nexta(i)=key3.去除数组中的重复数。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 ’总个数减1i = i - 1 ’这步操作很重要,因为移过去的数可能也是重复的,要重新判断 Exit For ’当前数已经被删除,不用再比较 End If Nexti = i + 1Loop例1????(2018绍兴期末调测)某数组 a(1)~a(10)中的数值分别为 5,3,5,10,3,5,12,96,12,10,经过去重后,a(1)~a(5)的数值为 5,3,10,12,96,部分程序如下:i = 1:n=10Do 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+1Loop为实现以上功能,划线①②处应分别填写?( )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 isum = 0For i = 1 To 8 Step 3 For j =i To 8 a(j) = 1 - a(j) Next j sum = sum + a(i)Next iText1.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 = 5Do 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 + 1Loop数组元素的初值均为0, 执行该程序段后, 在下列选项中 a(1)至 a(5)各元素值不可能的是?( )A. 7 1 3 9 8 B. 3 3 0 8 8C. 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 ① ???? LoopEnd FunctionPrivate 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”) -64C.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=mA.①② B.②③ C.②④ D.③④答案 C 考点四 VB基本语句1.有一VB程序的功能如下:在文本框Text1中输入一串数字,以逗号分割。程序运行后,在标签Label1中输出字符串中的最大数。例:在文本框Text1中输入“12,23,9,45,98,58,”,运行结果为在标签Label1中显示“98”。部分程序如下:s = Text1.Textj=1:n=0 Do While j <= Len(s)c = Mid(s, j, 1)If c = "," Then ① ?If x > Max Then Max = xn = 0 Else ② ? End If ③ ?LoopLabel1.Caption = "最大值:" +Str(Max)程序段划线处应填( )A.①x =Val(Mid(s, j - n, n)) ②n=n+1 ③j=j+1B.①x =Val(Mid(s, j - n, n)) ②j=j+1 ③n=n+1C.①x =Val(Mid(s, j -n + 1,n)) ②n=n+1 ③j=j+1D.①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 Strings = Text1.TextFor i=1 To 4 - Len(s)Mod 4s="0"+sNext ii = 1: n = 0Do While i <= Len(s) ① ? n = n * 2 + Val(c) If ② Then? s2 = s2 +Mid(w, n + 1, 1) n = 0 End If i = i + 1LoopText2.Text = s2End Sub(2)若删除程序中加框部分的代码,在文本框 Text1 中输入“1101011010”,单击“转换”按钮后,文本框 Text2 中显示的内容是 。?答案 (1)①c=Mid(s,i,1) ②i Mod 4=0 (2)D6 考点五 数组的定义及使用1.(2018浙江十校联盟选考适应性考试)有如下VB程序段:For i = 1 To 10b(a(i) Mod 10) = b(a(i) Mod 10) + 1b(a(i) \ 10) = b(a(i) \ 10) + 1Next inum = 0For i = 0 To 9If 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 IntegerDim s(1 To 10) As IntegerPrivate Sub Form_Load()a(1) = 3: a(2) = 6: a(3) = 8: a(4) = 4: a(5) = 9a(6) = 5: a(7) = 3: a(8) = 3: a(9) = 10: a(10) = 5End SubPrivate Sub Command1_Click()Dim i As Integer, t As Integers(1) = a(1)For i = 2 To 10 s(i) = s(i - 1) + a(i)Next it =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 Integera(1)=2:a(2)=1:a(3)=3:a(4)=4:a(5)=5c=0For i=3 To 5 If a(i-2)+a(i-1)=a(i) Then c=c+1Next iText1.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)) + 1Next ipa = 0For j = 1 To 10 For k = 1 To b(j) pa= pa +1 : a(pa) = j Next kNext ja(1)到a(5)的初值依次是7、5、9、4、3,程序段运行后,数组a值依次是( )A.7,9,5,4,3 B.3,4,5,7,9C.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 ^ 2List1. AddItem st End If End If Next iEnd SubPrivate Function fx(j As Integer) As Integer Dim s As StringDo While j <> 0 ② ? j = j \ 10Loopfx = Val(s)End FunctionPrivate Function validate(p As Integer,q As Integer) As Boolean If fx(p ^ 2) = q ^ 2 Then validate = TrueEnd 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 IntegerDim gz(1 To 20) As IntegerPrivate Sub Command1_Click()Dim dfa As Integer, dfb As Integer Dim ta As Integer, tb As Integer ① ?RandomizeFor i = 1 To 2 * n gz(i) = Int(Rnd* 9 + 1) List1.AddItem "gz(" & i & ")" & gz(i) Next i num = 1For 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 kNext jList2.AddItem "获胜的站法共有:"+ ③ + "种"?End SubFunction zwdf(p As Integer, r As Boolean) As Integer Dim fs As IntegerIf r = True Then ④ ? fs = fs +gz(i) Next i Else For i = p To 2 * n fs = fs +gz (i) Next i End Ifzwdf = 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的值是-1B.该流程执行后,变量a的值是16C.该流程用于计算并输出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=nFor i=1 To n/2 Next iIf 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 = ssEnd 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 = 1Do While i <= 6 x =Int(Rnd * 100) + 1 If flag Or x >50 Then a(i)=x flag = Not flag i = i + 1 End IfLoop执行该程序段后,在下列选项中,a(1)~a(6)各元素值不可能的是( )A.52,95,46,74,77,83 B.50,55,46,70,21,97C.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)+1Next iFor 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 IfNext i执行程序后,a数组各元素可能是( ) A.11,11,7,9,3,9 B.6,2,8,10,5,9C.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.Textn=Len(s)For i=1 To n y(i)=1Next iFor 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 jNext 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) = 1b(1) = 1: b(2) = 2For 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=0For 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+1Next 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=120Dim a(1 To n)As IntegerDim b(1 To n)As IntegerPrivate 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 ’存储压缩数据,最大处理个数为100Dim b(1 To 1000) As Integer ’存储解压缩数据,最大处理个数为1000Dim n As Integer ’存储压缩数据的个数Private Sub Form_Load()’压缩数据由上述压缩方法生成’本过程用于读取压缩数据并存储在数组a中,压缩数据个数存储在变量n中’代码略End SubPrivate Sub Command1_Click()Dim pa As Integer ’存储压缩数组当前处理位置Dim pb As Integer ’存储解压缩数组当前处理位置Dim firstdata As Integer, count As Integer, i As Integerpa=1:pb=1Do 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 IfLoopText2.Text=Str(b(1))For i=2 To ③ ? Text2.Text=Text2.Text+","+Str(b(i))Next iEnd 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 = 6Dim a(1 To n) As IntegerDim 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=FalseElse If ③ Then IsIn=True Else IsIn=False?End IfEnd 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=20Dim a(1 To n) As IntegerPrivate Sub Form_Load()’读取数据,并存储到数组 a 中,代码略End SubPrivate Sub Command1_Click()Dim flag As Integer ’存储变化段的状态:1 表示升,-1 表示降,0 表示平Dim count As Integer ’存储对称波峰的个数Dim steps As IntegerDim i As Integerflag=0:steps=0:count=0For 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 IfNext iIf IsSymPeak(flag, steps) Then count=count+1Text1.Text=Str(count)End SubFunction IsSymPeak(flag As Integer, steps As Integer) As BooleanIf ③ Then? IsSymPeak=TrueElse IsSymPeak=FalseEnd IfEnd 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 FunctionPrivate 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)=0Next iFor i=1 To recCount ’计算每个分数的个数 ② ?Next imc=1For i=100 To 0 Step -1 ’计算每个分数的名次 If A(i) <> 0 Then B(i)=mc ③ ? End IfNext iList2.ClearList2.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 iEnd 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=35n=4For i=1 To n a=a*i a=a\iNext i B.a=35n=4For i=1 To n a=a\i a=a*iNext iC.a=35n=4For i=n To 1 step-1 a=a*i a=a\iNext i D.a=35n=4For i=n To 1 Step-1 a=a\i a=a*iNext 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-x5.贝贝有n个桃子,吃完后每三个桃核可以换一个桃子,编写一个程序计算贝贝总共能够吃到几个桃子。(1)若贝贝总共有7个桃子,则他最后可以吃到 个桃子。?(2)修改程序中的错误。程序代码如下:Private Sub Command1_Click()Dim n As Integer,ans As Integern=Val(Text1.Text)ans=nDo While n>3 ’① ans=ans+n\3 n=n\3 ’②LoopLabel2.Caption="总共能吃到的桃子数为:"+Str(ans)+"个"End Sub答案 (1)10 (2)①n>=3 ②n\3+n Mod 36.小明编写统计字符串中出现最多的字母和数字的程序。程序运行如下:在文本框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 IntegerDim 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 IfNext ik=a(1):maxa=1For i=2 To 10 If a(i)>k Then k=a(i):maxa=iNext ik=b(1):maxb=1For i=2 To 26 If ③ Then k=b(i):maxb=i?Next iLabel1.Caption="出现最多的数字是"+Chr(maxa+Asc("0")-1)Label2.Caption="出现最多的字母是"+Chr(maxb+Asc("A")-1)End SubFunction 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=3End Function答案 ①zf=Text1.Text ②ElseIf pd(x)=2 Then③b(i)>k7.趣味数学题。小明使用VB编写程序解一道有趣的数学题:将1到9这九个数字分成三个三位数,不能有重复,三个数字之间比例满足1∶2∶3,求所有三位数组合。程序界面如图所示,当单击“求解”按钮Command1时,在列表框List1中显示所有满足条件的组合。程序代码如下,请在划线处填上合适的代码。Dim a (0 To 9) As IntegerPrivate 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 9s= ① ? Next m If s=9 Then List1.AddItem i&""&2*i&""&3*i Next iEnd SubSub fenjie(xAs Integer) ’自定义过程,将3位数分解并修改对应下标元素的值 a(x Mod 10)=1 ② ? a(x\100)=1End 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=100Private Sub Form_Load()????本过程从数据库中按1900—1999年依次读取年平均降水量数据,并存储在数组w中????代码略End SubPrivate Sub Command1_Click()Dim i As Integer,imax As Integerimax= 1 ????①For i=3 To n If abs(w(i)-w(i-1))>=Abs(w(i-1)-w(i-2))Then imax=i????②Next iText1.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 iEnd 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的值最终为-5B.语句“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时,输出结果是16B.当x输入2,y输入2时,输出结果是4C.当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*rEnd Sub运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,引起该错误的语句是( )A.Dim r As SingleB.Dim pi As DoubleC.pi=3.14D.Label1.Caption="圆面积为:"+pi*r*r答案 D 2.下列VB 表达式的值等于2018 的是( )A.Sqr(2000)+18B.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) / 10B.Int( 3.14* r * r * 100 + 0.5) / 100C.Int( 3.14* r * r *1000+ 0.5) / 1000D.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”)-1C.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)<=9B.“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)-1C.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 Longsum=0:sum1=0 Next nPrint "1+(1+2)+…+(1+2+…+100)= "; sum1End 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 kLabel1.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 IntegerDim t As IntegerDim s As Stringi=1:t=1:n=Text1.TextList1.ClearDo While t <= n s=s +"*" If i=t Then List1.AddItem s t=t + 1 i=0 End If i=i + 1LoopEnd Sub A. ** ** * * B. ** * ** * * * * *C. *** D. * * ** **答案 B 4.下列程序执行后文本框 Text1 显示的内容是( )s="ERROR:Divisor must not be zero!"flag=False:m=0For 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 IfNext iText1.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 + cNext i 数组a中各元素的初始值都为 0,文本框 Text1 的内容为“GoodLuck2018”。执行程序后,变量 s 的值为( )A.Go2 B.GL2 C.GoLu D.GoLu2答案 A 6.(2020届金华十校期末调研考试)统计连续小写字母最长的个数,编写VB代码如下:s=Text1.Text (1) ?ans=0For i=1 To Len(s) t=Mid(s,i,1) If t>="a" And t<="z" Then c=c+1 (2) ? Else (3) ? End IfNext iText2.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=2For i=3 To 10 Next iLabel1.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.Texts1=""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+s1Next iText2.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 IntegerDim s AsDouble’①f=1:i=1:s=0Do While i<=11’② s=s+f*1/i f=-1*f i=i+2LoopText1.Text=Str(s)End Sub下列说法正确的是( )A.该程序段没有输入语句,也没有输出语句B.输出结果为表达式1-1/3+1/5-1/7+1/9-1/11的值C.若将加框处①改为Integer,输出结果约为0.74D.若将加框处②改为“i<=12”,计算结果会出错答案 B 11.生成0~9组成的10位随机密码,无重复数字出现的VB程序段如下:s1="0123456789"n=Len(s1)For i=1 To 10 n=n-1Next iText1.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 iEnd Sub(3)若在文本框Text1中输入的内容为“82176736”,单击按钮Command1,文本框Text2中显示的内容是 。?答案 (1)B (2)①max2=max1 ②i <> max1 And i <> max2或其他等价的答案 (3)21763613.(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 IntegerDim m As Integer,d As Integer,n As IntegerDim md As String,sum As Integermd="312831303130313130313031"n=0m=Val(Text1.Text)d=Val(Text2.Text)For i=1 To m-1 n= ① ?Next in=n+di=0:j=0sum=0:k=1Do While i sum=sum+j j=j+1 If ② Then? j=0 k=k+1 End If i=i+1LoopText3.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 StringDim a(1 To 10) As Integer,b(1 To 10) As Integera(1)=82:a(2)=96:a(3)=68:a(4)=93:a(5)=87a(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 iText1.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 IntegerRandomizes=0Do 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,9C.程序运行过程中可能会出现“下标越界”的错误提示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 jNext iText1.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 IntegerFor i=1 To n k=0 For j=1 To n If a(j)>a(i) Then k=k+1 Next j ?Next iFor i=1 To nList2.AddItem Str(a(i))+""+Str(mc(i))Next iEnd Sub若要实现对数组a按降序排名次(最高分为第1名,当a中出现相同数字,排名相同),划线处应填写的语句为( )A.mc(i)=k+1 B.mc(i)=mc(i)+1C.mc(j)=k+1 D.mc(j)=mc(j)+1答案 A 5.(2019诸暨第二学期期末)有如下VB程序段:Dim a (1 To 2) As Integers=Text1.TextFor 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)+1Next iText2.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=0For 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 IfNext iFor i=1 To 10 If a(i)>0 Then sum=sum+1Next i数组a各元素的初始值都为0,执行该程序段后,变量sum的值为( )A.10 B.7 C.4 D.3答案 C 7.(2018温州十五校联合体联考)有VB程序段如下:s="2019.06VisualBasic6.0":n=0For 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 IfNext iFor i=1 To 10 If a(i)>1 Then n=n+iNext 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 iFor 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 IfNext i执行程序后,a数组各元素不可能是( )A.6,6,4,3,3 B.0,-1,9,8,4C.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 IntegerDim a (1 To 50) As IntegerRandomizeFor i=1 To 50 ① ? List1.AddItem Str(a(i))Next iIf a(1) firstmin=a(1) secondmin=a(2)Else firstmin=a(2) secondmin=a(1)End IfFor i=3 To 50 If a(i) If ② Then? secondmin=firstmin firstmin=a(i) Else ③ ? End If End IfNext iLabel1.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=5000Dim 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)=0Private Sub Command1_Click()Dim i As Integerc=Val(Text1.Text) ’c为放回的牌号i=1Do While a(i) < c ’查找牌 c 放的位置i=i + 1Loopi=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 IfElseIf c + 1=a(i + 1) Then’第 2 种情况,下靠 a(i + 1)=c:b(i + 1)=b(i + 1) + 1Else ’第 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 + 1End If’下面为输出登记的记录,不包括虚设的两条记录For i=1 To ③ ? List3.AddItem "第" & Str(i) & "记录(" & Str(a(i)) & "," & Str(b(i)) & ")"Next iEnd 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-111.(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 IntegerDim i As Integer,m As Integer,k As IntegerDim top As Integer,bott As Integer’产生由1开始的奇数数列,依次存储在数组a中,代码略top=2:bott=500Do 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 iLoopFor i=1 To bott List1.AddItem Str(a(i))Next iEnd Sub答案 (1)k=1 (2)bott=k-112.(2018台州期末质量评估)筷子颜色配对问题。现有不同颜色的筷子若干(筷子的颜色用数字编号1~10表示),颜色相同的筷子才能组成一双,其中有几根筷子是落单的,现要求找出落单筷子的颜色以及能够配对的筷子数量。编写程序解决该问题,程序运行时,在文本框Text1中依次输入筷子的颜色编号(数据都用逗号分隔并以逗号结尾),单击“查找”按钮,在列表框List1中输出落单筷子的颜色编号,在标签Label1中显示能够配对的筷子数量,运行界面如图所示。实现上述功能的VB程序如下:Private Sub Cmd1_Click()Dim a (1 To 10) As Integer’数组a存放不同颜色筷子的数量,各元素默认初值为0Dim s As String,ch As StringDim 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 IfNext iFor i=1 To 10 If ③ Then List1.AddItem "落单筷子的颜色为"+Str(i)? n=n+a(i)Next iLabel1.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 Integera=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text)Label2.Caption=Str(fx(a,b,c))End SubFunction fx(x As Integer,y As Integer,z As Integer) As IntegerIf xIf x>y Then fx=y Else fx=xEnd FunctionA.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 SubFunction 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 IfNext iText1.Text=s3End SubFunction being(x As String,y As String)As Booleanbeing=FalseFor i=1 To Len(y) If x=Mid(y,i,1) Then being=True:Exit FunctionEnd IfNext iEnd 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=resultEnd SubFunction 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=resultEnd 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-temp5.(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 StringDim b(0 To 10) As IntegerDim x As String,c As Integer,j As Integerx=Text1.Textj=Len(x)b(0)=0c=0For 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 IfNext iLabel2.Caption="结果:"+Str(c)End SubFunction zh(x As String) As Integers="IVXLCDM"zh=1For i=1 To 7 If s=Mid(x,i,1)Then Exit For ElseIf ② Then? zh=zh*5 Else zh=zh*2 End IfNext iEnd 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_KeyPressC.Command1_Click D.Text1_Click答案 D 5.(2018期末调研测试卷)下列表达式的运算结果与其他选项不同的是( )A.Len("123")+2^2B.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 IntegerDim p(1 To 20) As IntegerFor i=1 To 20 p(i)=0Next ip(1)=-1For i=2 To 20 If p(i)=0 Then For j=2 To 20 \ i p(i* j)=-1 Next j End IfNext it=20For i=1 To 20 t=t + p(i)Next iText1.Text=Str(t)程序运行后,文本框Text1 显示的内容是( )A.20 B.12 C.10 D.8答案 D 8.(2019浙江十二校联考)有如下VB程序段:Dim i As Integer,sum As IntegerDim a (1 To 6) As Integer,b(1 To 6) As IntegerSum=0a(6)=18:a(5)=7:b(6)=14:b(5)=16For 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 iText1.Text=Str(sum)该程序段运行后,文本框Text1中显示的内容是( )A.39 B.30 C.-9 D.12答案 B 9.(2018温州普通高中选考适应性测试)有如下VB程序段:Dim a (1 To 6) As IntegerSum=0For i=1 To 6 For j=i+1 To 6 If j Mod i=0 Then a(j)=1-a(j) Next jNext iFor i=1 To 6 Sum=Sum+a(i)Next iText1.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 34B.34 48 56 65 87 96C.选项A和B都有可能D.选项A和B都不可能答案 B 11.(2018金丽衢十二校第三次联考)在Text1文本框内输入字符串,单击去重按钮,将字符串后面相同的字符删除,并在Text2中输出经过删除的字符串。程序界面如图所示。请在下面划线处填入合适的代码。Private Sub Command1_Click()Dim s As String,s1 As String,c As Strings=Text1.TextFor 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 iText2.Text=sEnd SubA.(1)Mid(s,1,1) (2)i+1 To Len(s) (3)s1=sB.(1)Mid(s,1,1) (2)i To Len(s) (3)s1=sC.(1)Mid(s,1,i) (2)i To Len(s) (3)s=s1D.(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=1For i=2 To 9 If a(i)>a(i-1) Then k=k+1 If k>m Then m=k Else k=1 End IfNext iText1.Text=Str(m)该程序段运行后,文本框Text1中显示的内容是( )A.4 B.6 C.8 D.9答案 A 13.(2019衢州教学质量检测)有VB程序段如下:RandomizeFor 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 IfNext i执行该程序段后,a(1)~a(6)各元素可能的是( )A.13,2,7,12,5,18 B.22,7,0,15,4,19C.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 StringDim i As Integer,j As Integer,k As Integer,numb As Integers=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 IfNext iText2.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 BooleanDim s As String, c As String, i As Integer, n As Integera1=0:a2=0:flag=Falses=Text1.Text: ① ?i=1Do 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 + 1LoopIf 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)316.设某汉字由7×7的0、1点阵图案组成。依照以下规则生成压缩码:连续一组数值,从汉字点阵图案的第一行第一个符号开始计算,按书写顺序由左到右,从上到下。压缩码第一个数表示起始的数字(例如0),第二个数表示连续有几个0,第三个数表示接下来连续有几个1,第四个数表示接下来连续有几个0,第五个数表示接下来连续有几个1,以此类推……例如,以下汉字点阵图案:0001000000100000011110001000000100000010001111111对应的压缩码是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 Integercode=Text1.Textk=0res=""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 iEnd Sub(2)现给出如下点阵图:则压缩码为 。?答案 (1)①Mid(code, i, 1) ②1-c (2)038359112348217.编写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 IntegerDim s As Stringn=Val(Text1.Text)i=1m=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 IfNext ki=1For k=1 To m ’按行对考生编号进行输出 s="" For j=1 To m s=s+Str(a(i)) i=i+1 Next j List1.AddItem sNext kEnd Sub答案 (1)m=Sqr(n) (2)pa=pa-m 展开更多...... 收起↑ 资源列表 专题五 算法与VB语言基础(讲解部分).pptx 专题五 算法与VB语言基础.docx