相关试卷
-
1、为分析数组a中各元素依次变化的情况,进行如下定义:
1)变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。
2)波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。
3)对称波峰:上升段与下降段个数相同的波峰称为对称波峰。下图为一组数据的变化段及波峰示意图。
现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计如下VB程序。请回答下列问题:
(1)、数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为。(2)、请在划线处填入合适的代码。Const n=20
Dim a(1 To n)As Integer
Private Sub Form_Load()
'读取数据,并存储到数组a中,代码略
End Sub
Private Sub Commandl_Click()
Dim flag As Integer '存储变化段的状态:1表示升,-1表示降,0表示平
Dim count As Integer '存储对称波峰的个数
Dim steps As Integer
Dim i As Integer
flag=0:steps=0:count=0
For i= ① To n
If a(i) >a(i-1) Then
If IsSymPeak(flag, steps)Then count=count+l
If flag=0 Or flag=-1 Then
②
Else
steps=steps+ 1
End If
flag=1
ElseIf a(i)=a(i-1) Then
If IsSymPeak(flag, steps)Then count=count+l
steps=0
flag=0
Else
steps=steps-1
flag=-1
End If
Next i
If IsSymPeak(flag,steps)Then count=count+1
Text1.Text=Str(count)
End Sub
Function IsSymPeak(flag As Integer,steps As Integer)
As Boolean
If ③ Then
IsSymPeak =True
Else
IsSymPeak=False
End If
End Function
①②③
-
2、给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将数组依次分割成m+1个段。具体分割方法如下:
●第1段是从数组首个元素开始,元素值都属于第1区间的最长连续元素段,如果首个元素不属于第1区间,则第1段元素个数为0;
●第1段分割后的剩余元素,用同样的方法来依次分割第2段、第3段、…、第m段;
●第m段分割后的剩余元素分割到第m+1段(剩余段)。若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第p段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分割到m段“非重叠块”,第m段“重叠块”的元素个数为0。一个数组分段示例如图。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续3个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含33,58,46,第3段“重叠块”包含55,62,69。
(1)、给定2个区间依次为[10,50],[30,80],数组各元素为“12,44,34,45,66,50,45,70”,则第1段“重叠块”中的元素个数为。(2)、小李根据上述描述,设计了一个统计各段“非重叠块”“重叠块”和剩余段中元素个数的算法。算法的VB程序如下,请在划线处填入合适的代码。Const n=18:m=6
Dim a(1To n)As Integer
Dim b(1To2*m)As Integer
'b(1),b(2)为第1区间的下限和上限,b(3)、b(4)为第2区间的下限和上限,…
Dim c(1 To 2 * m+1)As Integer
'数组c用于保存统计结果:
'c(1)、c(2)分别存储第1段“非重叠块”和“重叠块”的元素个数,
'c(3)、c(4)分别存储第2段“非重叠块”和“重叠块”的元素个数,…
'c(2*m-1)存储第m段“非重叠块”元素个数,c(2m)存储第m段“重叠块”的元素个数(值为0)
'c(2*m+1)存储剩余段元素个数
Private Sub Command 1_Click()
Dim i As Integer, p As Integer, L As Integer, LL As Integer
'读取n个数据并保存在数组a中,代码略
'读取m个区间的下限和上限并保存在数组b中,代码略
For i = 1 To 2 * m + 1
c(i)= 0
Next i
i= 1:p = 1
L= 0:LL = 0
Do While ①
If IsIn(i, p)Then
If IsIn(i,p+1)Then
LL = LL+1
Else
②
LL = 0
End If
i= i+1
Else
c(2 * p - 1)= L
c(2 * p)= LL
L = 0
LL=0
p = p + 1
End If
Loop
If i <= n Then
c(2 * p-1)= n-i+1
Else
c(2* p - 1)= L
c(2* p)=LL
End If
'输出统计结果,代码略
End Sub
'函数IsIn用来判断a(i)值是否属于第p区间
Function IsIn(i As Integer,p As Integer)As Boolean
If p>m Then
IsIn=False
Else
If__③__Then IsIn=True Else IsIn=False
End If
End Function
①②③
-
3、编写“字符串生成”程序,实现如下功能:在文本框Text1中(字符位置)输入多个正整数(以“,”为分隔符和结束符),单击“生成”按钮Command1,程序以这些整数为位置信息,依次从文本框Text2中(字典内容)提取字符并连接成字符串,最后将字符串显示在标签Label1中(生成内容)。程序运行界面如图所示。
(1)、要使程序运行时,窗体Form1标题显示“字符串生成”,可在Form_Load事件过程中添加语句(单选,填字母:A .Form 1="字符串生成"/ B .Form 1.Text="字符串生成"/C .Form 1.Caption="字符串生成").(2)、实现上述功能的VB程序如下,请在划线处填入合适的代码。Private Sub Command 1_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(Text 1.Text)
c=Mid(Text 1.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中显示的内容是。 -
4、某种编码以4位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制码转换为十进制数的值。具体功能如下:在文本框Text1中输入连续多组编码,单击“翻译”按钮Command1,结果显示在列表框List1中。程序运行界面如图所示。
(1)、要使程序运行时,文本框 Text 1 的 Width 属性值为 2018,可在Form_Load 事件过程中添加语句(单选,填字母:A .Width=2018/B .Text 1.Width=2018/C .Width.Text 1=2018).(2)、实现上述功能的 VB 程序如下,请在划线处填入合适的代码。Private Sub Commandl_Click()
Dim s As String,c As String,d As String
Dim n As Integer,bl AsInteger,b2 As Integer, v As
Integer, i As Integer
s = Text1.Text:n = Len(s):i= l
Do While i <=n
c = Mid(s,i,2)
If c = "00" Then
d = "东"
ElseIf c= "01" Then
d = "南"
ElseIf c= "10" Then
d= "西"
Else
d = "北"
End If
bl = Val(Mid(s,i +2,1))
b2 = Val(Mid(s,i+3,1))
v= ①
List1.Addltem d + " "+ Str(v)
②
Loop
End Sub
①②
(3)、若文本框Text1中输入的内容为“1111”,单击“翻译”按钮,列表框List1中显示的内容是。 -
5、在平面坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框Textl中依次输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮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 lnteger,k As Integer
Dim x1 As Single,yl 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))'提取坐标值,保存在变量ν中
j=i+1
lf ② 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为。 -
6、素数只能被1和它本身整除,不能被其他自然数整除。编写VB程序实现如下功能:单击“产生奇数并判断”按钮Command1,随机产生一个三位正奇数显示在文本框Text1中,并在文本框Text2中显示其是不是素数的判断结果。例如,当随机产生的三位正奇数为953时,程序运行界面如图a所示。
图a
图b
(1)、在设计程序界面时,应使用图b所示“控件工具箱”中的(填写相应编号)添加文本框Text1。(2)、实现上述功能的 VB 程序如下,请在划线处填写合适的代码。Private Sub Command 1_Click()
Dim n As Integer,i As Integer
Dim flag As Boolean '用于标记是不是素数
Randomize
n = Int( ① )*2-1
Text1.Text =Str(n)
flag=True '标记为素数
i = 3
Do While i<=n-1 And flag = True
If
Thenflag = False
End If
i = i + 2
Loop
If ② Then
Text 2.Text =Str(n)+"是素数"
Else
Text2.Text = Str(n)+"不是素数"
End If
End Sub
①②
(3)、以下选项中,与加框处表达式“n Modi=0”等价的是___(单选,填字母)。A、n\i = Int(n/i) B、n\i=n/i C、n Mod i=n\i -
7、在Visual Basic中,若x是3的倍数,则下列表达式值一定为真的是( )A、x/3=0 B、x*3=0 C、x Mod 3=0 D、3-x=0
-
8、下列属于Visual Basic实数常量的是( )A、0.618 B、1/2 C、True D、“2014-9-1”
-
9、下列VB表达式的值等于8的是( )A、Abs(-8.3) B、Int(Rnd*7+1) C、Len(“2+6”) D、18 Mod 10
-
10、小吴为了研究冒泡排序过程中数据的”移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前数据(存储在数组a中),在文本框'Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Labell中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。程序运行界面如图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Dim a(1 To 8)As Integer
Dim n As Integer
Private Sub Form_Load()
a(1)= 30:a(2)= 47:a(3)= 30:a(4)= 72
a(5)= 70:a(6)= 23:a(7)= 99:a(8)= 24
n = 8
For i = 1 To 8
List 1.Addltem a(i)
Next i
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer
Dim pos As Integer
Dim s As String
s = Text1.Text
pos = Val(Text1.Text)
For i = 1 To n- 1
For j = n To i+1 Step-1
If a(j)< a(j -1) Then
‘⑴a(j-1)= a(j)
a(j)= k
'如果pos位置的数据参与交换,则更新pos值,记录pos变化位置
If pos = j Then
pos = j-1
s = s + " →" + Str(pos)
‘⑵pos = j
s = s + " →" + Str(pos)
End If
End If
Next j
Next i
Label1.Caption = "位置变化情况:" +s
For i = 1 To n
List2.AddItem Str(a(i))
Next i
End Sub
⑴ ⑵
-
11、小李基于冒泡排序算法编写了一个VB程序,功能如下:在文本框Text1中显示排序前的数据,单击“排序”按钮Command1,在文本框Text2中显示剔除重复数据后的升序排序结果。程序运行界面如图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const n = 10
Dim a(1 To n)As Integer
Private Sub Commandl_Click()
Dim i As Integer,j As Integer,t As Integer
Dim bottom As Integer
'获取排序前数据依次存储在数组a中,并在文本框Text 1中显示。代码略
bottom = n
i = 1
Do While i<= bottom-1
For j = bottom To i + 1 Step -1
If
Then ‘⑴t = a(j): a(j)= a(j - 1):a(j - 1)= t
Elself a(j)= a(j - 1)Then '相邻两个数据相等,进行剔除处理
‘⑵bottom = bottom -1
End If
Next j
i = i+1
Loop
Text2.Text=""
For i = 1 To bottom
Text2.Text = Text2.Text+Str(a(i))
Next i
End Sub
⑴ ⑵
-
12、有一组正整数,要求仅对其中的素数进行升序排序。排序后素数在前,非素数在后。排序示例如下。
排序前
86
71
5
41
81
79
37
89
排序后
5
37
41
71
79
89
86
81
实现上述功能的VB代码如下,但加框处有错,请改正。
Const n=8
Dim a(1 To n)As Integer
Private Sub Commandl_Click()
Dim i As Integer,j As Integer,k As Integer,t As Integer
Dim flag As Boolean
'读取一组正整数,存储在数组a中,代码略
For i= 1 To n-1
'(1)If IsPrime(a(k))Then flag = True Else flag = False
For j = i + 1 To n
If IsPrime(a(j)) Then
If
Then '(2)k=j
flag = True
End If
End If
Next j
If k <> i Then
t=a(k):a(k)= a(i):a(i)= t
End If
If Not flag Then Exit For 'Exit For表示退出循环
Next i
'依次输出排序后的数据。代码略
End Sub
Function IsPrime(m As Integer)As Boolean
'本函数判断m是不是素数:是素数返回值为True,不是素数返回值为False
'代码略
End Function
⑴ ⑵
-
13、小明基于冒泡排序思想设计了一个改进的排序算法。该算法先用冒泡法将数组a中奇数位置的元素、偶数位置的元素分别进行排序,然后再进行后续处理。算法的VB程序段如下,但加框处代码有错,请改正。
'待排序数据存储在数组a中(a(1)~a(n)),要求升序排列
For i=1To(n-1)\2
For j=1To n-i*2
If a
Then '①t= a(j):a(j)= a(j+ 2):a(j+2)= t
End If
Next j
Next i
For i = 1 To n\2
j = 2 * i - 1
If a(j)> a(j+ 1)Then t = a(j):a(j)= a(j+1):a(j+1)= t
Next i
For i=
Step 2 '②t = a(i):j = i - 1
Do While t <a(j)
a(j+ 1)= a(j):j =j-1
Loop
a(j+ 1)= t
Next i
①②
-
14、小赵对选择排序算法进行了如下改进:在数组的所有元素中找出最小和最大数据的元素,然后将这两个元素分别与第一个和最后一个元素交换数据,在余下的元素中找出最小和最大数据的元素,分别与第二个和倒数第二个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序段如下:
p=l:q=10.
Do While p<q
iMin=p:iMax=p
For i=p+1 To q
If a(i)< a(iMin)Then iMin =i
If a(i)> a(iMax)Then iMax = i
Next i
t = a(iMin):a(iMin)= a(p):a(p)= t
t = a(iMax):a(iMax)= a(q):a(q)= t
p = p + 1
q=q-1
Loop
要使程序实现上述算法思想,则方框中的语句是( )
A、If iMax = pThen iMax =iMin B、If iMin = p Then iMin =iMax C、If iMax = p Then iMin =iMax D、If iMin = pThen iMax =iMin -
15、某数据压缩方法描述如下:
1)原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;
2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个为0,第2个为0;
3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个为0,第2个为重复数的个数,第3个为该数本身;根据上述压缩方法,对应的解压缩方法示例如图a所示。
图a
小明编写了一个解压缩VB程序,功能如下:窗体加载时,自动读取压缩数据,依次存储在数组元素a(1)、a(2)、a(3)……中,压缩数据的个数存储在变量n中,压缩数据显示在文本框Text1中。单击“解压缩”按钮Command1,程序对压缩数据依次进行解压缩处理,解压缩数据显示在文本框Text2中。程序运行界面如图b所示。
图b
(1)、如果压缩数据为“23,0,21,66,0,0,77,0,5,0”,则解压缩数据的个数是。(2)、实现上述功能的VB程序如下。请在划线处填入合适代码。Dim a(1 To 100)As Integer '存储压缩数据,最大处理个数为100
Dim b(1 To 1000)As Integer '存储解压缩数据,最大处理个数为1000
Dim n As Integer '存储压缩数据的个数
Private Sub Form_Load()
'压缩数据由上述压缩方法生成
'本过程用于读取压缩数据并存储在数组a中,压缩数据个数存储在变量n中
'代码略
End Sub
Private Sub Commandl_Click()
Dim pa As Integer '存储压缩数组当前处理位置
Dim pb As Integer '存储解压缩数组当前处理位置
Dim firstdata As Integer,count As Integer,iAs Integer
pa=1:pb=1
Do While pa<=n
firstdata=a(pa)
If firstdata <>0 Then '示例1)情况处理
b(pb)=firstdata
pa=pa+1:pb=pb+1
Else
count=a(pa+1)
If count=0 Then '示例2)情况处理
b(pb)=0
pa= ①_ _:pb=pb+1
Else '示例3)情况处理
For i=1 To count
②
Next i
pa=pa+3:pb=pb+count
End If
End If
Loop
Text2.Text=Str(b(1))
For i=2 To ③
Text2.Text=Text2.Text+“,”+Str(b(i))
Next i
End Sub
①②③
-
16、由数组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 Commandl_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 * m Then
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
①②③
-
17、有如下VB程序段:
n=0
For i=1 To Len(Text1.Text)
c=Mid(Text1.Text,i,1)
If c>=“0”And c<=“9”Then m=1 Else m=2
a(m)=a(m)+1
If a(m)=1 Then n=n+1
Next i
数组a中各元素的初始值都为0,文本框Textl中的内容为“Happy2017”。执行该程序段后,变量n的值为( )
A、1 B、2 C、4 D、9 -
18、有如下VB程序段:
a(1)=1:a(2)=1
b(1)=1:b(2)=2
For i=3 To 5
a(i)=a(i-1)+a(i-2)
b(i)=b(i-1)+a(i)
Next i
执行该程序段后,数组元素b(5)的值为( )
A、12 B、8 C、5 D、4 -
19、下列VB程序功能为:根据文本框Text1中各字符的大小关系,计算各字符升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~y(4)各元素的值分别为“4,1,2,3”。
s=Text1.Text
n=Len(s)
For i=1 To n
y(i)=1
Next i
For i=1 To
For j=
To nIf
Theny(j)=y(j)+1
Else
y(i)=y(i)+1
End If
Next j
Next i
上述程序段多个加框处的表达式分别为( )
A、(1)n (2)1 (3)Mid(s,j,1)>=Mid(s,i,1) B、(1)n (2)1 (3)Mid(s,j,1)>Mid(s,i,1) C、(1)n-1 (2)i+1 (3)Mid(s,j,1)>=Mid(s,i,1) D、(1)n-1 (2)i+1 (3)Mid(s,j,1)>Mid(s,i,1) -
20、有如下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数组各元素可能是( )
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