题库 高中信息

题干

某VB程序段如下:
s=0
For i=2 To 5
For j=i To 5
If j Mod i=0 Then
a(j)=a(j)+1
s=s+a(j)
End If
Next j
Next i
数组a的初值均为0,上面程序段执行后,最终变量s的值为( )
A.6B.5C.4D.3
上一题 下一题 0.99难度 选择题 更新时间:2019-05-07 09:15:25

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

同类题1

酒店房间管理:酒店房间(房间数小于10000)编号按1、2、3…连续编号,老板对于没有出租的房子使用如下的方法来登记管理。连续的空房间,登记第一间的编号和连续的空房间数,比如空房间1,2, 6,7,8,10,则登记3条记录,分别为(1  2),(6  3),(10  1),某旅客退房了,需要把这房子也登记上去,有四种情况需要处理:
1)上靠,例如退的房间号为3,则原来登记的3条记录变成(1  3),(6  3),(10  1);
2)下靠,例如退的房间号为5,则原来登记的3条记录变成(1  2),(5  4),(10  1);
3)上下不靠,例如退的房间号为4,则登记的记录数变成4条(1  2) ,(4  1),(6  3),(10  1);
4)上下靠,例如退的房间号为9,则登记的记录数变成2条(1,2),(6,5);
小王依据上述描述设计了如下VB程序。请回答下列问题:
(1)当登记的记录有3条,分别为(1,4),(6,2),(10,3),现在某旅客退掉5号房间,则登记的记录变成_______________________________
(2)请在划线处填入合适的代码。
Const n = 5000
Dim a(0 To n) As Integer  'a(i)保存第i条记录的开始房间号
Dim b(0 To n) As Integer  ' b(i)保存第i条记录的房间数
Dim c As Integer, k As Integer, sp As Integer  'k为原始记录数
'读取原始k条记录的数据,依次存入a(1),b(1),a(2),b(2)…a(k),b(k),代码略
'为了程序处理方便,虚设了下面2条记录
a(0) = 0 : b(0) = 0 : sp = k + 1 :a(sp) = 10000 : b(sp) = 0
Private Sub Command1_Click()
Dim i As Integer
c = Val(Text1.Text)  'c为退掉的房间号
i = 1
Do While a(i) < c   '查找房间c,应该登记在某位置
i = i + 1
Loop
i = i - 1
'下面为处理退房登记问题
If a(i) + b(i) = c Then
If __________ Then   '第4种情况,上下靠
b(i) = b(i) + 1 + b(i + 1)
For j = i + 1 To sp - 1
a(j) = a(j + 1) : b(j) = b(j + 1)
Next  j
sp = sp - 1
Else     '第1种情况,上靠
b(i) = b(i) + 1
End If
ElseIf  c + 1 = a(i + 1) Then  '第2种情况,下靠
a(i + 1) = c : b(i + 1) = b(i + 1) + 1
Else '第3种情况,上下不靠
For j =_____________________
a(j) = a(j - 1) : b(j) = b(j - 1)
Next j
a(i + 1) = c : b(i + 1) = 1 : sp = sp + 1
End If
‘下面为输出登记的记录,不包括虚设的两条记录
For i =1 to _______
List3.AddItem "第" & Str(i) & "记录(" & Str(a(i)) & "," & Str(b(i)) & ")"
Next i
End Sub

同类题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

在一个文档中,每行包含一个字符串。现使用如下规则对其压缩:压缩时,对于每个字符串求其与前一字符串的公共前缀,然后使用公共前缀的长度和字符串的剩余部分(以空格隔开)表示该字符串,每个空格和字符都会占用一个字节空间。图a所示为该压缩规则示意图。小明为此编写了VB程序,功能如下:运行程序时,在列表框List1中显示原字符串内容,单击“压缩”按钮Command1,在列表框List2中显示压缩后字符串,并在标签Label2中显示压缩后容量。程序运行界面如图b所示。

实现上述功能的 VB 代码如下,但划线处代码有错,请改正。
Dim word(3000) As String, pre(3000) As String
Const n = 2000
Private Sub Form_Load()
'该过程的作用是从数据库读取 n 个单词,按字典顺序存储在数组 word 中,并在 Label1输出单词数量和容量
'代码略
End Sub
Private Sub Command1_Click()
Dim conp As Integer '存储压缩后的容量
Dim f As Boolean,m As Integer,k As Integer   'k 存储公共前缀的长度
conp=0
For i=1 To n
k=0
If i=1 Then f=False Else f=True
k=Len(word(i)) '(1)______________
Do While k<m And f=True
If Mid(word(i),1,k+1)=Mid(word(i-1),1,k+1) Then    
k=k-1 '(2)____________
Else
f=False
End If
Loop
pre(i)=CStr(k)+" "+Mid(word(i),k+1,Len(word(i)))
'Cstr()函数能够将数字类型的值转换为字符类型的值,并却掉前导空格。
List2.AddItem pre(i)
conp=conp+Len(word(i))   '(3)______________
Next i
Label2.Caption="压缩后容量为"+Str(conp)+"字节"
End Sub