实现上述功能的VB程序如下。请在画线处填入适当的语句和代码,把程序补充完整。
Dim w As Integer ‘变量w用于存储每次最大数字字符的位置
Private Sub Command1_Click()
Dim t As String
Dim i As Integer,j As Integer
Dim max As Integer,S As Integer
t=Text1.Text
s=0
For i=3 To 1 Step-1
max=0
For j=1 To Len(t)
If Val(Mid(t,j,1))>max Then
max=Val(Mid(t,j,1))
①
End If
Next j
s=s+ ②
t=delmax(t)
Next i
Text2.Text=Str(s)
End Sub
‘自定义函数功能是去除当前最大数字字符
Function delmax(t As String)As String
delmax= ③
End Function
实现上述功能的VB程序如下,请回答下列问题:
Function zf(s As String) As Boolean
zf = False
If s >= "A" And s <= "Z" Or s >= "a" And s <= "z" Then
①
End If
End Function
Private Sub rev_Click()
Dim s As String, ch As String, rv As String, rv1 As String
Dim i As Integer, j As Integer, k As Integer
s = Text1.Text
rv = "" : i = 1
Do While True
ch = Mid(s, i, 1)
Do While Not zf(ch) And i < Len(s)
rv = rv + ch
i = i + 1
ch = Mid(s, i, 1)
Loop
j = i
ch = Mid(s, j, 1)
Do While zf(ch) And j <= Len(s)
②
If j > Len(s) Then Exit Do
ch = Mid(s, j, 1)
Loop
rv1 = ""
For '改错
rv1 = Mid(s,k,1)+rv1
Next k
rv = rv + rv1
If j <= Len(s) Then rv = rv + Mid(s, j, 1)
i = j + 1
If i > Len(s) Then Exit Do
Loop
Text2.Text = rv
End Sub
① ②
小明依据上述描述设计了如下VB程序。请回答下列问题:
Const n = 6
Dim a(1 To n ^ 2) As Integer, b(1 To n ^ 2) As Integer
Private Sub Form _ Load ( )
‘产生n * n个1000以内随机正整数,保存在数组a中
‘按格式整齐显示在List1中
‘代码略
End sub
Private Sub Command1_Click ( )
Dim i As Integer, j As Integer
Dim s As String, c As String
For i = 1 To n
For j = 1 To n
①
Next j
Next i
List2. Clear: c = “”
For i = 1 To n * n
c = c+ Ads(b(i), 4) + “”
If ② Then
List2. AddItem c
List2 AddItem “”
c = “”
End If
Next i
End sub
Function Ads ( ③ ) As String
Dim sx As String, yx As Integer, i As Integer
sx = Str(x): yx = Len(sx)
For i = 1 To y-yx
sx = “” + sx
Next i
④
End Function
① ② ③ ④
Dim n As Integer, i As Integer, m As Integer, s As String, temp As String
Dim a(1 to 300) As String, b(1 to 7) As Integer
Private Sub Form_Load()
'读取每位同学的选课科目,保存到数组a(1 to 300)中,代码略
End Sub
Private Sub Command1_Click()
n = ①
s = "政史地物化生技" : temp=""
For i = 1 to n
temp = temp + a( i )
Next i
For i = 1 to len(temp)
m = ②
b(m) = b(m) + 1
Next i
For i = 1 to len(s)
list1.Additem Mid( s, i, 1 ) + ③ + "人"
Next i
End Sub
Function pos(j As Integer ) As Integer '该函数用于查找科目在s中的位置
Dim k as Integer
For k = 1 to len(s)
If Then pos = k : Exit For
Next k
End Function
① ② ③
⑴每个回文都有一个“中心”,当回文字符数为奇数时,中间的那个字符就是回文中心;但是当回文的字符数为偶数时,回文的中心是最中间的那两个字符,且这两个字符相同。
⑵对任意一个字符或者相同的两个连续字符,我们都可以假设它为回文的“中心”,向它的 左右两边扩展出尽可能长的回文。对于每种假设,我们都能得到一个回文,而最长回文必定由 其中的某个假设中得到!
现编写一个程序,在 Text1 中输入一串字符,单击“统计”按钮,在 Text2 中显示该字 符串中的最大的回文子串(长度相同时,输出最左边的子串)。请回答下列问题:
Dim n As Integer
Dim a(0 To 100) As String Private Sub Command1( Click)() Dim s As String
Dim left As Integer, right As Integer, i As Integer
Dim max As Integer, m As Integer, b1 As Integer
'变量b1用于记录回文子串的左端起点
Text2.Text = ""
s = Text1.Text n = Len(s)
For i = 1 To n
a(i) = Mid(s, i, 1) Next i
max = 0: left = 0: right = 0
For i = 1 To n left = i
right = i
m = longest(left, right) If m > max Then
b1 = i - m \ 2 max = m
End If left = i
right = i + 1
If a(left) = a(right) Then
m = longest(left, right) + 1
If m > max Then
①
max = m
End If
End If
Next i
For i = b1 To ②
Text2.Text = Text2.Text + a(i) Next i
End Sub
Function longest(left As Integer, right As Integer) As Integer
Dim p As Integer p = 1
Do While left > 1 And right < n And ③
left = left - 1 right = right + 1 p = p + 2
Loop
longest = p
End Function
① ② ③
⑴将该字符的ASCII码转换成对应的2位十六进制数;
⑵将产生的十六进制数互换位置;
⑶步骤⑵产生的二位十六进制数即为该明文字符加密后的密文字符。
小明按照上述方法,设计了一个字符串加密的VB程序,功能如下:单击“生成密文”按钮 Command1,程序依次将文本框Text1中每个字符按上述规则进行加密处理,连接这些加密字符,最后在文本框Text2中输出加密结果。程序运行界面如图所示。
实现上述功能的VB程序如下:
Private sub Command2_Click()
Dim s As String, a As String, ans As String
Dim c As Integer, i As Integer
Dim s1 As String
s= Text1. Text
ans=" "
For i=1 To Len(s)
a=Mid(s, i, 1)
s1=
ans=
Next i
Text2. Text=ans
End Sub
Function DToh(x As Integer)As String
Dim str As string
str="0123456789ABCDEF"
Do While x < > 0
t=x Mod 16
x=x\16
Loop
End Function
‘函数 bw 功能:若二进制位数不足,通过在前面添"0"使得位数为 4 的倍数
Private Function bw(x As Integer, y As String) As String
Dim r As Integer, i As Integer
r = x Mod 4
If r <> 0 Then
For i = 1 To 4 - r
y = “0” + y
Next i
x = Len(y)
End If
bw = ①
End Function
Private Sub Command1_Click()
Dim m As String, n As Integer, i As Integer, a As Integer
Dim s As Integer, s1 As String, j As Integer
m = Text1.Text
n = Len(m)
Text2.Text =“”
m = ② ‘调整m的位数为4的倍数
For i = 1 To n - 3 Step 4
s = 0
For j = i To i + 3
a = Val(Mid(m, j, 1))
s = ③
Next j
If s >= 10 Then
s1 = Chr(Asc("A") + s - 10)
Else
s1 = CStr(s) ‘函数CStr类似于 Str,但无前导空格
End If
Text2.Text = Text2.Text + s1
Next i
End Sub
① ② ③
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer
Dim min As Single, max As Single
Dim d As Single, v As Single, s As String
s = Text1.Text
d = 0: maxd = 0
j = 1: k = 1
For i = 1 To Len(s)
If Mid(s, i, 1) = "," Then
j = i + 1
If Then
max = v
Else
min = v
d = max - min
If d > maxd Then
End If
k = k + 1
End If
Next i
Label1.Caption = "本周温差最大值为" & Str(maxd)
End Sub
1)在输入的数字字符串中依次提取有效的密文,有效的密文的特点:
①是一组连续的,都小于5的三位数字串;②每个位置上的数字不能被重复提取;
2)对有效密文进行解密的过程:
将密文作为一个五进制数转换为对应的十进制数值,根据ASCII字符的十进制编码表,得出对应的明文字符(提示:空格符所对应的ASCII码值为十进制数32,小写字母“z”所对应的ASCII码值为十进制数122).
例如,密文242转换成十进制数为72,对应的明文字符为大写字母“H”。
程序运行界面如下图所示,在文本框Text1中输入密文,单击“解密”按钮,在文本框Text2中输出解密后的明文密码。
'以下代码是将有效密文数字转换为十进制数的函数
Function conv(p As String) As Integer
Dim k As Integer, q As String, i As Integer
k = 0: g = ""
For i = 1 To 3
q = Mid(p, i, 1)
①
Next i
conv = k
End Function
Private Sub Command1_Click()
Dim st As String, p As String, res As String
Dim c1 As String, c2 As String, c3 As String
Dim i As Integer, d As Integer, n As Integer
st = Text1.Text: n = Len(st)
i = 1: res = ""
Do While i <= n – 2 '提取有效密文,并进行转换
c1 = Mid(st, i, 1): c2 = Mid(st, i + 1, 1): c3 = Mid(st, i + 2, 1)
If c1<"5" Or c2 <"5" Or c3 <"5" Then
②
d=conv(p)
If d >= 32 And d <= 122 Then res = res + Chr(d)
③
Else
i = i + 1
End If
Loop
Text2.Text = res
End Sub
① ② ③
Private Function f(x As Single, n As Integer)As Single
If n=0 then
f=1
Else
If n Mod 2=1 then
f=x*f(x,n\2)
Else
f=f(x,n\2)\x
End If
End If
End Function
Private Sub Command1_Click( )
Label1.Caption=Str(f(4,6))
End Sub
程序运行时,单击按钮Command1,标签Label1显示的内容是( )
①将该字符的ASCII码加密钥后,转换成对应的8位二进制;
②将对应的8位二进制数进行按位取反(1变0,0变1);
③将最后产生的8位二进制数转换成对应的十六进制数;
④将得到的十六进制数码交换顺序后连接,即为该明文的密文。
例如,明文大写字母“A",输入的密钥数值为25,得到的密文为5A,信息加密过程如图所示。
小李编写了加密算法的VB程序,在文本框Text1中输入明文,单击“加密”按钮Command1。程序对明文数据依次进行加密处理,加密后生成的密文将显示在文本框Text2中。程序运行界面如图所示。
Function btoh(m As String)As String ‘将4位二进制数转换成对应的十六进制数
Dim s As Integer, i As Integer
Dim st As String
st="0123456789ABCDEF"
s=0
For i=1 To 4
s=s*2 +Val(Mid(m,i,1))
Next i
①
End Function
Private Sub Command1_Click( )
Dim ans,ch,s,ret,s1,s2 As String
Dim a,b,c As Integer
s= Text1.Text
c= Val(Text2.Text)
For i = 1 To Len(s)
ch=Mid(s,i,1) ‘取出第i个字符存入变量ch
a=Asc(ch)
b=a+c
ret = " "
For m=1 To 8 ‘完成加密步骤①和步骤②
n=(b+1)Mod 2
ret =str(n)+ ret
②
Next m
s1 = btoh(Mid(ret,1,4)) ‘完成加密步骤③和步骤④
s2 = btoh(Mid(ret,5,4))
ans=ans +s2+s1
Next i
Text3.Text=ans
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②。
①定义一个数组a(1 to 961)。产生一个3到6之间的随机整数k,将十进制数960均分成k份,字符在字符串中的位置除以k的余数决定该字符存放在第几份数据中(余数为1保存在第一份数据中,余数为2保存在第二份数据中……,余数为0保存在第k份数据中);
②用十进制数127减去每个字符的ASCII码值,得到的差作为该字符的密文,并保存在数组a中,同一段内的密文依次存放;
③将随机产生的数k加64后保存在数组元素a(961)中,并一起参与加密;
④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中;
⑤将数组b中的每个密文用3位数字保存,不足3位的前面用0补足,然后依次连接保存在变量sc中;
⑥在文本框Text2中输出sc。
例如:
①若现有待加密的字符串为“zp123”,产生的随机数k=3,则960分成3份,每份可存放320个值,分别为a(1)至a(320),a(321)至a(640),a(641)至a(960);
②由于Asc(“z”) =122,则127-122=5。字符“z”在待加密字符串中的位置是1,除以k的余数为1,因此数字“5”放在第一份数据的第一个位置,即a(1)=5;同理可得,第一份数据为a(1)=5,a(2)=77;第二份数据为a(321)=15,a(322)=76;第三份数据为a(641)=78;
③将随机产生的k与十进制数64的和保存到a数组的最后一个值中,即a(961)=64+3=67;
④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中,得到b(1)=67,b(2)=78,b(3)=76,b(4)=15,b(5)=77,b(6)=5;
⑤将数组b中的每个元素用0补足3位后依次连接并保存在sc中,得到sc=“067078076015077005”;
⑥输出sc。
注:(asc(“0”)=48,asc(“A”)=65,asc(“a”)=97)
Private Sub command1_Click()
Dim a(1 To 961) As Integer
Dim sr, sc As String
Dim i, j, k, m, n, t As Integer
Dim b(1 To 961) As Integer
Randomize
k = Int(Rnd * 4 + 3)
sr = text1.Text
For i = 1 To 961
a(i) = -1
Next i
a(961) = k + 64
t = 960 / k
For i = 1 To Len(sr)
m = i Mod k - 1
n = i \ k + 1
If i Mod k = 0 then n = n - 1: m = m + k
① = 127 - Asc(Mid(sr, i, 1)) ‘将密文存储到数组a中
Next i
For i = 1 To Len(sr) + 1
j = j + 1
Do While a(j) = -1
j = j + 1
Loop
b(Len(sr) + 2 - i) = a(j) ‘将有密文值的a数组元素存储到数组b中
Next i
For i = 1 To Len(sr) + 1
sc = ② ‘连接密文并保存到sc中
Next i
text2.Text = sc
End Sub
Function space(x As Integer) As String
For i = 1 To ③
space = space & "0"
Next i
End Function
① ② ③
②固定两队字母中最小字母在各队中的位置;
③将两队其余字母按从小到大的顺序排在各自最小字母的两边。大写字母队列先从最小字母右边排队,排到最后位置再从最小字母左边开始排,直到第一个位置为止。同理,小写字母队列先从左边开始排队,再排右边。过程如图1所示:
编写VB程序,实现字母排队功能:在文本框Text1中输入待排字母串后,单击“排队”按钮Comand1,在列表框List1中显示排队结果。程序运行界面如图2所示。
请回答下列问题:
Dim flag(1 To 52) As Boolean 'flag数组初值为False
Private Sub Command1_Click()
Dim su As String, sd As String, ch As String 'su,sd分别存储大小写字母队
Dim i As Integer, n As Integer
Dim ku As Integer, kd As Integer
s = Text1.Text:n =Len(s)
For i=1 To n
ch =
If ch >="A" And ch <="Z" Then su= su+ ch
If ch>="a"Andch<="z"Thensd=sd+ch
Next i
ku = search(su, 0)
kd = search(sd, 6
su=“”:sd=“”
For i=1 To 52
If flag(i) And i<=26 Then su=su+Chr(i+64)
If flag(i) And i>26 Then
Next i
List1.AddItem sort(su,ku, 1)
List1.AddItem sort(sd,kd, -1)
End Sub
Function search(s As String, k As Integer) As Integer '确定字母队列并查找最小元素位置
Min = Mid(s,1, 1)
flag(Asc(Min) - 64 - k) = True
mini = 1
For i=2 To Len(s)
ch = Mid(s, i,1)
If ch<Min Then mini=i:Min=ch
Next i
search = mini
End Function
Function sort(s As String, wz As Integer, k As Integer) As String '排队
nx = Len(s)
sort = Mid(s, 1,1)
i=2
nc=1
Do While nc <= 2
For j=wz+k To nx^((1 +k) \ 2) Step k
If k= 1 Then
sort = sort + Mid(s,i,1)
Else
sort = Mid(s, i, 1) + sort
End If
i=i+1
Next j
nc=nc+1
Loop
End Function
为了了解选科预选情况,统计选科组合种类及每种组合人数。小王设计并制作了VB程序。运行该程序,单击“读取”按钮,从数据库中读取信息并显示在列表框List1中;单击“统计”按钮,在列表框List2中显示每种选科组合人数(无人选择的组合不显示)及选科组合种类。程序运行界面如图b所示。
Dim cla(1 To 1000) As Integer ‘班级号
Dim snum(1 To 1000) As String ‘学号
Dim sname(1 To 1000) As String ‘姓名
Dim xinxi(1 To 1000) As String ‘选科信息二进制编号
Dim xknum(1 To 127) As Integer ‘各选科组合人数
Dim n As Integer
Private Sub Command1_Click()
‘从数据库中读取n名学生的班级、学号、姓名和选科信息分别存储在数组cla、snum、sname和xinxi中,并输出在列表框List1中,代码略。
End Sub
Private Sub Command2_ Click ( )
Dim t As Integer, i As Integer, count As Integer
For i=1 To n
t = BtoD(xinxi(i))
Next i
count = 0
For i=127 To 1 Step-1 ‘选科组合十进制编号的范围
If Then
count = count + 1
List2.AddItem change(i) +””+ Str (xknum(i)
End If
Next i
List2. AddItem“选科组合种类共有:”+ Str (count) + “种”
End Sub
Function BtoD(s As String) As Integer ‘将选科信息二进制编号转换为十进制编号
Dim x As Integer, i As Integer
x=0
For i=1 To 7
If Mid(s,i,1) = “1” Then
x=
End If
Next i
BtoD = x
End Function
Function change(c As Integer) As String
‘该函数的功能是将选科十进制编号转换成对应的组合名称,代码略。
End Function
根据分数判断其所属等级的标准如下:
分数段 | 90~100 | 80~89 | 70~79 | 60~69 | 60以下 |
等级 | A | B | C | D | E |
实现该功能的程序段如下,请完善程序:
def check(a):
if
level[0]+=1
elif int(a)>=80:
level[1]+=1
elif int(a)>=70:
level[2]+=1
elif int(a)>=60:
level[3]+=1
else:
f=open("score.txt","r")
score=f.readline( )
level=[0]*5
while score:
score=f.readline()
f.close()
for i in range(0,5):
print("等级"++"的人数为:",level[i])
Dim zh(1 To 16) As String,zrs As Integer
Dim xk(1 To 1000) As String '存放同学的选课科目组合,已知学生人数少于1000人
Dim zh2(1 To 35) As String '存放35种选课科目组合
Dim rstj(1 To 35) As Integer '存放各种选课组合选课人数
Private Sub Form_ Load( )
'本过程从数据库中读取学生的选课情况数据,存放在数组xk中,学生的总人数存放在变量zrs。
'代码略
End Sub
Private Sub Command1_ Click()
Dim iAs Integer, j As Integer, m As Integer, n As Integer, k As Integer
Dim km(1 To 7) As String
List1.Clear
List1.AddItem "序号"+ "" + "组合名称"
km(1) = "物": km(2) = "化": km(3)= "生": km(4)= "政"
km(5) = "史": km(6) = "地": km(7)= "技"
m= 1
For i= 1 To 5
For k=i+ 1 To 6
zh(m) = km(i) + km(k)
m=m+1
Next k
Next i
j=3:n= 1:y=j
For i= 1 To m
For k=y To 7
zh2(n)=
If n<= 9 Then
List1.AddItemn&""&" " & zh2(n)
Else
List1.AddItemn&" " & zh2(n)
End If
n=n+ 1
Next k
y=y+ 1
If y= 8 Then
j= : y=j
End If
Next i
End Sub
Private Sub Command2_ Click()
Dim i As Integer
List2.Clear
List2.Addltem "组合名称" +""+ "选课人数”
For i= 1 To 35
rstj(i)=
List2.AddItem zh2(i) +"" + Str(rsij(0)
Next i
End Sub
Function tj(zhme As String) As Integer '统计某种选课组合的选课人数
Dim i As Integer, rs As Integer
rs= 0
For i= 1 To zrs
If zhmc = xk(i) Then
rs=rs+ 1
End If
Next i
tj=rs
End Function
如上图所示的棋盘,需要选择第2行第2列、第4行第2列两颗棋子,按照规则进行翻转便可使得棋盘变为纯黑。现编写程序找出实现棋盘纯色所需翻转棋子次数最少的方案并输出所挑选棋子的个数,若无答案则输出“无法翻转为纯色”。
解决该问题的算法原理:棋盘翻转方案为0000000000000000~1111111111111111之间的某几种,即十进制数 0~65535,利用枚举算法在0~65535之间枚举,即可找到最优方案。假设被选翻转棋子状态用1表示被选中,0表示不选中。例如某方案的十进制为1028即 2^10+2^2,转化为一个16位的二进制串0000010000000100就表示该棋盘中的第2行第2列、第4行第2列这两个棋子及其上下左右被选中翻转,我们认为该方案选中两个棋子进行翻转。
程序运行界面如下图所示,请回答下列问题。
'数组a储存棋盘原状态,数组b储存翻转后的棋盘状态
Dim a(1 To 16) As Integer, b(1 To 16) As Integer, minc As Long
Private Sub Form_Load()
'生成原始由0、1组成的棋盘状态,用数组 a(1)-a(16)保存,代码略
End Sub
Private Sub Command1_Click()
Dim k As Integer, c As Integer, i As Long, j As Long
minc = 100
For i = 0 To 65535
For j = 1 To 16 '初始化棋盘
b(j) = a(j)
Next j
k = 16: c = 0: j = i
Do While j > 0
If j Mod 2=1 Then
b(k) = 1 - b(k)
If k > 4 Then b(k - 4) = 1 - b(k - 4)
If Then b(k + 4) = 1 - b(k + 4)
If k Mod 4 <> 0 Then b(k + 1) = 1 - b(k + 1)
If k Mod 4 <> 1 Then b(k - 1) = 1 - b(k - 1)
c = c + 1
End If
k = k - 1
Loop
If Then minc = c
Next i
If minc = 100 Then Label1.Caption = "无法翻转为纯色!" Else Label1.Caption = "最少翻" + Str(minc) + "次"
End Sub
Function check() As Boolean '判断棋盘是否纯色
Dim flag As Boolean, i As Integer
flag = True
For i = 1 To 15
If Then flag = False: Exit For
Next i
check = flag
End Function
请回答下列问题:
Dim f(100) As Integer, cnt As Integer
Dim words(100) As String, s As String, c As String, tmp As String
Function search(g As String) As Integer
Dim flag As Boolean
flag= True
For i=1 Tocnt
If Then search=i : flag= False
Next i
If flag Then
cnt= cnt+ 1
words(cnt)=g
search= cnt
End If
End Function
Private Sub Command1_ Click( )
s=Text1.Text
tmp=" "
cnt= 0
For i=1 To Len(s)
c= Mid(s, i, 1)
If c>= "a" And c<= "z" Or c>= "A" And c<= "Z" Then
tmp= tmp+ C
Else
f(search( tmp))=
tmp=""
End If
Next i
For i=1 To
List1. AddItem words(i) +Str(f(search( words(i))))
Next i
End Sub