相关试卷
-
1、小杜编写VB解决上述问题的程序,其功能如下:程序运行时在文本框Text1中输入整数序列(输入的数据保证存在符合条件的子序列),在Text2中输入整数s。单击按钮Command1后在标签Label1上输出总和不小于s的连续子序列,程序运行如图所示。
(1)、给定整数序列为{5,1,3,5,10,7,4,9,2,8},整数s=15,符合条件的长度最小的子序列为。(2)、实现上述功能的VB程序如下,请在划线处填入合适代码。Dim a(1 To 100) As Integer
Dim sum(0 To 100) As Integer ’sum(i)存储 a(1)+a(2)+…+a(i)的值
Dim n As Integer, s As Integer
Private Sub Form_Load()
‘读取整数序列依次存储在数组a中
‘读取整数序列长度存储在变量n中
‘本过程代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, ans As String
Dim Min As Integer ‘存储符合条件的最小长度
Dim iMin As Integer ‘存储符合条件子序列的起始位置
s=val(Text2.text)
For i = 0 To n
sum(i) = 0
Next i
For i = 2 To n
sum(i) = a(i) + sum(i-1)
Next i
Min = n
iMin = 1
For i = 1 To n
j=i
Do WhileAnd j<= n
j = j + 1
Loop
If j <= n And j - i + 1 < Min Then
Min = j - i + 1
iMin = i
End If
Next i
ans =“”
For i = iMin To
ans = ans + Str(a(i))
Next i
Label1.Caption = “符合条件的子序列为” + ans
End Sub
-
2、要求从某一字符串中删除指定的字符(假设所含的英文字母均为小写字母),并将处理后的字符串重新输出。
程序界面如图所示,在文本框Text_1中输入原始字符串,在文本框Text_2中输入需要删除的字符,单击“删除此字符”按钮(Command1)后,在文本框Text_3中输出处理后的结果。
解决此问题的算法流程图如图所示,相应的Visual Basic程序如下:
Dim p As String,k As String
Private Sub Command1_Click()
Dim s As Integer,result As String,flag As Boolean
result=“”
p=Text_1.Text
k=Text_2.Text
For s=1 To Len(p)
flag=f(s)
If Not flag Then
result=result+①
End If
Next s
②
End Sub
Function f(s As Integer)As Boolean
If Mid(p,s,1)=k Then f=True
End Function
(1)、解决此问题的算法是。(选填:顺序查找或对分查找)(2)、在程序①和②划线处,填入适当的语句或表达式,把程序补充完整。程序中①划线处应填入。
程序中②划线处应填入。
-
3、小明在玩一个数字游戏,给定一个n位正整数(n<=20),根据设定的保留位数,删除k个数字,剩下的数字按原次序组成一个最大的新数。例如原数36351328,删除5个数,最大数为658。算法如下:先确定最高位的数字,在第1位至最后2位数字前的363513中找到最大的数6,从而确定最高位是6,再确定次高位的数字,从6后面的数开始到最后1位数字前的35132中找到最大数5,确定次高位是5,依次找下去得到最大新数。他设计了一个VB程序来进行验证,在文本框Text1中输入一个n位正整数,在文本框Text2中输入删除位数k,点击“确定”按钮,在文本框Text3中输出保留的最大新数。程序运行界面如图所示。
(1)、如果输入的原数是3638132,删除3位数字,则输出的新数是。(2)、实现上述功能的VB代码如下,请在划线处填入合适代码。Private Sub Command1_Click()
Dim a(1 To 20) As String
Dim ys As String, xs As String ‘s记录最大的新数
Dim k As Integer, h As Integer, n As Integer
Dim i As Integer, j As Integer
Dim F As Boolean
xs =“”
ys = Text1.Text
n = Len(ys)
k = Val( Text2.Text)
F = True
If ys =“”Or n > 20 Or k = 0 Or k > n Then
Label4.Caption = “输入的原数或保留位数不符,请重输!”
F = False
End If
For i = 1 To n
If a(i) < “0” Or a(i) > “9” Then
Label4.Caption =“输入的原数不是数字,请重输!”
Text1.Text = “”
F = False
End If
Next i
If F = True Then
h = 1
For i = 1 To n-k
For j = h To
If a(j) > a(h) Then h = j
Next j
h = h + 1
Next i
Text3.Text = xs
End If
End Sub
-
4、删数问题。输入一个数字串s,删去其中k个数字(k<数字串中数字的个数),使剩余数字在保持相对位置不变的情况下构成一个值最小的整数。例如,s=“19990608”,k=4,处理结果:608。
删数的算法如下:
⑴如果k>0,则从前往后检测相邻字符,否则,转(3);
⑵①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转(1);②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到(1);
⑶去掉串首的0,输出结果。
按照上述算法思路,编写了VB程序,功能如下:在文本框Text1中输入数字串,在文本框Text2中输入删除的个数,单击“处理”按钮Command1,在文本框Text3中显示最小的整数。程序运行界面如下图所示。
(1)、如果输入的数字串为“20160125”,删除个数为4,则结果是。(2)、实现上述功能的VB程序如下,请在划线处填入合适代码。delete函数说明:(delete st,x,y)为自定义函数,功能为在字符串st中删除x位置开始的y长度的子串。
Private Sub Command1_Click ()
Dim s As String, k As Integer
Dim i As Integer, j As Integer, n As Integer
s = Text1.Text
k = Val(Text2.Text)
n = Len(s)
Do While k>0
i=1
Do While i<n And
i=i+1
Loop
If i=n Then
n=n-k
k = 0
Else
s = delete(s, i, 1)
n=n-1
End If
Loop
i= 1
Do While n>1 And Mid(s,1,1)= “0”
s = delete(s,1 ,1)
i = i+1
n = n-1
Loop
Text3.Text = s
End Sub
Function delete(st As String,x As Integer,y As Integer) As String
delete=Mid(st,1,x-1)+Mid(st,x+y)
‘Mid函数第3个参数省略,则截去从开始位置向右到字符串结尾的所有字符
End Function
-
5、物品装袋问题。现有n个物品(不超过20个),及一个容量不超过v的袋子,分别给出各物品的体积及价值,求装入袋子里的物品价值总和的最大值。请编写VB程序,实现如下功能:在文本框Text1中输入袋子的体积,单击“计算”按钮Command1,在文本框Text2中输出装入袋子里的物品价值总和的最大值,运行效果如图所示。
算法设计:为了使装入袋子的价值总和最大,首先应该把单位价值(该物品的价值+体积)最大的物品全部放入袋子(如果袋子当前剩余的容量不小于该物品的体积),然后放单位价值第二的物品,如此重复。当袋子剩余的容量装不下一个完整的物品时,可以将这个物品的部分(若干个单位体积)装入袋子,直到袋子装满。
实现上述功能的VB程序如下,请回答下列问题:
(1)、根据题意,现有4个物品,其对应的体积和价值如表所示,若袋子的体积为30,则装入袋子的最大价值为(四舍五入保留1位小数)。物品编号
体积
价值
1
26
19
2
7
14
3
22
11
4
10
22
(2)、请在划线处填入合适的代码。Dim v(1 To 20) As Integer ‘依次存储每个物品的体积
Dim w(1 To 20) As Integer ‘依次存储每个物品的价值
Dim pw(1 To 20) As Double ‘依次存储每个物品的单位价值
Dim n As Integer ‘存储物品的总个数
Private Sub Form_Load()
‘初始化操作,并将每个物品的体积和价值依次显示在列表框List1中(代码略)
‘将物品的个数存入变量n中,将每个物品的体积和价值分别依次存入数组v(1)到v(n)中、w(1)到w(n)中
End Sub
Sub Sort ( ) ‘根据每个物品的单位价值进行降序排序
For i = 1 To n -1
k=i
For j = i + 1 To n
If pw(k) < pw(j) Then
Next j
If k <> i Then
t = v(i): v(i) = v(k): v(k) = t
t = w(i): w(i) = w(k): w(k) = t
p = pw(i): pw(i) = pw(k): pw(k) = p
End If
Next i
End Sub
Private Sub Command1_Click()
Dim i As Integer, k As Integer, t As Integer
Dim p As Double, bw As Integer, tot As Double
bw = Val(Text1.Text)
For i = 1 To n
pw(i) = w(i) / v(i)
Next i
For i = 1 To n
If bw >= v(i) Then
tot = tot + w(i)
bw = bw -v(i)
Else
Exit For
End If
Next i
Text2.Text = Str(tot)
End Sub
-
6、摘苹果游戏。游戏中的苹果树结了n个苹果,每个苹果有一个地面高度和摘它所需要的力气,要摘到苹果,必须具备高度和力气两个条件,每摘一个苹果都要用掉一定的力气。小林的可用力气是个有限值s,小林手伸直后能摘的最大高度为b,她可以借助的梯子的高度为a。游戏中苹果的高度和所需力气分别存储在数组 h和数组c中。程序运行界面如图所示。运行程序后,输入梯子高度a、手伸直高度b、可用力气s的值, 单击“计算”按钮(Command1),在文本框Text4中输出小林最多能摘得的苹果数ans。

