组卷网 > 高中信息技术综合库 > 算法软件操作 > VB程序的调试
题型:操作题 难度:0.4 引用次数:11 题号:9896107
求最大连续子序列和。给出一个序列,序列元素有正整数、0、负整数,要求找到序列中的一个连续子序列,使得这个子序列中包含的所有元素之和最大,在和最大的前提下还要求该子序列包含的元素个数最多,输出这个最大和以及该连续子序列中的元素个数、连续子序列中各个元素。例如序列-5,4,-14,2,-1,0,9,-4,3,最大连续子序列和为17,该连续子序列中的元素个数为7,该连续子序列为4,-1,4,2,-1,0,9。
算法描述如下:
(1)从第一个数开始向后进行累加,每次累加和若大于之前的最大和,则记录此时的最大和与连续子序列的长度、最后一个序列元素位置;
(2)若每次累加和等于之前的最大和但大于之前的最大长度,则记录此连续子序列的长度、最后一个序列元素位置;
(3)若累加和小于0,则重新开始记录;
(4)若有符合条件的多个连续子序列,则输出最先找到的连续子序列小明编写了一个实现该功能的VB程序,窗体加载时,读取n个序列数据,依次存储在数组a,并显示在文本框Text1中,单击“计算”按钮 Command1后,找出累加和最大的子序列,在标签 Label2上显示最大连续子序列的和,在Label3上显示该连续子序列的元素个数,在 Labele4上显示该连续子序列。程序运行界面如图所示。

(1)序列“1,2,2,-5,0,7,8,-7,-1,9”的最大连续子序列和为________
(2)请在画线处填入合适的代码。
Const n = 10
Dim a(l To n) As Integer
Private Sub Form_ Load()
读取数据,依次存储到数组a中,并在文本框Text1中输出。代码略
End Sub
Private Sub Command l Click()
Dim i As Integer, k As Integer, sum As Integer
Dim lenth As Integer, temp As Integer, begin As Integer
temp =0:sum =0
lenth =0:begin =0
For i=1 To n

If temp + a(i)> sum Then

sum= temp t a(i)

lenth = i - begin

k = i

Else If temp +a(i)= sum And ____Then

lenth = i- begin

k=i

End if

If temp+a(i)<0 Then

______

temp = 0

Else

______

End If

Next i
S=" "
For i = k - lenth +1 To k

s =s + ads(a(i), 3)

Next i
Label2. Caption="最大连续子序列和为:"+ Str(sum)
Label3. Caption="该连续子序列中的元素个数为:"+Str( lenth)
Label4. Caption="最大连续子序列为:"+s
End Sub
Function ads(x As Integer, n As Integer) As. String
整数转换成长度固定的字符串。代码略
End Function
【知识点】 VB程序的调试

相似题推荐

操作题 | 较难 (0.4)
名校
【推荐1】求连续数字串和的最大值。在文本框Textl中生成n(n≤100)个位于区间( - 100,100)的正负交替出现的随机整数(不含0)。计算连续数字串和的最大值,并在标签Labell中显示这段连续数字串的开始位置,结束位置以及最大和。例如,生成10个随机数为11, - 99,67, - 2,57, - 10,11, - 80,29, - 5时,输出如a图所示。

图a
(1)如a图所示的界面中不具有Caption属性的是______(单选,填字母:A. Commandl / B. Text1 / C. Label1 / D. Form1)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
____________________________
____________________________
____________________________
(3)程序中加框处的代码有错,请改正。
改正:____________________________
Dim a(1 To 100) As Integer
Dim n As Integer
Private Sub Command 1_Click( )
n = Val(Text1. Text)
For i=1 To n
a(i)= ①_________
Next i
'在文本框Text2中输出随机数,代码略
End Sub
Private Sub Command2_Click( )
Dim tmp As Integer, left As Integer, sum As Integer
Dim min As Integer, max As Integer
Dim flag As Boolean
sum= 0:flag= False:min=0:max = a(1)
For i= 1 To n
sum = sum + a(i)
If sum< = min Then min = sum:left = i
②_______
If tmp > max Then
max = tmp:flag = True

Label1. Caption = "起止位置," + + "→" + Str(i)

End If
Next i
If     ③__________ Then
Label1. Caption = Label1. Caption + "最大和:" + Str(max)
Else
Label1. Caption= "起止位置:1→1" +" 最大和:" + Str(max)
End If
End Sub
2020-12-20更新 | 14次组卷
操作题 | 较难 (0.4)
【推荐2】编写VB程序,输出的和
2020-03-03更新 | 17次组卷
操作题 | 较难 (0.4)
名校
【推荐3】某日期加密授权码生成方法描述如下:
(1)授权码由10位字符组成,前8位为日期的密文,后2位为验证码;
(2)从右往左依次取日期的每一位字符,若该字符第一次出现,则直接取其对应的加密字符,否则取下一个不重复的加密字符。按此操作,依次取出该日期余下各位对应的加密字符;如日期为20201223,则依次取出的字符为“3、2、2、1、0、2、0、2”。
(3)求出所有日期字符数值的和,将和除16取余加1得到一位验证码字符;若和不小于16,则将和除16取整加1得到另一位验证码字符,否则另一位验证码字符为小写字母“x”。取出验证码重复时,处理规则与(2)相同。
加密(验证码)字符对应表如下:
值(十进制)0123456789101112131415
加密(验证码)字符AKpjLtWbmaPFZqyc
设计一个生成8位日期(YYYYMMDD格式)授权码的VB程序。程序功能如下:在文本框text1中输入一个8位有效日期,单击“授权码”按钮comand1,在标签labe12中显示出该日期的授权码。运行效果如图所示。

(1)若输入的日期是“20210108”,则labe12上显示内容为________________
(2)实现上述功能的VB程序段如下,请在划线处填入合适代码。
Dim f(0 To 15)As Integer
Const code = "AKpjLtWbmaPFZqyc"
Private Sub Comand1_Click()
Dim rq As String,sq As String
Dim c As Integer,i As Integer,d As Integer
For i = 0 To 15
f(i)= 0
Next i
rq = Text1. Text
sq="":d= 0
If Len(rq) <> 8 Then
Labe12. Caption ="请重新输入8位日期"
Else
For i = 1 To 8
c = Val(Mid(rq,i,1))
d =d + c
sq =___
Next i
If d >= 16 Then
yz = getchar(d Mod 16 + 1) + getchar(d   16 + 1)
Else
yz = getchar(d Mod 16+ 1) + "x"
End If
Labe12. Caption = sq + yz
End If
End Sub
Function getchar(x As Integer) As String'获取不重复的加密字符
Dim flag As Boolean
flag = False
Do while flag = False
f(x)=f(x)+ 1
If f(x)= 1 Then
getchar =___
f(x)=f(x)+ 1
flag = True
Else
___
End If
Loop
End Function
2021-01-09更新 | 24次组卷
共计 平均难度:一般