字符串处理及排序 练习-浙江省2023届高三信息技术一轮复习VB专题

文档属性

名称 字符串处理及排序 练习-浙江省2023届高三信息技术一轮复习VB专题
格式 docx
文件大小 1.6MB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2022-07-04 22:06:33

图片预览

文档简介

※ 练习
1、(2021宁波模拟15)一个含有n个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了[1,n-1]之间的所有整数,则称之为一组“完美跳数”。小余制作了验证完美跳数的VB程序,功能如下:在文本框Text1中输入一组以逗号分隔且以逗号结尾的整数数组,单击“验证”按钮Command1,在标签Labe11中显示验证结果,运行界面如图所示。
(1)观察程序界面,具有Caption属性的对象有 个。(填个数)
Private Sub Command1 Click()
Dim n As Integer,i As Integer,j As Integer,s As String,chr As String,temp As String
Dim a(1 To 100)As Integer,b(1 To 100)As Integer
s=Text1.Text
i=1:n=0
Do While i〈=Len(s)
ch=Mid(s,i,1)
If ch〉="0"And ch〈="9"Then
temp=temp+ch
Else
n=n+1

temp=""
End If
i=i+1
Loop
For i=2 To n

Next i
For i=1 To n-2
For j= n To i+1 Step-1
If b(j)〈b(j-1)Then t=b(j):b(j)=b(j-1):b(j-1)=t
Next j
Next i
For i=1 To n-1
If b(i)< > i Then Exit For
Next i
If i=n Then Labell.Caption="完美跳数"Else Labe11.Caption="非完美跳数"
End Sub
(2)请在上述程序的划线处填上合适的代码。
(3)上述程序加框处代码有误,请改正。
2、(2021嘉兴模拟15)仓库中有一批不同款式的衣服,相同款式的衣服具有相同的代号,现要统计每个款式的数量,并按数量从多到少的排序。小明编写了一个VB程序完成该统计。程序运行时,在文本框Text1输入每件衣服的代号n(1≤n≤100),代号之间用逗号相隔,衣服的总数量不超过100件。单击按钮Command1后,在列表框List1中按每个款式的库存数量从大到小输出。程序运行界面如第15题图所示。
(1)代码“Private Sub Command1_Click()”的Click是 (单选,填字母:A.对象名/B.属性名/C.事件名)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)已知程序中加框处代码有错误,请改正。
Private Sub Command1_Click()
Dims As String,ch As String,p As Integer,t As Integer
Dim a(1 To max)As Integer,b(1 To max)As Integer,c(1 To max)As Integer
’数组a用于存储输入的数据,数组b用于存储每款衣服的数量,数组c用于存储衣服的代号;数组a和b的初值均为0。
s=Text1. Text:p=1 :max=100
For i=1 To max
c(i)=i
Next i
For i=1 To Len(s)
① ①
If ch>="0"And ch〈="9"Then
a(p)=a(p)*10+Val(ch)
Else

