相关试卷
-
1、在Visual Basic中,能表示整数x是完全平方数(如9=3*3,9是完全平方数)的表达式是( )A、x^2=x*x B、sqr(x)=x\2 C、int(sqr(x))^2=x D、(x\2)^2=x
-
2、某算法的部分流程图如图所示。执行这部分流程后,输出m的值是( )
A、0 B、1 C、2 D、9 -
3、某流程图如图所示:
若输入k的值为9,最终i、s的值分别为( )
A、11 0 B、11 -11 C、9 0 D、9 -9 -
4、活动课上,n个学生要两两组队进行拔河比赛,要求每个小组总体重不超过120kg,小林想知道最多可以组成多少个队伍,并希望得到可行的组队方案。于是设计了如下界面的程序,在文本框Text1中输入n 个学生的体重(数字之间用逗号隔开),单击“队伍”按钮Command1后在标签Label1上显示最多可组队数量,同时在列表框List1输出方案。
实现上述功能程序如下,在横线处填入合适的代码。
Dim n As Integer
Dim a(1 To 50) As Integer
Sub makedata(s As String) ‘该过程实现将输入的体重分别存入数组a中
Dim in As Long, x As Long, c As String, i As Integer
m=Len (s) : n=0
For i=1 To m
c=Mid(s, i, 1)
If c >=“0” And c <=“9” Then
x=x+Asc(c)-Asc(“0”)
Else
If x > 0 Then n=n+1: a(n)=x
x=0
End If
Next i
n=n+1: a(n)=x
End Sub
Private Sub Command1_Click()
Dim s As String, i As Integer, j As Integer, t As Integer
Dim cnt As Integer, st As Integer, ed As Integer
s=Text1.Text Call makedata(s) ‘调用过程
For i=1 To n-1 ‘实现降序排序
For j=n To i+1 Step-1
IfThen
a(j)=a(j)+a(j-1) : a(j-1)=a(j)-a(j-1) :
End If
Next j
Next i
‘下列程序段实现计算最多可组队伍
cnt=0: st=1: ed=n
Do While st < ed
If a(st)+a(ecl) <=120 Then
List1. AddItem Str(a(st))+“和”+Str(a(ed))+“组队”
cnt=cnt+1
st=st+1
Else
st=st+1
End If
Loop
Label2. Caption=“最多可以组”+Str (cnt)+“组队伍”
End Sub
-
5、有100个大小形状一样的玻璃球,其中有1个玻璃球的重量轻于其他99个玻璃球,如何用一台无砝码的天平,以最快的速度找出这个轻玻璃球?运用“三分筛选”法来模拟“寻找”这个轻玻璃球的算法如下:
步骤1:如果待筛选的玻璃球个数<3,则认定已经找出了这个玻璃球(认定方法参照步骤2中描述),停止筛选,并输出经过的筛选总次数;否则,重复执行步骤2。
步骤2:按编号依次将玻璃球均分成3份,如果有多余的放入第3份中;比较第1、2份的玻璃球重量:
①如果第1份等于第2份的重量,则选取第3份的玻璃球作为下一次筛选的对象;
②如果第1份小于第2份的重量,则选取第1份的玻璃球作为下一次筛选的对象;
③如果第1份大于第2份的重量,则选取第2份的玻璃球作为下一次筛选的对象;
重复执行步骤1。
例如:第1次筛选的小球编号区间是1~100,均分成三份的待称重小球编号分别是1~33、34~66、67~100;第2次则选取以上3份中的一份进行再筛选、再均分……直至找到。
解决上述问题的VB程序功能如下:运行程序,在列表框List1中显示100组数据,分别代表每个编号及对应的小球重量(其中有且只有一个小球的重量与其他小球不同),单击“筛选”按钮Command1,在列表框List2中显示每次筛选的编号区间和完成筛选的总次数。程序运行界面如图。
(1)、如果编号为88的小球是最轻的,按照题中给定算法,找到此小球需经历的筛选次数是 次。(2)、实现上述功能的VB程序如下,请在横线处填入合适的代码。Const maxn=100
Dim a(1 To maxn) As Integer
Dim w(1 To 2) As Integer ‘数组w用来存储第1份和第2份小球的重量
Private Sub Form Load()
‘此处代码用来模拟产生100个小球的重量,分别存储在数组元素a(1)~a(100)中;
‘其中只有1个小球的重量为8,随机存储在数组a的某元素中,其余重量均为10;
‘此处代码略
End Sub
Private Sub Command1_Click()
Dim left As Integer, right As Integer ‘left 为起始编号,right 为结束编号
Dim s As Integer, c As Integer ‘s为每次查找的区间长度
left=1: right=maxn
c=1: s=right: i=0
List2. AddItem Str (i+1)+“--->”+Str(maxn)
Do While right-left > 3
w(1)=0: w(2)=0: k=1
i=left
s=
Do While i<=(s \ 3) * 2+left-1 ‘Do语句用于将待筛选的数据进行区域划分
w(k)=w(k)+a(i)
If i=(s \ 3) * k+left-1 Then k=k+1
i=i+1
Loop
If w(1)=w(2) Then
left=left+(s \ 3) * 2
Elself w(1) < w(2) Then
Else
right=left+(s \ 3) *2-1
left=s \ 3+left
End If
List2. AddItem Str(left) &“--->” & Str(right)
Loop
List2. AddItem “经过” +Str (c)+“次后找到”
End Sub
-
6、查找最接近的数。编写一个查找最接近的数的VB程序:程序运行时,在文本框Text1中输入产生随机数的个数(1到100之间),单击命令按钮“产生随机数并升序排列”后,在列表框List1中显示已经按升序排列后的随机整数。然后在文本框Text2中输入要查找的整数,单击命令按钮“查找”后,在标签Label3中显示随机整数序列中与待查找数最接近的整数(当最接近的数有2个时,输出较大的一个)。程序运行效果如图所示。实现上述功能的VB代码如下,请在横线处填入合适代码。
Dim n As Integer ‘存储随机数的个数
Dim f(1 To 100) As Boolean ‘f (i)为true时表示随机整数i已经产生过
Dim a(1 To 100) As Integer ‘依次存放升序排序后的n个随机数
Private Sub Command1_Click() ‘命令按钮“产生随机数并升序排列”的单击事件
Dim i As Integer
Randomize
For i=1 To 100
f(i)=False
Next i
n=Val(Text1. Text)
For i=1 To n
t=Int(Rnd * 100+1)
Do While f(i)=True
t=Int (Rnd * 100+1)
Loop
Next i
j=0
For i=1 To 100 ‘实现排序并输出
If f(i)=True Then
a(j)=i
List1.AddItem Str(i)
End If
Next i
End Sub
Private Sub Command2_Click() ‘命令按钮“查找”的单击事件
Dim key As Integer
key=Val(Text2. Text)
If key <=a(1) Then Label3. Caption=Str(a(1)) : Exit Sub
If key >=a(n) Then Label3. Caption=Str(a(n)) : Exit Sub
L=1: R=n
Do While L <=R ‘找到与key较为接近的两个数a(R)和a(L)
m=(L+R) \2
If key <=a(m) Then
R=m-1
Else
L=m+1
End If
Loop
IfThen ‘在a(R)和a(L)中选出更接近key的数
Label3. Caption=Str(a(R))
Else
Label3. Caption=Str(a(L))
End If
End Sub
-
7、n个数据的冒泡升序排序需要经过n-1遍的加工,每一遍加工自下而上比较相邻两个数据,把较小者交换到上面,在第i遍加工过程中需要进行n-i对数据的比较。在某些情况下,第i遍加工过程中,在上面部分较小数据已经有序的情况下,不需要再进行n-i对数据的比较。如对“17, 18,19, 24, 23, 20”这6个数据排序中,第1遍排序结束后数据为“17, 18,19, 20, 24, 23”,第2遍排序时不再需要对20及其前面3个数据进行比较。以下程序实现了冒泡排序的优化,在横处填入合适的代码。
Dim n As Integer
Dim a(1 To 100) As Integer
’n=10,排序前生成的数据存储在数组a中,并在列表框List1中显示,代码略
Private Sub Command1_Click()
Dim i As Integer, j As Integer, start As Integer, t As Integer
i=2
Do While i < n start=n
For j=n To i Step-1
IfThen
t=a(j):a(j)=a(j-1):a(j-1)=t
End If
Next j
i=start+1
Loop
For i=1 To n
List2.AddItem
Next i
End Sub
-
8、插数。输入一个整数x,要将x插入到n(n<50)个有序(按降序排列)数据中,并使数据序列仍保持有序,试求出x应插入的位置。界面设计如图所示。

