- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- 算法实例的程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
解决问题:求m和 n的最大公约数。根据以下算法描述,回答问题。
①输入m,n
②以m为被除数,n为除数,r为m除以n的余数
③判断r的值
若r=0,输出公约数n
若r≠0,则n将赋值给m,再将r赋值给n,转为执行步骤②
(1)上述算法的描述方式是_____________。
(2)若 m=2018,n =20,则最大公约数是_____________。
(3)这个算法是著名欧几里德算法,又称_____________。
(4)“r 为 m 除以 n 的余数”的 VB 语句是_____________。
(5)上述算法是用程序的_____________结构实现。
①输入m,n
②以m为被除数,n为除数,r为m除以n的余数
③判断r的值
若r=0,输出公约数n
若r≠0,则n将赋值给m,再将r赋值给n,转为执行步骤②
(1)上述算法的描述方式是_____________。
(2)若 m=2018,n =20,则最大公约数是_____________。
(3)这个算法是著名欧几里德算法,又称_____________。
(4)“r 为 m 除以 n 的余数”的 VB 语句是_____________。
(5)上述算法是用程序的_____________结构实现。
利用计算机解决问题步骤有分析问题、设计算法、编写程序和调试运行,其中最为核心的步骤是( )。
A.分析问题 | B.设计算法 |
C.编写程序 | D.调试运行 |
在文本框Text1中输入一组12位以内的二进制数,将该二进制数转化为十六进制数后在Label1中输出。程序运行后如图所示,请完成以下题目。

(1)若要在窗体加载时,自动将文本框宽度调整为5000,则需在Form_Load()过程中加入语句Text1._____=5000(填字母:
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim a(1 To 12) As String ’a数组用以存储二进制数
Dim b(1 To 3) As Integer ’b数组用以存储十六进制数
Dim m, n As String
Dim i, j, k As Integer
m = ①_______
For i = 12 To 12 - Len(m) + 1 Step -1 ’将每位二进制数保存到数组a中
a(i) = ②______
Next i
For i = 1 To 3 ’将每4位二进制数转化为十进制数后保存到数组b中
For j = 4 To 1 Step -1
b(i) = b(i) + Val(a(i * 4 - j + 1)) * 2 ^ (j - 1)
Next j
Next i
For i = 1 To 3
If b(i) < 10 Then m = Chr(b(i) + 48) Else m = Chr(b(i) + 55)
n = n & m
Next i
Label1.Caption = "转换后的十六进制数为:" + n
End Sub
(3)若程序运行后,若在文本框中输入二进制数1101101101,则在Label1中显示的内容为:转换后的十六进制数为:____。

(1)若要在窗体加载时,自动将文本框宽度调整为5000,则需在Form_Load()过程中加入语句Text1._____=5000(填字母:
A.Caption / | B.Height / | C.Width / | D.Left)。 |
Private Sub Command1_Click()
Dim a(1 To 12) As String ’a数组用以存储二进制数
Dim b(1 To 3) As Integer ’b数组用以存储十六进制数
Dim m, n As String
Dim i, j, k As Integer
m = ①_______
For i = 12 To 12 - Len(m) + 1 Step -1 ’将每位二进制数保存到数组a中
a(i) = ②______
Next i
For i = 1 To 3 ’将每4位二进制数转化为十进制数后保存到数组b中
For j = 4 To 1 Step -1
b(i) = b(i) + Val(a(i * 4 - j + 1)) * 2 ^ (j - 1)
Next j
Next i
For i = 1 To 3
If b(i) < 10 Then m = Chr(b(i) + 48) Else m = Chr(b(i) + 55)
n = n & m
Next i
Label1.Caption = "转换后的十六进制数为:" + n
End Sub
(3)若程序运行后,若在文本框中输入二进制数1101101101,则在Label1中显示的内容为:转换后的十六进制数为:____。
(加试题)在文本框Text1中输入待加密的n个字符(仅由ASCII码字符构成,最多支持960个字符),输入后单击加密按钮,在文本框Text2中产生密文。加密方式如下:
① 定义一个数组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)若加密后的密文为“068029041”,则随机数是____;在Text1中输入的明文是____。
(2)在空白处填写缺失的代码。
① 定义一个数组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)若加密后的密文为“068029041”,则随机数是____;在Text1中输入的明文是____。
(2)在空白处填写缺失的代码。
(加试题)有如下程序段,文本框中输入19后单击命令按钮,则窗体中显示的数字为
Private Sub Command1_Click()
Dim m, n, sum, left, mid, key, s As Integer
Dim a(1 To 13) As Integer
a(1) = 2: a(2) = 3: a(3) = 8: a(4) = 16: a(5) = 19: a(6) = 27
a(7) = 29: a(8) = 32: a(9) = 49: a(10) = 64: a(11) = 72: a(12) = 99
m = 1: n = 12
key = Val(Text1.Text)
mid = (m + n + 1) \ 2
Do While a(mid) <> key And m <= n
If a(mid) > key Then n = mid - 1: left = left + 1 Else m = mid + 1
mid = (m + n) \ 2: sum = sum + 1
Loop
Print sum,left
End Sub
Private Sub Command1_Click()
Dim m, n, sum, left, mid, key, s As Integer
Dim a(1 To 13) As Integer
a(1) = 2: a(2) = 3: a(3) = 8: a(4) = 16: a(5) = 19: a(6) = 27
a(7) = 29: a(8) = 32: a(9) = 49: a(10) = 64: a(11) = 72: a(12) = 99
m = 1: n = 12
key = Val(Text1.Text)
mid = (m + n + 1) \ 2
Do While a(mid) <> key And m <= n
If a(mid) > key Then n = mid - 1: left = left + 1 Else m = mid + 1
mid = (m + n) \ 2: sum = sum + 1
Loop
Print sum,left
End Sub
A.1 1 | B.1 2 | C.2 1 | D.2 2 |
(加试题)如图所示程序运行时,点击“生成”按钮,随机产生100个不重复的仅由数字和大小写字母组成的3位字符串并显示在List1中,点击“排序”按钮,将所有字符串排序后在List2中输出。要求:数字开头的字符串在前并按升序排序,字母开头的字符串在后并按降序排序。