End If
Next i
For i=1To p’统计各款衣服的数量
b(i)=b(i)+1
Next i
For i=1 To max-1’排序
k=i
For j=i+1 To max
If ③ Then k=j
Next j
t=b(i):b(i)=b(k):b(k)=t
t=c(i):c(i)=c(k):c(k)=t
Next i
For i=1 To max
If b(i)>0 Then Listl.AddItem Str(c(i))+""+Str(b(i))
Next i
End Sub
3、(2021杭州模拟15) “2021年我要学好Python!”小明这样想着。虽然一年里只要不出去旅游的日子都可以学习,但是对算法学习而言,连续不间断的效果更好,小明希望选一个最长的时间段学习Python。输入某些特定日期(X月X日)作为计划好的外出旅游时间,算出2021年最长的学习天数。编写VB程序,实现上述功能。运行程序,在文本框Textl中输入计划出去旅游的时间,用逗号间隔,并以逗号结尾,输入月份和日期。如“3,1,2,19,”表示3月1日和2月19日要外出旅游不能学习。单击“统计”按钮Command1,输出最长学习天数。程序运行界面如第15题图所示。
请回答下列问题:
(1)窗体中至少包含 个对象(不含窗体)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Dim yf(1To 12)As Integer每月天数
Private Sub For m Load)
“初始化1-12月天数,依次存储在数组yf(1)-yf(12)中,代码略
End Sub
Private Sub Command1Click)
Dim k As Integer,n As Integer,i As Integer,jAs Integer
Dim t As Integer,z As Integer,qt As Integer,maxk As Integer
Dim y(1To 365)As Integer, r(1To 365)As Integer'y数组存储月,r数组存储日
Dim sum(0 To 12)As Integer
Const yearn=365
k=0
For i=1 To Len(Text1.Text)
c=Mid(Text1.Text,i,1)
Ifc=","Then
k=k+1
Ifk Mod2=1Then y((k+1)\2)=t Else r(k+1)\2)=t
t=0.
Else
t= ①
End If
Next i
n=k\2
For i=1To n-1以月为主关键字、日为次关键字升序排序
For j=1To n-i
If ② then
t=y(j):y(j)=y(j+1):y(j+1)=t
t=r(j):r(j)=r(j+1):rj+1)=t
End If
Next j
Next i
sum(0)=0
For i=1To 12
sum(i)=sum(i-1)+yf(i)
Next i
maxk=0:t=0
For i=1To n
z=t
t=r(i)+ sum(y(i))(3)改错
Ifi>1 Then qt=t-z-1Else qt=t-1
If qt>maxk Then maxk=qt ‘记录长时间段
Next i
qt= ③
If qt>maxk Then maxk=qt
Label3.Caption="最长学习天数为:"+Str(maxk)+“天”
End Sub
4、(2021台州模拟16)点阵方式是汉字输出显示和打印的一种字形编码。某字库描述汉字字形的点阵规模为8x8,每个点用1个二进制位表示,“0”表示白点,“1”表示黑点,且左上角(第1行第1列)的点是白点。汉字“中”的点阵字形和对应编码如第16题图a所示。
图a 图b
现对该汉字的编码进行压缩:从第1行第1列开始,从左到右、由上至下,对连续的“0”和“1”进行压缩,得到一组数值,即为对应汉字的压缩码。如,“中”的压缩码为“3,1,4,7,1,1,2,1,2,1,1,1,2,1,2,1,1,7,1,1,2,1,2,1,4,1,7,1,4”,其含义为:第一个数“3”,表示连续3个0;第二个数“1”,表示连续1个1;第三个数“4”,表示连续4个0;第四个数“”,表示连续7个1;..(以此类推,依次表示0和1的交替个数)。小王编写了一个汉字压缩码的解压缩程序,功能如下:在文本框Textl中输入以逗号分隔的压缩码,单击“解压缩”按钮Commandl,程序对压缩码进行解压缩处理,将编码转换成字形显示在列表框Listl中,并计算白点、黑点数,显示在标签Labell中。程序运行界面如第16题图b所示。
(1)若某汉字压缩码为“3,1,7,1,7,4,4,1,7,,1,7,1,7,1,4,8”,则该字形中黑点的个数是 。
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Const n=8
Dim a(l To n*n)As Integer
Private Sub Command1_ClickO
Dim s As String,c As String,1ine As String
Dim i As Integer,j As Integer,k As Integer
Dim total As Integer,flag As Integer,sum(0 To 1)As Integer
s=Text1.Text +","
j=1:k=0
For i=1 To Len(s)
c=Mid(s,i,1)
If c=","Then
k=k+1
a(k)=Val( ① )
j=i+1
End If
Next i
sum(0)=0:sum(1)=0
total=0:line=""
flag=0 ’左上角编码为0,即白点
For i=1 To k
For j=1 To a(i)
total=total+1
1ine=line+ ②
If total Mod n=0 Then
List1.AddItem line
1ine=""
End If
Nextj