相应程序如下,在划线处填入适当的语句和代码,把程序补充完整。Dim c(1 To 100) As Integer, h(1 To 100) As Integer, d(1 To 100) As Integer
Dim n As Integer
Private Sub Form_Load()
‘从数据库中读取n个苹果的摘取所需力气和高度存放在数组c和h中,并显示在List1中,代码略
End Sub
Private Sub Command1_Click()
Dim a As Integer, b As Integer, s As Integer, i As Integer, j As Integer, m As Integer
a = Val(Text1.Text) ‘梯子高度
b = Val(Text2.Text) ‘手伸直高度
s = Val(Text3.Text) ‘可用力气
m = 0
For i = 1 To n ‘将所有能够摘得的苹果所需力气存储到数组d中
IfThen
m = m + 1
d(m) = c(i)
End If
Next
For i = 1 To m - 1
k = i
For j = i + 1 To m
IfThen k = j
Next
If k <> i Then
t = d(k): d(k) = d(i): d(i) = t
End If
Next
ans = 0 ‘用剩余的力气去摘最多的苹果
For i = 1 To m
If s >= d(i) Then
ans = ans + 1
End If
Next
Text4.Text = Str(ans)
End Sub -
7、有N堆纸牌,编号分别为①,②,…。每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。
移牌规则:在编号为①的堆上取的纸牌,只能移到编号为②的堆上;在编号为N(N≥2)的堆上取的纸牌,只能移到编号为N-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如N=4,4堆纸牌数分别为:
①
②
③
④
9
8
17
6
移动3次可达到目的:从③取4张牌放到④(9 8 13 10)→从③取3张牌放到②(9 11 10 10)→从②取1张牌放到①(10 10 10 10)。
现编写如下代码解决4堆任意张数牌的移动问题,请按提示补充划线句的代码:
Private Sub Command1_Click()
Dim aver As Single
Dim st As Integer ‘统计移动的步数
Dim ssum, i, j As Integer
Dim a( 1 To 100) As Integer
a(1) = Val(Text1.Text) ‘读取各堆牌张数,求总张数aver
a(2) = Val(Text2.Text)
a(3) = Val(Text3.Text)
a(4) = Val(Text4.Text)
ssum =a(1) + a(2) + a(3) + a(4)
aver=ssum \ 4 ‘求牌的平均张数aver
For i=1 To 4
①
Next i
i=1 ‘过滤初端和末端的0
j = 4
Do While a(i) = 0 And i < 4
i=i+1
Loop
Do While a(j) = 0 And j > 1
j = j-1
Loop
st = 0
Do While i < j ‘开始移动牌使数组a元素值均为0并过滤掉
②
a(i) = 0
st = st + 1
i=i+1
Do While a(i) = 0 And i<j ‘过滤掉数组a元素值均为0
③
Loop
Loop
Print st ‘输出移动次数
End Sub
(1)、划线①处;划线②处;划线③处。(2)、若现有6堆牌,分别编号①②③④⑤⑥,各堆张数分别为15、2、4、7、8、6,按上述算法的思路,要使用最少的移动次数使每堆上纸牌数都一样多,则最少次数为。 -
8、问题描述:有n个互不重复的数字,值的范围是[1,n],分别保存在数组元素a(1)到a(n)中,若数字i保存在a(i),则认为数字i在正确的位置上。若干个相互占用了位置的数字称为一组,一个在正确位置上的数字单独为一组,比如6个数字2,3,1,4,6,5分别保存在数组元素a(1)到a(6)中,则2、3、1为一组,4为一组,6、5为一组。该程序的功能为输出每组的情况。运行界面如图:
(1)、数组元素a(1)到a(5)的值分别为2、5、3、1、4,这5个元素总共有组。(2)、请补充代码。Const n = 10
Dim a(1 To n) As Integer ‘保存原始数据
Dim b(1 To n) As Boolean ‘数组b用来标记相应的位置有没有找过
Private Sub Command1_Click()
Dim i As Integer, sum As Integer, total As Integer
sum = 0: total = 1 ‘total表示第几组
i = 1
List2.AddItem“第” + Str (total) + “组”
Do While sum < n
Do While Not b(i)
List2.AddItem a(i)
b(i) = True
sum = sum + 1
Loop
If sum < n Then
List2.AddItem “第”+ Str(total)+“组”
i = 1
Do While b(i) ‘该循环用来查找下一组的开始位置
i = i+ 1
Loop
End If
Loop
End Sub
Private Sub Form_Load()
Dim i As Integer
Randomize
For i = 1 To n ‘产生n个不一样的整数,范围为[1,n]
a(i) = Int(Rnd * n)+1
Do While
a(i)= Int(Rnd * n) + 1
Loop
Next i
For i = 1 To n
List1.AddItem a(i)
b(i) = False
Next i
End Sub
Function f(x As Integer, y As Integer) As Boolean
‘该函数的功能:判断x和数组a中前y个数有没有重复
Dim j As Integer
f = False
For j = 1 To y
If a(j) = x Then f = True:Exit For
Next j
End Function
-
9、某游戏规则如下:将2*n位队员按2人一组分成n个队(n<10),地面上有一排格子,共2*n个,每个格子都对应一个小于10的随机正整数。游戏开始后,所有队员都选择站到一个空的格子里,等他们站满格子后,开始为每位队员进行记分。记分规则:每组甲乙两个队员,甲队员的分数是从自己所站的格子开始,按照格子序号递减,将这些格子中的数字一直累加到第1个格子。乙队员的分数是从自己所站的格子开始,按照格子序号递增,一直将格子中的数字累加到第2*n个格子。如果同一队的两名队员得到的分数相同,则该组参赛队获胜。
例如:如图所示,有4个队8位队员,地上一排格子的数字依次为2、1、1、7、9、2、5、6。若某队甲队员站在第4个格子,则其分数为2+1+1+7=11;乙队员站在第7个格子,则其分数为5+6=11。两者相等,则该队获胜。
gz(1)
gz(2)
gz(3)
gz(4)
gz(5)
gz(6)
gz(7)
gz(8)
←→
2
1
1
7
9
2
5
6
甲 乙
(1)、假设有3队队员,地上一排格子的数字依次为6、7、3、4、3、9。若某队甲队员站在第3个格子上,那么该队乙队员站在第个格子上才能获胜。
(2)、实现上述功能的VB程序如下。请在划线处填入合适代码。Dim n As Integer
Dim gz(1 To 20) As Integer
Private Sub Command1_Click()
Dim dfa As Integer, dfb As Integer
Dim ta As Integer, tb As Integer
Randomize
For i = 1 To 2 * n
gz(i) = Int(Rnd* 9 + 1)
List1.AddItem “gz(“ & i & ”)” & gz(i)
Next i
num = 1
For j = 1 To 2 * n
ta = j
dfa = zwdf(ta, True)
For k = 1 To 2 * n
tb = k
If dfa = dfb Then
List2.AddItem num & “甲队员(“ & j &”)得分=” & dfa & “乙队员(“ & k & ”)得分=” & dfb
num = num + 1
End If
Next k
Next j
List2.AddItem “获胜的站法共有:”++ “种”
End Sub
Function zwdf(p As Integer, r As Boolean) As Integer
Dim fs As Integer
If r = True Then
fs = fs + gz(i)
Next i
Else
For i = p To 2 * n
fs = fs + gz (i)
Next i
End If
zwdf = fs
End Function
-
10、小吴编写了一个查找数组中不重复数据的VB程序,功能如下:程序运行时在列表框List1中显示原始数据(存储在数组a中),单击“查找”按钮Command1后,在列表框List1中显示数组中元素值只出现一次的数据。程序运行界面如图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const n = 10 ‘数组元素的总数
Dim a(1 To n) As Integer
Private Sub Form_Load()
‘该过程对数组a进行赋值,并在列表框List1中显示,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer,flag(1 To n) As Boolean
‘flag(i)记录第i个元素是否重复出现
For i = 1 To n ‘flag(i)=true开始假设都只出现1次
flag(i) = True
Next i
For i = 1 To n
If flag(i) Then
For j = i + 1 To n
If
Then flag(i) = False: flag(j) = False ‘①Next j
End If
Next i
For i = 1 To n
If
Then List2.AddItem Str(a(i)) ‘②Next i
End Sub
① ②
-
11、有如下VB程序段:
n = Len(Text1.Text)
For i = 1 To n
a(i) = Mid(Text1.Text, i, 1)
Next i
Do While n > 1
If Asc(a(n)) >= Asc(a(n - 1)) Then
m = 1
Else
m = 2
End If
b(m) = b(m) + 1
n = n-1
Loop
数组b各元素的初始值都为0,文本框Text1的内容为“2018Python”。执行程序后,变量b(1)的值为( )
A、10 B、6 C、5 D、4 -
12、某VB程序段如下:
For i = 1 To 5
b(a(i)) = b(a(i)) + 1
Next i
pa = 0
For j = 1 To 10
For k = 1 To b(j)
pa= pa + 1 : a(pa) = j
Next k
Next j
a(1)到a(5)的初值依次是7、5、9、4、3,程序段运行后,数组a值依次是( )
A、7, 9, 5, 4, 3 B、3, 4, 5, 7, 9 C、4, 5, 7, 9, 3 D、9, 7, 5, 4, 3 -
13、有VB编写的程序如下:
Dim a(0 To 9) As Integer, t as Long
t=Val(Text1.Text)
Do While t<>0
a(t Mod 10) = 1
t = t \ 10
Loop
For i = 0 To 9
x = x + a(i)
Next i
Text1中输入10242048,则程序执行后x的值为( )
A、1 B、2 C、5 D、10 -
14、有以下VB程序段:
a(1)=68: a(2)=88: a(3)=76: a(4)=60: a(5)=98: a(6)=100: a(7)=64: a(8)=85: a(9)=99:a(10)=59
For i = 1 To 9
b(i) = Abs(a(i + 1) - a(i))
c(b(i) \ 10) = c(b(i) \ 10) + 1
Next i
For i = 0 To 10
If c(i) > 0 Then Label1.Caption = Label1.Caption + “” + Str(c(i))
Next i
数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是( )
A、23211 B、13221 C、23221 D、13 -
15、尼克斯彻定理:任何一个大于等于1的整数的立方等于一串连续奇数之和,如:13=1,23=3+5, 33=7+9+11。编写一个VB程序验证尼克斯彻定理,程序运行时,在文本框Text1中输入一个大于等于1的整数,单击“验证”按钮Command1,在文本框Text2中显示验证结果,运行界面如图所示。
实现上述功能的VB代码如下,请完善代码:
Private Sub Command1_Click()
Dim n As Integer, i As Integer, t As Integer,sum As Long,s As String
n=Val(Text1.Text)
For i = 1 To n^3 Step 2 ‘变量i表示连续奇数的首个整数
sum=0:t = i:flag = False
Do While sum <= n^3 And flag = False
sum =
t = t +2
IfThen flag = True
Loop
If flag = True Then Exit For
Next i
s = Str(n) + “^”+ Str(3) + “=”
Do While sum >0
If sum = 0 Then
s = s + Str(i)
Else
s = s + Str(i) +“+”
End If
i = i + 2
Loop
Text2.Text = s
End Sub
-
16、如果一个自然数的每个质因数都至少是二重的(即每个质因数乘方次数都大于或等于2),如整数72=2^3*3^2(即72=2*2*2*3*3),判断2~72所有数中全部质因子的乘方次数,找出质因子“2”乘方次数为3;质因子“3”乘方次数为2,不是72的质因子,那么这个自然数称为“漂亮数”。小李编写了一个验证“漂亮数”的VB程序。在文本框输入小于1 000的正整数,单击“检查”按钮在列表框中显示该数的质因子及该因子乘方数,在标签Label1中显示判断结果,在标签Label4中显示所有质因数的分解过程。程序运行界面如下图所示。
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim a(1 To 999) As Integer
Dim n As Integer
Dim s As String
For i=1 To 999
a(i)=0
Next i
n=Val(Text1.Text)
s =“”
Do While n<>1 ‘分解质因子过程并统计质因子出现次数
For i = 2 To n
Do While n Mod i = 0
s = s&“ ”&i
a(i)= a(i)+1
‘①Loop
Next i
Loop
Label4.Caption =“质因子分解过程:” +s
For j = 2 To 999 ‘判断是不是漂亮数
If
Then ‘②Label1.Caption = “不是漂亮数”
Exit For
Else
Label1.Caption =“漂亮数”
End If
Next j
For j = 2 To 999 ‘在列表框输出质因数及对应的乘方数
If a(j)>0 Then
List1.Additem Str(j)+“ ”+Str(a(j))
End If
Next j
End Sub
① ②
-
17、随机数中的完全平方数。若一个数能表示成某个整数平方的形式,则称这个数为完全平方数,如1(1*1)、9(3*3)、16(4*4)等都是完全平方数。编写程序,单击命令按钮Command1依次产生1 000个1到1 000范围内(包含1,也包含1 000 )的随机整数,并判断产生的每个随机整数是不是完全平方数,如果是完全平方数,则将其显示在列表框List1中。程序运行效果如图所示。
(1)、代码“List1.Additem”中的“Additem”是列表框List1的。(填字母:A .对象名/B .属性名/ C .属性值/D .事件名/E .方法名/F .事件处理过程名)(2)、解决此问题相应的VB程序如下:Private Sub Command1_Click()
Dim i As Integer, t As Integer
For i = 1 To 1 000
x =
t = Int(Sqr(x))
If x =Then List1.Additem
Next i
End Sub
-
18、编写一个VB程序,实现程序功能如下:随机产生10个1~20之间的整数存放在数组a,在列表框List1中显示,单击“排序”按钮Command1后,在列表框List2中显示升序排序后的结果。具体算法描述如下:引入数组index,index(i)存储i位置应放置的数组元素的下标。排序完毕,a(index(i))成为升序序列,即a(index(1))≤a(index(2))≤a(index(3))≤……≤a(index(i))。在数组a的所有元素中找出最小元素,将其所在位罝存放在数组元素index(1)中,然后在余下的元素中找出最小元素,将其所在位置存放在数组元素index(2)中,以此类推,直到完成所有元素排序。如n=5时,数组a排序后各变量值如下表所示。
i
1
2
3
4
5
a(i)
17
19
9
13
6
index(i)
5
3
4
1
2
a(index(i))
6
9
13
17
19
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const n = 10
Const maxn = 20
Dim a(1 To n) As Integer, index(1 To n) As Integer, flag(1 To n) As Boolean
Private Sub Form_Load()
Dim i As Integer
Randomize
For i = 1 To n
flag(i) = False
a(i) = Int(Rnd() * maxn) + 1
List1.AddItem Str(a(i))
Next i
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim k As Integer
For i = 1 To n
For j = 1 To n
If flag(j) = False Then k = j: Exit For
Next j
For m = k + 1 To n
If
Then k = m ‘⑴ Next m
index(i) = k
flag(k) = True
Next i
For i = 1 To n
List2.AddItem
‘⑵Next i
End sub
⑴ ⑵
-
19、某公司面试程序题如下:公司有10000名员工,请设计一个算法对该公司员工的年龄做递增排序输出。小刘设计了一个算法:利用数组b记录每个数据出现的次数,数组b下标范围为年龄范围,然后根据每个年龄值的个数进行排序。
例如,有如下年龄存在数组a中:
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
a(8)
a(9)
a(10)
20
19
18
19
15
12
15
20
17
19
利用一个数组b(b(10 To 20))记录每个数出现的次数:
b(10)
b(11)
b(12)
b(13)
b(14)
b(15)
b(16)
b(17)
b(18)
b(19)
b(20)
0
0
1
0
0
2
0
1
1
3
2
根据数组b对数组a进行排序:
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
a(8)
a(9)
a(10)
12
15
15
17
18
19
19
19
20
20