实现上述功能的代码如下,但划线处代码有错,请改正。
Private Sub Command1_Click()
‘随机产生100个不重复的仅由数字和大小写字母组成的3位字符串并存储到数组zfc(1)至zfc(100)中,同时在List1中显示,代码略。
Private Sub Command2_Click()
Dim zfc(1 to 101) as integer
Dim i, j, m, k As Integer
Dim s As Boolean
For i = 1 To 100
If Asc(Mid(zfc(i), 1, 1)) >=48 Then t = t + 1
________________
Next i
For i = 1 To 99
For j = i + 1 To 100
_____________
If zfc(j - 1) > zfc(j) Then
zfc(101) = zfc(j - 1): zfc(j - 1) = zfc(j): zfc(j) = zfc(101)
End If
Next j
Next i
For i = t + 1 To 99
k = i
For j = i + 1 To 100
If zfc(k) < zfc(j) Then k = j
Next j
If k <> i Then zfc(101) = zfc(i): zfc(i) = zfc(k): zfc(k) = zfc(101)
Next i
For i = 1 To 100
List2.AddItem zfc(i)
Next i
End sub

实现上述功能的代码如下,但划线处代码有错,请改正。
Private Sub Command1_Click()
‘随机产生100个不重复的仅由数字和大小写字母组成的3位字符串并存储到数组zfc(1)至zfc(100)中,同时在List1中显示,代码略。
Private Sub Command2_Click()
Dim zfc(1 to 101) as integer
Dim i, j, m, k As Integer
Dim s As Boolean
For i = 1 To 100
If Asc(Mid(zfc(i), 1, 1)) >=48 Then t = t + 1

Next i
For i = 1 To 99
For j = i + 1 To 100

