- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- 算法实例的程序实现
- + 算法及算法的表示方法
- 计算机解决问题的步骤化
- 算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
算法描述如下:
Input(x)
If x 能被2 整除Then
输出x是偶数
Else
输出x是奇数
End If
上述采用的算法描述方法是
Input(x)
If x 能被2 整除Then
输出x是偶数
Else
输出x是奇数
End If
上述采用的算法描述方法是
A.自然语言 |
B.流程图 |
C.伪代码 |
D.N-S图 |
有如下程序段:
i = 1
Do While i <= 5
If i = 0 or a(i - 1) <= a(i) Then
i = i + 1
Else
t = a(i): a(i) = a(i - 1): a(i - 1) = t
i = " - 1
End If
Loop
For i = 1 To 5
List2.AddItem a(i)
Next i
数组元素a(0)到a(5)的值依次为“0,71,22,48,79,27”,经过该程序段“加工”后,数组元素a(4)的值为( )
i = 1
Do While i <= 5
If i = 0 or a(i - 1) <= a(i) Then
i = i + 1
Else
t = a(i): a(i) = a(i - 1): a(i - 1) = t
i = " - 1
End If
Loop
For i = 1 To 5
List2.AddItem a(i)
Next i
数组元素a(0)到a(5)的值依次为“0,71,22,48,79,27”,经过该程序段“加工”后,数组元素a(4)的值为( )
A.0 | B.71 | C.48 | D.27 |
小朋友拍照:有来自K(1<=K<=20)个不同国家的N(1<=N<=100)个小朋友排成一行准备拍照。国籍用数字1,2,3……K表示,每个小朋友的国籍依次存入数组a(1)到a(N)。由于小朋友太多,没有办法全部被拍入。摄像师决定拍摄一段连续区间内的小朋友,这个区间内每种国籍的小朋友至少要有1个,求满足要求的最小区间长度。
例如有10个小朋友,5种国籍,从左到右排列,国籍编号依次是2,1,2,4,3,3,5,5,3,5,则最小的一段包含所有5种国籍的区间是从第2个到第7个小朋友,区间长度为6。
算法解析:区间的长度至少为K(国籍的数量),最大为N(小朋友的数量)。我们可以通过二分K到N之间的求得最小区间长度。
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim a(1 To 100) As Integer '依次存储为1到100的小朋友的国籍编号
Dim K As Integer
Dim N As Integer
Private Sub Form_Load() '窗体加载,生成数据
'产生N的值,表示人数
'产生K的值,表示国籍种数
'产生编号为1到N的小朋友的国籍编号,并存储在数组a中
'代码略
End Sub
Private Sub Command1_Click() '使用二分的思想计算最小区间
Dim M As Integer
i =" K:" j = N '答案的范围为K到N,即最少K,最多N个小朋友
Do While i <= j
M =" (i" + j) \ 2 '二分,求中间值
If pd(M) =" True" Then '调用Pd函数,判断区间长度为M时,是否包含所有国籍
j =" M" – 1
ans = M '若以M为区间长度可包含所有国籍,更新答案
Else
i =
'第①处错误
End If
Loop
Text1.Text = Str(ans)
End Sub
Function pd(M As Integer) As Boolean
Dim f(1 To 20) As Integer 'f(i)表示国籍为i的小朋友是否包含
Dim t As Integer 't用于统计当前区间包含的国籍数量
pd = False
For i =" 1" To N - M + 1 '枚举以i为起点的M个小朋友中,各个国籍是否包含
For j =" i" To i + M - 1
f(a(j)) = 1 '等于1,表示国籍为a(j)的小朋友已包含,0表示不包含
Next j
t = 0
For j =" 1" To K '统计已包含的国籍的数量
t =
'第②处错误
Next j
If t =" K" Then pd =" True:" Exit Function '若包含K个国籍,返回True
For j =" 1" To K 'f数组元素重新初始化为0[:学。科。网Z。X。X。K]
f(j) = 0
Next j
Next i
End Function
例如有10个小朋友,5种国籍,从左到右排列,国籍编号依次是2,1,2,4,3,3,5,5,3,5,则最小的一段包含所有5种国籍的区间是从第2个到第7个小朋友,区间长度为6。
算法解析:区间的长度至少为K(国籍的数量),最大为N(小朋友的数量)。我们可以通过二分K到N之间的求得最小区间长度。
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim a(1 To 100) As Integer '依次存储为1到100的小朋友的国籍编号
Dim K As Integer
Dim N As Integer
Private Sub Form_Load() '窗体加载,生成数据
'产生N的值,表示人数
'产生K的值,表示国籍种数
'产生编号为1到N的小朋友的国籍编号,并存储在数组a中
'代码略
End Sub
Private Sub Command1_Click() '使用二分的思想计算最小区间
Dim M As Integer
i =" K:" j = N '答案的范围为K到N,即最少K,最多N个小朋友
Do While i <= j
M =" (i" + j) \ 2 '二分,求中间值
If pd(M) =" True" Then '调用Pd函数,判断区间长度为M时,是否包含所有国籍
j =" M" – 1
ans = M '若以M为区间长度可包含所有国籍,更新答案
Else
i =