flag=1-flag
Next i
Label1.Caption="白点数:"+Str(sum(0))+"黑点数:"+Str(sum(1))
End Sub
Function convert(x As Integer)As String
‘将编码0、1转换成白点和黑点;代码略
End Function
5、(2021丽水模拟16)将某字符串按“V”的形状进行变换,其变换方法描述如下:
(1)将字符串中的字母转换为大写字母后按升序进行排序;
(2)根据给定的行数,将字符串从上往下、从左到右进行“V”字形排列;
(3)从左往右逐行读取字符串并输出;例如:输入字符串为:“NoThinglslmpossible”,经过排序得到字符串:“BEGHIIIILMNNOOPSSST”,行数输入为3时,排列如下:
经过变换后得到新字符串为:“BILOSEHIIMNOSSGINPT”。编写VB程序,实现如下功能:在文本框Textl中输入行数,在文本框Text2中输入字符串(限定字母),单击“变换”按钮Command1,在标签Label3中输出变换结果。程序运行效果如图所示。
(1)若小明在文本框Textl中输入3,在文本框Text2中输入的的字符串为“NOTHING”,则在标签框Label3中输出的结果为 。
(2)实现该功能的VB程序如下,请在划线处填入合适的代码。
6、(2021金华十校模拟16)删数问题。输入一个正整数s,去掉其中任意k个数字后,剩下的数字按原左右次序将组成一个新的整数,设计算法使得剩下数字组成的新数最小。
为了实现上述要求,小明按“每次删除左侧第一个升序序列的末位数字”的思想,编写了一个VB程序,程序的运行界面如下所示,在文本框Text1中输入正整数s,在文本框Text2中输入删除的数字个数k,单击按钮Command1后,在标签Label3上显示结果,显示结果要求删除前导零,若删完后结果为0,则输出0。
实现上述功能的程序如下:
Dim a(1To 1000)As Integer
Private Sub Command1_Click()
Dims As String,k As Integer,n As Integer
Dim i As Integer,j As Integer,x As Integer
Dim left As Integer,flag as Boolean
s=Text1.Text
k=Val(Text2.Text)
n=Len(s)
If k > n Then
Label3.Caption=”输入的数据不足"+Str(k)+“位”
Exit Sub
End If
For i=1 To n
a(i)=Val(Mid(s,i,1))
Next i
Do While k<>0
flag=True
For j=1To n-1
If ① Then
Call ss(j,n)删除数组中第j位,后续数据前移一位
n=n-1:k=k-1
flag=False
Exit For 退出for循环
End If
Next j
If flag Then
n=n-k:k=0
End If
Loop
,在剩余的n个数字中,去除多余额前导零,如:00010,只输出10
i=1:left=1
Do While ②
left=left+1
i=i+1
Loop
Label3.Caption=""
For i=left To n
Label3.Caption=Label3.Caption +Str(a(i))
Next i
If n=0 Then Label3.Caption="0"
End Sub
’数组a中,删除head位置的数据,后续数据前移1位
Sub ss(head As Integer,tail As Integer)
For i=head To tail-1
a(i+1)=a(i)
Next i
End Sub
(1)若要清空label1中内容,能实现该功能的语句是 (单选,填字母:A.Labell.Label=""/B.Labell.Caption=“"/C.Labell.Clear)。
(2)请在划线处填入合适的代码。
(3)加框处代码有错,请改正。
7、(2021绍兴模拟15)为了把工厂中高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂,它首先在参加排序的所有物品中同时选出高度最低和最高的物品,分别交换到左、右边界,再缩小左、右边界,然后在余下的物品中采用同样的方法排序,直到所有物品成为一个有序的序列。编写VB程序,实现上述排序功能:运行程序,单击“读取”按钮Command1,在列表框Listl中显示待排序的物品,然后单击“排序”按钮Command2,在列表框List2中显示排序好的物品。程序运行界面如图所示。
请回答下列问题:
若要程序运行时,窗体For m1的标题显示为“物品排序”,则For mLoad)事件中应添加的代码是
(单选,填字母:A.For ml.Name="物品排序"/B.For ml.Text="物品排序"/C.For ml.Caption="物品排序")。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Const m=9 'm表示物品个数
Dim id(m)As Integer,gd(m)As Integer
Private Sub Command1 Click)
读取物品的信息依次存入数组id,gd中,并在列表框List1中显示,代码略
End Sub
Private Sub Command2_Click)
Dim LAs Integer,R As Integer,t As integer
Dim imin As Integer,imax As Integer
L=1:R=m分别指向待排序区间的左右边界
Do While Limin=L

For i=L+1To R
If gd(i)If gd(i)Next i
t=id(imin):id(imin)=id(L):id(L)=t
t=gd(imin):gd(imin)=gd(L):gd(L)=t
If imax=L Then ② 考虑最大值恰好在L位置的情形
t=id(imax):id(imax)=id(R):id(R)=t
t=gd(imax):gd(imax)=gd(R):gd(R)=t
L=L+1

