2020版高考信息技术二轮浙江专用 专题三 字符串处理课件(70张幻灯片)+学案

文档属性

名称 2020版高考信息技术二轮浙江专用 专题三 字符串处理课件(70张幻灯片)+学案
格式 zip
文件大小 8.3MB
资源类型 教案
版本资源
科目 信息技术(信息科技)
更新时间 2019-11-30 14:32:47

文档简介

专题三 字符串处理
1.(2019·6月浙江选考)小宇为选定班级参赛作品编写了一个VB程序,设计如下:在文本框Text1内输入5位评委对3个作品的评分数据(评委对作品的评分数据出3位十进制数组成,第1位对应作品编号,第2、3位对应作品得分,分值范围为[60,99]。如“275”表示2号作品得分75)。单击“计分”按钮后,在标签Label1中输出3个作品的平均分,在标签Label2中输出参赛的作品(选择最高平均分作品参赛,若最高平均分存在并列,则从并列作品中随机抽取):程序运行界面如图所示。
(1)“计分”按钮的对象名为________。
(2)程序部分代码如下,请在划线处填入合适代码。
Private Sub jf_Click()
Dim s As String, d As String, i As Integer
Dim f As Single, f2 As Single, f3 As Single
s = Text1.Text
i = 1
Do While____①____
d = Mid(s, i, 3)
If Mid(d, 1, 1) = “1” Then
f1 = f1 + Val(Mid(d, 2, 2))
ElseIf Mid(d, 1, 1) =“2” Then
f2 = f2 + Val(Mid(d, 2, 2))
Else
f3 = f3 + Val(Mid(d, 2, 2))
End If
②____
Loop
Label1.Caption -“作品1平均分为:” + Str(f1 / 5) +“作品2平均分为!” + Str(f2 / 5) +“作品3平均分为:” + Str(f3 / 5)
′以下省略“处理并列最高平均分,并在Label2中输出选取的参赛作品”的代码
End Sub
(3)运行该程序时,在文本框Text1中以不同的顺序输入原评分数据:
380/295/283/170/180/385/372/285/190/180/390/384/272/170/276,单击“计分”按钮,则Label1中显示的结果____________ (选填:会/不会)发生改变。
解析 本题考核的知识点是编写程序解决实际问题。从语句Sub jf_Click()来看,对象名为jf。变量i表示在字符中位置,往往从第1个位置到最后一个位置。每个数据都是4个数字,因此每次递增4。输入顺序改变,但总和不变,因此显示的运算结果不变。
答案 (1)jf (2)①i <= Len(s) 或i< Len(s) 或i<= 57及以上 或i<58及以上 或其他可行答案 ②i=i+4 (3)不会
2.(2019·4月浙江选考)小王设计“模拟撤销”程序,需要用一个“历史记录”, “历史记录”是在对字符串s进行插入或删除时,将每步操作信息依次存储得到的,操作信息由操作符(“+”表示插入,“-”表示删除)、操作位置和操作字符串(只包含英文字母)构成,例如,“+23abc”表示在字符串s第23个位插入了“abc”, “模拟撤销”过程按照“历史记录”的逆序进行,将字符串s的内容恢复到初始状态。对字符串“Book”的操作与撤销过程,如图a所示。
小王编写的“模拟撤销”VB程序如下,文本框 Text1中的内容是撤销前字符串,文本框Text2中的内容是历史记录,单击“撤销”按钮Command1后,在标签Label1中显示撤销过程,程序运行界面如图b所示。
(1)实现上述功能的VB程序如下,在程序中出现的对象没有Caption属性的是________。(选填,填字母:A.Label1 /B.Command1 /C.Text1和Text2)
(2)请在划线处填入合适代码。
Private Sub Command1_Click()
Dim s As String, t As String, ch As String
Dim c As String, num As String, ss As String
Dim n As Integer, i As Integer
s = Text1.Text: t = Text2.Text
c =“ ”: num =“ ”: ss = s
For i = Len(t) To 1 Step -1
  ____①______
  If ch >=“a” And ch <=“z” Or ch >=“A” And ch =“Z” Then
c = ch + c
  ElseIf ch >=“0” And ch <=“9” Then
num = ch + num
  Else
n = Val(num)
If ch =“-” Then
  s = Mid(s, 1, n - 1) + ____②____
Else
s = Mid(s, 1, n - 1) + Mid(s, n + Len(c), Len(s) - n - Len(c) + 1)
End If
  ss = ss +“→” + s
  c =“ ”: num =“ ”
End If
Next i
Label1.Caption = ss
End Sub
(3)运行该程序,若文本框Text1中的内容是“April”,文本框Text2中的内容是“-3p+3ri-6e”,单击撤销按钮,For循环语句执行完成后,字符串s的值是“________”。
解析 当前字符为字母,则将字母拼接到变量 c 中,If ch >=“a” And ch <=“z” Or ch >=“A” And ch =“Z” Then(变量 c 存储将要删除或插入的字符串),当前字符为数字,拼接到num。由于是撤销操作,因此当前字符为“+”时,应删除该位置上的字符c,否则应拼接上字符c。若文本框Text1中的内容是”April”,文本框Text2中的内容是“-3p+3ri-6e”,单击撤销按钮,先在第6个位置连接e,再在第3个位置删除ri,最后在新的字符的第3个位置加p。“Aprile” →“Aple” →“Apple”
答案 (1)C (2)①ch = Mid(t,i,1) ②c + Mid(s, n, Len(s)-n+1) (3)”Apple”
3.(2018·11月浙江选考)在平面坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框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的值为________。
解析 k表示数字中的个数,图中有7个数字,当k是奇数时,取出x的坐标。
答案 (1)D
(2)①Text1.Text ②k Mod 2=1
(3)7
4.(2017·11月浙江选考)编“字符串生成”程序,实现如下功能:在文本框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中显示的内容是________。
解析 该题考核的基本算法思想是顺序查找。变量i表示字符串中字符的位置,c表示字符串中每个字符,查找“,”,如果找到了进行处理。
答案 (1)C (2)①t+c 或t&c 或其他等价表达式 ②s
(3)pas
5.小王编写了一个实现文字查找替换功能的VB程序,运行界面如图所示。文本框Text1显示原文内容,Text2中输入查找内容,Text3中输入替换内容,单击“全部替换”按钮Command1后,Text4显示查找替换的结果,Text5中显示替换的次数,Text6显示“查找内容”在原文中的起始位置。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
 Dim s As String, resule As String, pos As String
 Dim count As Integer, i As Integer
 i = 1: count = 0
 resule =“ ”: pos =“ ”
 Do While i <= Len(Text1.Text)
s = Mid(Text1.Text, i, Len(Text2.Text))
If s = Text2.Text Then
  result = result + Text3.Text
  count = count + 1
  pos = ′(1)
  i = i + Len(Text2.Text)
Else
  ′(2)
  i = i + 1
End If
Loop
 Text4.Text = result
 Text5.Text = Str(count)
 Text6.Text = pos
