2019年高考一轮复习信息技术浙江专用 第八单元第4节 V B基本语句课件(48张幻灯片)+练习

文档属性

名称 2019年高考一轮复习信息技术浙江专用 第八单元第4节 V B基本语句课件(48张幻灯片)+练习
格式 zip
文件大小 1.8MB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2019-05-22 11:47:46

文档简介

教师备用题库
1.下面四个程序段中,运行后变量a的值最小的是(  )
A.a=35 n=4 For i=1 To n  a=a*i  a=ai Next i
B.a=35 n=4 For i=1 To n  a=ai  a=a*i Next i
C.a=35 n=4 For i=n to 1 step -1  a=a*i  a=ai Next i
D.a=35 n=4 For i=n to 1 Step -1  a=ai  a=a*i Next 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 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.* *** ******
答案 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 + 1
Loop
End 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)/100 List1.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 100 If i Mod 7 = 0 Then   List1.AddItem i 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
答案 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<>0
r=a Mod b
a=b
  b=r
Loop
Text3.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
 Next
End Sub
该程序通过For循环计算sum的值,下列表达式的值与sum相等的是(  )
A.1+1/2+2/3+3/4+4/5 B.1+1/2+2/3+3/4
C.1/2+2/3+3/4+4/5 D.1+1/2+1/3+1/4+1/5
答案 C 本题考查程序阅读。程序运行过程如下:
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
退出循环
4.下面程序段用于计算分段函数y=
0(x<0),
1(0≤x<1),
x(x≥1)
的值,不正确的是(  )
A.If x<0 Then  y=0 Else If x<1 Then  y=1 Else  y=x End If B.If x<0 Then  y=0 Else  If x<1 Then   y=1  Else   y=x  End If End If
C.If x<0 Then y=0 If x<1 Then y=1 If x>=1 Then y=x D.If x<0 Then y=0 If x>=0 and x<1 Then y=1 If x>=1 Then y=x
答案 C 本题考查VB选择结构语句的书写。C选项中语句条件范围存在重叠。
5.有如下 Visual Basic 程序段:
s = 0
For i = 1 To 20 Step 2
 If s < 15 Then
  s = s + i
 End If
Next i
以上程序执行结束后,变量 s 和 i 的值分别为(  )
A.9 20 B.16 7 C.16 21 D.15 22
答案 C 本题主要考查的是 VB 中的循环语句和选择语句,具体计算过程如下:
i
1
3
5
7

21
s
1
4
9
16
16
16
由表可知,本题选 C。
6.阅读如下程序段,程序运行结束时,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
答案 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 k
Label1.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 = s
End 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,100
4
0,0,0,50,100
3
0,0,25,50,100
2
0,12,25,50,100
1
6,12,25,50,100
2.贝贝有n 个桃子,吃完后每三个桃核可以换一个桃子,编写一个程序计算贝贝总共能够吃到几个桃子。
(1)若贝贝总共有7 个桃子,则他最后可以吃到   个桃子。?
(2)修改程序中的错误。
程序代码如下:
Private Sub Command 1_Click()
Dim n As Integer,ans As Integer
n =Val(Text1.Text)
ans = n
Do While n>3  ’①
 ans = ans + n3
 n = n3 ’②
Loop
Label2.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 Integer
Dim ans As Integer, i As Integer
Dim a(1 To 12) As Integer ’a(i)存储第i个月的天数
a(1) = 31: a(2) = 28: a(3) = 31: a(4) = 30
a(5) = 31: a(6) = 30: a(7) = 31: a(8) = 31
a(9) = 30: a(10) = 31: a(11) = 30: a(12) = 31
nian = Val(TextNian.Text)
yue = Val(TextYue.Text)
ri = Val(TextRi.Text)
For i = 1 To yue - 1’依次加上之前每个月的天数
  ans =    ②    ?
Next i
ans = 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 + 1
End 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 Sub
Private Sub Command1_Click()
Dim s As String,n As Integer,i As Integer
Dim flag As Boolean ’变量flag用于标记是否在数组a中筛选到左边与s匹配的字符串
List2.Clear ’筛选时清空上次筛选结果
s=Text1.Text
n=Len(s)
flag=False
For i=1 To 20
  If Mid(a(i),1,i)=s Then’ (1)
   List2.AddItem a(i)
   flag=True
  End If
Next i
If flag=False Then
 List2.AddItem a(20) ’ (2)
End If
End 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=True
C.2=a+b D.a*b=2
答案 B 本题考查赋值语句的格式。赋值语句的一种格式是:变量名=表达式。“=”左边只能是变量名,不能是表达式或者常量等。
2.(2012浙江6月学考,3分)变量a的初值为0,在下列语句中,每执行一次能使变量a的值在5、0两数值上交替出现的是(  )
A.a=5-a B.a=-a
C.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 If
Next i
If k=0 Then
  Label1.Caption=“完全相同”
Else
  Label1.Caption=“第”+Str(k)+“个字符不相同”
End If
方框中的正确语句是(  )
A.k=i B.k=0
C.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 i
End 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)+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(1)~a(6)各元素可能的值是(  )
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 本题考查数组的应用。第一个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=n
For i=1 Ton/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 本题主要考查程序的阅读能力。变量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)
10
20
30
    
y(1)
y(2)
y(3)
3
1
2
(2)小张根据上述加密算法,设计了一个对应的解密程序,其VB代码如下,请在划线处填入合适的代码(解密与加密使用相同的密钥数据)。
Private Sub Command1_Click()
  Const n=100
  Const m=6
  Dim i As Integer, j As Integer
  Dim a(1 To n)As Integer,b(1 To n) As Integer
  Dim x( 1 To 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。
以下是解密过程
i
a(i)
y(i)
b(i)
x(i)
数组转换
b(i)
1
4
3
0
10
(0+256-10) mod 256=246
246
2
30
1
4
20
(4+256-20) mod 256=240
240
3
0
2
30
30
(30+256-30) mod 256=0
0
4.(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(或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的值为3 0,则执行此语句后,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
  语句块1
ElseIf 条件表达式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,2 0),标题为“输入”,窗口中的提示信息为“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 If
C.Next  D.If解析 本题考查If语句的语法格式。如果是行if语句(一行写完,不 换行),则不需要End If;如果是块if语句(换行),则需要End If。3.以下Visual Basic程序段是一个完整的Do语句,则划线处的语句应该 是?( A )
Do While n<10
n=n+3
s=s*n
  ????
A.Loop  B.End Do ????C.End Sub  D.Next n解析 本题考查Do语句的语法格式。4.为使左、右框内的Visual Basic程序段实现相同的功能,可在右框内划 线处填写的代码是?(  )
s=0:t=1
For g=2 To 6
 t=t*g
 s=s+t
Next g????s=0:t=1:g=2
Do While g<=6  t=t*g
  s=s+t
 ????   ????
Loop
A.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=3
C.Label1.caption=“hello”  D.x=-b解析 本题考查赋值语句的格式。B选项“=”左侧是算术表达式,格 式错误。1-1 下面VB程序段的功能是??交换变量a、b的值??。
a=a+b
b=a-b
a=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=5
If a>=b And a>=c Then
 y=a
ElseIf b>=c Then
 y=b
Else
 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=0
For k= ????To 5
  s=s + k
Next k
A.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 i
Next 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 ^ 2
Else 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选项。
同课章节目录