Loop
For i=1To m
List2.Addltem Str(id(i))+""+Str(gd(i))
Next i
End Sub
8、(2021温州十校模拟15)为方便习题讲解,需对某次考试中选择题得分率数据进行统计分析,找出选择题得分率最低的前m项对应的题号及考点(若有与第m项得分率相同的,一并选取)。
编写VB程序,实现上述功能。运行程序时,先读取每个选择题的题号、得分率和考点,显示在列表框List1中。在文本框Text1中输入得分率最低的前m项值,单击“统计”按钮,按照得分率从小到大升序排序,并在列表框List2中输出得分率最低前m项的题号、得分率及考点。程序运行界面如第15题图所示。
请回答下列问题:
(1)“统计”按钮的事件过程名是 。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码神墙有错,请改正。
Dim n As Integer
Dim th(0 To 100)As Integer,df(0 To 100)As Single,kd(1 To 100)As String
Private Sub For m_Load()
’读取题号、得分率和考点分别存入数组th、df和kd数组,在列表框List1中显示,代码略
’选择题的个数存入变量n,代码略
End Sub
Function dq(x As String,k As Integer)As String
’固定数据的位数
dq=x
Do While ①
dq=dq+" "
Loop
End Function
Private Sub Select_Click()
Dim m As Integer,i As Integer,j As Integer,p As Integer,t As Integer,mm As Integer
List2.Clear
m=Val(Text1.Text)
i=1
Do While i<=n-1
p=i
For j=i+1 To n
If ② Thenp=j
Next j
If p< >i Then
t=th(i):th(i)=th(p):th(p)=t
End If
If i>m Or df(i)< >df(i-1) Then Exit Do’改错
i=i+1
Loop

For i=1 To mm
List2.AddItem dq(Str(th(i)),6)+dq(Str(df(th(i))),8)+dq(kd(th(i)),12)
Next i
End Sub
9、(2021衢州模拟15)某市要组织高中生参加竞技比赛。现要求在报名的n名学生中挑选出m名身高大于等于175cm的学生,被挑选出的学生两两组队,且队内两名成员的体重之和不能超过175公斤。
编写VB程序,实现上述挑选、组队功能。运行程序,在列表框List1中显示m名身高大于等于175cm的学生信息,且根据体重数值降序排序。单击“组队”按钮,在符合条件的情况下尽可能多的两两组队,并将组队结果显示在列表框List2中。程序运行界面如第15题图所示,实现上述功能的VB程序如下。
请回答下列问题:
(1)观察代码可知,该程序“组队”按钮的对象名为 。
(2)请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Const n=20
Dim id(1 To 20)As Integer,h(1 To 20)As Integer,w(1 To 20)As Integer ,mAs Integer
Private Sub For m Load()
’从数据库中读取n名学生的编号、身高和体重分别存储在数组id、h和w中,代码略。
m=0’存储身高≥175cm的学生总数
For i=1 To n
k=i
For j=i+1 To n
If h(j)〉=175 Then
If w(j)〉w(k) Then k=j‘(3)
End If
Next j
If k< > i Then
t=id(i):id(i)=id(k):id(k)=t
t=h(i):h(i)=h(k):h(k)=t
t=w(i):w(i)=w(k):w(k)=t
End If
If h(i)<175 Then
m=i-1
Exit For ’结束挑选
E1se

End If
List1.AddItem str(id(i))+""+Str(h(i))+""+Str(w(i))
Next i
End Sub
Private Sub Com_Click()
L=1:R=m
Do While LIf ② Then
List2.AddItem Str(id(L))+"号和"+Str(id(R))+"号组队”
L=L+1:R=R-1
Else

