相关试卷
-
1、某加密算法的明文和密钥均由英文字母组成,且密钥循环使用,其加密规则如下:
①明文字符与对应密钥的ASCII码转化为二进制后求异或(对应位相同时结果为0,对应位不同时结果为 1,如二进制1001与二进制1100的异或值为0101),并将异或结果转换为十进制p;
②如果处在奇数位,则将明文字符循环后移p个位置,否则将明文前移p个位置。移动过程中保持大小写不变。
最后把所得到的字符连接起来就是密文。
例如,密钥是“abc”,明文“d”的加密过程是:字符“d”的ASCII码表示为二进制是1100100,密钥“a”的ASCII码表示为二进制是1100001,两数进行异或结果是:0000101,转化为十进制为5,因为是第1个位置,所以把明文后移5个位置,则密文是“i”。
该加密过程使用VB来实现。具体功能设计如下:在Text1中输入明文,Text2中输入密钥,单击“开始加密”按钮Command1后将密文显示在Text3中,界面设计如图所示。
请回答以下问题:
(1)、如果密钥为“bc”,字符“d”加密后的密文为:(字母“a”的 ASCII 码为97)(2)、请完善以下程序代码。Private Sub Command1_Click()
Dim s As String, sn As String
Dim i As Integer, t As Integer, u As Integer
Dim p As Integer, g As Integer
sn = ""
For i = 1 To Len(Text1.Text)
t = Asc(Mid(Text1.Text, i, 1))
If t >= Asc("a") Then
g = Asc("a")
Else
g = Asc("A")
End If
u = Asc(Mid(Text2.Text, (i - 1) Mod Len(Text2.Text) + 1, 1))
p =
t = t - g
If i Mod 2 = 1 Then
t = (t + p) Mod 26
Else
t =
End If
sn = sn + Chr(t + g)
Next i
Text3.Text = sn
End Sub
Function txor(x As Integer, y As Integer) As Integer 'x、y求异或并返回十进制
Dim a As Integer, b As Integer, r As Integer, i As Integer
a = x: b = y
r = 1
For i = 1 To 7
If a Mod 2 <> b Mod 2 Then
a = a \ 2
b = b \ 2
r = r * 2
Next i
End Function
-
2、编写VB程序,实现如下功能:在文本框Text1中输入二进制数,单击“转换”命令按钮Command1,在文本框Text2中输出对应的十六进制数。程序运行界面如图所示,请回答下列问题:
(1)、如果输入的二进制数为“1101010”,则得到的结果为。(2)、实现上述功能的VB程序如下,请在划线处填入合适代码。Private Function bw(x As Integer, y As String) As String
'函数bw功能:若二进制位数不足,通过在前面添"0"使得位数为4的倍数
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
-
3、小王基于选择排序算法编写了一个VB程序,功能如下:数组a有n*n个元素,按n行n列进行排列,按列进行升序排序。例如6*6的数组,第一列将a(1),a(7),a(13),a(19),a(25),a(31)进行排序。运行程序,在列表框List1中显示n*n个数列单击“排序”按钮Command1,在列表框List2中显示排序后的结果,程序运行界面如图所示。请回答下列问题:
(1)、n=6时运行结果如图所示,图中1处“47”在数组a中下标是(填数字)。(2)、为了实现上述功能,请在划线处填写合适的代码。Const n =6
Dim a(1 To n * n) As Integer
Private Sub Form_Load() '产生n*n个数组元素,每行按n个数显示在list1中
For i = 1 To n * n
a(i) = Int(Rnd * 90) + 10
s = s + Str(a(i))
IfThen
List1.AddItem s
s = ""
End If
Next i
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, w As Integer, s As String
For i = 1 To n * n
k = i
For j = k + n To
If a(k) > a(j) Then k = j
Next j
If
Then t = a(k): a(k) = a(i): a(i) = tNext i
'将排序后数组a的元素,按每行n个数显示在list2中,代码略
End Sub
(3)、程序中加框处代码有错,请改正。 -
4、若一个三位数abc满足,abc=a3+b3+c3则称abc为水仙花数。如三位数153满足13+53+33=1+125+27=153,则153是水仙花数。以下是找出所有水仙花数的程序,请把程序补充完整。(a为百位数、b为十位数、c为个位数)
Dim i As Integer, a As Integer, b As Integer, c As Integer
For i=100 To
a=i\100
b=
c=i-100*a-10*b
If Then
Print i
End If
Next i
-
5、小龙同学设计了一个求四则混合运算结果的程序,用于计算不带括号的+、-、*、\的运算,\为整除运算,且此处要求*和\的优先级相同。在表达式中输入待求解的表达式,以=结尾。按下 Command1“计算”按钮后,在标签控件Label1中输出运算结果。程序界面如下图所示:
(1)、在表达式中输入15-22\5*2+7=,则输出的结果。(2)、实现上述功能的VB程序如下,请在划线处填入合适代码。Function calculate(x As Integer, y As Integer, op As String) As Integer
If op = "+" Then calculate = x + y
If op = "-" Then calculate = x - y
If op = "*" Then calculate = x * y
If op = "\" Then calculate = x \ y
End Function
Function state(op As String) As Integer
If op = "#" Then state = -1
If op = "=" Then state = 1
If op = "+" Then state = 1
If op = "-" Then state = 1
If op = "*" Then state = 3
End Function
Private Sub Command1_Click()
Dim s As String, length As Integer, t As String Dim k As Integer, q As Integer
Dim opt(0 To 3) As String Dim i As Integer
Dim s1 As String
Dim a(1 To 3) As Integer
s = Text1.Text
length = Len(s)
t = "": k = 0: q = 0: opt(q) = "#"
For i = 1 To length
s1 = Mid(s, i, 1)
If s1 >= "0" And s1 <= "9" Then
t = t + s1
Else
k = k + 1
a(k) = Val(t)
t = ""
Do While
a(k - 1) = calculate(a(k - 1), a(k), opt(q))
k = k - 1
q= q - 1
Loop
q = q + 1
If s1 = "=" Then Label1.Caption = Str(a(1))
End If
Next i
End Sub
-
6、某班级学生为毕业晚会的一个节目设计一个仿“V”字造型,先筛选出班级中n名学生的所有男生,然后将参演的男生按照身高,摆出中间低两边高(先右后左)的造型,如下图1 所示。王林同学用VB编写模拟“节目造型”程序,功能如下:从数据库中导出所有学生编号、性别和身高数据;单击“筛选排序”按钮Command2,根据身高仿“V”字和造型进行有序排列,并将结果显示在文本框Text2 中。程序运行界面如图2所示。举例说明如下:
原1-7号男生身高
171 172 180 174 176 179 178
筛选排序后序列
171 172 174 176 178 179 180
“造型设计”后序列
180 178 174 171 172 176 179