Dim a(10000) As Integer ‘存放读入的年龄数据
Dim b(100) As Integer ‘存放各个年龄出现的个数
Private Sub Command1_Click()
‘从数据库读入年龄数据放入数组a中
End Sub
Private Sub Command2_Click()
For i = 1 To 100
b(i) = 0
Next i
For i = 1 To 10000 ‘统计每个年龄数据的个数
①
Next i
End Sub
Private Sub Command3_Click()
j = 0
For i = 1 To 100
If b(i) <> 0 Then
Do While b(i) <> 0
②
a(j) = i
‘③Loop
End If
Next i
For i = 1 To 10000
List2.AddItem Str(a(i))
Next i
End Sub
(1)、为实现程序功能,请在划线①②处填入合适的代码。①处填入的代码为。
②处填入的代码为。
(2)、加框处③代码有错,请修正。③处的代码修改为。
-
20、小明最近学习了一种插入排序的算法。算法的基本思想如下:每次将一个待排序的记录,按其关键字大小插入前面已经排好序的记录集中,使记录依然有序,直到所有待排序记录全部插入完成。
如数据25 54 8 54 21 排序过程如下(n=5):
待排序数据:【25】 54 8 54 21
i=2:【25 54】 8 54 21
i=3:【8 25 54】 54 21
i=4:【8 25 54 54】 21
i=5:【8 21 25 54 54】
程序产生10个-100~100之间的整数,从小到大排序后输出,运行结果如图所示:
实现上述功能的VB程序代码如下,但加框处代码有错,请改正。
Dim a(0 To 10) As Integer
Private Sub Command1_Click()’产生10个随机数放在数组a中
Dim i As Integer
For i = 1 To 10
‘①List1.AddItem Str(a(i))
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer
For i = 2 To 10
a(0) = a(i)
j = i - 1
Do While a(0) < a(j)
‘②j = j - 1
Loop
a(j + 1) = a(0)
Next i
For i = 1 To 10
List2.AddItem Str(a(i))
Next i
End Sub
①处的代码修改为。
②处的代码修改为。