End Sub
解析 i 是查找过程中所查找到的当前字符位置的标记pos 依次显示被替换内容在原文中的起始位置若当前选定字符串与需要查找并替换的字符串不一致,就依原文逐字符输出。
答案 (1)Str(i) (2)result=result+ Mid(text1.text,i,1)
一、字符串的遍历
1.对于文本有查找、删除、替换和插入的操作,查找是各种操作的基础,只有找到这个字符,才可以删除,才可以替换为其他字符,只有找到位置,才可以插入新的字符。
2.字符查找最通常的做法是,从字符串的第1个位置开始,取出单个字符或从该位置开始的多个字符,与其他字符进行对比,接着是第2个位置,第3个位置……直到最后一个位置。
3.循环变量i含义是字符串的位置。有两个函数是经常用到的,Len函数,决定了循环的次数,Mid函数,从字符串取出1个或多个字符。
二、基础知识梳理
1.已知某电子邮箱地址(存储在字符串变量s中,格式为用户名@服务器名)的“@”符号的位置t,用VB表达式分别表示用户名的名称Mid(s,1,t-1),服务器地址的名称是Mid(s,t+1,Len(s)-t)。
2.在一段英语短文(存储在字符串变量s中),已经某单词的结束位置t和单词的长度n,用VB表达式Mid(s,t-n+1,n)表示该单词。
3.判断字符ch是大写字母的条件表达式是ch >= ”A” And ch <= ”Z”。
4.判断一个字符ch是小写字母的表达式是ch >= ”a” And ch <= ”z”。
5.判断一个字符ch是数字的表达式是ch >= ”0” And ch <= ”0”。
6.判断一个字符ch是字母的表达式是ch >= ”A” And ch <= ”Z” Or ch >= ”a” And ch <= ”z”。
7.大写字母ch,转换为小写字母语句Chr(Asc(ch)+32)。
8.小写字母ch,转换为大写字母语句Chr(Asc(ch)-32)。
9.生产一个随机大写字母ch的语句Chr(Asc(“A”)+Int(Rnd*26))。
10.生产一个随机小写字母ch的语句 Chr(Asc(“a”)+Int(Rnd*26))。
11.大写字母ch在字母表中位置 Asc(ch)-Asc(“A”)+1。
12.小写字母ch在字母表中位置 Asc(ch)-Asc(“a”)+1。
13.观察下表中字母在字母表中位置与其ASCII码值的关系
在字母表中位置t
大写字母
大写字母ASCII值i
小写字母
小写字母ASCII值j
1
A
64+1
a
96+1
2
B
64+2
b
96+2
3
C
64+3
c
96+3
……
……
……
……
……
25
Y
64+25
y
96+25
26
Z
64+26
z
96+26
字母ASCII码值可以表示他在字母表中位置加上一个整数,对于大小写字母来说,这个整数分别是64和96,这两个整数的最大公约数是32,因此可以用VB表达式Asc(ch) Mod 32来表示字母ch在字母表中位置。
考点1 字符串的正向连接和反向连接
若字符变量s和ch的值分别是“1”和“2”,则运行语句s=s+ch,变量s的值为“12”,称为正向连接;运行语句s= ch + s,变量s的值为“21”,称为反向连接。
【例1】 程序实现功能:在文本框 Text1 中输入字符串 s1,在文本框 Text2 中输入字符串s2,单击“合并”按钮Command1,按如下规则依次从中取出各字符进行合并,合并后的结果显示在标签Label3中。合并规则如下: ①当字符串1的长度大于字符串2时,将字符串s2中的各个字符从左侧依次插入到字符串s1中的各字符后方。例如字符串1为“abcdef”,字符串2为“123”时,合并后的字符串为“a1b2c3def”。 ②当字符串s2的长度大于等于字符串s1时,将字符串1中的各个字符从右侧依次插入到字符串2中的各个字符后方。例如字符串1为“abcd”,字符串2为“12345”时,合并后的字符串为“12d3c4b5a”。程序运行界面如图所示:
(1)要使程序运行时,窗体Form1 标题显示“字符串合并”,可在Form_Load事件过程中添加语句______(单选,填字母:A.Form1.Caption = ”字符串合并”/B.Label1.Caption =”字符串合并”/C.Text.Text=”字符串合并”)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s1 As String, s2 As String, ans As String
Dim n As Integer, m As Integer, i As Integer
s1 = Text1.Text: s2 = Text2.Text
m = Len(s1): n = Len(s2) ans =“ ”
If____①______Then
 For i = 1 To n
ans = ans + Mid(s1, i, 1) + Mid(s2, i, 1)
 Next i
 ans = ans + Mid(s1, i, m - n)
Else
 For i = 1 To m
 ans = ____②____+ Mid(s1, i, 1) + ans
 Next i
 ans = Mid(s2, 1, n - m) + ans
End If
Label3.Caption = ”合并后为:” + ____③____
End Sub
解析 当字符串1的长度大于字符串2时为正向连接,否则为反向连接。ans为连接后的字符。语句ans = ans + Mid(s1, i, 1) + Mid(s2, i, 1)为正向连接,因此符合的条件是Len(s1)>Len(s2)。反向连接时,s2中取出的字符是第i个位置的对称位置的字符。关于对称位置在今后的学习中经常会用到,以字符串1“abcd”和字符串2“12345”合并为例。
循环变量i的值
字符串2取出字符
该字符在字符串2的位置j
1
”5”
5
2
”4”
4
3
”3”
3
4
”2”
2
通过上表发现,变量i加j等于一个定值Len(s2)+1,因此j= Len(s2)-i+1。
答案 (1)A  (2)①Len(s1)>Len(s2) ②Mid(s2,Len(s2)-i+1, 1)
【变式训练1】 单词倒序加密法。把明文中每个单词首尾颠倒进行加密,空格、标点等其他字符按原来顺序输出。在文本框Text1中输入密文,单击“解密”按钮Command1,按加密的规则,在文本框Text2中输出解密后的字符。程序运行时的界面如图所示。
实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim i As Integer, s As String, ch As String
Dim newch As String, s1 As String
____①____
newch = ” ”
s1 = ” ”
i = 1
Do While i <= Len(s)
ch = Mid(s, i, 1)
If ch >= ”A” And ch <= ”Z” Or ch >= ”a” And ch <= ”z” Then
    s1 = ch + s1
Else
    newch = ____②____
    s1 = ” ”
End If
  ____③____
Loop
If s1 <> ” ” Then newch = newch + s1
Text2.Text = newch
End Sub
解析 变量s1表示每个单词,他是由ch反向连接得到。newch是由各个单词和空格组成,属于正向连接。
答案 ①s = Text1.Text ②newch + s1 + ch ③i = i + 1
考点2 连续多个字符串的处理
在输入的字符串中,往往是用“,”或“-”把各个数字串进行分隔,如果读出的字符不是分隔符时,用s1=s1+ch进行正向连接,取出数字串,或者记录开始位置和长度,取出相应的数字串,再根据题目要求进行相应的计算。例如2018年11月考试中,在平面坐标系中,给定一组有序的点,求拆线的长度。2017年11月编写“字符串生成”问题。
【例2】 在平面坐标系中,给定任意个点,求出这些点中与点(1,1)距离最远的点。小李编写出了相应功能的程序:在文本框 Text1 中输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮 Command1后,程序计算这些点到(1,1)的距离后,结果显示在列表框 List1 中,并且输出最大距离的点。程序运行界面如图所示。
(1)实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim i, k As Integer
Dim x1, y1, x2, y2 As Single
Dim v As Single, maxd As Single
Dim s As String, pos As String
s = Text1.Text
x1 = 1: y1 = 1
t = ” ”: k = 1: j = 1
List1.AddItem ”坐标点” & ” 距离”
For i = 1 To Len(s)
If Mid(s, i, 1) = ”,” Then
v = Val(Mid(s, j, i - j))
j = __①____
If k Mod 2 = 1 Then
    x2 = v
Else
    y2 = v
    d = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
    If ____②____Then
      maxd = d
      pos = ”(” & Str(x2) & ”,” & Str(y2) & ”)”
    End If
    List1.AddItem ”(” & Str(x2) & ”,” & Str(y2) & ”)  ” & Str(d)
    End If