End If
Loop
Text1.Text = Str(ans)
End Sub
Function pd(M As Integer) As Boolean
Dim f(1 To 20) As Integer 'f(i)表示国籍为i的小朋友是否包含
Dim t As Integer 't用于统计当前区间包含的国籍数量
pd = False
For i =" 1" To N - M + 1 '枚举以i为起点的M个小朋友中,各个国籍是否包含
For j =" i" To i + M - 1
f(a(j)) = 1 '等于1,表示国籍为a(j)的小朋友已包含,0表示不包含
Next j
t = 0
For j =" 1" To K '统计已包含的国籍的数量
t =

Next j
If t =" K" Then pd =" True:" Exit Function '若包含K个国籍,返回True
For j =" 1" To K 'f数组元素重新初始化为0[:学。科。网Z。X。X。K]
f(j) = 0
Next j
Next i
End Function
寻找数组元素a(1)到a(10)中最小值min程序段如下:
For i=2 To 10
If a(i)<min Then min=a(i)
Next i
方框中最合适的语句是( )
For i=2 To 10
If a(i)<min Then min=a(i)
Next i
方框中最合适的语句是( )
A.a(1)=min | B.a(1)=0 |
C.min=a(1) | D.min=0 |
小树要买一本书,收集了各个网上书店中该书的售价,她设计了一个VB排序程序,帮助她将售价由低到高排序。程序运行界面如图所示,左边列表框List1中显示排序前数据,单击“排序”按钮Command1,在右边列表框List2中显示按售价从低到高排序后的结果,在标签Label3中显示比较次数(此图中比较的次数用图像处理软件遮挡)。程序中数组a和数组b分别存储网上书店名称和对应的售价。

程序代码如下:
Const n As Integer ’n为比较次数
Dim a(1 To n)As String ’数组a用于存储网上书店名称
Dim b(1 To n) As Integer ’数组b用于存储售价
Private Sub Command1_Click()
Dim i As Integer,j As Integer,k As Integer,t As Single,s As String
Dim num As Integer
num=0
For i=1 To 4
k=i
For j=____①____ To 5
If b(k)>b(j) Then k=j
②____
Next j
If ____③____ Then
s=a(i):a(i)=a(k):a(k)=s
t=b(i):b(i)=b(k):b(k)=t
End If
Next i
For i=1 To 5
List2.AddItem a(i)+“ ”+Str(b(i))
Next i
Label3.Caption=“比较次数为:”+Str(num)+“次”
End Sub
Private Sub Form_Load()
’此过程用于对数组a和数组b进行赋初值,并显示在List1中,代码略
End Sub
(1)在程序①、②和③划线处填入适当的语句或表达式,将程序补充完整:
程序中①划线处应填入________________________________________。
程序中②划线处应填入________________________________________。
程序中③划线处应填入________________________________________。
(2)程序结果中被遮掉的比较次数是多少? ______________________。