图1
身高顺序:男3号〉男6号〉男7号〉男5号〉男4号〉男2号〉男1号

图2
Dim h (1 To n) As Integer
Dim height1(1 To n) As Integer
Dim height2(1 To n) As Integer
Dim n As Integer, i As Integer, j As Integer, num As Integer, tmp As Integer
Dim sex(1 To n) As String
Private Sub Form_Load()
'n名学生的身高和性别由数据库导出,分别存储在数组h和sex中,代码略!
End Sub
Private Sub Command1_Click()
b = 0
For i = 1 To n 'n名学生中的男生
If sex(i) = “男” Then ① : height1(num) = h(i)
Next i
For i = 1 To num – 1
For j = num To i + 1 Step -1
If height1(j) < height1(j - 1) Then
tmp = height1(j): height1(j) = height1(j - 1): height1(j - 1) = tmp
End If
Next j
Next i
For i = 1 To num
Text1.Text = Text1.Text + " " + Str(height1(i))
Next i
End Sub
Private Sub Command2_Click()
Dim left, right As Integer, i As Integer, mid As Integer
mid = Int((1 + num) / 2)
left = 0: right = 0
height2(mid) = height1(1)
For i = 1 To (num - 1) \ 2
right = right + 1
height2(mid + right) = height1(2*i)
left = left + 1
②
Next i
If num Mod 2 = 0 Then ③
For i = 1 To num
Text2.Text = Text2.Text + " " + Str(height2(i))
Next i
End Sub
(1)、若参演的8名男生身高为180、171、173、174、178、175、176、170,程序执行结束后height1(5)的值是。(2)、在程序下划线处填入适当的语句或表达式。将程序补充完整:①②③
-
7、均分红包。当前有n堆红包,编号为1,2, 3, 。。 n,每堆有若干个红包,红包总数sum是n的倍数。可以在任一堆上取若干个红包,然后移动,最终使每堆上的红包个数相同。
移红包规则:
①编号为1的堆上的红包,只能移到编号为2的堆上;
②编号为n的堆上的红包,只能移到编号为n-1的堆上;
③其它堆上的红包,可以移到相邻左边或右边的堆上。
现要求找出最少的移动次数使每堆的红包数-样多。如图所示,在文本框Text1中输入红包堆数n,在文本框Text2中依次输入每堆红包的红包个数(以“,”为分隔符和结束符),单击“移红包次数统计”按钮Command1后,在标签Labe13中显示最少的移动次数。
(1)、代码“Private Sub Command1_ Click( )”中的Click是(单选,填字母: A . 对象名\B . 事件名\C . 事件处理过程名\D . 方法名)(2)、实现上述功能的VB程序如下,请在划线处填入合适的代码。Const Sum = 40 '红包总个数
Private Sub Command1_ Click ()
Dim n As Integer '红包的堆数
Dim s As String, k As Integer
Dim avg As Integer '最终每堆的红包个数
Dim m1 As Integer, m2 As Integer
Dim tmp As Integer, count As Integer, ans As Integer
n=
s = Text2. Text
avg=Sum/n
tmp=0: count=0: ans=0
For k=1 To Len(s)
c = Mid(s, k, 1)
If c <>","Then
tmp =
Else
count = count + 1
If count = 1 Then
m1 =tmp
Else
m2 = tmp
If m1 <> avg Then
m2=m2-(avg-m1)
ans=ans+1
End If
End If
tmp=0
End If
Next k
Labe13. Caption = Str (ans)
End Sub
-
8、小王利用循环排序思想编写了一个VB程序,用于计算下一轮比赛的出场顺序。从数据库中读取本轮比赛的人员姓名存在数组xm中,成绩存在数组cj中(成绩均不重复)。编程实现将这些成绩进行循环升序排列。要求最低成绩的位置不变,然后依次进行升序排序,即从最小值开始向下尾首相连形成升序数列。程序运行界面如图所示。点击“排序”按钮,完成循环升序排序。
(1)、“排序”按钮的对象名为(2)、请在划线处填入合适代码。Dim xm(1 to 100)As String ,cj(1 to 100)As Integer
Dim flag(1 to 100)As Boolean
Private Sub Form_ Load( )
'从数据库中读取数据,存储到相应数组中,并输出在列表框List1。第i个人,姓名为xm(i),成绩为cj(i)。人员数量存储到变量n中(1≤n≤100)。代码略
End Sub
Private Sub Cmd__Click( )
Dim min As Integer, pmin As Integer
min = cj(1): pmin = 1
For i=2 To n
If cj(i) < min Then min = cj(i): ①
Next i
flag(pmin) = True
pmin= pmin + 1
If pmin=n+1 Then pmin=1
For i=1 To n-2
k = pmin
For j=1 To n
If ② Then k= j
Next j
If k <> pmin Then
t = cj(k): cj(k) = cj(pmin): cj(pmin) = t
C = xm(k): xm(k) = xm(pmin): xm(pmin) = c
End If
flag(pmin) = True
pmin=pmin+1
Next i
'将排序后的人员姓名和成绩输出到列表框List2中,代码略。
End Sub
① ②
(3)、加框处代码出错,请改正。 -
9、循环结构表示程序反复执行某个或某些操作,只有用户干预才能终止循环。
-
10、编写程序,实现以下功能:计算s=1+2/5+3/10+……i/i^2+1 的值,n由键盘输入,计算结果s保留3位小数。
Private Sub Command1_Click()
Dim n as integer, i as integer,s as double
n=val(inputbox("请输入n的值"))
s=0: i=1
do while ①
②
i=i+1
Loop
s=

