题库 高中信息

题干

(加试题)小龙编写了一个简易加法器VB程序,运行界面如图所示。在文本框Text1中输入一个数字后再输入空格表示一个加数输入完毕,连续不断输入不同的加数,待所有需要相加的数输入完毕后,单击“求和”按钮Command1后,在标签label1中显示加数的个数以及总和。(数字0和空格的ASCII码分别为48、32)
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim a As String
Dim x As Integer, s As Integer, k As Integer
a = Text1.Text
x = 1: s = 0: k = 0
For i = 1 To Len(a)
'如果输入的不是0到9的数字或者空格,则给出错误提示后结束子程序
If (Asc(Mid(a, i, 1)) < 48 Or Asc(Mid(a, i,1)) > 57) or(Asc(Mid(a,i,1))= 32) then’①________ Label1.Caption = "只能输入数字或空格"
Exit Sub
End If
If Mid(a, i, 1) = " " Then
s = s + Mid(a,x,i)’②________
x = i + 1
k = k + 1
End If
Next i
Label1.Caption = "这" + Str(k) + "个数的和为:" + Str(s)
上一题 下一题 0.99难度 填空题 更新时间:2019-04-08 11:20:15

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

同类题4

在数组a中按顺序找出一组升序子序列,可以不连续,但要求长度最长。例如:数组a的值分别为2,11,4,13,5,7。升序子序列分别有2,11、2,4、2,11,13、2,4,13、2,4,5、
2,4,5,7、11,13、4,13、4,5、4,5,7、5,7,其中最长升序子序列的数据是2,4,5,7。

算法思路如下:

(1)求以a(i)为结尾元素的最长升序子序列时,找到所有序号j(j=1,2……i-1),且a(j)<a(i)。

如果这样的元素存在,且d(j)>=d(i)(d(i)记录i位置的最长升序子序列长度),那么就增加i位置的最长升序子序列长度,并记录该升序子序列倒数第二个位置。

(2)在d数组中找出最大值,即最长升序子序列长度。

(3)例如,2、11、4、13、5、7,d(1)=1,d(2)=2,d(3)=2,d(4)=3,d(5)=3,d(6)=4,所以最长升序子序列长度为4,是以a(6)为结尾元素。

现设计了如下VB程序,界面如图所示,请回答下列问题:


(1)观察上图,最长升序子序列的数据是____________________________。
(2)请在划线处填入合适的代码。
Const n = 9
Dim a(1 To n) As Integer
Private Sub Form_Load()

‘生成n个1,10范围的随机数,存储在a数组,并显示在列表框List1。代码略

End Sub
Private Sub Command1_Click()
Dim d(1 To n) As Integer ‘记录i位置的最长升序子序列长度
Dim pre(1 To n) As Integer ‘记录i结尾的最长升序子序列前一数据的位置
Dim st As String,i As Integer,k As Integer,maxlen As Integer
For i = 1 To n

d(i) = 1

Next i
For i = 2 To n

For j = 1 To i-1

If a(j) < a(i) And d(j) >= d(i) Then
d(i) = ___________ 
pre(i) = j
End If

Next j

Next i
maxlen = 0:k = 0
For i = 1 To n

If ___________ Then maxlen = d(i):k = i

Next i
Do While k <> 0

st = a(k) & "," & st

_____________

Loop
Text1. Text = Mid(st,1,Len(st)-1)
End Sub