内容正文:
第二节 在可视化的程序设计环境VB中建立一个应用程序
一、选择题
1.编写一个读数小程序。在文本框1中输入一个10000以内的正整数,点击“读数”按钮,在文本框2中输出该数字的中文阅读,程序运行界面如图所示。实现该功能的VB程序段如下:
Const SN = "〇一二三四五六七八九十百千"
Dim s1 As String, s2 As String, i As Integer
s1 = Text1.Text: s2 = "": i = 1
Do While i < Len(s1)
n1 = Val(Mid(s1, i, 1))
n2 = Val(Mid(s1, i + 1, 1))
If n1 <> 0 Then (1)
If n1 = 0 And n2 <> 0 Then (2)
i = i + 1
Loop
n1 = Val(Mid(s1, i, 1))
If n1 <> 0 Then (3)
Text2.Text = s2
上述程序方框处可选语句为:
①s2 = s2 & Mid(SN, n1 + 1, 1) & Mid(SN, Len(s1) - i + 10, 1)
②s2 = s2 & Mid(SN, 1, 1) ③s2 = s2 & Mid(SN, n1 + 1, 1)
则(1)、(2)、(3)处语句依次是( )
A.①②③ B.②①③ C.②③① D.③②①
2.某VB程序设计界面如下题图所示,下列说法正确的是( )
①工程文件是“工程1 .vbp” ②将text属性值删除,图中①处将不会显示“Text1”
③该窗体中共有3个对象 ④窗体名称是“整除问题”
A.①② B.②③ C.①③ D.②④
3.在VB中,下列属于窗体文件的是()
A.cost.vbp B.cost.frm C.cost.exe D.cost.vb
4.有如下VB程序段:
i =1:j= 6:n =o :Key = Val(Text1.Text)
Do While i<= j
m = (i+j) \ 2
n = n+1
If Key > a(m) Then j = m- 1 Else i = m +1
Loop
a(1)到a(6)的值依次为“99,77,55,44,33,22”,下列说法正确的是( )
A.数组a中的元素若无序,也可用此程序段进行查找某个数字
B.无论key值是多少,循环结束后“i >j”一定成立
C.如果key值为55,那么该程序段运行后,变量n的值为1
D.如果key值为40,那么该程序段运行后,变量m的值为5
5.在 Visual Basic 中,如果要在列表框List1 上显示文字“排序后”,则下列正确的是( )
A.List1.Caption ="排序后" B.List1.AddItem =" 排 序 后 "
C.List1.Text ="排序后" D.List1.AddItem "排序后"
6.有如下VB程序段:
Dim x As String, y As String
Dim ans As Long
x = "203": y = "2021": ans = 0
If x > y Then ans = Val(x) - 1 Else ans = Val(y) + 1
Text1.Text = Str(ans)
执行该程序段后,文本框Text1中显示的是( )
A.202 B.201 C.2021 D.2022
7.有如下 VB 程序段:
s1 = "00100100" : s2 = "": flag = True
For i = Len(s1) To 1 Step -1
ch = Val(Mid(s1, i, 1))
If flag Then
s2 = Str(ch) + s2
If ch = 1 Then flag = False
Else
s2 = Str(1 - ch) + s2
End If
Next i
Label1.Caption = s2
执行该程序段后,标签 Label1 中显示的内容是( )
A.1 1 0 1 1 0 1 1 B.1 1 0 1 1 0 0 1
C.1 1 0 1 1 1 0 0 D.1 1 0 1 1 0 0 0
8.下列选项中,属于数据可视化表达的是( )
A.表格表达 B.文字表达 C.项目式表达 D.流程图表达
9.有如下VB程序段:
s = "WenZhou2021": c = 0
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "a" And ch <= "i" Then
c = c + 1
End If
Next i
Text1.Text = Str(c)
执行该程序段后,文本框Text1中显示的是( )
A.1 B.2 C.3 D.4
10.有如下VB程序段:
s=0:t=0
For i=1 To 5
If a(i)-a(i+1)<t Then
t=a(i)-a(i+1)
s=s+1
End If
Next i
数组元素a(1)到a(6)的值依次为“4,5,3,2,7,5”,执行该程序段后,变量s的值为( )
A.1 B.2 C.3 D.4
11.有如下程序段:
n =Val(Text1. Text)
s=0
Do While n <> 0
x = n Mod 10
s=x+s
n=n\10
Loop
在文本框Text1中输入“20201119”,执行该程序段后,s的结果为( )
A.16 B.1119 C.2020 D.9
12.有如下VB程序段:
则经过这段程序加工后,变量k的值是( )
A.1 B.6 C.12 D.21
13.有如下 VB 程序段
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” & App.Path & “\词库.accdb”
conn.Open
Set rs.ActiveConnection = conn
rs.Open “SELECT * FROM words”
n = 0
Do While Not rs.EOF
n = n + 1
en(n) = rs.Fields(1)
ch(n) = rs.Fields(2)
rs.MoveNext
Loop
rs.Close
conn.Close
下列说法中正确的是( )
①连接的数据库文件名是“\词库.accdb” ②程序运行后,变量n 的值表示该数据表中记录的总数 ③数组 en(n)所存储的是数据表第 2 个字段的字段值 ④“ConnectionString”是 conn 对象的属性值⑤查询的数据表名称是“words” ⑥省略语句“rs.MoveNext”,程序也可以正常运行
A.①④⑤ B.③④⑥ C.②③⑤ D.②③④
14.以下VB程序段执行后,整型变量s的值为( )。
A.0 B.1 C.3 D.6
15.下列选项中,对变量flag的赋值与其他三项不等价的是( )
A.flag=a>b
B.If a>b then flag=True
Flag=False
C.flag=False
If a>b Then flag=True
D.If a>b Then flag=True Else flag=False
二、填空题
16.以下VB代码存在一个语法错误:
行号 语句
dim price as double
②price=inputbox("请输入价格")
③ if price>=500
④ price=price*0.95
⑤ end if
⑥ print price
错误语句在 行。
正确语句为 。
17.组合框是( )和( )组合而成的控件。
18.文本框中内容由( )属性决定.
19.组合框的类型由其( )属性决定。
20.运行以下VB程序,结果是 。
三、操作题
21.元旦放假,小明帮助外公在果园搬果子。果园里有n堆(n<=100)重量不一的果子,需要将它们合并成一堆。已知合并两堆果子所消耗的体力等于两堆果子的重量之和。为了节省体力,每次合并,小明会把其中重量最小的两堆果子合并一起,n堆果子经过若干次合并之后只剩一堆为止。比如,n=4时,表示共有4堆果子,重量分别是2、4、5、9,先合并重量为2和4的果子堆,新堆重量是6,耗费体力为6;接着将重量5和6的果子堆合并,新堆重量是11,耗费体力为11;最后将重量9和11的果子堆合并,新堆重量是20,耗费体力为20。因此总消耗体力是6+11+20=37,这样合并是最少耗费体力的方法。请设计程序,计算合并这n堆果子最少消耗的体力值。
(1)有5堆果子重量分别是:17,15,16,16,19,则小明将5堆果子搬成1堆至少需要消耗体力值为 。
(2)请在①②③处填上合适代码,实现程序功能。
Dim n As Integer
Dim a(1 To 100) As Integer 'a数组存储各堆果子重量
Dim b(o To 100)As Integer 'b(0)存放a数组中最小值的下标,若a(i)是数组中最大数,则 b(i)的值为-1
Dim flag(l To 100)As Boolean
Private Sub Form_Load()
'初始化果子的数量n和每堆果子的重量a(i),并依此显示在列表框list1中,代码略
'初始化b数组的值均为-1,flag 数组的值均为False,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer,k As Integer
Dim p As Integer,q As Integer,w As Integer
p =0
Do While True '生成b数组,标记升序后a(i)的下一个元素在a数组中的位置为b(i)
For i = 1 To n
If Not flag(i)Then k = i :Exit For
Next i
If i = n+1 Then Exit Do
i =1
Do While i <= n
If Not flag(i) And a(k) >a(i)Then k =i
i=i+1
Loop
b(p)= k
flag(k)=True
①
Loop
w= 0
p =b(0):q =b(p)
Do While b(p)< >-1
a(p)=a(p)+a(q)
w=②
If b(q)< >-1 Then b(0)= b(q)Else Exit Do
Call sort(p)
p = b(0) :q = b(p)
Loop
Text1.Text= Str(w)
End Sub
Sub sort(p As Integer) '将a(p)插入到合适位置
Dim pl As Integer,ql As Integer
pl = b(0)
If a(p)<=a(pl)Then
b(0)=p : b(p)= pl
Else
Do While a(p) >a(p1) And b(p1)< >-1
ql = pl : pl = b(pl)
Loop
If b(p1)=-1 And a(p) >a(p1) Then
b(pl)=p : b(p)=-1
Else
b(p)= pl :③
End If
End If
End Sub
22.挤牛奶问题:如有三个农民每天清晨5点起床,然后去牛棚分别给3头牛挤奶。第一个农民在300时刻(从5点开始计时,秒为单位)给他的牛挤奶,一直到1000时刻(总共挤了700个时刻),第二个农民在700时刻开始,在1200时刻结束(总共挤了500个时刻)。第三个农民在1500时刻开始2100时刻结束(总共挤了600个时刻)。期间最长挤奶的连续时间为900秒(从300时刻到1200时刻),而最长的无人挤奶的连续时间为300时刻(因第二个农民在1200时刻已结束,而第三个农民从1500时刻才开始,中间有300时刻没有人在挤牛奶)。相应时刻如下图所示:
下面提供的程序是,从N个农民(1<N<=5000)挤N头牛的工作时间列表,计算出最长有人在挤牛奶的时间段与最长的无人挤牛奶的时间段。
下图为两组不同数据程序运行后界面;
请在划线处填入相应的代码,使程序功能完善。
Dim a(1 To 100) As Integer '存放农民挤牛奶开始时刻
Dim b(1 To 100) As Integer '存放农民挤牛奶结束时刻
Dim n As Integer '存放农民人数
Private Sub Form_Load()
‘获取农民的人数与各个农民开始挤牛奶与结束挤牛奶的时间,并在list1中输出
‘相应的代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim t As Integer, ymax As Integer, nmax As Integer
Dim btime As Integer, etime As Integer,flag As Boolean
flag = True: i = 1
Do While i <= And flag
flag = False
For j = 1 To n - i
If a(j) > a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
t = b(j): b(j) = b(j + 1): b(j + 1) = t
flag = True
End If
Next j
i = i + 1
Loop
btime = a(1): etime = b(1)
ymax = etime - btime: nmax = 0
For i = 2 To n
If Then
etime = b(i)
If etime - btime > ymax Then ymax = etime - btime
ElseIf etime < a(i) Then
If a(i) - etime > nmax Then nmax = a(i) - etime
btime = a(i): etime = b(i)
End If
Next i
Label2.Caption = "最长挤牛奶时间为:" + Str(ymax) + " 时刻"
Label3.Caption = "最长无人挤牛奶时间为:" + Str(nmax) + " 时刻"
End Sub
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.A
2.A
3.B
4.B
5.D
6.A
7.C
8.D
9.B
10.B
11.A
12.C
13.C
14.D
15.B
16. 第3 if price>=500 then
17. 文本框 列表框
18.TEXT
19.Style
20.2
21. 197 ①p= b(p)或p=k ②w + a(p)或w + a(b(0)) ③b(q1)=p
22. n-1 etime>=a(i) And etime<b(i)
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$