资源描述
《算法与程序设计》综合练习
一、选择题(本大题共12小题,每小题2分,共24分。在每小题给出的四个选项中,只有一个符合题目要求)
1.在VB应用程序设计中,通常应对________编写程序代码。( )
A.所有对象 B.窗体 C.Timer D.有事件的对象
答案 D
2.要定义一个可存储数值-7.283的变量,其合适的类型是( )
A.Integer B.Long C.Single D.Boolean
答案 C
3.一张单据上有一个5位数的号码67□□8,其中百位和十位上的数字看不清楚了,但知道该数能够被78整除,也能被67整除。设计一个算法求出该号码,下列算法合适的是( )
A.解析算法 B.穷举算法
C.递归算法 D.查找算法
答案 B
4.已知三角形的三条边长分别为a.b.c,半周长p=(a+b+c)/2该三角形面积计算公式为s=,计算S的VB语句是( )
A.s=
B.s=
C.s=
D.s=Sqr(p*(p-a)*(p-b)*(p-c))
答案 D
5.表示区间[5,14]的VB表达式是( )
A.Int(Rnd*5) + 10 B.Int(Rnd*10) + 5
C.Int(Rnd*10) + 14 D.Int(Rnd*14) + 5
解析 Int(Rnd*5) + 10的区间为[10,14];Int(Rnd*10) + 5的区间为[5,14];Int(Rnd*10) + 14的区间为[14,23];Int(Rnd*14) + 5的区间为[5,18]。
答案 B
6. 某算法流程图如图所示,执行该算法,输出s的结果是( )
A.0 B.8 C.10 D.15
答案 D
7.运行如下Visual Basic程序,
单击命令按钮Command1,出现如图
所示的出错信息。发生“下标越界”
错误时所执行的语句是( )
Private Sub Command1_Click()
Dim a(0 To 5) As Integer
Dim i As Integer ’①
a(0) = 1 ’②
For i = 1 To 5
a(i) = 2 * a(i-1) + 1 ’③
Next i
Text1.Text =Str(a(i)) ’④
End Sub
A.① B.② C.③ D.④
答案 D
8.小王用天平称量的过程如下:先放置100克砝码,砝码偏重;再将砝码改为50克,砝码偏轻;又将砝码改为70克,……通过这种策略,小王很快完成物品称重工作。此过程借鉴的算法是( )
A.排序 B.顺序查找 C.对分查找 D.累加
答案 C
9.如下VB程序段:
Private Sub Command1_Click()
Dim x As Integer
Dim y As Integer
x = Val(Text1.Text)
y = 10
If x < 0 Then
y = 5
Else
If x < 100 Then
y = 100
Else
y = 200
End If
End If
Print y
End Sub
运行后,在文本框Text1中输入5,程序输出的结果是( )
A.5 B.10 C.100 D.200
答案 C
10.(2016·9·绍兴模拟)有如下VB程序:
Dim n As Integer
Function f(k As Integer) As Long
If k<=2 Then f=1 Else f=f(k-1)+f(k-2)
End Function
Private Sub command1_click()
n=Val(Text1.Text)
Label2.Caption=Str(f(n))
End Sub
该VB程序采用的主要算法是( )
A.枚举 B.递归
C.对分查找 D.冒泡排序
解析 由f=f(k-1)+f(k-2)可判断该程序采用的主要是递归算法。
答案 B
11.(2016·9·台州评估)有如下VB程序段:
Dim d(1 To 9)As Integer,s As String
Dim L As Integer,R As Integer,M As Integer,key As Integer
d(1)=2∶d(2)=3∶d(3)=5∶d(4)=7∶d(5)=11
d(6)=13∶d(7)=17∶d(8)=19∶d(9)=23
L=1∶R=9
s=“”∶key=17
DO While L<=R
M=(L+R+1)\2
If d(M)=key Then L=10
If d(M)<key Then L=M+1 Else R=M-1
s=s+Str(M)
Loop
Label1.Caption=s
该程序段运行后,标签框Label1中显示的内容是( )
A.5 8 7 B.5 7
C.11 19 17 D.11 17
解析 本题程序段为二分查找算法程序,M为每次查找二分的中点,s变量将每次的中点M转换成字符连接起来,最后标签框Label1输出s的值。分析程序运算过程,变量M第1次值为5,第2次为8,第3次为7,第3次找到d(7)=17。所以Label1=5 8 7。
答案 A
12.有如下程序片段,希望对a(1)到a(6)进行升序排序:
For i = 1 To 5
k =i
For j =i + 1 To 6
______①______
Next j
If k <>i Then t = a(i): a(i) = a(k): a(k) = t
Next i
那么划线部分①应填( )
A.If a(j) < a(k) Then k = j
B.If a(j) < a(k) Then k = i
C.If a(j) > a(k) Then k = j
D.If a(j) > a(k) Then k = i
答案 A
二、非选择题(本大题共5小题,其中第13小题5分,第14小题4分,第15小题5分,第16小 题6分,第17小题6分,共26分)
13.在一次校园歌手大奖赛中,有20位评委负责评判,打分的上限是10分。统计选手得分时,去掉一个最高分,再去掉一个最低分,然后取评委打分的平均值作为选手的最后得分。根据上述规则,信息小组设计了计算选手得分的程序。核心部分的程序如下:
‘d数组中存放了20位评委的打分
Smax=0:smin=10:score=0
For i=1 To 20
score = score + d(i)
If__________________________________________________________
If d(i) < smin Then smin =d(i)
Text1.Text=smax
Text2.Text=smin
Text3.Text= score
请分析任务和程序段,完成下列题目。
(1)程序段中出现的Text1、Text2、Text3是________类型的控件( )
A.列表框 B.文本框 C.按钮 D.标签
(2)为精确地显示选手的最后得分,变量score的数据类型应定义为( )
A.integer B.Long C.double D.string
(3)在设计用户界面时,要在启动计算过程的按钮上显示“计算”二字,应该将按钮的“________ ”属性值设置为“计算”。
(4)程序执行过程中,程序段中虚线框内的代码将被执行________次。
(5)请分析程序,将程序段中虚线框内的空白处补充完整。
If__________________________________________________________
答案 (1)B (2) C (3) Caption (4) 20
(5) d(i)>smax Then smax=d(i)
或smax < d(i) Then smax=d(i)
或 d(i) >= smax Then smax=d(i)
或smax <= d(i) Then smax=d(i)
14.编写VB程序,实现如下功能:在文本框Textl中输入包含数字、字母的字符串,单击“统计”按钮Command1,统计该字符串中数字字符的个数,并在标签Label1中输出结果。界面如图1所示。
(1)在设计应用程序界面时,应使用图2所示“控件工具箱”中的________(填写相应编号)添加“统计”按钮。
(2)为实现上述功能,请在划线处填入合适代码或选项。
Private Sub Command1-Click()
Dim s As String,c As String
Dim i As Integer,n As Integer,num As Integer
s=____①____’(填程序代码)
num=0
n=Len(s)
②____’(填字母:从下列A、B、C三个选项中选取一项)
③____’(填字母:从下列A、B、C三个选项中选取一项)
If c>=“0”And c<=“9”Then
num=num+1
End If
Next i
Label1.Caption=str(num)
End Sub
划线②、③的选项:
A.Do While i<=n B.c=Mid(s,i,1)
C.For i=1 To n
答案 (1)4 (2)① text1.text ②C ③B
15.(2016·9·台州评估)编写VB程序,实现如下功能:在文本框Text1中输入十进制整数,文本框Text2中输入待转换进制(范围2~16),单击“转换”按钮Command1,在列表框List1中输出该整数对应的进制结果,运行效果如图1所示。
图1 图2
(1)设计时,属性窗口对象列表如图2所示,则该程序共有________个对象。
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Const code=“0123456789ABCDEF”
Dim s1 As String,s As String ’变量s存储转换后的结果
Dim x AS Long,R As Integer
______①______
If R>2 And R<=16 Tnen
x=Val(Text1.Text)
s=“”
Do While x>0
y=x Mod R
x=______②______
s1=Mid(code,y+1,1)’将余数转换为对应的字符
s=______③______
Loop
List1.AddItem“(“& Text1.Text&”)10“&”→(“& s &”)”&R
End If
End Sub
解析 (1)观察图2下拉列表,对象的个数为7个。(2)阅读程序,填空①处的下一句判断R的值,R用于储存要转换的进制即Text2的内容,①处应为给R赋值,即R=val(Text2.text)。②处所在循环是进行进制的转换,采用除R取余法,y储存余数,x储存除以R以后去掉余数的整数,以备下次循环x再除R取余,所以X=X\R。③处是将求得的余数字符s1连接来,使用字符串连接运算符“&”或“+”,③处应填写sl&s或sl+s,注意连接顺序,先求得的余数要入在后边,填写s+sl或s&sl错误。因为变量sl储存的是通过截取字符串code得到的字符,不能使用str()函数字符转换字符。
答案 (1)7 (2)①R=val(Text2.text) ②&或+ ③sl&s或s1+s
16.下列VB程序的功能是:程序运行时,单击命令按钮Command1后,产生10个[1,999]范围内互不相同的随机整数,依次显示在列表框List1中,然后将它们按从小到大的顺序排序,排序结果显示在列表框List2中。数组a用于存储产生的10个随机整数,变量f用于标记随机整数x与已生成的整数是否有重复,如有则为True,没有则为False。
为实现上述功能,请在划线处填入合适的代码。
Dim a(1 To 10) As Integer
Private Sub Command1_Click()
Dim n As Integer ’ n用于统计已经产生的随机整数个数
Dim i As Integer, j As Integer
Dim x As Integer, k As Integer
Dim f As Boolean
Randomize
n = 0
List1.Clear
List2.Clear
Do While n < 10
x = ____(1)____ ’产生[1,999]范围内的随机整数
f = False
For i = 1 To n
If____(2)____ Then f = True
Nexti
If f = False Then
n = n + 1
a(n) = x
List1.AddItemStr(a(n))
End If
Loop
For i = 1 To 9
For j = 10 To i + 1 Step -1
If____(3)____ Then
k = a(j): a(j) = a(j - 1): a(j - 1) = k
End If
Next j
Next i
For i = 1 To 10
List2.AddItem Str(a(i))
Next i
End Sub
解析 (1)为产生[1,999]范围内的随机整数;(2)判断随机整数x与已生成的整数是否有重复,如有则为True,没有则为False。(3)为冒泡排序内层循环中相邻两个数进行比较。
答案 (1) Int(Rnd * 999) + 1 (2) x = a(i)
(3) a(j) < a(j - 1)
17.(2016·9·台州评估)猜数字是一种古老的密码破译类益智小游戏。通常由两个人玩,也可以由一个人和电脑玩,其标准规则为:
(1)一方出数字,出数字的人要想好一个无重复数字的4位数(如0165,5234等),不能让猜的人知道;
(2)另一方猜数字,每猜一个数字,出数者根据结果给出“几A几B”的提示,其中A前面的数字表示位置正确的数字个数,而B前面的数字表示数字正确但位置不对的数字个数。(如要猜5234,猜的人给出5346,则提示1A2B);
(3)重复第二步的猜测过程,直到猜中(即提示4A0B)为止。
小林编写了一个和电脑猜数字的VB程序,其功能如下:窗体加载时,调用自定义函数产生待猜的4位数字,并初始化猜测次数。用户在文本框Text1中输入猜的数字,单击“我猜”按钮Commandl,程序进行判断,并将结果显示在列表框Listl中。猜中后,在标签框Label2中根据猜测次数给出评语。程序运行效果如图1所示。
图1
(1)实现上述功能的VB程序如下,请在划线处填入合适代码。
Dim result As String,total As Integer
Dim flag(0 to 9)As Boolean
’标记下标对应的数字是否存在,初值默认为False
Private Sub Form_Load()
result=____①____
total=0
End Sub
Private Sub Command1_Click()
Dim A As Integer,B As Integer
Dim C As Integer
’变量C存储数字正确(含位置正确)的数字个数
Dim guess As String,i As Integer,t1 As String,t2 As String
guess=Text1.Text
A=0∶C=0
For i=1 To 4
t1=Mid(result,i,1)
t2=Mid(guess,i,1)
If t1=t2 Then A=A+1
If____②____Then C=C+1
Next i
total=total+1
B=____③____
List1.AddItem Str(total)&“.”& guess &“”& Str(A)&“A”& Str(B)&“B”
If A=4 Then
If total<=8 Then
Labe12.Caption=“太厉害了!您只用了”& total &“次。”
Else
Labe12.Caption=“继续锻炼!您共花了”& total &“次。”
End If
End If
End Sub
’RndCode函数用于随机产生待猜测的n位不重复数字字符
Function RndCode(n As Integer)As String
Dim x As Integer,i As Integer
Randomize
num=0∶RndCode=“”
Do While num<n
x=Int(Rnd*10)‘随机产生一个[0,9]的数字
If flag(x)=False Then
flag(x)=True
num=num+1
RndCode=RndCode & x
End If
Loop
End Function
(2)如果某次游戏过程如图2所示,则第7次要猜测成功,应输入________。
图2
A.6321 B.6312 C.2531 D.2513
解析 (1)①分析程序结构,自定义函数RndCode用于随机产生待猜测的n位不重复数字字符,result变量用于储存待猜测的4位不重复数字字符,①处应为调用自定义函数赋值,result=RndCode(4)。②、变量C存储数字正确(含位置正确)的数字个数,②处条件判断语句条件应该是判断猜测的数字中t2是否包含在待猜数字之中的表达式,即t2是否包含在result所含数字之中,这个判断结果在自定义函数RndCode中已经判断好存储在数组flag中,即如果t2包含在result所含数字之中,flag(t2)为真,所以②处应为flag(t2)或flag(val(t2))。③、变量A存储数和位都正确的数字个数,变量B存储位不正确数正确的个数,变量C存储数字正确(含位置正确)的数字个数,③处求B的个数,是在C中把数和位都正确的部分去掉,应该是C-A。
(2)由第1行1234(0A3B)和第2行5678(0A1B)可知4位数中“1、2、3、4”有3个,“5、6、7、8”中有1个,一定不包含“0”和“9”。再由第3行2349(1A1B)和第4行2190(1A1B)判断第1位一定是“2”,一定包含“1”并且“1”不在第2位上,“3”和“4”中有一个不包含在4位数中。再由第5行3129(0A3B)和第6行6590(1A0B)可判断一定包含“3”,第2位数一定是“5”,再由第1行1234(0A3B)判断“3”不在第3位上,所以“3”一定在第4位上。综合以上判断,可知该数应为“2513”。
答案 (1)①result=Rndcode(4) ②flag(t2)或flag(val(t2)) ③C-A (2)D
展开阅读全文