If zfc(j - 1) > zfc(j) Then
zfc(101) = zfc(j - 1): zfc(j - 1) = zfc(j): zfc(j) = zfc(101)
End If
Next j
Next i
For i = t + 1 To 99
k = i
For j = i + 1 To 100
If zfc(k) < zfc(j) Then k = j
Next j
If k <> i Then zfc(101) = zfc(i): zfc(i) = zfc(k): zfc(k) = zfc(101)
Next i
For i = 1 To 100
List2.AddItem zfc(i)
Next i
End sub
(加试题)有如下程序段,若有如下数据:64, 57, 22, 96, 71,分别存储在a(1)至a(5)中,经过以下程序段处理后的数据依次为
Dim a(1 To 6) As Integer
s = 0
For i = 1 To 5
If a(i) Mod 2 = 1 Then s = s + 1
Next i
For i = 1 To 4
If a(i) Mod 2 = 0 Then
For j = 5 To i + 1 Step -1
If a(j) Mod 2 = 1 Then
a(6) = a(i): a(i) = a(j): a(j) = a(6): Exit For
End If
Next j
End If
Next i
For i = s + 2 To 5
k = i - 1
For j = i To 5
If a(k) > a(j) Then k = j
Next j
If k <> i - 1 Then
a(6) = a(i - 1): a(i - 1) = a(k): a(k) = a(6)
End If
Next i
Dim a(1 To 6) As Integer
s = 0
For i = 1 To 5
If a(i) Mod 2 = 1 Then s = s + 1
Next i
For i = 1 To 4
If a(i) Mod 2 = 0 Then
For j = 5 To i + 1 Step -1
If a(j) Mod 2 = 1 Then
a(6) = a(i): a(i) = a(j): a(j) = a(6): Exit For
End If
Next j
End If
Next i
For i = s + 2 To 5
k = i - 1
For j = i To 5
If a(k) > a(j) Then k = j
Next j
If k <> i - 1 Then
a(6) = a(i - 1): a(i - 1) = a(k): a(k) = a(6)
End If
Next i
A.22, 57, 64, 71, 96 | B.71, 57, 22, 96, 64 |
C.71, 57, 22, 64, 96 | D.57, 71, 22, 64, 96 |
趣味填空题:给出用等号连接的两个整数,如“222=24”,让你在左边的整数中间某个位置插入一个加号,看有没有可能让等式成立。以上面的式子为例,可以写成2+22=24和22+2=24。现设计一个程序,实现该算法,程序运行界面如图所示。

(1)标题要显示“趣味数学”,需修改窗体的_________属性。
(2)实现上述功能的VB程序如下,请在程序划线处填入合适代码。
Private Sub Command1_Click()
Dim s As String, s1 As String, s2 As String
Dim c As Integer, k As Integer, i As Integer, flag As Boolean
flag = False
s = Text1.Text
For c = 1 To Len(s)
If ______________① Then Exit For 'Exit for退出循环
Next c
s1 = Mid(s, 1, c - 1)
s2 = Mid(s, c + 1,len(s)-c)
k = _________②
For i = 1 To k - 1
If Val(Mid(s1, 1, i)) + Val(Mid(s1, i + 1,c-i-1)) = Val(s2) Then
List1.AddItem Mid(s, 1, i) + "+" + Mid(s, i + 1,len(s)-i)
________③
End If
Next i
If Not flag Then List1.AddItem "等式始终无法成立!"
End Sub

(1)标题要显示“趣味数学”,需修改窗体的_________属性。
(2)实现上述功能的VB程序如下,请在程序划线处填入合适代码。
Private Sub Command1_Click()
Dim s As String, s1 As String, s2 As String
Dim c As Integer, k As Integer, i As Integer, flag As Boolean
flag = False
s = Text1.Text
For c = 1 To Len(s)
If ______________① Then Exit For 'Exit for退出循环
Next c
s1 = Mid(s, 1, c - 1)
s2 = Mid(s, c + 1,len(s)-c)
k = _________②
For i = 1 To k - 1
If Val(Mid(s1, 1, i)) + Val(Mid(s1, i + 1,c-i-1)) = Val(s2) Then
List1.AddItem Mid(s, 1, i) + "+" + Mid(s, i + 1,len(s)-i)
________③
End If
Next i
If Not flag Then List1.AddItem "等式始终无法成立!"
End Sub