内容正文:
第四节 过程和函数
一、选择题
1.有如下VB程序段:
For i = 1 To 6
x = Int(Rnd * 10) + 1
If i Mod 2 <> x Mod 2 Then
a(i) = x
Else
a(7 - i) = x
End If
Next i
数组 a 各元素的初始值为 0,执行程序后a 数组各元素的值不可能是( )
A.8,7,0,0,6,5 B.0,9,8,3,6,3
C.6,7,2,3,2,0 D.2,9,4,7,10,3
2.如下图所示流程图,其控制结构属于________。
A.循环结构 B.树形结构 C.分支结构 D.顺序结构
3.下列 VB 表达式中,可取到最大值中最大的是( )
A.Fix((Rnd*45))*2+10 B.Int(Rnd*45)*2+10
C.Int(-Rnd*45)*(-2)+10 D.(Rnd-Rnd)*100
4.实现计算器上xy运算处理的算法部分流程图如图所示:
下列说法正确的是( )
A.框图①中该填入的是f←x*j
B.框图①中该填入的是f←f*j
C.j←j+1被执行了x次
D.j←j+1被执行了y次
5.在python中能实现下面结果的代码是( )。
请输入你的性别:
A.print(“请输入你的性别:”) B.print(请输入你的性别:)
C.input(“请输入你的性别:”) D.input(请输入你的性别:)
6.下列VB表达式的值最大的是( )
A.Len("12"+"21") B.Val("11"+"10")
C.Val(mid("1221",3,2)) D.1221mod 1000\ 10
7.下列说法正确的是( )
A.定义变量如“L=15/134”的数据类型应为Single
B.变量命名的规则是首字符必须是字母,所以“Ture”可以作为变量名
C.Len(x)的功能是求字符串的长度,所以Len(1234)的值为4
D.代码“Text1.Text=Str(a)”的功能是从Text1中输入的值转换成字符型赋给变量a
8.已知变量a为18位身份证号。则下面哪个函数可以取出身份证的出生年月。(如身份证号:370101200012010101,出生年月为200012)
A.right(left(a,12),6) B.mid(a,6,7) C.left(a,6) D.mid(a,6)
9.有VB程序段如下:
s="2019.06 Visual Basic6.0":n=0
For i=1 To Len(s)
ch=Mid(s,i,1)
If ch>="0" And ch<="9"Then
m=Asc(ch)-Asc("0")+1
a(m)=a(m)+1
End If
Next i
For i=1 To 10
If a(i)>1Then n=n+i
Next i
数组a各元素的初始值都为0,执行该程序段后,则变量n的值为( )
A.2 B.4 C.8 D.10
10.下列程序执行后文本框Text1显示的内容是( )
x= "abcdcba": ans = 0
For i= 1 To Len(x) \2.
If Mid(x, i, 1) = Mid(x, Len(x)-i+ 1, 1) Then ans = ans+ 1
Next i
Text1.Text = Str(ans)
A.1 B.2 C.3 D.4
11.小松想要得到范围在[11,99]中的随机奇数,他可以选用的处理方法是( )
A.Int(Rnd * 89)+ 11 B.Int(Rnd * 44)* 2 + 11
C.Int(Rnd * 45)* 2 + 11 D.Int(Rnd * 50)* 2 + 11
12.下列VB 程序用于求2个正整数(均小于10000)的最大公约数:
Private Sub Command1_Click()
Dim x As Integer,y As Integer,z As Integer
x=Val(Text1.Text) ‘第1 个正整数
y=Val(Text2.Text) ‘第2 个正整数
‘调用函数gcd
Text3.Text=Str(z)
End Sub
Function gcd(a As Integer,b As Integer) As Integer
Do While a <> b
If a>b Then a=a-b Else b=b-a
Loop
gcd=b
End Function
方框中的正确语句是( )
A.z=gcd B.z=gcd(a,b) C.z=gcd(x,y) D.z=gcd x,y
13.下列说法正确的是( )
A.子过程可以嵌套调用 B.子过程不可以嵌套调用
C.子过程可以嵌套定义 D.函数过程不可以递归调用
14.当x=10时,print “x=”;x+1 在屏幕上显示的结果为( )
A.10=;x+1 B.x=11 C.11 D.10=x+1
15.下列VB表达式中,值最大的是( )
A.Asc(''F'')-Asc(''A'') B.Sqr(20) C.Rnd( )*5 D.Len(''2022'')
二、填空题
16.分析解决问题。
在VB中常用的字符串截取函数有:
函数名
功能
示例
结果
Mid(s,m,n)
从字符串s的第m位开始,截取长度为n的字符
Mid(“ABCDEFG”,5,2)
“EF”
Left(s,n)
截取字符串s左边n个字符
Left(“ABCDEFG”,3)
“ABC”
Right(s,n)
截取字符串s右边n个字符
Right(“ABCDEFG”,2)
“FG”
假如某人身份证号码S=”370102199602190000”,如果需要根据此人身份证号码求出该人的“出生年月日”。下列表达式不能实现的是 (单选)
A.Mid (s,7,8)
B.Right (Left(s,14),8)
C.Mid (s,7,4)+Mid(s,11,2)+Mid(s,13,2)
D.Left (s,14)-Left(s,6)
17.函数 range(1,6)产生一个列表是: 。
18.实际参数和形式参数存在( )对应、( )对应、( )对应。
19.编写VB程序代码,实现如下功能:在文本框Text1中输入金额(整数)后,点击“转换”按钮Command1,则在文本框Text2中显示该金额的大写,程序运行界面如下图所示:
(1)要使窗体标题上显示的文本改为“人民币大小写”,可在其属性窗口中将 属性的属性值改为“人民币大小写”。
(2)为了实现以上程序功能,使程序正常运行,请完善以下两处代码。
Private Sub Command1_Click()
Dim dx As String, dw As String
Dim s As String, c As String
Dim ch As String
Dim i As Integer
dx = "零壹贰叁肆伍陆柒捌玖拾"
dw = "亿仟佰拾万仟佰拾元"
s = Text1.Text
If then
Text2.Text = "输入的数据超出所能转换的范围"
Else
For i = 1 To Len(s)
ch =
c = c + Mid(dx, Val(ch) + 1, 1) + Mid(dw, 9 - Len(s) + i, 1)
Next i
Text2.Text = c + "整"
End If
End Sub
(3)由上述算法可知,若在文本框Text1中输入“20”,则文本框Text3显示的结果为 。
20.事件过程在调用通用过程时的参数传递有按( )传递和按( )传递两种方法。
三、操作题
21.某分段排序算法描述如下:
1)将原始数据按升序分成若干有序段。
2)将第1段和第2段进行合并,使得合并后的数据依旧有序,得到新的有序段。
3)将新的有序段再次和下一个有序段进行合并。
4)重复上述操作,直到全部数据变成一个有序段为止,排序结束。
如数据:1、3、9、4、5、7、2、6,第1段为1、3、9,第2段为4、5、7,将第1段和第2段合并,得到新的第1段为1、3、4、5、7、9。继续和下一段2、6进行合并,合并后段数变为1段,则排序结束。
编写VB程序,实现分段排序功能:在文本框Text1中输入数据总量,单击“数据生成”按钮Commandl后,在列表框List1中显示原始数据,然后单击“分段排序”按钮Command2,在列表框List2中显示排序后的结果。程序运行界面如图所示。
请回答下列问题:
(1)若要清空列表框List1,下列代码正确的是 (单选,填字母:
A.List1.Clear / B.List1.List="" / C.List1.Text="" / D.List1.Caption="空白" )。
(2)实现分段排序功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Dim a(1 To 1000) As Integer
Dim n As Integer
Private Sub Command1_Click()
'输入数据总量n,随机生成n个数据保存在数组
'a(1)~a(n)中,并在List1中显示数据,代码略
End Sub
Private Sub Command2_Click()
Dim b(1 To 10000) As Integer
Dim p1 As Integer, p2 As Integer, t1 As Integer, t2 As Integer
Dim t As Integer, k As Integer, i As Integer, j As Integer
p1 = 1
t1 = leng(p1)
p2 = p1 + t1
Do While p2 <= n
i = p1: j = p2: t = 1
Do While i < p2 Or j < p2 + t2
If j >= p2 + t2 Or i < p2 And a(i) < a(j) Then
b(t) = a(i): i = i + 1
Else
b(t) = a(j): j = j + 1
End If
t = t + 1
Loop
For k = 1 To
a(k) = b(k)
Next k
t1 = t1 + t2
Loop
'在List2中输出数组a(i)的值,代码略
End Sub
Function Leng(ByVal p As Integer) As Integer
'该函数返回数组a中数组下标p开始的升序有序段的长度,代码略
End Function
22.编写一个VB程序,实现如下功能:在文本框Text1中输入一个偶数n,判断该数在10步之内通过以下计算过程后能否回到初始值。计算步骤如下:
(1)将n乘以3后加1产生一个新的数
(2)对产生的新数循环执行如下操作:新数是偶数时,用新数除以2;新数是奇数时,用新数乘以3后加1
譬如,以2为初始值,则计算过程如下。2→7→22→11→34→17→52→26→13→40→20→ 10→5→16→8→4→2。数字2不能在10步之内回到初始值。
界面如图所示,回答下列问题:
(1)若要把窗体的标题名称由“Form1”改为“数值猜想”,应改变窗体的 属性。
(2)完成上述功能的程序代码如下,请在划线处填入合适的代码
Private Sub Command1_Click()
Dim n As Integer,t as Integer ,m as Integer ,s as String
t = n * 3 + 1
m = 1
s = ""
Do While
s = s + Str(t)
If t Mod 2 = 0 Then
t = t \ 2
Else
t = t * 3 + 1
End If
m = m + 1
Loop
If n = t Then
Label1.Caption = s + Str(n)
Else
Label1.Caption = "该数10步之内无法实现!"
End If
End Sub
(3)按照以上VB程序的计算方法,若在文本框Text1中输入4,能否在10步之内回到初始数 。(选填:能/否)
四、简答题
23.在“抗击疫情,‘宅’出精彩”征文活动中,每位选手可以提交一篇作品。活动以互评的形式展开:每位选手对m篇作品进行打分(本人作品回避),方法如下:
① 用1-n数字代表n个作品,打乱顺序后分配给n个选手。分配方案保存在数组a中,如图a存储了两组分配方案(n=5)。在第一个分配方案中把4号作品分配给1号参赛者,1号作品分配给2号参赛者(选手编号与序号错开)……。
4
1
5
2
3
a(1)~a(n)中存储第一个分配方案
2
3
4
5
1
a(n+1)~a(2*n)中存储第二个分配方案
↑第i列中的作品拿给i号参赛者打分
图a
②分配方案的形成方法: 将1~n之间的随机数字依次放到第1个位置、第2个位置……,随机数不能与位置号相同,并且要防止分配冲突,如前三个分配序号是“2 3 4”,那么在第4位上只能放“5”(如放“1”会导致第5个位置没有符合要求的数字,因此位置n-1需要判断数“n”是否已经分配,如果未分配,位置n-1放置数“n”),最终方案“2 3 4 5 1”。
③评m个作品需要m个分配方案。方案间要避免同一个人拿到重复的作品。如第16题图a第3行上的数据“5 1 2 3 4”不符合要求,因为会使第2号选手重复拿到1号作品。
小明依据上述方法设计了VB程序,功能如下:在文本框Text1和Text2分别输入参赛人数和每人打分的作品数量,单击“分配”按钮Command1,在列表框List1中输出结果。程序运行效果如图b所示。
请回答下列问题:
(1)n=5,m=3,a(1)~a(10)中的数据如图a所示,a(11)~a(15)的数据可能是 (单选,填字母:A.5 4 3 1 2/B.5 4 1 3 2/C.3 4 5 1 2)
(2)请在划线处填入合适的代码。
Dim n As Integer '总人数/总作品数
Dim m As Integer '每人分配篇数
Dim a(1 To 500) As Integer '数组a大小满足处理要求
Dim c(1 To 100) As Integer '数组c大小满足处理要求
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer
n = Val(Text1.Text): m = Val(Text2.Text)
Randomize
i = 1
Do While i <= m
For j = 1 To n
c(j) = 0 '本轮分配方案中还没有数字j, c(j)=0,否则c(j)=1
Next j
For j = 1 To n
If j = n - 1 And c(n) = 0 Then ①
Else
k = r(n, j)
End If
a((i - 1) * n + j) = k '分配数字k到当前方案的第j个位置上
c(k) = 1
Next j If ② Then i = i + 1
Loop
s = ""
For i = 1 To n
s = "参赛者" & i & ":"
For j = 1 To m
s = s + Str(a((j - 1) * n + i))+ ","
Next j
List1.AddItem s
s = ""
Next i
End Sub
Function r(x As Integer, y As Integer) As Integer
'生成一个取值在[1,x]之间,可以放在y位置上的随机数,满足条件r<>y andc(r)=0
End Function
Function check(c As Integer) As Boolean
'本轮方案和前面几次的分配方案比较,如果有人分到了重复作品,返回FALSE
Dim p As Integer,f As Boolean
f = True
p = 1
For i = 1 To c * n If ③ Then
f = False: Exit For
End If
p = p mod n +1
Next i
check = f
End Function
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.A
2.C
3.C
4.D
5.C
6.B
7.A
8.A
9.C
10.C
11.C
12.C
13.A
14.B
15.A
16.D
17.[1,2,3,4,5]
18. 个数 位置 类型
19. Caption Len(s) > 9 mid(s,I,1) 贰拾零元整
20. 值 址
21. A p2 = p1 + t1 或 p2 = p2 + t2 t2 = leng(p2) 或 t2 = leng(t1+p1) 或 t2 = leng(t1+1) t1 + t2 或 t-1 或 p2+t2-1或 t 或 t1+1
22. Caption n=Val(Text1.Text) n <> t And m <= 10 或其它等价表达式 能
23.(1)B
(2)①k= n ②check(i - 1) ③a(i) = a(c * n + p)
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$