相关试卷
-
1、通过排序算法对数组a中的5个数据“5,10,6,30,9”进行排序,部分VB程序如下:
For i=1 To 4
For j=5 To i+1 Step-1
If a(j)<a(j-1)Then
End If
Next j
Next i
下列关于该排序的说法正确的是( )
A、升序排序,实线框中的语句共执行了2次 B、升序排序,实线框中的语句共执行了3次 C、降序排序,实线框中的语句共执行了5次 D、降序排序,实线框中的语句共执行了6次 -
2、有如下VB程序段:
For i=1 To 2
For j=5 To i+1 Step-1
If a(j)<a(j-1)Then
t=a(j):a(j)=a(j-1):a(j-1)=t
End If
Next j
Next i
若数组元素a(1)到a(5)的值依次为“95,88,66,80,75”,则经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为( )
A、66,75,95,88,80 B、66,75,80,95,88 C、95,88,66,80,75 D、95,88,80,75,66 -
3、对下列数据序列进行冒泡升序排序,排序效率最低的序列是( )A、31,29,24,20,15,10 B、10,15,20,24,29,31 C、29,10,31,15,20,24 D、24,29,31,20,15,10
-
4、某医院每天提前发放100个预约号。考虑到老年人身体,预约的病人按照以下规则进行就诊:
①老年人(年龄≥60岁)比非老年人优先就诊;
②老年人按年龄从大到小的顺序就诊,年龄相同的按预约顺序就诊;
③非老年人按预约顺序就诊。
小王根据以上规则编写了一个VB程序,通过引入索引数组temp进行排序,使得age(temp(1))≥age(temp(2))≥age(temp(3))…≥age(temp(n))。如图a所示。
图a
图b程序运行时,病人的数据显示在列表框List1中,单击“就诊排序”按钮Command1,排序结果显示在列表框List2中,程序运行界面如图b所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)、分析程序,可知程序中读取的数据库工作表名称为。(2)、请在画线处填入合适的代码。Dim pname(1 To 100)As String ‘存放病人姓名
Dim age(1 To 100)As Integer ‘存放病人年龄
Dim num(1 To 100)As Integer ‘存放病人序号
Dim n As Integer
Private Sub Command1_Click( )
Dim temp1(1 To 100)As Integer, temp2(1 To 100)As Integer ‘索引数组
Dim i As Integer, j As Integer, k1 As Integer, k2 As Integer, t As Integer
k1=0:k2=0
For i=1 To n
If age(i)<60 Then
k1=k1+1
temp1(k1)=num(i)
Else
k2=k2+1
temp2(k2)=num(i)
End If
Next i
For i=1 To k2-1
For j=k2 To i+1 Step-1
If ① Then
t=temp2(j):temp2(j)=temp2(j-1):temp2(j-1)=t
End If
Next j
Next i
List2.Clear
List2.Addltem "就诊号 名单 年龄"
For i=1 To k2
List2.Addltem Str(i)&." "&.pname(temp2(i))&"r/&.Str(age(temp2(i)))
Next i
For j=1 To k1
List2.Addltem ② &" "&pname(templ(j)&" "&.Str(age(templ(j)))
Next j
End Sub
Private Sub Form_Load( )
Dim conn As New ADODB. Connection, rs As New ADODB. Recordset
Conn.ConnectionString="Provider=Microsoft. ACE. OLEDB. 12.0;DataSource="&App. Path&"\pdxt.accdb"
conn.Open
Set rs. ActiveConnection=conn
rs. Open"select*from jzmd"
n=0
List1.AddItem"预约号 名单 年龄"
Do While Not rs. EOF
③
num(n)=n
pname(n)=rs. Fields(1)
age(n)=rs Fields(2)
List1. Addltem Str(num(n))&" "&-pname(n)&." "&.Str(age(n))
rs. MoveNext
Loop
rs.Close:conn.Close
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
-
5、小王编写统计工厂中生产某种零件的工人数量的VB程序,运行程序后,从数据库中获取每个工人生产的零件数量,并存储在数组xs中:在文本框Text1中输入达标零件数da,单击“开始统计”按钮Command1,筛选数组xs中大于等于所输入零件数da的数据,并依次存储在数组bf中。最后统计数组bf中生产相同零件数量的人数,存储在数组tj后,将统计结果输出在列表框List1中,数组tj中各元素的含义如下表所示,程序运行界面如图所示。
数组元素
数组元素的含义
tj(1)
存储查找到第1个大于da的零件数
tj(2)
存储生产了tj(1)个零件的工人数量
…
tj(2*i-1)
存储查找到第i个大于da的零件数
tj(2*i)
存储生产了tj(i)个零件的工人数量
…
例如:tj(1)=1948,tj(2)=12。这对数据的含义为:共有12个工人生产了1948个零件。
实现以上功能的VB程序如下,请回答下列问题:
(1)、根据程序运行界面的数据及数组tj中各元素的含义进行分析,数组元素tj(8)的值是(填数值)。(2)、请在画线处填入合适的代码。Private Sub Command1_Click( )
Dim bf(1 To 1000)As Integer
Dim maxn, d, k, sa As Integer
Dim I, j, flag As Integer
da=Val(Text1.Text):maxn=0:k=1
For j=1 To n
If xs(j)>=da Then maxn=maxn+1
bf(maxn)=xs(j)
Next j
For i=1 To maxn
flag=0
For j=1 To i-1
If bf(i)=bf(j) Then flag=1
Next j
If flag=0 Then
①
d=1
For j=i+1 To maxn
If bf(i)=bf(j) Then ②
Next j
tj(2*k)=d
k=k+1
End If
Next i
k=k-1
For j=1 To ③
List1. Addltem Str(tj(j))+" "+Str(tj(j+1))
Next j
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
-
6、已知字符串型数组a(下标为1到2*n),在a(2*i-1)中保存了某班第i个同学的姓名,在a(2*i)中保存了第i个同学的技术成绩,并且a(2),a(4)…,a(2*n)是按成绩数值由大到小排列的,且各不相同,现按对分查找的方式查找成绩是key的同学的姓名,假设成绩是key的同学必定存在,部分VB程序如下:
i=1:j=n:f=False
Do While i<=j and Not f
___________
If Val(a(m))=key Then
Search=m:f=True
Elself Val(a(m))>key Then
i=m\2+1
Else
j=m\2-1
End If
Loop
Text2.Text="成绩是"+Str(key)+"的同学叫:"+a(m-1)
程序画线处应填入的代码为( )
A、m=Fix((i+j)/2) B、m=(2*i+2*j)/2 C、m=Fix(i+j)/2*2 D、m=(Fix(i+j)/2)*2 -
7、有如下VB程序段:
For i=1 To 10
a(i)=Int(Rnd*90)+10
Next i
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 9
If c(i)>0 Then s=s+c(i)
Next i
Label1.Caption=Str(s)
若数组c中各元素初值为0,s的初值也为0,执行该程序段后,标签Label1上显示的内容是( )
A、5 B、7 C、9 D、10 -
8、某VB程序的部分代码如下:
Dim a(1 To 9)As Integer
Text 1.Text=""
For i=1 To 9
a(x(i))=a(x(i))+1
Next i
For i=1 To 9
For j=1 To a(i)
Text1.Text=Str(i)+Text1.Text
Next j
Next i
若数组x(1)到x(9)的值依次为“8,9,7,3,2,7,1,4,2”,则执行该程序段后,在文本框Text1中显示的是( )
A、1 2 3 4 7 8 9 B、1 2 2 3 4 7 7 8 9 C、9 8 7 4 3 2 1 D、9 8 7 7 4 3 2 2 1 -
9、为分析数组a中各元素依次变化的情况,进行如下定义:
·变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。
·波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个。终点是峰顶后所有连续下降段中的最后1个。
·对称波峰:上升段与下降段个数相同的波峰称为对称波峰。
图为一组数据的变化段及波峰示意图。
现要求统计数组a中各元素依次变化过程中“对称波峰”的个数,小李依据上述描述设计了如下VB程序,请回答下列问题:
(1)、数组元素“1,4,3,3,2,5,8,7,8,3,4,7,9,6,3,1”依次变化过程中,“对称波峰”的个数为。(2)、请在画线处填入合适的代码。Const n=20
Dim a(1 To n)As Integer
Private Sub Form_Load( )
´读取数据,并存储到数组a中。代码略
End Sub
Dim flag As Integer ‘存储变化段的状态:1表示升,-1表示降,0表示平。
Dim count As Integer ‘存储对称波峰的个数
Dim steps As Integer
Dim i As Integer
flag=0:steps=0:count=0
For i= ① To n
If a(i)>a(i-1)Then
If IsSymPeak(flag, steps)Then count=count+1
If flag=0 Or flag=-1 Then
②
Else
steps=steps+1
End If
flag=1
ElseIf a(i)=a(i-1) Then
If IsSymPeak(flag, steps) Then count=count+1
steps=0:flag=0
Else
steps=steps-1
flag=-1
End If
Next i
If IsSymPeak(flag, steps) Then count=count+1
Text1. Text=Str(count)
End Sub
Function IsSymPeak(flag As Integer, steps As Integer) As Boolean
If ③ Then
IsSymPeak=True
Else
IsSymPeak=False
End If
End Function
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
-
10、编写VB程序统计单词个数。要求:在文本框Text1中输入英语短文,单击“统计”按钮,单词的个数显示在Text2中(假定每个单词仅包含英文字母)。程序界面如图所示,按此要求编写程序如下:
Function Stod(ch As String)As String
Dim n As Integer, i As Integer
Dims As String, st As String
For i=1 To Len(ch)
s=Mid(ch, i, 1)
If s>="a" Ands<="z" Then
s=Chr(Asc(s)-32)
End If
______________
Stod=st
Next i
End Function
Private Sub Command1_Click()
Dim article, f As String, s1, s2 As String
Dim i As Integer, m As Integer
Dim flag As Boolean
article=Stod(Text1. Text):f=Stod(Text2. Text)
m=0:flag=False
For i=1 To Len(article)
y=Mid(article, i, 1)
If y>="A"Andy<="Z"Then
If flag=False Then
s1=
s2=Mid(article, i+Len(f), 1)
If s1=f And Not(s2>="A" And s2<="Z") Then
m=m+1
End If
flag=True
End If
Else
flag=False
End If
Next i
Label2.Caption="单词"+Text2.Text+“出现"+Str(m)+"次"
End Sub
(1)、要在文本框Text1中输入这段英文内容,需要修改Text1的属性值(单选,填字母:A .Caption/B .Text/C .Font/D .Height)。(2)、请将程序代码中的画线处语句补充完整。(3)、程序代码中的加框处有误,请改正。(4)、程序代码中,flag=表示一个单词的开始,即当前字一个单词的首字母。 -
11、数组元素a(1)到a(5)的值依次为“24,16,4,33,77”,经过下面程序段加工后,数组flag中元素值为True的共有( )
Dim flag(1To 4)As Boolean
For i=1 To 4
For j=5 To i+1 Step-1
If a(j)<a(j-1)Then
k=a(j):a(j)=a(j-1):a(j-1)=k
flag(i)=True
End If
Next j
Next i
A、0个 B、1个 C、2个 D、4个 -
12、有如下VB程序段:
Dim a(1 To 10)As Integer
Dim i As Integer, k As Integer
For i=1 To 10 Step 2
a(i)=1
Next i
For i=1 To 10
If i Mod 3=0 Then a(i)=1-a(i)
Next i
For i=1 To 10
If a(i)=1 Then k=k+1
Next i
该程序段执行后,变量k的值为( )
A、3 B、4 C、5 D、6 -
13、有如下VB程序段:
Dim a(0 To 9)As Integer
Dim t As Long
t=Val(Text1.Text):x=0
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中输入380305220,则程序执行后,变量x的值为( )
A、1 B、2 C、5 D、9 -
14、有如下VB程序段:
Dim a(0 To 25)As Integer
s=Text1.Text
For i=1 To Len(s)
ch=Mid(s,i,1)
If ch>=“a” And ch<=“z” Then
m=Asc(ch)-97
a(m)=a(m)+1
End If
Next i
已知数组a中元素的初值为0,若文本框Text1中输入的内容是“One of the most important questions;”,执行该段程序后,数组元素a(14)的值为( )
A、0 B、2 C、4 D、5 -
15、查找并删除重复数据的算法是基于顺序查找的优化,主要思路是把待查数据的起点元素设置成查找关键字,然后从后往前查找,通过结束时所停留的数据位置来判断查找结果(即结束时若停留在数据序列的起点,则表示数据序列中无重复数据;否则,存在重复数据,删除该数据后继续查找)。
编写VB程序,实现上述算法。程序功能如下:运行程序时,在列表框List1中显示数组a中的原始数据,并在列表框List2中输出去重后的数组a中的数据,即相同的数据仅保留一个。同时在标签Label1中显示删除的数据总个数,运行效果如图所示,程序代码如下:
Const maxn=10
Dim a(1 To maxn)As Integer
Private Sub Form_Load( )
´maxn个数据在数组a中,并在列表框List1中显示
End Sub
Private Sub Command1_Click( )
Dim i As Integer, n As Integer ‘n用于存储当前查找的数字长度
Dim j As Integer, key As Integer ‘key用于存储本次查找的关键字的数据位置
key=1:n=maxn
Do While key<=n
i=n-1
Do While
‘①i=i-1
Loop
If i=key Then ‘找到重复数据,删除;未找到,设定下一查找关键字
key=key+1
Else
For j=i To n-1
a(j)=a(j+1)
Next j
n=n-1
End If
Loop
For i= 1To n
List2.AddItem a(i)
Next i
Labell.Caption="共删除重复数据:"&___________&"个"
End Sub
(1)、程序代码“Sub Form_Load( )”中,Load是(单选,填字母:A .属性名/B .事件名/C .方法名/D .类名)。(2)、程序代码中,加框处循环条件有误,请改正。(3)、请将程序代码中的画线处赋值语句补充完整。(4)、如图所示的原始数据中,重复数是“1,7,10”,该程序运行时,最先删除的重复数是。 -
16、已知数组a中存储五个数据:8,13,24,32,45,现在Text1中输入一个整数x,将x插入到数组中,并使数据序列仍保持有序。
Private Sub Command1_Click( )
Dim n, i, j, x As Integer
n=5:i=1
x=Val(Text1.Text)
If x>a(n)Then
a(n+1)=x
Else
Do While x>a(i)
①
Loop
For j=n To i Step-1
a(j+1)=a(j)
Next j
②
End If
n=n+1
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②。
-
17、有如下VB程序段:
n=10
For i=1 Ton-1
For j=i+1 To n
If a(i)=a(j)Then
a(j)=a(n)
n=n-1
End If
Next j
Next i
若数组a中的元素为“3,3,7,7,11,11,15,15,19,19”,则该程序执行后,数组a中的n个元素值依次为( )
A、3,19,7,15,11 B、3,7,11,15,19 C、3,3,7,7,11 D、3,19,7,19,11 -
18、有如下VB程序段:
m=Val(Text1.Text)
i=n:f=False
Do While i>0 And f=False
If a(i)>m Then
a(i+1)=a(i)
i=i-1
Else
f=True
End If
Loop
数组中的n个元素从小到大排序,如果要将Text1中输入的值m插入到数组中,仍使元素值保持有序,则应插入的正确位置是( )
A、i-1 B、i C、i+1 D、i+2 -
19、编写寻找最长等差数列程序时,先随机生成n(n=20)个互不相同的整数,并降序排列后显示在List1中,找出由连续的数组元素构成的最长等差数列,并将其输出在列表框List2中(若长度相等,则输出靠前的一组),程序运行界面如图所示。
实现上述功能的VB程序如下。
Dim a(1 To 20)As Integer
Dim n As Integer
Private Sub Command1_Click( )
‘随机生成20个互不相同的整数,存储在数组a中,n记录了整数的个数,代码略
End Sub
Private Sub Command2_Click( )
Dim t,max,w As Integer
Dim i,c As Integer
max=1:w=1
i=2:t=2
①
Do While i<n
If a(i+1)-a(i)=c Then
t=t+1
If t>max Then
max=t
②
End If
Else
t=2
c=a(i+1)-a(i)
End If
i=i+1
Loop
If max>2 Then
For i= ③ To w
List2. AddItem Str(a(i))
Next i
Else
List2. AddItem"没有找到等差数列"
End If
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
-
20、在一行数据(1,23,6,2,4,5,6,18,5,19)中,存在连续递增的数据序列(1,23),(6),(2,4,5,6,18),(5,19),其序列长度分别为2,1,5,2,则连续递增的数据序列长度的最大值max=5。求max值的VB程序如下,但加框处代码有错,请改正。
Const n=10
Dim a(1 To n)As Integer
‘Text1_KeyPress过程用于输入数据并将数据依次存放到数组a中
Private Sub Text1_KeyPress(KeyAscii As Integer)
‘该过程代码略
End Sub
Private Sub Command1_Click( )
Dim i,k,max As Integer
max=1
k=1
For i=2 To n
If
Then k=k+1 Else k=1 ‘⑴If k>max Then
‘⑵Next i
Text2.Text=Str(max)
End Sub
以上程序段运行时,为了实现上述功能,加框处的代码应改正为:⑴;⑵。