Print s
End Sub
(1)、实现该程序功能的主体算法结构是。(2)、上面的VB程序,请完善划线处内容,完成上述功能。
① ②(3)、方框处能使变量s的值四舍五入精确到小数点后第3位小数,以下可以实现的语句是( )。A、Int(s * 100) / 100 B、Int(s * 1000) / 1000 C、Int(s * 100 + 0.5) / 100 D、Int((s * 1000 + 0.5)) / 1000 -
11、编写一个VB程序,实现如下功能:输入s位数字构成的数字字符串(第1位数字不为0),移除k(0<k<s)个数字后,在保证原数字相对位置不变的情况下,使剩余数字组成的新数为最小(注:新数第1位不能为0)。例如8个数字构成的数字字符串“71803296”,移除3个数字,得到5位数字构成的最小数是“10296”,具体算法如图a所示。

算法分析:要使得到的5位数字最小,首先需保证能取到5个数字,且首位应尽量小,那么取首位数的范围应保证余下有4个数字,即在前4位中选最小非0的数字。
程序运行时,在文本框Text1中输入一个数字字符串,在文本框Text2中输入要移除的数字个数,单击“运行”按钮CmdRun后,在标签Labell显示得到的最小新数,程序运行界面如图b所示。
(1)、程序运行时,若要在名为Form1的窗体标题上显示“删数”,可以在Form Load事件处理过程中添加语句为(单选,填字母:A . Form1. Text ="删数"\B . Form1. Caption ="删数"\C . Form1. AddItem"删数")(2)、实现上述功能的VB程序代码如下,请在划线处填入合适的代码。Private Sub CmdRun_ Click()
Dim Num As String,New_num As String ' Num为输入的数字字符串
Dim i As Integer, j As Integer, m As Integer,
Dim As Integer, s As Integer, k As Integer
Dim a(30) As String, b(30) As Integer
Num = Text1. Text: s = Len(Num)
k = Val (Text2. Text) 'k为删除数字个数
For i=1 To s
a(i) = Mid(Num,i,1)
Next i
j =1
m=1
n=
For i=m+1 To n '取第一个非零最小数字
If
Then m=i '加框处程序代码有误,请改正Next i
b(j)= m
Do While '取其他最小数字
m=m+1
n=n+1
For i=m+1 To n
If a(i) < a(m) Then m= i
Next i
j =j+1:b(j)=m
Loop
For i= m+1 To s '最后直接取的数字
j =j+1: b(j)=i
Next i
For j=1 To s- k '输出最小数
New_ num =
Next j
Labell. Caption = New_num
End Sub
(3)、加框处程序代码有误,请改正。 -
12、给定两个十进制整数X和Y(X<=Y),求出从X到Y的所有整数中出现“1”的个数。例如:X=6,Y=15时,6,7,8,9,10,11,12,13,14,15,出现了7个“1”。小明编写了一个VB程序,功能如下:在文本框Text1中输入整数X,在文本框Text2中输入整数Y,单击“统计”按钮Command1后,在列表框List1中显示X到Y,并在标签Label3中显示从X到Y的所有整数中出现“1”的个数。程序运行界面如图所示,请在划线处填入合适代码。
(1)、下列程序段中句List1.AddItem中的AddItem是(填字母:A. 属性名/B.事件名/C.方法名/D.对象)(2)、为了实现上述功能,请在划线处填入合适的代码。PrivateSubCommand1_Click()
Dim x AsInteger,y As Integer,t AsInteger
Dim I AsInteger,n As Integer,count AsInteger
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
(3)、如果删除加框处代码,并运行程序,在文本框Text1中输入“40”,在文本框Text2中输入“10”,单击“统计”按钮,则标签框Label3显示X到Y之间1的个数有个。 -
13、运行下列程序,正确的结果是
s=0
for i in range (1 5):
s=s+i
print("i=",i,"s=",s)
-
14、下面的程序段运行后的结果为。
s=0
for i in range(1,8,3):
s=s+i
print(s)
-
15、字符串数组a中a(1)到a(6)的原始数据为57,3,24,34, 6,120,为了对该数组进行排序操作,编写了以下VB程序。
i=2
Do While i<=6
For j=6 To i+2 Step -2
If a(j)>a(j-2)Then t=a(j):a(j)=a(j-2):a(j-2)=t
Next j
i=i+2
Loop
则程序运行之后,数组元素a(1)和a(2)的值分别是( )
A、6 3 B、57 120 C、120 57 D、6 34 -
16、小明想用数据移位思想将一段长度为n的序列a(n), 以t位置为分界,把前t-1个数和后n-t+1个数调换前后顺序,但保持每段中数据的相对位置不变。例如一段长度为6的序列1、2、3、4、5、6。t=4时,数组a中元素顺序变成4、5、6、1、2、3。实现上述功能的代码如下,下列①、②处填写正确的是( )
t = Val(Text1. Text): m= 2
For i=t-1 To 1 Step-1
k = a(i)
For j=i To n- 1
①
Next j
②
n=n-1
Next i
A、①a(j+1)=a(j) ②a(j+1)=k B、①a(j)=a(j+1) ②a(j+1)=k C、①a(j+1)=a(j) ②a(j)=k D、①a(j)=a(j+1) ②a(j)=k -
17、下列有关for循环语句说法正确的是( )。A、for 循环变量 in 列表后面必须加冒号 B、For循环所包含的语句是不以缩进为标志的。 C、列表的几种表达方式有直接罗列,先定义后使用和使用range( )函数 D、For循环所包含的语句是以缩进为标志的。
-
18、下面的程序段运行后的结果为( )
s=1
for i in range(1,6,2):
s=s+i
print(s)
A、15 B、10 C、12 D、9 -
19、有如下VB程序段:
s ="cbafedgh"
m=3:c="":n= Len(s)
For i =1 To n
j=(i-1)Mod 3 + 1
If m> n Then Exit For '退出For循环
c=c+ Mid(s,m-j+1,1)
If j Mod 3 =0 Then m =m+3
Next i
If i < n Then c = Mid(s,i,n-i + 1)+c
执行该程序段后,变量c的值是( )
A、Abcdef B、Abcdefgh C、Ghabcdef D、hgabcdef -
20、数组a中存储着某市2010年到 2019 年的GDP数值,编写VB程序,实现找出相邻两年GDP变化最大(即相邻两年GDP差值最大)的年份区间。若有多个符合要求的年份区间,只输出距今最近的年份区间。部分代码如下所示:
Dim i As Integer, imax As Integer
①
For i = 3 To 10
If Abs(a(i) - a(i - 1)) >= ② Then imax = i
Next i
Text1.Text = "GDP变化最大的年份区间是" + Str(imax + 2008) + "-" + Str(imax + 2009)
①、②应填入的代码为( )
A、①imax=1 ②Abs(a(i - 1) - a(i - 2)) B、①imax=1 ②Abs(a(imax) - a(imax - 1)) C、①imax=2 ②Abs(a(i - 1) - a(i - 2)) D、①imax=2 ②Abs(a(imax) - a(imax - 1))2