程序代码如下:
Const n As Integer ’n为比较次数
Dim a(1 To n)As String ’数组a用于存储网上书店名称
Dim b(1 To n) As Integer ’数组b用于存储售价
Private Sub Command1_Click()
Dim i As Integer,j As Integer,k As Integer,t As Single,s As String
Dim num As Integer
num=0
For i=1 To 4
k=i
For j=____①____ To 5
If b(k)>b(j) Then k=j
②____
Next j
If ____③____ Then
s=a(i):a(i)=a(k):a(k)=s
t=b(i):b(i)=b(k):b(k)=t
End If
Next i
For i=1 To 5
List2.AddItem a(i)+“ ”+Str(b(i))
Next i
Label3.Caption=“比较次数为:”+Str(num)+“次”
End Sub
Private Sub Form_Load()
’此过程用于对数组a和数组b进行赋初值,并显示在List1中,代码略
End Sub
(1)在程序①、②和③划线处填入适当的语句或表达式,将程序补充完整:
程序中①划线处应填入________________________________________。
程序中②划线处应填入________________________________________。
程序中③划线处应填入________________________________________。
(2)程序结果中被遮掉的比较次数是多少? ______________________。
学校为每位同学办理一张校园卡,该卡可供同学们在食堂用饭、图书馆借书、超市消费等,因此称为一卡通,一卡通的卡号是唯一的,卡内会记录每位同学的姓名、班级、金额等信息。下列程序的功能是根据卡号查找对应的姓名,程序中数组a保存卡号,数组b保存姓名,第i位同学的卡号是a(i),姓名是b(i)。
程序界面如下图所示,左边列表框列出所有同学的卡号和姓名,在右边文本框Text1中输入卡号,单击“查询”按钮(Command1),程序就按卡号进行查找,如果找到就在标签Label3中输出姓名,否则就输出“查无此人”。

解决此问题的算法流程图如下图所示,相应的程序如下,在程序(1)和(2)画线处,填入适当的语句或表达式,把程序补充完整。
Private Sub Command1_Click()
Dim x As String,i As Integer,s As String,f As Boolean
x=Text1.text
i=0;f=False ’f标志是否已经找到,值为True时表示已经找到,值为False时表示没找到
Do While(i<n) And((1)________) ’n是总人数
i=i+1
If x=a(i) Then
f=True
End If
Loop
If f=True Then
(2)________
Else
s=“查无此人!”
End If
Label3.Caption=s
End Sub

(1)解决此问题所用的算法是________。(选填:顺序查找或对分查找)
(2)程序中画线处(1)应填入________。
(3)程序中画线处(2)应填入________。
程序界面如下图所示,左边列表框列出所有同学的卡号和姓名,在右边文本框Text1中输入卡号,单击“查询”按钮(Command1),程序就按卡号进行查找,如果找到就在标签Label3中输出姓名,否则就输出“查无此人”。

解决此问题的算法流程图如下图所示,相应的程序如下,在程序(1)和(2)画线处,填入适当的语句或表达式,把程序补充完整。
Private Sub Command1_Click()
Dim x As String,i As Integer,s As String,f As Boolean
x=Text1.text
i=0;f=False ’f标志是否已经找到,值为True时表示已经找到,值为False时表示没找到
Do While(i<n) And((1)________) ’n是总人数
i=i+1
If x=a(i) Then
f=True
End If
Loop
If f=True Then
(2)________
Else
s=“查无此人!”
End If
Label3.Caption=s
End Sub

(1)解决此问题所用的算法是________。(选填:顺序查找或对分查找)
(2)程序中画线处(1)应填入________。
(3)程序中画线处(2)应填入________。