请在程序的划线处填写合适的代码。
Private Sub Command1_Click()
Dim a As String,s As String
Dim r As Integer,x As Integer
x = Val(Text1.Text)
s = ""
Do While x > 0
▲ ‘①
x = x \ 16
If r > 9 Then
a = Chr(r + 55)
Else
a = Str(r)
End If
▲ ‘②
Loop
Text2.Text = s
End Sub
Function search(key As Integer)As String
Dim pos As Integer,i As Integer,j As Integer
Dim nc As String
i=1:j=6:nc=“”
Do While i<=j
m=Int((i+j)/2)
nc=nc+Str(m)
If d(m)=key Then
Exit Do ‘Exit Do表示退出Do While循环
ElseIf key<d(m)Then
j=m-1
Else
i=m+1
End If
Loop
search=nc
End Function
数组元素d(1)到d(6)的值依次为“23,34,45,65,78,98”,则下列说法正确的是 ( )
Private Sub Command1_Click()
Dim i As Integer,pos As Integer
Dim s As String,c As String,result As String
Dim s1 As Single,s2 As Single
result=" ": i=1
s=Text 1.Text
c=Mid(s,i,1)
Do While c<>"."
i=i+1
c=Mid(s,i,1)
Loop
pos=i
①
s2 = Val("0."+Mid(s,pos +1))
result=convert(s1)&"." & convert(s2)
Text2.Text=result
End Sub
Function convert(x As Single)As String
Dim temp As Integer,k As lnteger
If x>=1 Then '整数转化为二进制
temp=x Mod 2
result=temp & result
x=x\2
Do While x <>0
temp=x Mod 2
result=temp & result
x=x\2
Loop
Else '小数转化为二进制,保留3位小数
k=1
Do While ②
temp=Int(x*2)
result=result & temp
③
k=k +1
Loop
End If
convert=result
End Function
①②③
请在划线处填入合适的代码。
Dim a(1 To 9) As String '存储跳高成绩
Dim b(1 To 9) As String '存储学生姓名
Dim c(1 To 9) As Integer
Private Sub Command1_Click()
Dim ch As String, tmp As Integer, t As Integer
Dim p As Integer, k As Integer, i As Integer, j As Integer
Dim s As String
s = Text1.Text: t = 0
For i = 1 To .
If Mid(s, i, 1) <> "/" Then
ch = ch + Mid(s, i, 1)
Else
t = t + 1
If t Mod 2 = 0 Then
a(t \ 2) = zh(ch)
Else
End If
ch = ""
End If
Next i
For i = 1 To t\2
c(i) = i
Next i
For i = 1 To t \ 2 - 1
p = i
For j = i + 1 To t \ 2
If Len(a(c(p))) < Len(a(c(j))) Then
p = j
ElseIf Len(a(c(j))) = Len(a(c(p))) Then
k = Len(a(j)): flag = True
Do While k >= 1 And flag
If Val(Mid(a(c(j)), k, 1)) > Val(Mid(a(c(p)), k, 1)) Then
p = j
flag=false
ElseIf val(Mid(a(c(j)), k, 1)) = val(Mid(a(c(p)), k, 1)) Then
k = k - 1
Else
flag = False
End If
Loop
End If
Next j
If p <> i Then
tmp = c(i): c(i) = c(p): c(p) = tmp
End If
Next i
For i = 1 To t \ 2
Next i
End Sub
Function zh(cm As String) As String
Dim temp As String
Dim i As Integer, j As Integer
For i = 1 To
For j = 1 To 3
temp =temp * 2 + Val(Mid(cm, (i - 1) * 3 + j, 1)) .
Next j
zh = zh + CStr(temp) 'CStr函数可把表达式转换为字符串类型
temp = 0
Next i
End Function
变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。
波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。
对称波峰:上升段与下降段个数相同的波峰称为对称波峰。
下图为一组数据的变化段及波峰示意图。
现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计如下VB程序。请回答下列问题:
Const n = 20
Dim a(1 To n) As Integer
Private Sub Form_Load()
'读取数据,并存储到数组a中,代码略
End Sub
Private Sub Command1_Click()
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
① ② ③
1)找出等式中单个数字的最大值;
2)从最大值加1的数制开始,按该数制的运算规则,把等式中所有数字转换成十进制数;
3)如果等式两边的结论是成立的,那么该数制就是符合上述等式的最小数制,否则从下一个数制重新计算,直到十六进制为止。
小明为此编写了一个VB程序,程序运行时,在文本框Text1中输入一个等式,单击“计算”按钮Command1,在文本框Text2中显示该等式中数字所属的数制。程序运行界面如下图所示。
Private Sub Command1_Click()
Dim s1 As String, ysf As String, t1 As String, t2 As String, t3 As String
Dim ch As String, t As String, max As Integer, jz As Integer, i As Integer
s1=Text1.Text
t1=0: max=0
For i=1 To Len(s1)
ch=Mid(s1, i, 1)
If ch=“+” Or ch=“-” Or ch=“*” Or ch=“\\” Then
ysf=ch: t1=t: t=“ ”
ElseIf ch=“=” Then
t2=t: t=“ ”
ElseIf ch >= “A” And ch <= “F” Then
t=t+ch
temp=
If max < temp Then max=temp
Else
t=t+ch
If max < Val(ch) Then max=Val(ch)
End If
Next i
t3=t: jz=0
Do While i <= 16
If ysf=“+” Then
If XtoD(i, t1)+XtoD(i, t2)=XtoD(i, t3) Then jz=i: Exit Do
ElseIf ysf=“-” Then
If XtoD(i, t1) - XtoD(i, t2)=XtoD(i, t3) Then jz=i: Exit Do
ElseIf ysf=“*” Then
If XtoD(i, t1) * XtoD(i, t2)=XtoD(i, t3) Then jz=i: Exit Do
Else
If XtoD(i, t1) / XtoD(i, t2)=XtoD(i, t3) Then jz=i: Exit Do
End If
i=i+1
Loop
If jz <> 0 Then
Text2.Text=“该数属于” +Str(jz)+ “进制”
Else
Text2.Text=“没有找到合适的进制”
End If
End Sub
Function XtoD(x As Integer, s As String) As Integer
Dim j As Integer
j=0
For i=Len(s) To 1 Step -1
XtoD=XtoD+Val(Mid(s, i, 1)) * x ^ j
Next i
End Function
Private Sub Command1_Click()
Dim x As Integer, y As Integer, t As Integer
Dim i As Integer, n As Integer, count As Integer
x = Val(Text1.Text)
y = Val(Text2.Text)
count = 0
For i = x To y
List1.AddItem Str(i)
n = i
Do While n > 0
If n Mod 10 = 1 Then
count = count + 1
End If
Loop
Next i
Label3.Caption = "X到Y之间1的个数有" + +"个"
End Sub
Dim cj(1000) As Integer, n As Integer
Private Sub btncmd1_Click( )
Dim i As Integer, j As Integer
Dim k As Integer ,tmp As Integer
For i = 2 To n
tmp = cj(i)
j = BinarySearch
For k = i To j + 1 Step -1
cj(k) = cj(k - 1)
Next k
cj(k) = tmp
Next i
For i = 1 To n
List1.AddItem Str(cj(i))
Next i
End Sub
Private Sub btncmd2_Click()
Dim i As Integer
i = BinarySearch(Val(Text1.Text), 1, n)
Label2.Caption = "共有" ++ "位同学大于等于该成绩。"
End Sub
Function BinarySearch(key As Integer,i As Integer,j As Integer) As Integer
Dim m As Integer
Do While i <= j
m = (i + j) \ 2
If cj(m) >= key Then
j = m - 1
Else
i = m + 1
End If
Loop
BinarySearch =
End Function
Private Sub Form_Load()
'从数据库获取n个成绩存储在 cj(1) ~cj(n)组中,代码略
End Sub
Private Sub Command1_Click( )
Dims As String, i As Integer
s=Text1.Text
For i=1 To 8 Step 2
s=ds(s, i)
Next i
Text2.Text=s
End Sub
Function ds(s As String, m As Integer)As String
Dim n As Integer
n=Len(s)
If m<1 0r m>n Then ds= "位置有误"
If m=1 Then ds=Mid(s, 2, n-1)
If m=n Then ds=Mid(s, 1, n-1)
If m <n Then ds=Mid(s, 1, m-1)+Mid(s, m+1, n-m)
End Function
若在文本框Text1中输入“TXHOLLYCLASS”,执行该程序段后,文本框Text2中显示的是( )
1)对待加密的字符进行判断,如果是英文字符的,则将该字符后移2位(如:字符“A”转换成“C”,字符“Z”转换成“B”,字符“a”转换成“c”,字符“z”转换成“b”),其他字符保持不变;
2)求出每个字符的ASCII码,然后用7位二进制来表示,比如“4”的ASCII码为十进制52,转换为7位二进制为“0110100”;
3)从左至右依次记为第1,2,3……7位,分别把第3,4,5位取反。即0变1,1变0,至此“0110100”变为“0101000”,将此二进制转换为ASCII码为40,对应的字符为左括号“(”,即“4”经过加密后得到加密字符为左括号“(”。
在文本框Text1中输入ASCII字符,单击“加密”按钮Command1,则在文本框Text2中显示经过加密的字符。程序界面如图所示,请完成下列问题。
Private Sub Command1_Click()
Dim s As String, ch As String s = Text1.Text
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "A" And ch <= "Z" Then
ElseIf ch >= "a" And ch <= "z" Then '让小写字母后移2位,代码略
End If
Text2.Text = Text2.Text +
Next i
End Sub
Function jm(x As String) As String
Dim a(1 To 7) As Integer, j As Integer, n As Integer, asc1 As Integer
asc1 = Asc(x)
n = 0
For j = 7 To 1 Step -1
If j = 3 Or j = 4 Or j = 5 Then a(j) = 1 - asc1 Mod 2
Else
a(j) = asc1 Mod 2
End If
n =
asc1 = asc1 \ 2
Next j
jm = Chr(n)
End Function
1)用数组mab分别记录1~96个字符的ASCII值,用数组zm记录对应字符在密码本中位置,如mab(9)=65,表示密码本中第9个字符是“A”,则对应的zm(65)=9;
2)把密钥中每个字符的ASCII值的各个数字进行累加(如Hi分别为(7+2)+(1+0+5)),将累加的和除以9取余数后加7,作为将密码本转换成二维表的列数;
3)每个明文在转换后二维表中位置作为密文,该位置是用十六进制表示的行号和列号。
程序运行的界面如下图所示:
实现上述功能的VB程序如下,请回答以下问题:
Dim Mab(96) As Integer '存储密码本中每个字符的ASCII值
Dim zm(127) As Integer '存储ASCII值32至127的字符在密码本数组mab中的下标
Private Sub Form_Load()
'产生密码本及96个字符在密码本中位置,代码略。
End Sub
Function p(s As String) As Integer
Dim i As Integer, t1 As Long
Dim sum As Integer, s1 As String
t1=0
i=1
Do While i<=Len(s)
s1=Mid(s, i, 1)
t1=Asc(s1)
i=i+1
Loop
p=sum Mod 9+7
End Function
Private Sub Command1_Click()
Dim i As Integer, t As Integer, hang As Integer
Dim s As String, s1 As String, Lie As Integer
List1.Clear
s1=Text1.Text
t=p(s1)
Label5.Caption= “将密码本换成一张”+Str(t)+ “列的二维表”
i=1
Do While i<=96
s=s+Chr(Mab(i))+ “”
If i Mod t=0 Or i=96 Then
List1.AddItem s
s= “”
End If
i=i+1
Loop
wz= “123456789ABCDEF”
s=Text2.Text
For i =1 To Len(s)
s1=Mid(s, i, 1)
hang=(t1-1)\t+1
lie=(t1-1) Mod t+1
s2=
Next i
Text3.Text=s2
End Sub
1)让各店的外卖员送货上门,对于第i个菜需要花费a(i)的时间。
2)自己去餐厅取回家,每次出门仅能取回一道菜,对于第i个菜,从出门到回家整个过程需要花费b(i)的时间。
每家餐厅都有各自的外卖员送菜,并且无论老张是否在家,他们都能把菜送到。为了节省时间,能由外类员送的菜尽量由外卖负各自送达,现在需要知道最少花费多少时间能集齐所有的菜。
比如n=4,a(i)=(30,70,40,50),b(1)=(20,10,20,30},那么花费时间少的方案是第一个菜和第三个菜让让外卖员送,第二个菜和第四个菜老张自己取,一共需要40分钟。
设计VB程序计算最少时间,界面如下图
实现上述功能的VB程序如下,回答以下问题:
(单选,填字母:A .Form1/B .Label /C .TextBox / D .CommandButton)
Const n=4
Dim a(1 To n) As Integer 'n道菜由每家餐厅外卖员送达耗时
Dim b(1 To n) As Integer 'n道菜自取耗时
Private Sub Form Load)
'产生外卖送货各道菜耗时,并存储到数组a中,并显示
'产生自取各道菜耗时,并存储到数组b中,并显示
'代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, max As Integer, ans As Integer
Dim left As Integer, right As Integer, m As Integer
For i=1 To n
If a(i) > max Then '外卖员送菜的最长时间
Next i
left= 1: right = max: ans = max
Do While left <= right
m= (left + right) \ 2
If Then
ans = m: right=m-1
Else
left=m+1
End If
Loop
Lab3. Caption=“最快”+ Str(ans) + “分钟”
End Sub
Private Function check(t As Integer) As Boolean
Dim total As Integer
check = False
For i =1 To n
If a(i) > t Then
total ='如果外卖来不及就自己取
End If
Next i
If Then check = True
End Function
Const m = 6, n = 8, wt = 200
Dim d(1 To m + n) As String, a(1 To m + n) As Integer
Private Sub Form_Load()
'读取m + n 个人的体重及去向数据存入d 数组,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, p As Integer, q As Integer, s As String
Dim num As Integer, num1 As Integer, num2 As Integer
'以下代码实现从d 数组中提取每个人的体重数据,根据去向分段存入a 数组
p = 1 : q =
For i = 1 To m + n
s = Mid(d(i), 1, Len(d(i)) - 1)
If Mid(d(i), , 1) = "W" Then
a(p) = Val(s): p = p + 1
Else
a(q) = Val(s): q = q + 1
End If
Next i
num1 = GetNum(1, m)
num2 = GetNum(m + 1, m + n)
If num1 > num2 Then num = num1 Else num = num2
Label1.Caption = "过河需要最少往返次数:" + Str(num)
End Sub
Function GetNum(head As Integer, tail As Integer) As Integer
Dim i As Integer, j As Integer, k As Integer, cnt As Integer, t As Integer
'以下代码实现对数组a 降序排序
i = head
Do While i < tail
k = i: i = tail
For j =
If a(j - 1) < a(j) Then
t = a(j): a(j) = a(j - 1): a(j - 1) = t
i = j
End If
Next j
Loop
cnt = 0: i = head: j = tail
Do While i <= j
If Then j = j - 1
cnt = cnt + 1: i = i + 1
Loop
GetNum = cnt
End Function
读取学生答案文件后和标准答案进行对照并判分,题型分为单选、多选和填空。
单选阅卷规则:和标准答案一致得全部分数,错选或不选不给分
多选阅卷规则:和标准答案一致得全部分数,漏选给一半分数,错选或不选不给分
填空阅卷规则:标准答案表中允许有多种答案存在。学生的答案在标准答案中存在,得全部分数,不存在或未填不给分。
例如"学生答案.txt"内容如下:
张三|A|D|AC|AD|字符串|
李四|A|D|ACD|A|string|i>=0
标准答案:
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
题型 |
单选 |
单选 |
多选 |
多选 |
填空 |
填空 |
答案 |
A |
D |
ACD |
AD |
字符串或string |
i==0或i>=0 |
分值 |
2 |
2 |
2 |
2 |
2 |
2 |
程序执行结果:
张三 成绩: 9 分
李四 成绩: 11 分
def dx(s1,s2,n): # 对多选题进行判分
flag =True
for i in s1:
if :
flag =False
break
if s1==s2:
return n
elif :
return 0
else:
return n/2
f=open('学生答案.txt')
line=f.readline() # 按行读取学生答案.txt 文件
bzda=['单选','A',2,'单选','D',2,'多选','ACD',2,'多选','AD',2,'填空',['字符串','string'],2,'填空',['i==0','i>=0'],2]
while line:
studa=line.split('|') # 将字符串以'|'为间隔分割成成多个字符串组成的列表
zf=0
for i in range(len(studa)-1):
p=3*i
if bzda[p]=='单选': # 对单选题判分
if studa[i+1]==bzda[p+1]:
zf=zf+bzda[p+2]
elif bzda[p]=='多选': # 对多选题判分
zf=
else:
if studa[i+1]!= '' and studa[i+1] in bzda[p+1]:
zf=zf+bzda[p+2]
print(studa[0],'成绩:',zf,'分')
line=f.readline() # 读取下一行
f.close( )
Dim s As String
Dim i As Integer,sum As Integer
Dim a(1 To 1000) As Integer
Dim b(1 To 1000) As Integer
Dim ton(1 To 6) As Integer '存储选中队列中各个班级的人数
Const m = 6
Const n = 300
Private Sub Form_Load()
For i = 1 To n
'随机生成n个学生编号显示在列表框List1中,并将学生的班级号和性别分别存储在数组a和b中
Next i
End Sub
Private Sub Command1_Click()
Dim j As Integer, k As Integer, tmp As Integer
k=Val(Text1.text)
For i = 1 To n – k + 1
For j =
If ton(a(j)) = 0 Then
sum = sum + 1
End If
If xb(b(j)) = False Then tmp = tmp + 1
Next j
If Then
List2.AddItem Str(i) + Str(i + k - 1)
End If
sum = 0: tmp = 0
For k = 1 To m
ton(k) = 0
Next k
Next i
End Sub
Function xb(data As Integer) As Boolean
xb = False
If data = 0 Then xb = True
End Function
编写VB程序,统计接送n个参会者所需的最少车辆数。运行程序,列表框List1中按入住宾馆分组显示所有参会者提交的信息,同一宾馆的按时间先后排列。单击“统计”按钮Command1,在文本框Text1中显示所需的最少车辆数。程序运行界面如图所示。
'n、v、w是常量
'n为参会人数,v为每辆车最多接送人数,w为参会者最长的等待时间,代码略
Private Sub Form_ Load()
'读取n个参会者提交的信息,依次存入a(1)~a(n)
'将a(1)~a(n)接入住宾馆分组,同一宾馆参会者按时间先后排序
'并在List1中显示,代码略
End Sub
Private Sub Commandl_Click()
Dim i As Integerj As Integer, sum As Integer
a(n+1)=" "
j=1: sum = 0
For i-2 To n+ 1
If Mid(a(i), 1, 1)< Mid(a(j),1,1)Then
j=i
End If
Next i
Text1. Text = Str(sum)
End Sub
Function getDif(tsl As String, ts2 As String) As Integer
'返回ts1到ts2的时长(单位:分钟),代码略
'例如ts1为"08:30",ts2 为"08:35",则返回的函数值为5
End Function
Function getCnt(first As Integer, last As Integer) As Integer
Dim s1 As String, s2 As String
Dim iAs Integer, p As Integer, k As Integer,t As Integer
p= first:k= 1
s1 = Mid(a(first), 3, 5)
For i= first+1 To last
s2 = Mid(a(i), 3, 5)
t= getDif(s1, s2)
If Then
k=k+1
p=i
End If
Next i
getCnt= k
End Function
一个选项是否被填涂,可以从判断一个像素的颜色开始,像素的填涂情况是通过RGB的值来判断,灰度值低于132的表示该点被填涂;一个信息点64%的像素被填涂,则认为该区域已填涂,返回值为“1”。区域未填涂时返回值为“0”;各选项的编码为:A→“1000”,B→“0100”,C→“0010”,D→“0001”;输入标准答案,程序进行对比并返回结果。答题卡相关信息如下:
from PIL import Image
#输入起始点坐标(xs,ys),信息点宽度高度(fw, fh),间隔宽度高度(sw ,sh),代码略
num = 5 # 判分个数
def bw_judge(R, G, B): # bw_judge用于判断一个像素的填涂情况 代码略
def fill_judge(x, y): # fill_judge用于判断信息点的填涂情况
count = 0
for i in range(x, x + fw + 1):
for j in range(y, y + fh + 1):
R, G, B = pixels[i, j]
if bw_judge(R, G, B) = = True:
count = count + 1
if count >= :
return True
total_width = fw+ sw
total_height = fh + sh
image = Image.open("t2.bmp")
pixels = image.load()
number = ""
bz=[""]*num
df=0
bzd=input('请输入标准答案:')
da={"A":"1000","B":"0100","C":"0010","D":"0001"}
for i in range(len(bzd)):
bz[i]=
for row in range(num): #分数判定
for col in range(4):
y = ys + total_height * row
if fill_judge(x, y) == True :
number = number + '1'
else:
number = number + '0'
if number = = bz[row]:
df+=2
number=""
print("得分为:",df)