程序说明:
⑴其中n由文本框Text1中数据得到,x由文本框Text2中数据得到,插入位置显示在文本框Text3中。
⑵其中n个有序数据将通过随机函数Rnd产生,并对n个数进行降序排序后存入数组a中,同时显示在列表框List1中。
为了实现这一目标,完善下面的VB程序,在横线处填入合适的语句或表达式,完成程序设计。
Private Sub Command1_Click()
Dim a(1 To 50)As Integer
Dim n As Integer, i As Integer
Dim x As Integer, temp As Integer
Randomize
List1.Clear
n=Val(Text1.Text)
x=Val(Text2.Text)
‘随机产生n个数,并存放至a数组中
For i=1 To n
a(i)=Rnd*200+1
Next i
‘将数组a中的数按降序排序
For i=2 To n
For j=n To i Step-1
If ① Then
temp=a(j):a(j)=a(j-1):a(j-1)=temp
Next j
Next i
‘将排序后的数组元素显示在列表框List1中
For i=1 To n
List1.AddItem Str(a(i))
Next i
‘插入操作
If ② Then
i=n+1
Else
③
Do While x<a(i)
i=i+1
Loop
End if
‘在文本框Text3中显示插入位置
Text3 Text=Str(i)
End Sub
-
9、小王编写“合并区间” VB程序,功能如下:窗体加载时,获取并存储合并前的区间数据,并显示在列表框List1中。单击“合并”按钮后,以区间左端点数值对区间进行升序排序,然后相邻区间的相交进行合并,最后在列表框List2上显示合并后的区间。程序运行如图所示:
实现以上功能的VB程序如下,在横处填入合适的代码。
Dim a(1 To 20) As Integer ‘存储区间的左端点数值
Dim b(1 To 20) As Integer ‘存储区间的右端点数值
Private Sub Form_Load()
‘将区间左端点存入数组a,区间右端点存入数组b,并在列表框List1显示,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim curL As Integer, curR As Integer
For i=1 To n-1
For j=1 To n-i
IfThen
t=a(j): a(j)=a(j+1): a(j+1)=t
t=b(j): b(j)=b(j+1): b(j+1)=t
End If
Next j
Next i
curL=a(1): curR=b(1)
For i=2 To n
IfThen
If curR < b(i) Then
Else
List2.AddItem“["+Str(curL)+Str(curR)+"]”
curL=a(i): curR=b(i)
End If
Next i
List2. AddItem “[”+Str(curL)+Str(curR)+“]”
End Sub
-
10、现有n根棍子,第i根棍子的长度为ai 。想要从中选出三根棍子组成周长尽可能长的三角形,输出最大的周长;若无法组成三角形,则输出0。如当n=5,a={2,3,4,5,10}时,输出12,即选择了3、4、5。当n=4,a={4,5,10,20}时,无法组成三角形,输出0。加框处代码有误,请改正。
Dim a(1 To 1000) As Integer
Dim n As Integer
Private Sub Form_Load()
‘确定n的值和数组a的各个元素值,即每根棍子的长度值,代码略
End Sub
Function max(x As Integer, y As Integer) As Integer
If x > y Then
max=x
Else
max=y
End If
End Function
Private Sub Command1_Click()
Dim i As Integer , j As Integer , k As Integer
Dim ans As Integer , c As Integer , longest As Integer , rest As Integer
ans=0
‘让 i<j<k,保证棍子不会重复选中
For i=1 To n
For j=i+1 To n
For k=j+1 To n
c=a(i)+a(j)+a(k)
longest=
‘①rest=c-longest ‘rest 保存最短的两条边的和
If
Then ‘②ans=max(ans , c)
End If
Next k
Next j
Next i
Print ans
End Sub
① ②
-
11、有如下VB程序段:
s=“7218634594” : n=Len(s): c=0
For i=1 To n-1
a(i)=Val(Mid(s, i, 2))
Next i
For i=1 To n-2 Step 2
k=i
For j=i+2 To n-1 Step 2
If a(j) < a(k) Then k=j
Next j
If k <> i Then
t=a(i): a(i)=a(k): a(k)=t: c=c+1
End If
Next i
Text1.Text=Str(c)
该程序段运行后,Text1中显示的内容是( )
A、1 B、2 C、3 D、4 -
12、有如下VB程序段:
i=1
j=6
s=“”
Key=Text1. Text
Do While i <=j
m=Int((i+j) / 2+0. 5)
s=s+“ ”+a(m)
If Key > a(m) Then
i=m+1
Else
j=m-1
End If
Loop
Text1. Text=s
数组元素a(1)到a(6)的值分别为“Beijing”“Guangdong”“Jiangsu” “Jiangxi”“Shanghai” “Zhejiang”,己按字典序排序。当key的值为“Zhejiang”时,单击命令按钮Command1,文本框Text1中显示的内容为( )
A、Jiangxi Zhejiang B、Jiangsu Shanghai Jiangxi Zhejiang C、Jiangxi Zhejiang Shanghai D、Jiangsu Shanghai Zhejiang -
13、有如下程序段:
For i=1 To 2
k=i
For j=i+1 To 5
If d(k) < d(j) Then k=j
Next j
If k <> i Then t=d(k): d(k)=d(i) :d(i)=t
Next i
经过该程序段“加工”后,数组元素d(1)到d(5)的值依次为“44, 35, 30, 11,7”,则数组元素d(1)到d(5)的原始数据依次为( )
A、30,44,7,11,35 B、30,11,44,7,35 C、44,30,11,7,35 D、30,7,44,11,35 -
14、有以下VB程序段:
i=1: j=10: flag=True: cs=0
Key=Int(Rnd()*10)+28
Do While i <=j And flag=True
m=(i+j) \ 2 : cs=cs+1
If a (m)=Key Then
flag=False
Else If a(m) < Key Then
i=m+1
Else
j=m-1
End If
Loop
数组元素a(1)到a(10)依次是3 10 17 23 27 30 35 40 45 50,变量cs的值可能是( )
A、1或2 B、2或3 C、3或4 D、4或5 -
15、用以下对分查找算法:在一个包含有重复元素且从小到大排序(相等元素排在一起)的整数数组a中,查找某个重复出现的整数key,其中数组元素的总个数是n。
i=1: j=n
Do While i <=j
m=(i+j) \ 2
If a(m) < key Then i=m+1
Else
j=m-1
End If
Loop
那么执行该程序后,下列说法正确的是( )
A、程序可以找到重复元素key最开始出现的位置,该位置信息由变量i指示 B、程序可以找到重复元素key最后出现的位置,该位置信息由变量i指示 C、程序可以找到重复元素key最开始出现的位置,该位置信息由变量j指示 D、程序可以找到重复元素key最后出现的位置,该位置信息由变量j指示 -
16、有如下程序段:
Dim a(4) As Integer
Private Sub Command1_Click()
Dim s As String
a(1)=10:a(2)=30:a(3)=20:a(4)=40
s=doit(4)
Label1.Caption=s
End Sub
Function doit(k As Integer) As String
If k=1 Then
doit=Str(a(1))
Else
doit=doit(k-1) & Str(a(k))
End If
End Function
程序运行后,标签Label1中显示的内容是( )
A、10 20 30 40 B、10 30 20 40 C、40 30 20 10 D、40 20 30 10 -
17、某VB程序段如下:
For i=1 To 6
j=7
Do While j > i
If a(j)>a(j-1) Then
a(j)=a(j)+a(j-1)
a(j-1)=a(j)-a(j–1)
a(j)=a(j)-a(j-1)
End If
j=j-1
Loop
Next i
For i=3 To 6
s=s+a(i)
Next i
Label1. Caption=Str(s)
已知数组元素a(1)到a(7)的值依次为“8, 2, 3, 7, 10, 6, 5”,则执行该程序段后,标签Label1中显示的是( )
A、21 B、26 C、41 D、18 -
18、有如下某排序算法程序段:
For i=1 To 3
k=i
For j=i+1 To 6
If a(j) > a(k) Then k=j
Next j
t=a(i):a(i)=a(k):a(k)=t
Next i
数组元素a(1)到a(6)的值依次为“8,2,9,3,5,1”,经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为( )
A、8,2,9,3,5,1 B、9,2,8,3,5,1 C、9,8,5,2,3,1 D、9,8,5,3,2,1 -
19、对包含100个元素递增排序的数组a,采用对分查找法找某关键字,若查找不成功,则关键字的比较次数最多是( )A、100 B、6 C、7 D、8
-
20、小王拍摄了一张图片作为背景,使用Photoshop软件制作“海的声音”作品,如图a所示。
图a
(1)、“海的声音”四个字扭曲的效果是通过(选填:自由变换/添加滤镜/文字变形)功能来实现的。(2)、小王拍摄图片的当天没有太阳,但是他又想在图片里加入太阳的效果,可以通过添加滤镜来模拟太阳。(3)、图中有1只海鸥是从图b中复制而来的。
图b
那么小王在选取图b中海鸥时用到的工具应当是(选填字母:A .矩形选框工具/B .椭圆选框工具/C .磁性套索工具/D .油漆桶工具)。
(4)、若小王编辑完之后想把文件发送给老师修改,则他保存的文件格式应该为。