资源简介 教师备用题库1.下面四个程序段中,运行后变量a的值最小的是( )A.a=35n=4For i=1 To n a=a*i a=aiNext i B.a=35n=4For i=1 To n a=ai a=a*iNext iC.a=35n=4For i=n to 1 step -1 a=a*i a=ai Next i D.a=35n=4For i=n to 1 Step -1 a=ai a=a*iNext i答案 D 本题考查VB程序阅读。A、C选项中a的值为35,B选项中a的值为32,D选项中a的值为30。故选D。2.根据以下程序,在文本框Text1中输入3,最后List1中输出的是( )Private Sub Command 1_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 Ifi = i + 1LoopEnd SubA.****** B.*** C.****** D.**********答案 D i和t的值最为关键,每次循环i的值都会加1,当等于t后又会清零,而t的值又会加1,可知If语句块的执行条件是随着i的变化而变化的。首先t等于1,于是第一次循环就进入了If语句,输出s中的值,即“*”。随后i清零重新计数,t的值加1,于是下一次进入If语句应该是在两次循环后,i的值变成了2,满足i=t,此时s的值为“***”。随后i又清零,t变为3,于是3次循环后再次进入If语句,此时s的值为“******”。3.编写VB程序,实现如下功能:在文本框Text1和Text2中分别输入一个整数,单击“转换”命令按钮,在列表框List1中显示结果,运行结果如图a所示。结果包含两列数据,第1列为两数之间的厘米值g(间隔1厘米、升序),第2列为对应的码值m。鞋子尺码换算:常用的两种鞋码一种是欧制的码m,而我国采用的标准为厘米数g,鞋子尺码的换算公式:欧制m=中国制g*2-10。例如25是我国采用的厘米数,换算成欧制的码为25*2-10=40(码)。/ 图a 图b(1)根据程序界面(图a)和其属性窗口(图b)所提供的信息,可以得知“转换”命令按钮的对象名称是 。?(2)为实现上述功能,请在划线处填入合适的代码或选项。Private Sub Command1_Click()Dim g1 As Integer, g2 As Integer Dim i As Integer, temp As Integer Dim m As Single List1.Clear g1 = Val(Text1.Text) g2 = Val(Text2.Text) If ① Then? temp = g1: g1 = g2: g2 = temp End If i = g1 Do While i <= g2 ② ? List1.AddItem Str(i) + “” + Str(m) i = i + 1LoopEnd Sub(3)如果调试程序时在文本框中输入小数,例如第一个数输入24.5,第二个数输入29.5,则在列表框中 (选填:能/不能)看到包含小数的厘米数。?答案 (1)Command1 (2)①g1>g2 ②m=i*2-10 (3)不能解析 本题考查的是VB程序语言的基础知识。(1)由题图b可知“转换”命令按钮对象名是Command1。(2)①根据题意,当g1>g2时,交换两者的数值,以便于进行升序排列。②由代码分析,此处需要进行码号m和厘米数g(循环内部是变量i)之间的转换。因此答案是m=i*2-10。(3)不能,因为变量i是整数型量,不能处理小数,会强制进行类型转换。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解析 (1)本题要区分标签框1、文本框2、单选框3、列表框4。(2)①n是红包的个数,通过text2输入,val函数实现将数字字符串转换成数值。②由循环后的语句x=Int((s+0.005)*100)/100List1.AddItem Str(x)可知,最后剩余的钱放入最后一个红包,因此前面总共分了n-1个红包,循环执行n-1次。③阅读程序可知,x是当前红包的钱数,因此下次分红包的钱数是s=s-x。5.有如下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 本题考查程序阅读能力。程序中s(i)表示数组前i个数的和,s(8)-s(4)表示前8个数的和减去前4个数的和,即第5个数到第8个数的和,9+5+3+3=20,故选D。第4节 VB基本语句模拟演练A组 学考题组1.现要求刚好输出1至100内所有能被7整除的数字,下列哪段程序不能实现( )A.For i = 1 To 100If i Mod 7 = 0 Then List1.AddItem iNext 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答案 D 本题考查对循环结构的掌握。A选项利用了枚举法,i从1循环到100,步长为1,当Mod 7为0(即i能被7整除)时输出i,可以实现;B选项i从7开始循环到100,步长为7,输出的刚好也是所有100内能被7整除的数字;C选项利用i的值,从1开始步长为1不断循环,每次输出i*7的值,直到s大于100停止,也可以实现;D选项看似没有问题,但是s超出100后的第一个能被7整除的数字还是会被输出来,程序有缺陷。2.阅读下面的程序:Private Sub Command1_Click() a=Val(Text1.text) b=Val(Text2.text) Do While a Mod b<>0r=a Mod ba=b b=rLoopText3.text=str(b)End Sub在Text1、Text2中分别输入30、6,则Text3中的值为( )A.1 B.3 C.6 D.9答案 C 本题考查辗转相除法求最大公约数。将30、6代入程序即可。3.有如下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/5 B.1+1/2+2/3+3/4C.1/2+2/3+3/4+4/5 D.1+1/2+1/3+1/4+1/5答案 C 本题考查程序阅读。程序运行过程如下:ix=n/i执行n=n+1后的nsum101021/221/232/331/2+2/343/441/2+2/3+3/454/551/2+2/3+3/4+4/5退出循环4.下面程序段用于计算分段函数y=0(x<0),1(0≤x<1),x(x≥1)的值,不正确的是( )A.If x<0 Then y=0Else If x<1 Then y=1Else y=xEnd If B.If x<0 Then y=0Else If x<1 Then y=1 Else y=x End IfEnd IfC.If x<0 Then y=0If x<1 Then y=1If x>=1 Then y=x D.If x<0 Then y=0If x>=0 and x<1 Then y=1If x>=1 Then y=x答案 C 本题考查VB选择结构语句的书写。C选项中语句条件范围存在重叠。5.有如下 Visual Basic 程序段:s = 0For i = 1 To 20 Step 2 If s < 15 Then s = s + i End IfNext i以上程序执行结束后,变量 s 和 i 的值分别为( )A.9 20 B.16 7 C.16 21 D.15 22答案 C 本题主要考查的是 VB 中的循环语句和选择语句,具体计算过程如下:i1357…21s149161616由表可知,本题选 C。6.阅读如下程序段,程序运行结束时,k和s的值分别是( )k=0:s=0Do While k<=10s=s+1k=k+1LoopA.k=10,s=10 B.k=10,s=11 C.k=11,s=10 D.k=11,s=11答案 D 本题主要考查VB循环结构。Do-Loop循环是未知循环次数的循环,只要循环变量的值满足条件,就一直循环。程序段中,k和s的初值都为0,每循环一次,s自加1,循环变量k从0开始,一直到k=10,进入最后一次循环,故一共循环11次,所以程序结束时,s=11。k=10,进入最后一次循环,执行循环体,k=k+1,所以k=11,当k=11时,不符合k≤10,故循环停止。所以程序结束时,k=11,s=11。7.斐波那契数列是指从第 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 题中已经给出前两项 f1=1,f2=1,从第 3 项开始进入循环。 循环的目的是对 f1 和 f2 求和后,更新两个变量 f1,f2,代入再求新的和,如图所示。因此三条语句的顺序是:①求和:f=f1+f2,②更新 f1 的值:f1=f2,③更新 f2 的值:f2=f,故选 B。8.下面VB程序的功能是:程序运行时,在文本框Text1中输入正整数n,单击命令“生成”按钮Command1后,在文本框2中输出n,n-1,…,2,1,2,…,n-1,n。若n=6,在文本框Text2中输出“6 5 4 3 2 1 2 3 4 5 6”。程序运行界面如图所示。/实现上述功能的VB程序代码如下,但加框处语句有误,请改正。Private Sub Command1_Click() Dim i As Integer, n As Integer, s As String n = Val(Text1.Text) s = “” For i = 1 To 2 * n’① If i<= n Then s = s + Str(n - i + 1) Else s = s + Str(2*i - n)’② End If Next i Text2.Text = sEnd Sub(1)程序中①处应改为 ;?(2)程序中②处应改为 。?答案 (1)2*n-1(2)s = s + Str(i - n + 1)解析 本题主要考查VB循环结构。程序实现过程:在Text1中输入n的值,在Text2中输出结果。当输入的值为n时,一共输出2*n-1个值。从n开始依次减小1,直到输出1后,开始递增,依次增大1,直到输出n,停止。用变量i的值来控制循环次数。当i≤n时,每次输出n-i+1,当i>n时,每次输出2*i-n。因为输出在文本框当中,所以需要将数值转换为字符串。(1)当输入值为n时,输出的值的个数应该为2*n-1个,所以i的范围为1 To 2*n-1。控制循环次数。(2)当i≤n时,输出值依次减小,当i>n时,输出值越来越大。所以②处应改成s = s + Str(i - n + 1)。B组 选考题组1.有如下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答案 B 本题考查程序阅读。程序执行过程中数组a变化如下:i数组a初始:0,0,0,0,10040,0,0,50,10030,0,25,50,10020,12,25,50,10016,12,25,50,1002.贝贝有n 个桃子,吃完后每三个桃核可以换一个桃子,编写一个程序计算贝贝总共能够吃到几个桃子。(1)若贝贝总共有7 个桃子,则他最后可以吃到 个桃子。?(2)修改程序中的错误。程序代码如下:Private Sub Command 1_Click()Dim n As Integer,ans As Integern =Val(Text1.Text)ans = nDo While n>3 ’① ans = ans + n3 n = n3 ’②LoopLabel2.Caption = “总共能吃到的桃子数为:” + Str(ans)+“个”End Sub答案 (1)10 (2) ①n >= 3 ②n 3 + n mod 3解析 本题考查利用程序实现问题模拟的能力。首先题中最为关键的变量是n,n 表示什么呢? 可以认为是初始的桃子数,但实际上n 是桃核数量,只不过刚好初始的桃子和桃核数量是相等的,于是循环判断n 是否大于等于3。若不是则继续循环。若是,则需要加上换过的桃子,而n 的值变成了换过的桃子产生的桃核和原先换桃时多出来的桃核数。3.编写VB程序,实现如下功能:输入年月日,求该日是这一年的第几天。程序运行时,在文本框“TextNian”中输入年,在文本框“TextYue”中输入月,在文本框“TextRi”中输入日。单击“点击计算”按钮“ButtonRun”进行计算,结果输出到文本框“TextAnswer”中。程序界面如图所示。/请回答下列问题:(1)应用程序界面设计时,设置文本框“TextNian”的显示内容为空,应设置该对象 的属性为空白。?(2)为实现上述功能,请在划线处填写合适的代码。Private Sub ① ()?Dim nian As Integer, yue As Integer, ri As IntegerDim ans As Integer, i As IntegerDim a(1 To 12) As Integer ’a(i)存储第i个月的天数a(1) = 31: a(2) = 28: a(3) = 31: a(4) = 30a(5) = 31: a(6) = 30: a(7) = 31: a(8) = 31a(9) = 30: a(10) = 31: a(11) = 30: a(12) = 31nian = Val(TextNian.Text)yue = Val(TextYue.Text)ri = Val(TextRi.Text)For i = 1 To yue - 1’依次加上之前每个月的天数 ans = ② ?Next ians = ans + ri ’加上当月的天数If yue > 2 Then ’包含2月时,判断是否闰年,修正总天数 If nian Mod 400 = 0 Then ans = ans + 1 If nian Mod 4 = 0 And nian Mod 100 <> 0 Then ans = ans + 1End If ③ =Str(ans)?End Sub①处代码为 。?②处代码为 。?③处代码为 。?答案 (1)Text(2)①ButtonRun_Click②ans = ans + a(i)③TextAnswer.Text解析 (1)略。(2)①注意“点击计算”按钮的名称为“ButtonRun”,事件为单击。②累加前yue-1个月的天数,其中若包含2月份,暂以28天计算,若yue>2且为闰年,则之后再加上1天。③注意文本框的名称为“TextAnswer”。4.(2016台州六校第一学期期末选考科目联考,16,4分)编写VB程序,实现如下功能:在文本框Text1中输入筛选关键词“ca”,单击“筛选”按钮Command1,在列表框List1所列字符串中查找左边与“ca”相匹配的字符串,并在列表框List2中输出(运行效果如图所示);否则,在列表框List2中显示“无筛选结果”。/实现上述功能的VB代码如下,但加框处代码有错,请改正。Dim a(1 To 20)As String ’用于存储20个字符串’将20个字符串分别保存赋值给数组元素a(1)、a(2)、a(3)、a(4)、…、a(19)、a(20),并在列表框List1中显示Private Sub Form_Load()’代码略End SubPrivate Sub Command1_Click()Dim s As String,n As Integer,i As IntegerDim flag As Boolean ’变量flag用于标记是否在数组a中筛选到左边与s匹配的字符串List2.Clear ’筛选时清空上次筛选结果s=Text1.Textn=Len(s)flag=FalseFor i=1 To 20 If Mid(a(i),1,i)=s Then’ (1) List2.AddItem a(i) flag=True End IfNext iIf flag=False Then List2.AddItem a(20) ’ (2)End IfEnd Sub答案 (1)Mid(a(i),1,n)=s(2)List2.AddItem “无筛选结果”解析 本题主要考查数组与函数的运用。(1)n为输入的字符串的长度。只需要将a(1)到a(20)每个数组元素中的字符串第一个位置起的n个字符长度的字符子串与输入的字符串进行比较。若两个字符串相同,则输出数组元素中的字符串。所以用mid函数截取数组元素中字符串的子串。(2)根据题意,若flag=false,则未查找到匹配的字符串,应输出“无筛选结果”。第4节 VB基本语句真题再现A组 学考题组1.(2012浙江6月学考,3分)下列属于正确的Visual Basic赋值语句的是( )A.a+b=2 B.a=TrueC.2=a+b D.a*b=2答案 B 本题考查赋值语句的格式。赋值语句的一种格式是:变量名=表达式。“=”左边只能是变量名,不能是表达式或者常量等。2.(2012浙江6月学考,3分)变量a的初值为0,在下列语句中,每执行一次能使变量a的值在5、0两数值上交替出现的是( )A.a=5-a B.a=-aC.a=a+5 D.a=a-5答案 A 当a=5时,执行5-a=5-5,得a=0;当a=0时,执行5-a=5-0,得a=5。3.(2014浙江3月高考,5,3分)下列VB程序段用于比较两个等长的字符串a和b,并在标签Label1中显示比较结果:如果a和b完全相同,则输出“完全相同”,否则在输出结果中指出第1个不相同字符的位置。k=0 ’整数型变量k用于记录第1个不相同字符的位置For i=1 To Len(a) ’字符串变量a用于存储第1个字符串 key=Mid(a,i,1) If key <> Mid(b,i,1) Then ’字符串变量b用于存储第2个字符串/ Exit For End IfNext iIf k=0 Then Label1.Caption=“完全相同”Else Label1.Caption=“第”+Str(k)+“个字符不相同”End If方框中的正确语句是( )A.k=i B.k=0C.k=1 D.k=len(a)答案 A 本题综合考查程序的调试能力。当程序循环到第i次时,如果发现有不相同字符,则用k记录下这个位置,这时k的值已经由最初的0变为当前的i。4.(2018浙江11月选考,14,5分)在平面坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框Text1中依次输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这条折线的长度,结果显示在Label1中。例如,三个点的坐标(5,10)、(8,12)、(6,17)输入格式如图所示。/(1)Cmd对象属于 类。?(单选,填字母:A.Form/B.Label/C.TextBox/D.CommandButton)(2)实现上述功能的VB程序如下,请在划线处填入合适代码。Private Sub Cmd_Click() Dim i As Integer, j As Integer, k As Integer Dim x1 As Single,y1 As Single,x2 As Single,y2 As Single Dim d As Single,Totald As Single,v As Single,s As String s= ① ? x1=0∶y1=0 ’出发点为坐标原点 k=1∶j=1∶Totald=0 For i=1 To Len(s) If Mid(s,i,1)=“,”Then v=Val(Mid(s,j,i-j)) ’提取坐标值,保存在变量v中 j=i+1 If ② Then? x2=v Else y2=v d=Sqr(x2-x1)^2+(y2-y1)^2) Totald=Totald+d x1=x2∶y1=y2 End If k=k+1 End If Next i Label1.Caption=Str(Totald)End Sub(3)运行该程序,输入数据如上图所示,程序执行到循环结束时,变量k的值为 。?答案 (1)D (2) ①Text1.Text ②k mod 2=1 (3)7解析 (1)按钮Cmd是CommandButton(命令按钮)类。(2)①结合上下文,s是Text1中输入的字符串,因此此处填s=Text1.text。②k表示读取的是第几个数值,因为一个点的坐标是一对数,因此如果目前读取的是第奇数个数,则存入变量x2中,如果是第偶数个数,则存入变量y2中。(3)读取到最后一个“,”号,此时k=6,则将第6个数即17存入变量y2中,接着执行k=k+1,因此k=7,然后退出循环。因此最后k=7。5.(2017浙江11月选考,14,5分)编写“字符串生成”程序,实现如下功能:在文本框Text1中(字符位置)输入多个正整数(以“,”为分割符和结束符),单击“生成”按钮Command1,程序以这些整数为位置信息,依次从文本框Text2中(字典内容)提取字符并连接成字符串,最后将字符串显示在标签Label1中(生成内容)。程序运行界面如图所示。/(1)要使程序运行时,窗体Form1标题显示“字符串生成”,可在Form_Load事件过程中添加语句 (单选,填字母:A.Form1=“字符串生成”/B.Form1.Text=“字符串生成”/C.Form1.Caption=“字符串生成”)。?(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。Private Sub Command1_Click() Dim s As String,t As String,c As String Dim i As Integer, p As Integer s=“”: t=“” For i=1 To Len(Text1.Text) c= Mid(Text1.Text,i,1) If c=“,” Then p= Val(t) s=s+Mid(Text2.Text,p,1) t=“” Else t= ① ? End If Next i Label1.Caption= ② ?End Sub(3)若文本框Text1中输入内容的结束符缺失(即输入内容为1,18,9,9),单击“生成”按钮后,标签Label1中显示的内容是 。?答案 (1)C (2)①t+c(或t&c) ②s (3)pas解析 (1)Form的标题是通过“Caption”属性来设置的。(2)①变量t(字符串类型)存储字符位置。程序通过Mid函数将文本框Text1中的字符挨个读取并判断,如果所取字符是逗号,则表示一个字符位置已经读取完整,将变量t转换成数值,然后去字典里取对应字符,把它连接到s后面;如果所取字符不是逗号,则字符位置尚未结束,则将该字符连接到t后面。②在Label1中输出最后的结果s。(3)由于程序中将位置转换成字典中字符的指令是在条件c=“,”的情况下才执行的,因此输入“1,18,9,9”,前三个位置会从字典中取出字符“pas”。由于最后一个“9”缺失了“,”,因此不会从字典中取字符。6.(2016浙江4月学考,14,5分)编写VB程序,实现如下功能:在文本框Text1中输入某一年份,单击“天干地支与生肖”按钮Command1,在列表框List1中输出该年份开始的12个年份及对应的“天干地支”与“生肖”,运行界面如图所示,程序代码如下。/(1)代码“Private Sub Command1_Click()”中的Click是 。(单选,填字母:A.对象名/B.属性名/C.事件名)?(2)为实现上述功能,请在划线处填入合适的代码。Private Sub Command1_Click() Dim a As Integer,b As Integer Dim i As Integer,n As Integer Dim c1 As String,s1 As String Dim c2 As String,s2 As String Dim c3 As String,s3 As String List1.Clear s1=“甲乙丙丁戊己庚辛壬癸” s2=“子丑寅卯辰巳午未申酉戌亥” s3=“鼠牛虎兔龙蛇马羊猴鸡狗猪” n=Val(Text1.Text) For i=n To ① ? a=(i+6)Mod 10 b=(i+8)Mod 12 c1=Mid(s1,a+1,1) c2=Mid(s2,b+1,1) c3=Mid(s3,b+1,1) List1.AddItem ② +“年”+c1+c2+“ ”+c3? Next iEnd Sub(3)由上述算法可知,2024年对应的“天干地支”为 。?答案 (1)C (2)① n+11 ② str(i) (3)甲辰解析 本题考查的是VB的综合应用。(1)本题要求掌握VB对象名、事件、事件处理等设置。语句“Private Sub Command1_Click()”,其中“Command1”为对象名,Click为事件,下面的代码为事件处理。(2)①本题要求掌握循环变量的初、终值的设定。根据题目,输出的是从当前年份n开始的12个年份,所以循环变量的值区间为[n,n+11],故正确结果为n+11。②由于列表框List1默认的值为文本类型,所以给它赋值要求数据类型统一,且年份存储在循环变量i中,故②处正确结果为str(i)。(3)当n=2024时,a=(2024+6)mod 10,其结果为a=0;b=(2024+8)mod 12,其结果为b=4;c1=Mid(s1,a+1,1),其结果为c1=“甲”;c2=Mid(s2,b+1,1),其结果为“辰”;c3=Mid(s3,b+1,1),其结果为“虎”,所以2024年的“天干地支”为“甲辰”。B组 选考题组1.(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(1)~a(6)各元素可能的值是( )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 本题考查数组的应用。第一个For语句,产生了6个1到10之间的随机数,存入数组a中。第二个For语句中的条件 i mod 2=1 and a(i)>a(i+1)如果成立,也即i是奇数并且奇数项大于偶数项时,则交换这一对数,因此交换完后a(1)2.(2016浙江10月选考,11,2分)对称字符串的特征是从左到右读和从右到左读是完全一样的,如“abba”是对称的,“abcba”也是对称的,判断字符串是否对称的VB程序段如下:n=Len(s) ’s是待判断的字符串k=0:j=nFor i=1 Ton/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 本题主要考查程序的阅读能力。变量i和j分别用来记录字符串前后的对称位置,i从1开始,j从n开始。先用mid函数取出前后对称位置上的两个字符,对应语句③;然后进行比较,如果不相同,则计数,对应语句②;比较完后,变量i增加1,j减少1,对应语句①。3.(2018浙江11月选考,17,6分)某种数据加密方法描述如下(加密前后的数值都是0~255的整数):?以m个数据为一段,将n个待加密数据依次分割成若干个数据段。剩余数据(个数小于m)为一个独立数据段。?数据段加密规则: 数据个数等于m的数据段,先进行值变换,再进行位置变换,得到加密数据段。 数据个数小于m的数据段,只进行值变换,直接得到加密数据段。?依次合并加密数据段,即为最后的加密数据。值变换:用值变换密钥数组x(元素个数为m,值为0~255的整数),将待加密数据段中的数据进行值变换,方法如下:值变换后第i个元素=(待加密数据段第i个元素+x(i))Mod 256,其中i=1,2,…,m位置变换:用位置变换密钥数组y(元素个数为m,值为1~m的不重复整数),将上述值变换后的m个元素进行段内位置变换,方法如下:加密后数据段第y(i)个元素=值变换后第i个元素,其中i=1,2…,m例如,n=5,m=3的数据加密过程如下:/(1)已知m=3,数组x与数组y中的数据如下表所示。则待加密数据段“155,1,250”加密后的数据段为 (填数据,用逗号分隔)。? x(1)x(2)x(3)102030 y(1)y(2)y(3)312(2)小张根据上述加密算法,设计了一个对应的解密程序,其VB代码如下,请在划线处填入合适的代码(解密与加密使用相同的密钥数据)。Private Sub Command1_Click() Const n=100 Const m=6 Dim i As Integer, j As Integer Dim a(1 To n)As Integer,b(1 To n) As Integer Dim x( 1 To m) As Integer,y(1 To m) As Integer ’读取值变换与位置变换的密钥数据,分别保存在数组x与y中,代码略。 ’读取待解密数据,保存在数组a中,代码略。 ’下面进行位置变换:位置变换后数据保存到数组b中 For i=1 To ① ? For j=1 To m ② ? Next j Next i For i=(nm)*m+1 To n b(i)=a(i) Next i ’下面进行值变换:值变换后数据仍保存到数组b中 j=1 For i=1 To n b(i)= ③ ? j=j+1 If j>m Then j=1 Next i ’输出解密后数据,代码略。End Sub答案 (1)21,24,165 (2)①nm 或 Int(n/m) ②b((i-1)*m+j)=a((i-1)*m+y(j))③(b(i)+256-x(j)) mod 256或(b(i)+256-x((i-1)) mod m+1)) mod 256解析 (1)根据加密算法,第一步是值变换:(155+10)mod 256=165,(1+20)mod 256=21,(250+30)mod 256=24,因此值变换后数据分别为165,21,24;第二步位置变换后:21,24,165。(2)①先将n个数分组,每组m个,可得到nm组。②本题的分组可看作把n个数排成一个矩阵,每一行m个数,也即m列,因此n个数,可排成nm行。此处的双重循环,i相当于行号,j相当于列号,如果不考虑位置变换,则第i行第j列的数b((i-1)*m+j)=a((i-1)*m+j);如果考虑位置变换,每一行(即每一个分组)的位置变换密钥都一样,存在y(1)至y(m)中,则b((i-1)*m+j)=a((i-1)*m+y(j))。③for i=(nm)*m+1 to n这段循环处理的是凑不成组的剩余数据,不进行位置变换,因此b(i)=a(i)。接下来一段代码是值变换,根据题意,加密过程值变换是在原值的基础上加密钥x,然后对256取余,相当于式子(x+a) mod 256=y,用x求y。解密过程则是相反,已知y求x,则x=(y+256-a) mod 256。以下是解密过程ia(i)y(i)b(i)x(i)数组转换b(i)143010(0+256-10) mod 256=2462462301420(4+256-20) mod 256=2402403023030(30+256-30) mod 256=004.(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 IntegerDim 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=8Start=1Left=nDo 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 IfLoopFor i=Start To n b(i) =a(i)Next i’依次输出转换后数据b(1)、b(2)、…、b(n),代码略End Sub答案 (1)4 (2)①m-1(或int(sqr(Left))或其他等价表达式) ②pa=Start+im(或pa=pa-(m-1)*m + 1或其他等价语句) ③Left=Left-m*m(或其他等价语句)解析 (1)根据分割的原则,120个数可分割为8*8、7*7、2*2三个数据块,剩余元素3个。因此第3个数据块有4个元素。(2)①题目要求分割时,按尽可能大的数据块进行分割。因此代码中从m=8开始尝试,变量left表示未分割的数据个数,当left②在b数组中存储a数组的方法:按行存储改成按列存储(行列置换)。b数组中b(bp)的下一个b(bp+1)应该是a数组中下一行同列的那个元素,因此pa=pa+m(一行m个)。但是当i Mod m=0时,b(bp)存的是数组a中最后一行的元素,则b(bp+1)应该存数组a中下一列的第1个元素,因此pa=im+1,由于pb=i,故此处也可填pa=pbm + 1。例:数据块是3*3,若当前i=3,则此时pb=3,pa=7,即b(3)中存a(7),接下来则是b(4)中存a(2),亦即pa=43+1=2。③此处计算剩下的数据个数为Left=Left-m*m。课件48张PPT。第4节 VB基本语句一 赋值语句二 选择语句(If语句)三 循环语句四 注释语句教材研读五 输入、输出语句突破一 赋值语句的正确理释突破二 If语句突破三 循环语句的循环次数重难突破一、赋值语句 变量名=表达式或对象名.属性名=表达式。 这里的“=”是赋值符号,它的含义是将表达式的值赋给左边的变量或对象的某个属性。 例如: (1)A=B,它是将变量B的值赋给变量A,B的值不改变。 (2)A=123,表示将数值123赋给变量A。教材研读 (3)A=A+10表示将变量A的值加10后,再赋给变量A。若原来A的值为30,则执行此语句后,A的值为40。 (4)如果A=30,B=40,则依次执行语句T=A,A=B,B=T后,A、B两个变量的值发生交换,执行完后,A=40,B=30,T=30。 (1)If 条件表达式 Then 语句 当条件成立时,执行Then后面的语句。 (2)If 条件表达式 Then 语句1 Else 语句2 当条件成立时,执行Then后面的语句1,否则执行语句2。二、选择语句(If语句) 1.行If语句格式2.块If语句格式一(1)If 条件表达式 Then 语句???? End If(2)If 条件表达式 Then 语句1???? Else 语句2????End If3.块If语句格式二If 条件表达式1 Then 语句块1ElseIf 条件表达式2 Then 语句块2 …Else语句块 0 End If三、循环语句 1.For循环语句 For 循环变量=初值 to 终值Step 步长 语句块 Next 循环变量 (1)语句解释: 循环变量为数值型变量; 初值、终值、步长均为数值表达式; 当初值小于终值时,步长应为正数;当初值大于终值时,步长应为负数;如果步长为1,那么“Step 1”可以不写。 循环体执行的次数为:(终值-初值)/步长+1,再取整。 (2)循环语句的执行过程如图所示:? ①循环变量被赋予初值; ②判断循环变量是否超过终值,如果超过,则退出循环,执行Next后面的语句;如果没有超过,则执行循环体; ③遇到Next语句,则循环变量增加一个步长,转到②,继续循环。 2.Do循环语句 Do While 条件表达式 语句块 Loop? ①判断循环条件是否满足,如果满足则执行循环体,如果不满足则执行Loop后面的语句。 ②执行完循环体后,回到①,继续循环。四、注释语句 注释是以单引号(’)开头的一串文字,可以出现在程序中需要说明的位置上,通过这一串文字,对附近的程序段进行简要的说明,增加程序的可读性。注释对程序的执行效果没有任何影响,程序运行时自动跳过注释。 1.输入语句 Inputbox( )输入函数 ①语法格式为:Inputbox(提示信息,标题,默认值,位置)。 ②语法解释: 提示信息:指对输入数据的提示,显示在输入窗口中,不能省略; 标题:输入窗口的标题,可省略; 默认值:指默认输入的数据值,一般省略; 位置:输入窗口左上角的坐标,一般省略。五、输入、输出语句 ③该函数一般不单独作为一个语句使用,通常是用赋值语句的形式将输入的内容赋值给某个变量。例:x=InputBox(“A=”,“输入”,12,100,20)。 该代码执行后,屏幕上将出现一个输入窗口,窗口的左上角坐标为(100,20),标题为“输入”,窗口中的提示信息为“A=”,而在输入栏内会出现默认的数据12。如图所示:2.输出语句(1)Msgbox( )输出函数①语法格式为:Msgbox(消息,按钮类型,标题)。②语法解释:消息:输出的消息,不能省略;按钮类型:弹出窗口包含的按钮,可省略;标题:消息窗口的标题,可省略。③该函数可单独作为一个语句使用,例:MsgBox(“删除信息无法恢复,是否删除?”,vbExclamation+vbYesNo)。该代码执行后,屏幕上将出现一个如图所示的消息窗口: (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=”; Pirnt 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.对于Visual Basic语句If i=1 Then j=1,下列说法正确的是?( C )A.i=1和j=1均为赋值语句B.i=1和j=1均为关系表达式C.i=1为关系表达式,j=1为赋值语句D.i=1为赋值语句,j=1为关系表达式解析 本题主要考查赋值语句和关系表达式的区分。“=”既可能是关系运算符中的“等号”,也可能是赋值语句中的赋值号。区分的方法是:如果该等式出现在if语句或Do语句的条件表达式中,则该等式一定是关系表达式。如果是单独出现一个等式,并且“=”左边是一个“变量名”或“对象名.属性名”,则该等式是赋值语句。2.以下程序段运行时出现如图所示的错误提示: For i=1 To 100 If Rnd>0.5 Then n=n+1 Else m=m+1 Next i分析该程序段,该代码中缺少了?( B )A.For B.End IfC.Next D.If解析 本题考查If语句的语法格式。如果是行if语句(一行写完,不换行),则不需要End If;如果是块if语句(换行),则需要End If。3.以下Visual Basic程序段是一个完整的Do语句,则划线处的语句应该是?( A )Do While n<10n=n+3s=s*n ????A.Loop B.End Do ????C.End Sub D.Next n解析 本题考查Do语句的语法格式。4.为使左、右框内的Visual Basic程序段实现相同的功能,可在右框内划线处填写的代码是?( )s=0:t=1For g=2 To 6 t=t*g s=s+tNext g????s=0:t=1:g=2Do While g<=6 t=t*g s=s+t ???? ????LoopA.g=2 B.g=6 ????C.g=g+1 D.g=g+2答案????C 解析 本题考查循环语句:For语句和Do语句。根据左框内语句For g=2 To 6得循环变量g的步长为1,因此右框内应该填写g=g+1。突破一 赋值语句的正确理解 赋值语句的功能是把右边表达式的值赋给左边的变量。 需要注意以下几项: (1)与关系表达式的区别:关系表达式中的“=”,用于判断等号两边是否相等。赋值语句中的“=”是赋值。区分的方法是:如果该等式出现在if语句或Do语句的条件表达式中,则该等式一定是关系表达式。如果是重难突破单独出现一个等式,并且“=”左边是一个“变量名”或“对象名.属性名”,则该等式是赋值语句。 (2)用该语句作为输入语句和输出语句时,“=”左右两边的内容不要写反。 如:Text1.text=str(a)是将数值型变量a的值输出到文本框Text1中。 b=val(Text2.text)是将文本框Text2中输入的数字字串赋值给数值型变量b。例1 下面给出的赋值语句中错误的是?( B )A.x=x=y B.x+y=3C.Label1.caption=“hello” D.x=-b解析 本题考查赋值语句的格式。B选项“=”左侧是算术表达式,格式错误。1-1 下面VB程序段的功能是??交换变量a、b的值??。a=a+bb=a-ba=a-b解析 本题第一步执行a=a+b后,第二步执行b=a-b时,“=”右边的表达式a-b=a+b-b,即执行b=a。第三步执行a=a-b时,将“=”右边的a用a+b代替,将b用a代替,则表达式a-b=(a+b)-a,即执行a=b,这样就实现了变量a、b的互换。 需要注意的是,语句a=b:b=a不能实现变量a和b的值交换,它的结果是a和b的值变为相等。要实现两数交换可用以下三行语句:t=a:a=b:b=t。这里的t相当于一个临时变量。1-2 有以下VB程序代码:Private Sub Command1_Click() Dim x As Integer,y As Integer x=Val(Text1.Text) y=x+5 Text2.Text=Str(y)End Sub在文本框Text1中输入3后单击按钮Command1,则在文本框Text2中显示 8 ????。解析 这是一个简单的顺序结构程序,赋值语句x=Val(Text1.Text)的功能是将Text1中输入的值赋给“=”左边的变量x。语句y=x+5的功能是实现运算,将x+5的结果赋给变量y。赋值语句Text2.Text=Str(y)的功能是将变量y的值输出到文本框Text2中。x=Val(Text1.Text)是输入语句,Text2.Text=Str(y)是输出语句。突破二 If语句 If语句中最难的是条件表达式的值的判断。 逻辑运算符And:所有分项都是真,则值为真;只要有一个分项是假,则值为假。 逻辑运算符Or:只要有一个分项是真,则值为真;所有分项是假,则值为假。例2 若x=1,执行语句If x<3 Then y=1-x Else y=1+x后,变量y的值是?( A )A.0 B.1 C.2 D.3解析 本题考查If语句的执行过程。选择语句中行if语句能使程序在执行过程中,根据不同的判断结果,选择执行不同的处理。本题中当x=1时,条件表达式x<3的值为True,程序执行y=1-x语句。2-1 有如下VB程序段:a=3:b=4:c=5If a>=b And a>=c Then y=aElseIf b>=c Then y=bElse y=cEnd If该程序段运行之后,整数型变量y的值为?( D )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语句。突破三 循环语句的循环次数 1.For循环: For 循环变量=初值 to 终值 Step 步长 语句块 Next 循环变量循环体执行的次数为:“(终值-初值)/步长+1”,再取整。以下情况,循环次数是0次:初值大于终值,且步长为正数;初值小于终值,且步长为负数。以下情况,循环次数是1次:(终值-初值)/步长<1。如果终值≠初值,并且步长=0,则程序会陷入死循环。2.Do循环:首次检验条件表达式,如果发现是假,则循环体执行次数是0次。例3 有如下 VB 程序段,程序段运行后,“ =s+k”共执行了 10 次,则循环变量 k 的初值是?( D )s=0For k= ????To 5 s=s + kNext kA.14 B.-5 C.1 D.-4解析 当 k 为-4 时,循环 10 次,每次循环的值分别为-4,-3,-2,-1,0,1,2,3,4,5。3-1 有以下一段语句:For i=1 to 5 Step 10 Print iNext i则循环体语句执行次数为?( A )A.1 B.5 C.10 D.2解析 本题中(终值-初值)/步长<1,执行次数是1次。3-2 如下VB程序代码:For i=3 to 15 step x Print “*”Next i下列说法中正确的是?( A )A.若x的值为3,则显示5个*B.若x的值为5,则显示4个*C.若x的值为0,则显示0个*D.若x的值为-2,则显示1个*解析 本题主要考查For语句的循环次数计算。循环体执行的次数为“(终值-初值)/步长+1”,再取整。选项B,显示3个*;选项C陷入死循环,打印无数个*;选项D显示0个*。3-3 有如下VB程序段:Dim a As Single, b As Single a = Val(Text1.Text) If a >= 15 Then b = a ^ 2Else If a >= 0 Then b = 10 * a Else b = a End If Text1.Text = Str(b)若要测试所有分支程序代码是否正确,以下测试数据中,最恰当的一组是?( 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选项。 展开更多...... 收起↑ 资源列表 教师备用题库.docx 模拟演练.docx 真题再现.docx 第4节 VB基本语句.pptx