题库 高中信息

题干

小明最近学习了一种新的排序方法,其基本思想是:经过i-1遍加工后,a(1)到a(i-1)已经有序,第i遍加工时将a(i)插入到位置1到位置i之间的适当位置p(包含位置1和位置i),原来位置p及p后的元素一一向右移动一个位置(若插入在位置i,则不需要移动其他元素),使得a(1)到a(i)依然有序,依此重复下去,直到n个数全部排序完成,VB程序段如下:
For i=2 To n
k=a(i):j=j-1
Do While k<a(i)
a(j+1)=a(j)
j=j-1
If j=0 Then Exit Do
Loop

Next i
要实现上述排序算法,方框内VB语句应为(   )
A.a(j)=kB.a(j+1)=kC.a(i)=kD.a(j-1)=k
上一题 下一题 0.99难度 选择题 更新时间:2020-03-31 09:11:32

答案(点此获取答案解析)

同类题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 个区间,数组各元素为“12,44,34,45,66,50,45,70”,第 1 段“重叠块”中的元素个数为 3 个,第 1 个区间为10,50,则第 2 个区间可能为______________(单选,填字母
A.30,80 /B.9,45 /C.60,90)。
(2)小李根据上述描述,设计了一个统计各段“非重叠块”“重叠块”和剩余段中元素个数的算法。算法的 VB 程序如下,请在划线处填入合适的代码。
Const n = 18: m = 6
Dim a(1 To n) As Integer
Dim b(1 To 2 ∗ 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(2 m)存储
第 m 段"重叠块"的元素个数(值为 0)
'c(2 m+1)存储剩余段元素个数
Private Sub Command1_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 i <= n And p <= m
If IsIn(i, p) Then
If_____ Then
LL = LL + 1
Else
L = L + LL + 1
LL = 0
End If
i = i + 1
Else
c(2 ∗ p - 1) = L
c(2 ∗ p) = LL
L = 0
_____
p = p + 1
End If
Loop
If i <= n Then
_______
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 a(i) >= b(2 ∗ p - 1) And a(i) <= b(2 ∗ p)
And p <= m Then
IsIn = True
Else
IsIn = False
End If
End Function

同类题3

小蓝设计了一个数字字符串的简单加密解密小程序,该程序的加密规则是计算连续升序子串的长度,将该长度字符插入到相应子串后面。例如:

输入2350123456783,先将字符串拆成三段,分别是235,012345678,3要求每一段必须严格有序,如果无法实现连续升序,则单独作为一个拆分。
原字符串
235
012345678
3
连续升序字符数
    3
9
1
密文
235
3
012345678
9
3
1
 
在文本框Text1中输入原文,单击“加密”按钮,可在文本框Text2中输出密文。
在文本框Text2中输入密文,单击“解密”按钮,可在文本框Text3中输出原文。
(1)程序运行时,在文本框Text2中输入“1233012345678910”,则在Text3中显示的内容为__________________ 。
(2)实现上述功能的VB代码段如下,请在划线处填上合适代码。
Private Sub Command1_Click()'加密过程
Dim a(1 To 100) As String
Dim s1, s2 As String: Dim tmp As Integer
tmp = 1: s1 = Text1.Text
For i = 1 To Len(s1)
a(i) = Mid(s1, i, 1)
Next i
s2 = a(1)
For i = 2 To Len(s1)
If _________________ Then   

s2 = s2 + a(i): tmp = tmp + 1

Else

s2 = s2 + LTrim(Str(tmp))  'LTrim()函数用以移除左边的符号位空字符

s2 = s2 + a(i)

_________________

End If
Next i
s2 = s2 + LTrim(Str(tmp)) : Text2.Text = s2
End Sub
Private Sub Command2_Click()'解密过程
Dim b(0 To 100) As String
Dim k As String, t As Integer, n As Integer
Dim s As String, s3 As String, j As Integer
s = Text2.Text: n = Len(s)
For i = 1 To n
b(i) = Mid(s, i, 1)
Next i
t = n - 1: k = Val(b(n))
Do While t > 0
If k <> 0 Then

For j = 1 To k

__________________
t = t - 1

Next j

k = Val(b(t))

t = t - 1   

Else

k = 10

t = t - 1

  End If
Loop
Text3.Text = s3
End Sub