k = k + 1
End If
Next i
Label1.Caption = ”距离(1,1)最远的点为” & pos & ”距离为” & Str(maxd)
End Sub
(2)若文本框 Text1 中输入的内容为“31,41,26,51,1,56,”,程序运行结束后,距离(1,1)最远的坐标点是______。
解析 语句v = Val(Mid(s, j, i - j)),表示取的数字串,j是开始位置,当前位置i的字符已经是“,”,因此长度的计算为i-1-j+1。j是下个数字串的开始位置,因此j= i+1。当满足条件Mid(s, i, 1) = ”,”时,k = k + 1,说明k表示数字串的个数。
答案 (1)①i+1 ②maxd【变式训练2】 小李编写了一个北京时间与世界部分城市时间转换的VB程序,功能如下:在文本框Text1、Text2和Text3中分别输入北京时间的时、分和秒,单击“计算”按钮Command1后,在列表框List12中显示其他城市对应的时间。
(1)将下列程序代码补充完整。
Private Sub Command1_Click()
Dim i As Integer, s1 As String, t As Integer,str1 As String
str1 = ”法国巴黎,-7;俄罗斯莫斯科,-5;泰国曼谷,-1;日本东京,+1;澳大利亚墨尔本,+2;美国纽约,+9;加拿大温哥华,+12;”
For i = 1 To Len(str1)
ch = Mid(str1, i, 1)
If ch = ”,” Then
  ____①____
s = ” ”
ElseIf ch = ”+” Then
t = 1
ElseIf ch = ”-” Then
t = -1
ElseIf ch = ”;” Then
t =____②____ + Val(Text1.Text)
t = (t + 24) Mod 24
List1.AddItem s1 + Str(t) + ”:” + Text2.Text + ”:” + Text3.Text
s = ” ”
Else
s = s + ch
End If
Next i
End Sub
(2)英国伦敦在北京西方,相差7个时区,若北京时间凌晨4点,伦敦的时间是________点(24小时制)。
解析 用逗号分隔的是国家地区名称,t表示取出的相关时区,但他小于0时,+24为正数。当读出的数为分号时,表示一个完整的地区结束了,要输出该地区的信息。
答案 (1)①s1=s ②Val(s) (2)21
考点3 与字符内码相关的字符处理
字符的ASCII码值指某个字符在ASCII表中位置,如字符0-9的ASCII码值为48-57, 字母A-Z的ASCII码值为65-90,字母a-z的ASCII码值为97-122。他们有以下规律:
1.字母或数字是连续的,其ASCII码值也是连续。
2.字母可以用ASCII码值来计算他在26个英文字母表中位置t。
3.若已知字母在英文字母表中位置t,即该字母距离字母”A”或”a”的距离为t-1,输出该字母可以用Chr(Asc(”A”)+t-1)或Chr(Asc(”a”)+t-1)。
【例3】 编写VB程序,实现如下功能:在文本框Text1中输入一个字母,单击“产生回文字母”按钮Command1,在标签Label2中显示相应的回文字符串。例如:若输入的是大写字母“G”,则产生从“A”开始的回文字母“ABCDEFGFEDCBA”;若输入的是小写字母“g”,则产生从“a”开始的回文字母“abcdefgfedcba”。运行效果如图所示。
(1)观察运行界面,选项中没有用到的控件是______(选填:)。
(2)请完善下列程序代码:
Private Sub Command1_Click()
Dim n As Integer, i As Integer, init As Integer, m As String, s As String
m = Text1.Text: s = ” ”
If m >= ”a” And m <= ”z” Then init = Asc(”a”)
If m >= ”A” And m <= ”Z” Then init = Asc(”A”)
n = Asc(m) - init + 1
For i = 1 To ____①____
If i <= n Then
s = s + Chr(Asc(m) + i - n)
Else
s = s +____②____
End If
Next i
Label2.Caption = s
End Sub
(3)运行该程序时,如果在文本框 Text1 中输入数字“9”,则输出的结果会不会是“0123456789876543210”________。(选填:会/不会)
变量n表示输入的字母在字母表中位置,且中间的字母只输出一次,因此总共输出2*n-1个字母。变量i与输出的字母在字母表中位置关系对应表如下表所示:
i的值
输出的字母在字母表中位置t
i的值
输出的字母在字母表中位置t
1
1
n+1
n-1
2
2
n+2
n-2
3
3
n+3
n-3

…………