End If
Loop
End Sub
10、 (2021慈溪模拟15)为了提高群众的安全意识,需要从各个学校挑选志愿者做好防诈骗宣传。组委会从数据库中看到k(1〈=k<=11)个不同的学校共上报了n(k<=n〈=100)位志愿者。由于人数太多,为了快速决定志愿者人选,组委会决定从中选择一段连续的区间,这个区间内每个报名的学校至少包含1名志愿者,同时要求满足条件的区间长度最小,输出区间内的志愿者名单。
例如,有10条报名数据,来自5个不同的学校,学校编码依次是2,1,2,4,3,3,5,5,3,5,则包
含5个学校的最短区间是从第2个到第7个,并从List2中显示所选区间中的志愿者姓名,程序界面如图所示。
(1)要使窗体For ml标题显示“选取志愿者”,则需修改该窗体的 (单选,填字母:A.Text/B.Caption/C.Name(名称))属性。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Dim bm(1 To 100)As Integer,k As Integer,xm(1 To 100)As String,n As Integer
Private Sub For m Load()
‘本过程从数据库中读入指定数据到数组bm、xm中,并在List1中显示
‘获取k,表示不同学校数;n表示报名记录总数代码略
End Sub
Private Sub Command1_Click()
Dim m As Integer
i=k:j=n
Do While i<=j
m= ①
If judge(m)< > 0 Then
j=m-1
ans=m: start=judge(m)
Else
i=m+1
End If
Loop
For i=1 To ans
List2. AddItem xm(i)
Next i
Labe11.Caption="共选出志愿者"+CStr(ans)+"人"
End Sub
Function judge(m As Integer)As Integer ‘judge函数用于返回区间起始位置
Dim f(1 To 11)As Integer'f(i)表示i学校是否包含在区间
Dim t As Integer
judge=0
For i=1To n-m+1’枚举以i为起点的区间内是否包含各个学校
t=0
For j=i To i+m-1
If ② Thent=t+1
f(bm(j))=1
Next j
Ift=k Then ③ :Exit Function
For j=1 To k
f(j)=0
Next j
Next i
End Function
11、(2021温州新力量联盟模拟15)某单位招聘人员,根据应聘人员的笔试成绩从高到低取一定比例的人员进入面试,若按比例计算出的人数为小数,则直接取整(不四舍五入),若进入面试的最后1名有多个同分人员,同分人员也进入面试。程序运行界面如下,请完成后面的小题:
(1)程序运行时自动清空文本框Text1中显示的内容,应该在 事件处过程执行相关命令
A.For m load
B.Textl Change
C.Commandl Click
(2)实现上述功能的VB程序如下,
请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正
’人员编号和笔试成绩分别存储到
数组变量id和score中,应聘总人数存储在变量n中面试比例在文本框Text1中输入,所输入比例值必须使面试人数大于1且小于n,代码略。
Private Sub Command1_Click()
Dim i As Integer,j As Integer,st As String,t As Integer
For i=1To n-1’按笔试成绩从高到低排序
k=i
For j=i+1 To n
If ① Thenk=j
Next j
If k< >i Then
st=id(k):id(k)=id(i):id(i)=st
t=score(k):score(k)=score(i):score(i)=t
End If
Next i
Num= ②
j=num+1
Do While j〈=n
If score(j)=score(j+1) Then Exit Do
j=j+1
Loop
For k= ③
List2.AddItem Str(k)+""+id(k)+""+Str(score(k))
Next k
End Sub
12、(2021湖州模拟15)某夏令营按两门考试科目总分从高分到低分依次录取学生。如果录取学生的最后一名出现有总分并列的情况,则并列的学生全部录取。编写VB程序实现以上功能,程序运行时在列表框List1中显示全部学生的信息,在文本框Text1中输入计划招生人数,点击“录取”按钮Command1后,在列表框List2中输出录取的学生信息,并在标签Label1上显示最终录取的人数。程序运行界面如第15题图所示。
请回答下列问题:
(1)如第15题图所示,按钮Command1上显示的“录取”是该按钮对象的(单选,填字母:A.对象名/B.属性名/C.方法名/D.属性值)
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Const num=15
Dim xm(num)As String,kml(num)As Integer,km2(num)As Integer
Private Sub For m Load()
’读取num个学生的姓名、科目1、科目2的成绩,分别存储到数组xm、kml、km2。
’在列表框List1中输出所有学生的姓名与成绩,代码略。
End Sub
Private Sub Command1_Click()
Dim rs As Integer,count As Integer,flag As Boolean
Dim i As Integer,j As Integer,t As Integer,tmp As String
rs=Val(Text1.Text)
List2.AddItem"姓名科目1科目2"
count=0:i=1

Do While i〈=num And flag
For j=num-1 To i Step-1
If ② Then
tmp=xm(j):xm(j)=xm(j+1):xm(j+1)=tmp
t=kml(j):kml(j)=kml(j+1):kml(j+1)=t
t=km2(j):km2(j)=km2(j+1):km2(j+1)=t
End If
Next j
flag=False
If i<=num Or kml(i)+km2(i)=kml(i-1)+km2(i-1)Then
count=i:flag=True
End If
i=i+1
Loop
For i=1 To count
List2.AddItem xm(i)+""+Str(kml(i))+""+Str(km2(i))
Next i
Labe11.Caption="共录取学生"+ ③ +"人"
End Sub
1
同课章节目录