…………
n
n
2*n-1
1
因此当i从1到n时,应输出26个英文字母表中第1至n位置上字母,对应的ASCII码值为i+init-1,因此可以输出Chr(i+init-1),也可以用Asc(m)来表示。方法为:Asc(m)的值为n+init-1,即init= Asc(m)-n+1,代入可得Chr(Asc(m)+i-n)。当i从n+1到2*n-1时,可以观察到该字母在字母表中位置t与i的和是一个定值2*n,因此t=2*n-i,输出该字母的表达式为Chr(init+t-1),即Chr(init+2*n-i-1)或Chr(Asc(m)+n-i)。当输入数字时,无法取得init的值,因此不能输出。
答案 (1)D (2)①2 * n-1  ②Chr(init+2 *n-i-1)或Chr(Asc(m)+n-i) (3)不会
【变式训练3】 李雷收到了朋友发给他的一封奇怪的邮件,里面有段内容是由一些数字和符号组成,信上面说了,这段内容是加密后的内容,并给出了具体加密方法(假定原文的英文字母都是大写的),具体方法如下:
①“A”变为一个1到100内的随机数*27+1,“B”变为一个1到100内的随机数*27+2,……,
②每个字母变为数字后会加上一个“-”用来分割数字;
③其他空格和标点字符都按原来的表示。
(1)根据描述,若密文为“1905-1442-”,则表示的是:____________。
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, yw As String, ch As String
Dim value As Integer ′用于存储某字母在密文中对应数值的临时变量
s = Text1.Text
value = 0: yw = ” ”
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= ”0” And ch <= ”9” Then
value = ____①____
ElseIf ch = ”-” Then
yw = yw +____②____
value = 0
Else
yw = yw + ch
End If
Next i
Text2.Text = yw
End Sub
解析 根据加密规则,“A”变为一个1到100内的随机数*27+1,余数即在字母表中位置。
1905和1442除27的余数分别为15和11,对应字母表中位置为OK。Value表示取出的数字串,每取出一个数字,前面的数字后添加一个0,再加上新读出的数字。该数字Mod 27后,表示该字母的位置。
答案 (1)OK (2)①value * 10 + Val(ch)
②Chr(Asc(“A”) + value Mod 27 - 1)
【变式训练4】 小迪同学在某网站注册时需要预设登录密码,预设密码需要符合以下2点:①密码不少于6位字符组成; ②必须同时包含4种字符,分别为大写英文字母、小写英文字母、阿拉伯数字和标点符号。据此,小迪同学编写了生成密码的VB程序,程序运行界面如下图a所示,当点击“生成密码”按钮(Command1)时,在文本框Text1中输出符合要求的密码字符。
(1)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim t As Integer, n As Integer, pwd As String, flag As Boolean
Dim a(1 To 4) As Integer ′a(i)=1代表第i种字符存在,a(i)=0代表第i种字符还不存在
flag = False: n = 0: pwd = ” ”: s = 0
Randomize
Do While Not flag
①____′ 随机生成33-126的ASCII码值
If t >= 97 And t <= 122 Then
a(1) = 1
ElseIf t >= 65 And t <= 90 Then
a(2) = 1
ElseIf t >= 48 And t <= 57 Then
a(3) = 1
Else
a(4) = 1
End If
pwd = ______②____
s = a(1) + a(2) + a(3) + a(4)
n = n + 1
If ____③______ Then flag = True
Loop
Text1.Text = pwd
End Sub
(2)以下字符串不可能是上述程序生成的密码的一项是______。(填数字序号)
①zX}rb!T&}d2 ②[26wv9,Q ③$14G/uv
④H2?N64AJa
解析 t表示随机生成33-126的ASCII码值,pwd表示相对应的字母,应分别将他们连接起来。flag是标记,一旦密码的长度大于等于6或者有4种类型,值为True,不再循环。产生密码$14G/uv时,当产生字母u时,已经满足长度为6,类型有4种,flag的值为True,退出循环,因此不可能再产生字母v。
答案 (1)①t =Int(Rnd() * 94 + 33) ②pwd + Chr(t) ③n >= 6 And s = 4  (2)③
1.有如下VB 程序:
Dim s1 As String, s2 As String, i As Integer, ch As String
s1 = Text1.Text
For i = 1 To Len(s1)
ch = Mid(s1, i, 1)
If Asc(ch) >= 65 And Asc(ch) <= 90 Then
ch = Chr(Asc(ch) + 3)
End If 
s2 = ch + s2  
Next i
Label1.Caption = s2
已知大写字母A 的ASCII 码为65。运行上述程序,若文本框Text1中的内容为“A1b2C3”,单击命令按钮Command1,标签Label1 中显示的是__________ 。
解析 只有大写字母字符进行后称3位,其他字符保持不变,且进行反向连接。
答案 3F2b1D
2.下列程序的功能是寻找并删除英语短文中的指定单词。程序运行时,在文本框 Text1 中输入英语短文,在文本框 Text2 中输入待删除的单词,单击“删除”按钮后,在文本框 Text3 中输出删除该单词后的短文,最后,在标签 Label5 中输出共删除的单词数。程序运行效果如下图所示:
(1)要使程序运行时,文本框 Text1 中显示的字符颜色为蓝色,可在 Form_Load 事件过程中添加语句________。(单选,填字母:A.Text1 = vbBlue / B.Text1.ForeColor = vbBlue/ C.Text1.Text=vbBlue)
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s1 As String, s2 As String, st As String
Dim len1 As Integer, len2 As Integer, i As Integer, m As Integer
s1 = Text1.Text: s2 = Text2.Text
len1 = Len(s1): len2 = Len(s2)
i = 1: m = 0
Do While i <= ____①______
If Mid(s1, i, len2) = s2 Then
  ____②____
m = m + 1
Else
st =____③____
i = i + 1
End If
Loop
Text3.Text = st
Label5.Caption = Str(m)
End Sub
解析 len1和len2分别表示两个字符串的长度,在s1中取s2的长度,只要取得len1-len2+1次就可以了。如果找到要删除的字符串s2,下次取的位置在i+len2,如果没有找到,每次把当前位置的字符连接上去。
答案 (1)B (2)①len1-len2+1 ②i+len2 ③st+Mid(s1,i,1)
3.得分问题:给出一个由A和X组成的字符串,统计字符的得分之和。每个A的得分为已经连续出现的A的个数,X得分为0。例如,AAXXAXXAAA的得分为1+2+0+0+1+0+0+1+2+3。现编写一个程序,功能如下:在文本框Text1中输入字符串,单击“统计”按钮Cmd_Sta后,程序计算得分,结果显示在Text2中。
(1)Cmd_Sta对象属于________类(单选,填字母:A.Form/B.Label/C.TextBox/ D.CommandButton)。
(2)实现上述功能的VB程序如下,请在程序划线处填入合适代码。
Private Sub Cmd_Sta_Click()
Dim sum As Integer, i As Integer, cnt As Integer
Dim c As String, sz As String
sz = Text1.Text
cnt = 0: sum = 0
For i = 1 To Len(sz)
  ____①____
If c = ”A” Then
  ____②____
sum = sum + cnt
Else
cnt = 0
End If
Next i
Text2.Text = Str(sum)
End Sub
(3)运行该程序,输入数据如上图所示,程序执行到循环结束时,变量cnt的值为__________。
解析 从代码SubCmd_Sta_Click()上来看,Cmd_Sta属于按钮。c为每次已出的字符,如果取出的字符为“A”,cnt的值每次递增1。
答案 (1)D (2)①Mid(sz,i,1) ②cnt=cnt+1
(3)3 
4.Text2和Text3中分别输入插入的字符和插入的位置,单击“插入”按钮Command1,在文本框Text4中输出新生成的字符(若插入的位置大于原始字符长度,则将字符插入至末尾)。
Private Sub Command1_Click()
Dim t As String, i As Integer
Dim wz As Integer
wz = Val(Text3.Text)
t = ” ”
If wz > Len(Text1.Text) Then
t = Text1.Text + ____①____
Else
For i = 1 To Len(Text1.Text)
    If ____②____ Then
      t = t + Mid(Text1.Text, i, 1)
    Else
      t = t + Text2.Text + Mid(Text1.Text, i, 1)
    End If
Next i
End If
Text4.Text = t
End Sub
解析 当条件wz > Len(Text1.Text)成立时,直接插入到最后,当前位置不是要输入的值时,一个一个字母进行连接。
答案 ①Text2.Text ②i<>wz
5.修改VB程序,使其具有下列功能:在左边列表框List1中选择一个车牌,单击“判断”按钮Command1,根据该车牌最后一位数字进行限行判断(若为偶数则奇数日期限行,奇数则偶数日期限行),并将判断结果显示在文本框Text2中。
Private Sub____①____′单击List1,将列表框中选中的内容显示在Text1中
Text1.Text = List1.List(List1.ListIndex) ′将当前选中的List1的内容显示在Text1中
Text2.Text = ” ”
End Sub
Private Sub Command1_Click( )
 Dim i As Integer, cp As String, c As String
cp = Text1.Text
For i = ____②____ To 4 Step -1
c = Mid(cp, i, 1)
If c >= ”0” And c <= ”9” Then ′若c是数字字符,则记录该数字
    If Val(c) mod 2=1 Then
     Text2.Text = ”偶数日期限行”
    Else
     Text2.Text = ”奇数日期限行”
      ____③____
    Exit For ′退出循环
End If
Next i     
End Sub
解析 对象List1,事件是单击。从最后往前进行查找。
答案 ①List1_Click( ) ②Len(cp) ③End IF
6.某数字加密算法描述如下:将某位数字与其位置相加得到num,num除以11的余数即为编号,若余数为0编号为11,从密码表中找出与编号对应的加密字符完成加密。密码表如下:
编号
1
2
3
4
5
6
7
8
9
10
11
加密字符
V
i
s
u
a
l
B
A
S
I
C
小明按照上述方法,设计了一个数字加密的VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中每个数字进行加密,并将加密后的密文在文本框Text2中输出。下表显示了数字“2018”的加密过程:
数字
2
0
1
8
位置
1
2
3
4
编号
3
2
4
1
加密字符
s
i
u
V
程序运行效果如图所示。
(1)设计如图所示的程序界面,除窗体外,至少还要使用________个类(填数字)。
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
  Private Sub Command1_Click()
  Dim s As String, s1 As String, s2 As String, num As Integer
  s = ”VisualBASIC”
  s1 = Text1.Text
  s2=” ”
  i = 1
  Do While____①____
  num = Val(Mid(s1, i, 1)) + i
num = num Mod 11
If num = 0 Then num = 11
s2 =____②____
i = i + 1
  Loop
  Text2.Text = s2
  End Sub
(3)若密文是“uAV”,则明文是______。
解析 num表示加密后在密码表中了取出的字母,当他大于11时,除11取余数。若密文是“uAV”,对应密码表中位置为4、8、1,减去他在字符中位置1、2、3后,得到3、6、-2,而-2应加上11后再除11取余,即9.
答案 (1)3 (2)① i<=Len(s1) ②s2+Mid(s,num+,1)
(3)369
7.某密钥的加密规则是:取字符ASCII码对应二进制的后4位,如果其值为0到7则显示该值,如果其值8到11则对应显示“东南西北”,如果其值为12到15则对应显示“东南东北西南西北”。程序运行的界面如图所示。
为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, n As Integer, m As Integer, result As String
dw = ”东南西北东南东北西南西北”
result = ” ”
s = Text1.Text
For i = 1 To Len(s)
c = Mid(s, i, 1)
___①___
If m < 8 Then
result = result + Str(m)
ElseIf m >= 8 And m <= 11 Then
result = result + Mid(dw, m - 7, 1)
ElseIf m >= 12 And m <= 15 Then
result = result + ____②____
End If
Next i
Label1.Caption = result
End Sub
解析 字符ASCII码对应二进制的后4位就是该十进制数转换成十六进制后面的1位数,即第1次的余数。当m >= 12 And m <= 15条件成立时,取出dw第5个位置开始的两个字符,如下表所示,
m值
12
13
14
15
开始位置
5
7
9
11
开始位置是一个等差数列,可以表示为2*t+1的形式。
答案 ①m = Asc(c) Mod 16 ②Mid(dw, 2 * (m - 10) + 1, 2)
8.小马正在看一本侦探小说,想了解其中一段案情的解析,却发现了一串字符“#2017-2018go:)”,并附有文字提示:①答案所在书的页码是这串字符中最大数字字串(若值相同则取后面的数字字串)的起始位置*10+结束位置,②答案所在行号是最大数值除以100的余数。例如:“#17a18#”字符串中,最大数字字串“18”,起始位置是5,结束位置是6,其页码是56,行号是18。小马编写了一个VB程序帮他寻找答案,程序运行界面如图所示。在文本框Text1中输入这段字符串s1,单击“揭秘”按钮Command1,在文本框Text2中输出页码,在Text3中输出行号。
实现此功能的VB程序中,加框处有错,请改正。
Private Sub Command1_Click()
Dim s1 As String, s2 As String, ch As String, ch2 As String
Dim max As Double, n As Integer, page As Integer
Dim i As Integer, j As Integer
s1=Text1.Text: s2 = ” ”
n = Len(s1):i = 1: max = 0
Do While i <= n
 ch = Mid(s1, i, 1)
 If ch >= ”0” And ch <= ”9” Then
j = i
ch2 = Mid(s1, j, 1)
Do While ch2 >= ”0” And ch2 <= ”9”
   j = j + 1
   ch2 = Mid(s1, j, 1)
Loop
s2 =        ′(1)
If Val(s2) > max Then
max = Val(s2)
page =           ′(2)
Text2.Text = Str(page)
Text3.Text = Str(max Mod 100)
End If
i = j
  End If
  i = i + 1
Loop
End Sub
解析 当取出字符ch是数字时,变量j从当前i的位置开始,一直往下找,直到不是数字为止,此时的s2就是取出的数字串,开始位置为i,结束位置为j-1,数字串的长度为j-1-i+1。
答案 (1)Mid(s1,i,j-i) (2) i * 10 + j - 1
9.删除字符串中的非字母字符,并查找出 ASCII 码值最大的字母。程序功能如下: 在文本框 Text1 中输入一个字符串,单击命令按钮 Command1,在文本框 Text2 中显示删除非字母字符后的字符串,在文本框Text3 中显示ASCII 码值最大的字母,运行界面如图所示。
(1)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim result As String, s As String, c As String
Dim n As Integer, i As Integer, j As Integer
s = Text1.Text
Text2.Text = ” ”
For i = 1 To Len(s)
  ____①____
  If n >= 65 And n <= 90 Or n >= 97 And n <= 122 Then
result = result + Mid(s, i, 1)
Text2.Text = result
  End If
Next i
j = 2
c = Mid(result, 1, 1)
Do While j <= Len(result)
If Mid(result, j, 1) > c Then c = Mid(result, j, 1)
__②____
Loop
Text3.Text = c
End Sub
(2)程序运行时,在文本框Text3中显示的“q”字符是Text2 中的第__________个“q”。
解析 n是取出字符的ASCII码值,当他是字母时,进行正向连接。从第2个字母开始,用最值进行比较,如果他比最值大,则最值为该字母,当有多个相同时,应取第1个。
答案 (1)①n=Asc(Mid(s, i, 1)) ② j=j+1 (2)1
10.编“根据字典还原真相”程序,实现如下功能:在文本框Text1中输入多个正整数(以“,”为分割符),单击“解密”按钮Command1,第1个整数减去1,第2个整数减去2,第3个整数减去3,依次类推,将减去后的值作为位置信息,依次从标签Label1中(字典内容)提取字符并连接成字符串,最后将字符串显示在文本框Text2中。程序运行界面如下图所示。
(1)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim i As Integer, s As String
Dim s1 As String, s2 As String
Dim t As Integer, newch As String
s = Text1.Text
s1 = Label1.Caption
p = 0
i = 1
Do While i <= Len(s)
s2 = Mid(s, i, 1)
If s2 = ”,” Or ____①____Then
If i = Len(s) Then t = t * 10 + Val(s2)
p = p + 1
   ____②____
newch = newch + Mid(s1, t, 1)
t = 0
Else
t = t * 10 + Val(s2)
End If
i = i + 1
Loop
Text2.Text = newch
End Sub
(2)根据以上加密规则和字典,若解密得到字符“tee”,则加密数字串为__________。
解析 变量t是读出的数字串,第1个整数减去1,第2个整数减去2,第3个整数减去3,因此t=t-p。当读出的逗号或者是最后一个字符时,进行相应的处理。解密得到tee,相应在字符串位置是4,5,5,再加他们在字符串的序号。
答案 (1)①i=Len(s) ②t=t-p (2)5,6,7
11.对于一串连续不超10个相同的数字,可以用几A几B的形式来简单报数,如“111889999”可能压缩为“312849”。在文本框Text1输入一个连续的数字串,单击“压缩”按钮Command1,在文本框Text2中输出压缩后的数字串。程序运行界面如图所示。
Private Sub Command1_Click()
Dim s1 As String, s2 As String, i As Integer
Dim str As String, n As Integer
str = ”1234567890”:n = 1
s1 = Text1.Text: s2 = Mid(s1, 1, 1)
____①____
Do While i <= Len(s1)
If s2 <> Mid(s1, i, 1) Then
    s = s + Mid(str, n, 1) + s2
    s2 = Mid(s1, i, 1)
    n = 1
Else
    ____②____
End If
i = i + 1
Loop
s = s + Mid(str, n, 1) + s2
Text2.Text = ____③____
End Sub
解析 i应该从第2个位置开始,与前面的数字进行比较。如果条件s2 <> Mid(s1, i, 1)不成立时,应该进行计数。
答案 ①i=2  ②n=n+1 ③s
12.在一个字符串,如果出现两个或两个以上连续相同字符,这多个字符就同时“消掉”了。编写VB程序,实现如下功能。在文本框Text1输入一个字符串,单击“消一消”按钮Command1,在文本框Text2中输出连续相同字符消去后的字符串。程序运行界面如图所示。
(1)在设计程序界面时,可能通过修改按钮的________属性,按钮Command1将显示“消一消”文字。
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, s1 As String, i As Integer
Dim c1 As String, c2 As String, t As Integer
s=Text1.Text
c1=Mid(s, 1, 1)
t=1
____①____
Do While i <= Len(s)
c2=Mid(s, i, 1)
If c1 <> c2 Then
    If t=1 Then s1=s1+c1
    c1 =____②____
    t=1
Else
     t=t+1
End If
i=i+1
Loop
If t=1 Then s1=s1+c1
Text2.Text =____③____
End Sub
(3)运行该程序,若在文本框Text1中输入“Haaa,Dd”,则在文本框Text2中将显示________。
答案 (1)Caption (2)①i=2 ②c2 ③s1 (3)H,Dd
13.星座问题:已知十二星座的名称和起始日期,根据身份证号码来计算星座名称。具体功能如下:在文本框Text1中输入身份证号码,单击“计算”按钮Cmd1,在标签Label2中显示星座名称。程序运行界面如图所示。
(1)结合题目描述,程序中①处应填入的内容是________。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub ____①____Click()
Dim sfz As String, Csny As String, str1 As String, str2 As String
Dim i As Integer, t As Integer, s1 As String
sfz = Text1.Text
str1 = ”012002190321042005210622072308230923102411231222”
str2 = ”水瓶座、双鱼座、白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、摩羯座”
Csny = Mid(sfz, 11, 4)
If Len(sfz) = 18 Then
If Csny < ”0122” Then Csny = ”13” + Mid(Csny, 3, 2)
i = 1
Do While i <= 45
s1 = Mid(str1, i, 4)
If i = 45 Then s2 = ”9999” Else s2 = Mid(str1, i + 4, 4)
If Csny >= s1 And Csny < s2 Then
     ____②____
     i = Len(str1)
End If
   ____③____
Loop
Label2.Caption = ”你的星座为” + Mid(str2, t, 3)
Else
Label2.Caption = ”你输入的身份证号码不正确!”
End If
(3)若文本框Text1中输入“33052220050101218X”,根据算法,星座为________。
解析 题目中要求单击“计算”按钮Cmd1,因此“计算”按钮的名称为Cmd1。根据输入和输出理解变量含义,在输出语句中,Label2.Caption = ”你的星座为” + Mid(str2, t, 3),t表示取出字符的位置。每个星座的日期是4个字符,处理完一个星座后,下一个星座的开始位置应+4.
答案 (1)①Cmd1 (2)② t = i ③ i = i + 4 (3)摩羯座
14.设计一个程序,在文本框Text1中输入任意一个字母,在列表框List1中按三角形的方式输出。程序运行界面如下图所示。
实现此功能的VB程序如下,但加框处有错,请改正。
Private Sub Command1_Click()
Dim x As Integer, m As String, s As String, n As Integer
Dim i As Integer, j As Integer, k As Integer
List1.Clear
m = Text1.Text
If m >= ”A” And m <= ”Z” Then n = Asc(”A”)
If m >= ”a” And m <= ”z” Then n = Asc(”a”)
x =              ′(1)
For i = 1 To x
 s = ” ”
 For j = 1 To x - i
s = s + ” ”
 Next j
 For k = 1 To 2 * i - 1
If k <= i Then
s = s + Chr(64 + k)
Else
s = s +       ′(2)
End If
  Next k
  List1.AddItem s
Next i
End Sub
解析 (1)变量x的含义是输入的字母在26个字母中的位置,如输入字母“A”,则x=1。(2)For k循环是为了输出一个回文数,加框处在else条件下,根据题意可知,是为了输出回文数的后半部分,如i=3,For k循环结束后,输出ABCBA,而加框处的语句是为了输出BA,即当k=4时,输出B,当k=5时,输出A。
答案 (1)Asc(m) - n + 1 (2)Chr(64 + 2 * i - k)
课件70张PPT。专题三 字符串处理1.(2019·6月浙江选考)小宇为选定班级参赛作品编写了一个VB程序,设计如下:在文本框Text1内输入5位评委对3个作品的评分数据(评委对作品的评分数据出3位十进制数组成,第1位对应作品编号,第2、3位对应作品得分,分值范围为[60,99]。如“275”表示2号作品得分75)。单击“计分”按钮后,在标签Label1中输出3个作品的平均分,在标签Label2中输出参赛的作品(选择最高平均分作品参赛,若最高平均分存在并列,则从并列作品中随机抽取):程序运行界面如图所示。(1)“计分”按钮的对象名为________。
(2)程序部分代码如下,请在划线处填入合适代码。
Private Sub jf_Click()
Dim s As String, d As String, i As Integer
Dim f As Single, f2 As Single, f3 As Single
s = Text1.Text
i = 1
Do While____①____d = Mid(s, i, 3)
If Mid(d, 1, 1) = “1” Then
f1 = f1 + Val(Mid(d, 2, 2))
ElseIf Mid(d, 1, 1) = “ 2” Then
f2 = f2 + Val(Mid(d, 2, 2))
Else
f3 = f3 + Val(Mid(d, 2, 2))
End If
____②____LoopLabel1.Caption - “作品1平均分为:” + Str(f1 / 5) + “作品2平均分为!” + Str(f2 / 5) + “作品3平均分为:” + Str(f3 / 5)
′以下省略“处理并列最高平均分,并在Label2中输出选取的参赛作品”的代码
End Sub
(3)运行该程序时,在文本框Text1中以不同的顺序输入原评分数据:
380/295/283/170/180/385/372/285/190/180/390/384/272/170/276,单击“计分”按钮,则Label1中显示的结果____________ (选填:会/不会)发生改变。解析 本题考核的知识点是编写程序解决实际问题。从语句Sub jf_Click()来看,对象名为jf。变量i表示在字符中位置,往往从第1个位置到最后一个位置。每个数据都是4个数字,因此每次递增4。输入顺序改变,但总和不变,因此显示的运算结果不变。
答案 (1)jf (2)①i <= Len(s) 或i< Len(s) 或i<= 57及以上 或i<58及以上 或其他可行答案 ②i=i+4 (3)不会2.(2019·4月浙江选考)小王设计“模拟撤销”程序,需要用一个“历史记录”, “历史记录”是在对字符串s进行插入或删除时,将每步操作信息依次存储得到的,操作信息由操作符(“+”表示插入,“-”表示删除)、操作位置和操作字符串(只包含英文字母)构成,例如,“+23abc”表示在字符串s第23个位插入了“abc”, “模拟撤销”过程按照“历史记录”的逆序进行,将字符串s的内容恢复到初始状态。对字符串“Book”的操作与撤销过程,如图a所示。小王编写的“模拟撤销”VB程序如下,文本框 Text1中的内容是撤销前字符串,文本框Text2中的内容是历史记录,单击“撤销”按钮Command1后,在标签Label1中显示撤销过程,程序运行界面如图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 StringDim c As String, num As String, ss As String
Dim n As Integer, i As Integer
s = Text1.Text: t = Text2.Text
c = “  ”: num = “  ”: ss = s
For i = Len(t) To 1 Step -1
 ____①______
 If ch >= “ a” And ch <= “ z” Or ch >= “ A” And ch = “ Z” Then
c = ch + c
   ElseIf ch >= “ 0” And ch <= “ 9” Then num = ch + num
 Else
n = Val(num)
If ch = “ -” Then
 s = Mid(s, 1, n - 1) + ____②____
Else
s = Mid(s, 1, n - 1) + Mid(s, n + Len(c), Len(s) - n - Len(c) + 1)
End If
 ss = ss + “ →” + s
  c = “  ”: num = “  ”
End If
 Next i
 Label1.Caption = ss
End Sub(3)运行该程序,若文本框Text1中的内容是“April”,文本框Text2中的内容是“-3p+3ri-6e”,单击撤销按钮,For循环语句执行完成后,字符串s的值是“ ________”。解析 当前字符为字母,则将字母拼接到变量 c 中,If ch >= “a” And ch <= “ z” Or ch >= “ A” And ch = “Z” Then(变量 c 存储将要删除或插入的字符串),当前字符为数字,拼接到num。由于是撤销操作,因此当前字符为“+”时,应删除该位置上的字符c,否则应拼接上字符c。若文本框Text1中的内容是“April”,文本框Text2中的内容是“-3p+3ri-6e”,单击撤销按钮,先在第6个位置连接e,再在第3个位置删除ri,最后在新的字符的第3个位置加p。 “ Aprile” → “ Aple” → “ Apple”
答案 (1)C (2)①ch = Mid(t,i,1) ②c + Mid(s, n, Len(s)-n+1) (3) “Apple”3.(2018·11月浙江选考)在平面坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框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的值为________。解析 k表示数字中的个数,图中有7个数字,当k是奇数时,取出x的坐标。
答案 (1)D
(2)①Text1.Text ②k Mod 2=1
(3)74.(2017·11月浙江选考)编“字符串生成”程序,实现如下功能:在文本框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 IfNext i
Label1.Caption =____②____
End Sub(3)若文本框Text1中输入内容的结束符缺失(即输入内容为1,18,9,9),单击“生成”按钮后,标签Label1中显示的内容是________。
解析 该题考核的基本算法思想是顺序查找。变量i表示字符串中字符的位置,c表示字符串中每个字符,查找“,”,如果找到了进行处理。
答案 (1)C (2)①t+c 或t&c 或其他等价表达式 ②s
(3)pas5.小王编写了一个实现文字查找替换功能的VB程序,运行界面如图所示。文本框Text1显示原文内容,Text2中输入查找内容,Text3中输入替换内容,单击“全部替换”按钮Command1后,Text4显示查找替换的结果,Text5中显示替换的次数,Text6显示“查找内容”在原文中的起始位置。实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
 Dim s As String, resule As String, pos As String
 Dim count As Integer, i As Integer
 i = 1: count = 0
 resule = " ": pos = " "
 Do While i <= Len(Text1.Text)i = i + 1
End If
 Loop
 Text4.Text = result
 Text5.Text = Str(count)
 Text6.Text = pos
End Sub解析 i 是查找过程中所查找到的当前字符位置的标记pos 依次显示被替换内容在原文中的起始位置若当前选定字符串与需要查找并替换的字符串不一致,就依原文逐字符输出。
答案 (1)Str(i) (2)result=result+ Mid(text1.text,i,1)一、字符串的遍历
1.对于文本有查找、删除、替换和插入的操作,查找是各种操作的基础,只有找到这个字符,才可以删除,才可以替换为其他字符,只有找到位置,才可以插入新的字符。
2.字符查找最通常的做法是,从字符串的第1个位置开始,取出单个字符或从该位置开始的多个字符,与其他字符进行对比,接着是第2个位置,第3个位置……直到最后一个位置。
3.循环变量i含义是字符串的位置。有两个函数是经常用到的,Len函数,决定了循环的次数,Mid函数,从字符串取出1个或多个字符。二、基础知识梳理
1.已知某电子邮箱地址(存储在字符串变量s中,格式为用户名@服务器名)的“@”符号的位置t,用VB表达式分别表示用户名的名称Mid(s,1,t-1),服务器地址的名称是Mid(s,t+1,Len(s)-t)。
2.在一段英语短文(存储在字符串变量s中),已经某单词的结束位置t和单词的长度n,用VB表达式Mid(s,t-n+1,n)表示该单词。
3.判断字符ch是大写字母的条件表达式是ch >= "A" And ch <= "Z"。4.判断一个字符ch是小写字母的表达式是ch >= "a" And ch <= "z"。
5.判断一个字符ch是数字的表达式是ch >= "0" And ch <= "0"。
6.判断一个字符ch是字母的表达式是ch >= "A" And ch <= "Z" Or ch >= "a" And ch <= "z"。
7.大写字母ch,转换为小写字母语句Chr(Asc(ch)+32)。
8.小写字母ch,转换为大写字母语句Chr(Asc(ch)-32)。
9.生产一个随机大写字母ch的语句Chr(Asc(“A”)+Int(Rnd*26))。10.生产一个随机小写字母ch的语句 Chr(Asc(“a”)+Int(Rnd*26))。
11.大写字母ch在字母表中位置 Asc(ch)-Asc(“A”)+1。12.小写字母ch在字母表中位置 Asc(ch)-Asc(“a”)+1。
13.观察下表中字母在字母表中位置与其ASCII码值的关系字母ASCII码值可以表示他在字母表中位置加上一个整数,对于大小写字母来说,这个整数分别是64和96,这两个整数的最大公约数是32,因此可以用VB表达式Asc(ch) Mod 32来表示字母ch在字母表中位置。考点1 字符串的正向连接和反向连接
若字符变量s和ch的值分别是“1”和“2”,则运行语句s=s+ch,变量s的值为“12”,称为正向连接;运行语句s= ch + s,变量s的值为“21”,称为反向连接。【例1】 程序实现功能:在文本框 Text1 中输入字符串 s1,在文本框 Text2 中输入字符串s2,单击“合并”按钮Command1,按如下规则依次从中取出各字符进行合并,合并后的结果显示在标签Label3中。合并规则如下: ①当字符串1的长度大于字符串2时,将字符串s2中的各个字符从左侧依次插入到字符串s1中的各字符后方。例如字符串1为“abcdef”,字符串2为“123”时,合并后的字符串为“a1b2c3def”。 ②当字符串s2的长度大于等于字符串s1时,将字符串1中的各个字符从右侧依次插入到字符串2中的各个字符后方。例如字符串1为“abcd”,字符串2为“12345”时,合并后的字符串为“12d3c4b5a”。程序运行界面如图所示:(1)要使程序运行时,窗体Form1 标题显示“字符串合并”,可在Form_Load事件过程中添加语句______(单选,填字母:A.Form1.Caption = "字符串合并"/B.Label1.Caption ="字符串合并"/C.Text.Text="字符串合并")。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s1 As String, s2 As String, ans As String
Dim n As Integer, m As Integer, i As Integer
s1 = Text1.Text: s2 = Text2.Text
m = Len(s1): n = Len(s2) ans =" "If____①______Then
 For i = 1 To n
ans = ans + Mid(s1, i, 1) + Mid(s2, i, 1)
 Next i
 ans = ans + Mid(s1, i, m - n)
Else
 For i = 1 To m
 ans = ____②____+ Mid(s1, i, 1) + ans
 Next i
 ans = Mid(s2, 1, n - m) + ans
End If
Label3.Caption = "合并后为:" + ____③____
End Sub解析 当字符串1的长度大于字符串2时为正向连接,否则为反向连接。ans为连接后的字符。语句ans = ans + Mid(s1, i, 1) + Mid(s2, i, 1)为正向连接,因此符合的条件是Len(s1)>Len(s2)。反向连接时,s2中取出的字符是第i个位置的对称位置的字符。关于对称位置在今后的学习中经常会用到,以字符串1“abcd”和字符串2“12345”合并为例。通过上表发现,变量i加j等于一个定值Len(s2)+1,因此j= Len(s2)-i+1。
答案 (1)A  (2)①Len(s1)>Len(s2) ②Mid(s2,Len(s2)-i+1, 1)【变式训练1】 单词倒序加密法。把明文中每个单词首尾颠倒进行加密,空格、标点等其他字符按原来顺序输出。在文本框Text1中输入密文,单击“解密”按钮Command1,按加密的规则,在文本框Text2中输出解密后的字符。程序运行时的界面如图所示。实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim i As Integer, s As String, ch As String
Dim newch As String, s1 As String
____①____
newch = " "
s1 = " "
i = 1
Do While i <= Len(s)
ch = Mid(s, i, 1) If ch >="A" And ch <= "Z" Or ch >= "a" And ch <= "z" Then
     s1 = ch + s1
Else
     newch = ____②____
     s1 = " "
End If
   ____③____
Loop
If s1 <> " " Then newch = newch + s1
Text2.Text = newch
End Sub解析 变量s1表示每个单词,他是由ch反向连接得到。newch是由各个单词和空格组成,属于正向连接。
答案 ①s = Text1.Text ②newch + s1 + ch ③i = i + 1考点2 连续多个字符串的处理
在输入的字符串中,往往是用“,”或“-”把各个数字串进行分隔,如果读出的字符不是分隔符时,用s1=s1+ch进行正向连接,取出数字串,或者记录开始位置和长度,取出相应的数字串,再根据题目要求进行相应的计算。例如2018年11月考试中,在平面坐标系中,给定一组有序的点,求拆线的长度。2017年11月编写“字符串生成”问题。【例2】 在平面坐标系中,给定任意个点,求出这些点中与点(1,1)距离最远的点。小李编写出了相应功能的程序:在文本框 Text1 中输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮 Command1后,程序计算这些点到(1,1)的距离后,结果显示在列表框 List1 中,并且输出最大距离的点。程序运行界面如图所示。(1)实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim i, k As Integer
Dim x1, y1, x2, y2 As Single
Dim v As Single, maxd As Single
Dim s As String, pos As String
s = Text1.Text
x1 = 1: y1 = 1
t = " ": k = 1: j = 1
List1.AddItem "坐标点" & " 距离"For i = 1 To Len(s)
If Mid(s, i, 1) = "," Then
v = Val(Mid(s, j, i - j))
j = __①____
If k Mod 2 = 1 Then
     x2 = v
Else
     y2 = v
    d = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
     If ____②____Then
       maxd = d      pos =" (" & Str(x2) & "," & Str(y2) & ") "
    End If
    List1.AddItem " (" & Str(x2) & "," & Str(y2) & ")  " & Str(d)
    End If
k = k + 1
End If
Next i
Label1.Caption = "距离(1,1)最远的点为" & pos & "距离为" & Str(maxd)
End Sub(2)若文本框 Text1 中输入的内容为“31,41,26,51,1,56,”,程序运行结束后,距离(1,1)最远的坐标点是______。解析 语句v = Val(Mid(s, j, i - j)),表示取的数字串,j是开始位置,当前位置i的字符已经是“,”,因此长度的计算为i-1-j+1。j是下个数字串的开始位置,因此j= i+1。当满足条件Mid(s, i, 1) = " ,"时,k = k + 1,说明k表示数字串的个数。
答案 (1)①i+1 ②maxdPrivate Sub Command1_Click()
Dim i As Integer, s1 As String, t As Integer,str1 As String
str1 = "法国巴黎,-7;俄罗斯莫斯科,-5;泰国曼谷,-1;日本东京,+1;澳大利亚墨尔本,+2;美国纽约,+9;加拿大温哥华,+12;"
For i = 1 To Len(str1)
ch = Mid(str1, i, 1)
If ch = "," Then  ____①____
s = " "
ElseIf ch = "+” Then
t = 1
ElseIf ch = "-" Then
t = -1
ElseIf ch = ";" Then
t =____②____ + Val(Text1.Text)
t = (t + 24) Mod 24
List1.AddItem s1 + Str(t) + ":" + Text2.Text + ":" + Text3.Text s = "  "
Else
s = s + ch
End If
Next i
End Sub
(2)英国伦敦在北京西方,相差7个时区,若北京时间凌晨4点,伦敦的时间是________点(24小时制)。解析 用逗号分隔的是国家地区名称,t表示取出的相关时区,但他小于0时,+24为正数。当读出的数为分号时,表示一个完整的地区结束了,要输出该地区的信息。
答案 (1)①s1=s ②Val(s) (2)21考点3 与字符内码相关的字符处理
字符的ASCII码值指某个字符在ASCII表中位置,如字符0-9的ASCII码值为48-57, 字母A-Z的ASCII码值为65-90,字母a-z的ASCII码值为97-122。他们有以下规律:
1.字母或数字是连续的,其ASCII码值也是连续。
2.字母可以用ASCII码值来计算他在26个英文字母表中位置t。
3.若已知字母在英文字母表中位置t,即该字母距离字母"A"或 "a"的距离为t-1,输出该字母可以用Chr(Asc("A")+t-1)或Chr(Asc("a")+t-1)。【例3】 编写VB程序,实现如下功能:在文本框Text1中输入一个字母,单击“产生回文字母”按钮Command1,在标签Label2中显示相应的回文字符串。例如:若输入的是大写字母“G”,则产生从“A”开始的回文字母“ABCDEFGFEDCBA”;若输入的是小写字母“g”,则产生从“a”开始的回文字母“abcdefgfedcba”。运行效果如图所示。(1)观察运行界面,选项中没有用到的控件是______(选填:)。(2)请完善下列程序代码:
Private Sub Command1_Click()
Dim n As Integer, i As Integer, init As Integer, m As String, s As String
m = Text1.Text: s = " "If m >= "a" And m <= "z" Then init = Asc("a")
If m >= "A" And m <= "Z" Then init = Asc("A")
n = Asc(m) - init + 1
For i = 1 To ____①____
If i <= n Then
s = s + Chr(Asc(m) + i - n)
Else
s = s +____②____
End If
Next i
Label2.Caption = s
End Sub(3)运行该程序时,如果在文本框 Text1 中输入数字“9”,则输出的结果会不会是“0123456789876543210”________。(选填:会/不会)
变量n表示输入的字母在字母表中位置,且中间的字母只输出一次,因此总共输出2*n-1个字母。变量i与输出的字母在字母表中位置关系对应表如下表所示:因此当i从1到n时,应输出26个英文字母表中第1至n位置上字母,对应的ASCII码值为i+init-1,因此可以输出Chr(i+init-1),也可以用Asc(m)来表示。方法为:Asc(m)的值为n+init-1,即init= Asc(m)-n+1,代入可得Chr(Asc(m)+i-n)。当i从n+1到2*n-1时,可以观察到该字母在字母表中位置t与i的和是一个定值2*n,因此t=2*n-i,输出该字母的表达式为Chr(init+t-1),即Chr(init+2*n-i-1)或Chr(Asc(m)+n-i)。当输入数字时,无法取得init的值,因此不能输出。答案 (1)D (2)①2 * n-1  ②Chr(init+2 *n-i-1)或Chr(Asc(m)+n-i) (3)不会【变式训练3】 李雷收到了朋友发给他的一封奇怪的邮件,里面有段内容是由一些数字和符号组成,信上面说了,这段内容是加密后的内容,并给出了具体加密方法(假定原文的英文字母都是大写的),具体方法如下:
①“A”变为一个1到100内的随机数*27+1,“B”变为一个1到100内的随机数*27+2,……,
②每个字母变为数字后会加上一个“-”用来分割数字;
③其他空格和标点字符都按原来的表示。(1)根据描述,若密文为“1905-1442-”,则表示的是:____________。
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, yw As String, ch As String
Dim value As Integer ′用于存储某字母在密文中对应数值的临时变量
s = Text1.Text
value = 0: yw = " "For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "0" And ch <= "9" Then
value = ____①____
ElseIf ch = "-" Then
yw = yw +____②____
value = 0
Else
yw = yw + ch End If
Next i
Text2.Text = yw
End Sub1905和1442除27的余数分别为15和11,对应字母表中位置为OK。Value表示取出的数字串,每取出一个数字,前面的数字后添加一个0,再加上新读出的数字。该数字Mod 27后,表示该字母的位置。
答案 (1)OK (2)①value * 10 + Val(ch)
②Chr(Asc( “A”) + value Mod 27 - 1)解析 根据加密规则,“A”变为一个1到100内的随机数*27+1,余数即在字母表中位置。【变式训练4】 小迪同学在某网站注册时需要预设登录密码,预设密码需要符合以下2点:①密码不少于6位字符组成; ②必须同时包含4种字符,分别为大写英文字母、小写英文字母、阿拉伯数字和标点符号。据此,小迪同学编写了生成密码的VB程序,程序运行界面如下图a所示,当点击“生成密码”按钮(Command1)时,在文本框Text1中输出符合要求的密码字符。(1)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim t As Integer, n As Integer, pwd As String, flag As Boolean
Dim a(1 To 4) As Integer ′a(i)=1代表第i种字符存在,a(i)=0代表第i种字符还不存在
flag = False: n = 0: pwd = " ": s = 0
Randomize
Do While Not flag___①___′ 随机生成33-126的ASCII码值
If t >= 97 And t <= 122 Then
a(1) = 1
ElseIf t >= 65 And t <= 90 Then
a(2) = 1
ElseIf t >= 48 And t <= 57 Then
a(3) = 1
Else
a(4) = 1
End If
pwd =____②____ s = a(1) + a(2) + a(3) + a(4)
n = n + 1
If ____③______ Then flag = True
Loop
Text1.Text = pwd
End Sub
(2)以下字符串不可能是上述程序生成的密码的一项是______。(填数字序号)
①zX}rb!T&}d2 ②[26wv9,Q ③$14G/uv
④H2?N64AJa解析 t表示随机生成33-126的ASCII码值,pwd表示相对应的字母,应分别将他们连接起来。flag是标记,一旦密码的长度大于等于6或者有4种类型,值为True,不再循环。产生密码$14G/uv时,当产生字母u时,已经满足长度为6,类型有4种,flag的值为True,退出循环,因此不可能再产生字母v。
答案 (1)①t =Int(Rnd() * 94 + 33) ②pwd + Chr(t) ③n >= 6 And s = 4  (2)③
同课章节目录