江苏高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2007春)
二级 Visual Basic语言(试卷代号VB01)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】本程序的功能是:输入一个由正整数组成的数字串(各整数由逗号隔开,最后以#号结束),从中找出所有是3的幂的数并显示在列表框中。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim s As String, ch As String, k As Integer
Dim a() As Integer, t As Integer, i As Integer
s = Text1
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch <> "," And ch <> "#" Then
t = t * 10 + Val(ch)
Else
k = k + 1
ReDim Preserve a(k)
a(k) = t
t = 0
End If
Next i
For i = 1 To UBound(a)
If judge(a(i)) Then List1.AddItem a(i)
Next i
End Sub
Private Function judge(ByVal n As Integer) As Boolean
Do While n <> 1
If n Mod 3 <> 0 Then
Exit Function
End If
n = n \ 3
Loop
judge = True
End Function
【要求】
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下.
二、编程题(26分)
【题目】编写程序,找出满足下列条件的正整数:①该数的位数为N(N=3,4);②该数的数字全部由偶数数字组成;③该数等于另一个由偶数数字组成的数的平方。
【编程要求】
1. 程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 在文本框中输入n的值,单击“运行”按钮,在规定范围内查找符合要求的数据并在列表框中显示结果;按“清理”按钮,则将文本框及列表框清空,焦点设置在文本框;按“结束”按钮, 结束程序运行;
3 程序中包含一个
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
过程,用于判断一个数的各位数字均为偶数。.
【要求】
将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下.
参考答案:
Private Sub Command1_Click()
Dim i As Integer, a As Integer
Dim low As String, high As String, n As Integer
n = Text1
low = "10000"
high = "99999"
For i = Left(low, n) To Left(high, n)
If flag(i) Then
If Int(Sqr(i)) = Sqr(i) Then
If flag(Sqr(i)) Then
List1.AddItem i & "=" & Sqr(i) & "^2"
End If
End If
End If
Next i
End Sub
Function flag(x As Integer) As Boolean
Dim i As Integer
For i = 1 To Len(CStr(x))
k = Mid(CStr(x), i, 1)
If k Mod 2 <> 0 Then Exit Function
Next i
flag = True
End Function
Private Sub Command2_Click()
Text1 = ""
List1.Clear
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub
江苏高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2007春)
二级 Visual Basic语言(试卷代号VB02)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】从10个各不相同的正整数中,剔除若干个数。使得保留下来的数中,任意两个数的和都不是平方数(所谓平方数就是该数等于某一个数的平方,例如4就是一个平方数)。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim a(10) As Integer, i As Integer, j As Integer, p As Integer, k As Integer
Do While p < 10
k = Int(20 * Rnd) + 1
For j = 1 To p
If k = a(j) Then Exit For
Next j
If j > p Then
p = p + 1
a(p) = k
Text1 = Text1 & Str(k)
End If
Loop
Call delete(a, p)
For i = 1 To p
Text2 = Text2 & Str(a(i))
Next i
End Sub
Private Sub delete(a() As Integer, p As Integer)
Dim idx As Integer, j As Integer, sum As Integer
idx = 2
Do While idx < p
For j = 1 To idx - 1
sum = a(idx) + a(j)
If Int(Sqr(sum)) = Sqr(sum) Then Exit For
Next j
If j <= idx - 1 Then
a(idx) = a(p)
p = p - 1
Else
idx = idx + 1
End If
Loop
End Sub
【要求】
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下.
二、编程题(26分)
【题目】编写程序,生成n组22选5的彩票码组(每组由各不相同的5个数码组成,且每个数码只能取1-22之间的数字)。
【编程要求】
1. 程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 在文本框1中输入n的值,单击“运行”按钮,在列表框中显示结果;按“清除”按钮,则将文本框及列表框清空,焦点设置在文本框;按“结束”按钮, 结束程序运行;
3 程序中包含一个名为tc的通用过程,用于生成一组彩票数码。
【要求】
将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下.
参考答案:
Private Sub Command1_Click()
Dim n As Integer, a(5) As Integer
Dim i As Integer
n = Text1
For i = 1 To n
Call tc(a)
For j = 1 To 5
s = s & " " & a(j)
Next j
List1.AddItem s
s = ""
Erase a
Next i
End Sub
Sub tc(a() As Integer)
Dim i As Integer, x As Integer
Do While i < 5
x = Int(Rnd * 22) + 1
For j = 1 To 5
If x = a(j) Then Exit For
Next j
If j > 5 Then
i = i + 1
a(i) = x
End If
Loop
End Sub
Private Sub Command2_Click()
Text1 = ""
List1.Clear
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2007春)
二级 Visual Basic语言 (试卷代号VB03)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】本程序功能是查找3位和4位的Armstrong数。若一个N位的正整数,其各位数字的N次方之和等于这个数本身,则这个数就是一个Armstrong数。
如:153 = 1^3 + 5^3 + 3^3,1634 = 1^4 + 6^4 + 3^4 + 4^4。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim I As Integer, A() As Integer, f As Boolean, n As Integer
Dim j As Integer, st As String
st =
For I = 153 To 9999
f = False
Call Arms(I, f, A, n)
If f Then
st = st & I & =
For j = 1 To UBound(A) - 1
st = st & A(j) & ^ & n & +
Next j
st = st & A(j) & ^ & n
List1.AddItem st
End If
Next I
End Sub
Private Sub Arms(k As Integer, f As Boolean, B() As Integer, n As Integer)
Dim I As Integer, Sum As Integer, M As Integer
n = Len(Str(k))
M = k
ReDim B(n)
For I = n To 1 Step -1
B(I) = k Mod 10
k = k \ 10
Next I
For I = 1 To n
Sum = Sum + B(I) ^ n 计算各位数字的N次方之和
Next I
If Sum = M Then f = True
End Sub
【要求】
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题(26分)
【题目】编写一个数据转换程序,将一组大小差异很大的数据变换为[0,1]区间的数值。设原样本数据的最大值为maxa,最小值为mina,将第k个样本值vk,变换为vk。变换公式为:
(k = 1,2,3,……n)
【编程要求】
1. 程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 按“生成样本数据”按钮,利用InputBox函数输入需要生成的数据个数n(缺省值设为10),再生成n个1~999之间的随机整数,并在文本框中显示;按“数据变换”按钮,进行数据变换,将变换结果显示到列表框;按“清除”按钮,将文本框及列表框清空;
3. 程序中应定义一个名为maxmin的通用过程,用于求样本数据的最大值与最小值。
【要求】
将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下。
2007年(春)上机 Visual Basic(VB03)答案
一、 改错
【题目】本程序功能是查找3位和4位的Armstrong数。
若一个N位的正整数,其各位数字的N次方之和等于这个数本身,则这个数就是一个Armstrong数。
如:153 = 1^3 + 5^3 + 3^3,1634 = 1^4 + 6^4 + 3^4 + 4^4。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim I As Integer, A() As Integer, f As Boolean, n As Integer
Dim j As Integer, st As String
st = err 位置错
For I = 153 To 9999
f = False
Call Arms(I, f, A, n)
st = ‘正确位置
If f Then
st = st & I & =
For j = 1 To UBound(A) - 1
st = st & A(j) & ^ & n & +
Next j
st = st & A(j) & ^ & n
List1.AddItem st
End If
Next I
End Sub
Private Sub Arms(ByVal k As Integer, f As Boolean, B() As Integer, n As Integer) 原错误为 无ByVal
Dim I As Integer, Sum As Integer, M As Integer
n = Len(CStr(k)) 原错误为 Len(Str(k))
M = k
ReDim B(n)
For I = n To 1 Step -1
B(I) = k Mod 10
k = k \ 10
Next I
For I = 1 To n
Sum = Sum + B(I) ^ n Str的错误也可改这里B(I) ^ (n - 1)
计算各位数字的N次方之和
Next I
If Sum = M Then f = True
End Sub
二、编程题
【题目】编写一个数据转换程序,将一组大小差异很大的数据变换为[0,1]区间的数值。设原样本数据的最大值为maxa,最小值为mina,第k个样本值为vk,变换后的新值为vk,则
Option Explicit
Dim n As Integer, samp() As Integer
Private Sub Command1_Click()
Dim i As Integer
n = InputBox(输入样本个数n:, , 10)
ReDim samp(n)
For i = 1 To n
samp(i) = Int(999 * Rnd) + 1
Text1 = Text1 & Str(samp(i))
Next i
End Sub
Private Sub Command2_Click()
Dim maxv As Integer, minv As Integer, i As Integer
Dim news() As Single
ReDim news(n)
Call maxmin(samp, maxv, minv)
For i = 1 To n
news(i) = (samp(i) - minv) / (maxv - minv)
List1.AddItem samp(i) & --> & news(i)
Next i
End Sub
Private Sub maxmin(a() As Integer, max As Integer, min As Integer)
Dim i As Integer
max = a(1): min = a(1)
For i = 2 To UBound(a)
If a(i) < min Then
min = a(i)
ElseIf a(i) > max Then
max = a(i)
End If
Next i
End Sub
Private Sub Command3_Click()
Text1 = : List1.Clear
End Sub
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2007春)
二级 Visual Basic语言 (试卷代号VB04)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】本程序是生成个位数分别是0、1、2、...9的十个三位随机整数,再利用插入排序由大到小排序,并输出到列表框中。
Option Explicit
Private Sub Command1_Click()
Dim a(9) As Integer, x As Integer, k As Integer, i As Integer
Do While i <= 9
x = Int(Rnd * 900 + 100)
k = x Mod 10
If a(k) = 0 Then
a(k) = x
i = i + 1
Text1 = Text1 & Str(a(k))
End If
Loop
Sort(a)
For i = 0 To 9
List1.AddItem a(i)
Next i
End Sub
Private Sub sort(a() As Integer)
Dim x As Integer, i As Integer, j As Integer
For i = 1 To UBound(a)
x = a(i)
j = i - 1
Do While j >= 0 And x > a(j)
a(j) = a(j + 1)
j = j - 1
If j < 0 Then Exit Sub
Loop
If i > j + 1 Then
a(j + 1) = x
End If
Next i
End Sub
【要求】
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题(26分)
【题目】编写程序,求出所有无重复数的三个整数组合,使它们的最小公倍数等于指定数据N。(设N取值范围为[100,150],三个整数的范围为[3,40])
【编程要求】
1. 程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 在文本框1中输入N值,按“计算”按钮,则开始求解并在列表框中显示结果;按“清除”按钮,将文本框及列表框清空,焦点置于文本框;按“结束”按钮,结束程序运行;
3. 程序中应定义一个名为LCM的函数过程,用于求三个整数的最小公倍数。[算法提示:三个整数的最小公倍数,可先求出其中两个整数的最小公倍数,再求出该数与第3个数的最小公倍数即可]
【要求】
将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下。
2007年(春)上机 Visual Basic(VB04)答案
一、 改错
【题目】本程序是生成个位数分别是0、1、2、...9的十个三位随机整数,再利用插入排序由大到小排序,并输出到列表框中。
Option Explicit
Private Sub Command1_Click()
Dim a(9) As Integer, x As Integer, k As Integer, i As Integer
Do While i <= 9
x = Int(Rnd * 900 + 100)
k = x Mod 10
If a(k) = 0 Then
a(k) = x
i = i + 1
Text1 = Text1 & Str(a(k))
End If
Loop
Call sort(a) 原错误 sort (a);或改为sort a
For i = 0 To 9
List1.AddItem a(i)
Next i
End Sub
Private Sub sort(a() As Integer)
Dim x As Integer, i As Integer, j As Integer
For i = 1 To UBound(a)
x = a(i)
j = i - 1
Do While j >= 0 And x > a(j)
a(j + 1) = a(j) 原错误a(j) = a(j + 1)
j = j - 1
If j < 0 Then Exit Do 原错误 Exit Sub
Loop
If i > j + 1 Then
a(j + 1) = x
End If
Next i
End Sub
二、编程题
【题目】编写程序,求出所有无重复数的三个整数组合,它们的最小公倍数等于指定数据N。(设N取值范围为[100,150],三个整数的范围为[3,40])
Option Explicit
Private Function LCM(A As Integer, B As Integer, C As Integer)
Dim Lm As Integer
LCM = A
Do Until LCM Mod A = 0 And LCM Mod B = 0 And LCM Mod C = 0
LCM = LCM + A
Loop
End Function
Private Sub Command1_Click()
Dim lcd_n As Integer, m As Integer, n As Integer, k As Integer
lcd_n = Text1
For m = 2 To 30
For n = m + 1 To 30
For k = n + 1 To 30
If LCM(m, n, k) = lcd_n Then
List1.AddItem Str(m) & Str(n) & Str(k)
End If
Next k
Next n
Next m
End Sub
Private Sub Command2_Click()
Text1 = : List1.Clear
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2007春)
二级 Visual Basic语言 (试卷代号VB05)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】本程序的功能是找出这样的四位数:①各位上的数字不重复,且不为0;②相邻两个数字之和为素数;③首尾两个数字之和也为素数。(界面参见图1)
算法提示:从可能符合条件的4位数中,首先判断其是否含有重复的数码和0,若无则调用函数Prime,判断这个4位数的相邻两个数字和首尾两个数字之和是否都是素数。
Private Sub Command1_Click()
Dim A(9) As Integer, I As Integer, K As Integer, S As String, J As Integer
For I = 1234 To 9876
Erase A
S = CStr(I)
For J = 1 To Len(S)
K = Val(Mid(S, J, 1))
If K = 0 Then Exit Sub
If A(K) = 0 Then ‘ 此If结构功能是判断4位数是否含有重复的数码
A(K) = 1
Else
Exit For
End If
Next J
If J >= Len(S) And Prime(I) Then
List1.AddItem I
End If
Next I
End Sub
Private Function Prime(N As Integer) As Boolean
Dim S As String, L As Integer, K As Integer, Tem As Long, I As Integer
S = CStr(N)
L = Len(N)
For I = 1 To L
If I <> L Then
Tem = Val(Mid(S, I, 1)) + Mid(S, I + 1, 1)
Else
Tem = Val(Mid(S, 1, 1)) + Mid(S, L, 1)
End If
For K = 2 To Sqr(Tem)
If Tem Mod K = 0 Then Exit Function
Next K
Next I
Prime = True
End Function
【要求】
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题(26分)
【题目】编写程序,求乘积在给定区间内的互为反序的两个自然数。所谓互为反序的自然数是指如102 和201,35 和53,11 和11这样的数。而120 和21 则不是。
【编程要求】
1. 程序参考界面如图2所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 在文本框1中输入A值,在文本框2中输入B值,再按“运行”按钮,则在11~2000的范围内查找乘积为[A,B]区间的反序数对,并在列表框中显示结果;按“清理”按钮,则将2个文本框及列表框清空,焦点置于文本框1;按“结束”按钮,结束程序运行;
3. 程序中应定义一个名为nx的函数过程,用于求一个整数的反序数。
[算法提示]如果一个整数末位数为0,则不需要求反序数。
【要求】
将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下。
图2
图 1
2007年(春)上机 Visual Basic(VB05)答案
一、 改错
【题目】本程序的功能是找出这样的四位数:①各位上的数字不重复,且不为0;②相邻两个数字之和为素数;③首尾两个数字之和也为素数。(界面参见图1)
算法提示:从可能符合条件的4位数中,首先判断其是否含有重复的数码和0,若无则调用函数Prime,判断这个4位数的相邻两个数字和首尾两个数字之和是否都是素数。
Private Sub Command1_Click()
Dim A(9) As Integer, I As Integer, K As Integer, S As String, J As Integer
For I = 1234 To 9876
Erase A
S = CStr(I)
For J = 1 To Len(S)
K = Val(Mid(S, J, 1))
If K = 0 Then Exit For 错误为Exit Sub
If A(K) = 0 Then ‘ 此If结构功能是判断4位数是否含有重复的数码
A(K) = 1
Else
Exit For
End If
Next J
If J > Len(S) And Prime(I) Then ‘错误,应为J >= Len(S)
List1.AddItem I
End If
Next I
End Sub
Private Function Prime(N As Integer) As Boolean
Dim S As String, L As Integer, K As Integer, Tem As Long, I As Integer
S = CStr(N)
L = Len(S) ‘错误为 Len(N);或改为L = Len(CStr(N))
For I = 1 To L
If I <> L Then
Tem = Val(Mid(S, I, 1)) + Mid(S, I + 1, 1)
Else
Tem = Val(Mid(S, 1, 1)) + Mid(S, L, 1)
End If
For K = 2 To Sqr(Tem)
If Tem Mod K = 0 Then Exit Function
Next K
Next I
Prime = True
End Function
二、编程题
【题目】编写程序,求乘积在给定区间内的互为反序的两个自然数。所谓互为反序的自然数是指如102 和201,35 和53,11 和11这样的数。而120 和21 则不是。
Option Explicit
Private Sub Command1_Click()
Dim a As Long, b As Long, i As Integer
Dim st As String, n As Integer, p As Long
a = Text1: b = Text2
i = 11
Do While i < 2000
st = CStr(i)
If Right(st, 1) <> 0 Then
n = nx(i)
p = 1& * n * i
If p >= a And p <= b Then
List1.AddItem i & * & n & = & p
End If
End If
i = i + 1
Loop
End Sub
Private Function nx(ByVal n As Integer) As Integer
Dim i As Integer, st As String
Do
i = n Mod 10
st = st & CStr(i)
n = n \ 10
Loop Until n <= 0
nx = Val(st)
End Function
Private Sub Command2_Click()
Text1 = : Text2 = : List1.Clear
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2007春)
二级 Visual Basic语言 (试卷代号VB06)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】本程序的功能是生成十个各位数字互不相同的三位整数。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim a(10) As Integer, i As Integer, n As Integer
Dim k As Integer
Do
n = Int(Rnd * 900) + 100
If nc(n) Then
a(i) = n
i = i + 1
List1.AddItem i & : & a(i)
End If
Loop Until i >= 10
End Sub
Private Function nc(n As Integer) As Boolean
Dim a(3) As Integer, i As Integer, j As Integer
i = 1
Do
a(i) = n Mod 10
n = n \ 10
i = i + 1
Loop Until n <= 0
For i = 1 To 2
For j = i + 1 To 3
If a(i) = a(j) Then Exit For
Next j
Next i
nc = True
End Function
【要求】
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题(26分)
【题目】数组中10个元素的值各不相同,以数组第一个元素作为基准数,将小于基准数的元素向低下标端移,将大于基准数的元素向高下标端移。划分结束,基准数定位于第I元素。并且下标小于 I 的元素的值均小于基准数,下标大于 I 的元素的值均大于基准数。
【编程要求】
1. 程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 按“运行”按钮,生成10个范围在1~20之间的各不相同的整数赋给数组A并显示在文本框Text1中;调用自定义通用过程对数组元素进行划分(移位),并将划分后的数组显示在文本框Text2 中;按“清理”按钮,将2个文本框清空;按“结束”按钮,结束程序运行;
3. 程序中应定义一个通用过程,用于以数组第一个元素作为基准数,按题目要求对数组元素进行划分。
【提示】可以在一个数组中进行划分,也可以引入一个辅助数组进行划分
【要求】
将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下。
2007年(春)上机 Visual Basic(VB06)答案
一、 改错
【题目】本程序的功能是生成十个各位数字互不相同的三位整数。
Option Explicit
Private Sub Command1_Click()
Dim a(10) As Integer, i As Integer, n As Integer
Dim k As Integer
Do
n = Int(Rnd * 900) + 100
If nc(n) Then
i = i + 1 错误为位置错
a(i) = n 或a(i + 1) = n
i = i + 1
List1.AddItem i & : & a(i)
End If
Loop Until i >= 10
End Sub
Private Function nc(ByVal n As Integer) As Boolean 错误为无ByVal
Dim a(3) As Integer, i As Integer, j As Integer
i = 1
Do
a(i) = n Mod 10
n = n \ 10
i = i + 1
Loop Until n <= 0
For i = 1 To 2
For j = i + 1 To 3
If a(i) = a(j) Then Exit Function 错误为 Exit For
Next j
Next i
nc = True
End Function
二、编程题
【题目】数组中10个元素的值各不相同,以数组第一个元素作为基准数,将小于基准数的元素向低下标端移,将大于基准数的元素向高下标端移。划分结束,基准数定位于第I元素。并且下标小于 I 的元素的值均小于基准数,下标大于 I 的元素的值均大于基准数。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim A(10) As Integer, I As Integer, K As Integer, idx As Integer
Dim B(10) As Integer
Do While idx < 10
K = Int(20 * Rnd) + 1
For I = 1 To idx
If K = A(I) Then Exit For
Next I
If I > idx Then
idx = idx + 1
A(idx) = K
Text1 = Text1 & Str(A(idx))
End If
Loop
Call Sub1(A)
For I = 1 To 10
Text2 = Text2 & Str(A(I))
Next I
End Sub
Private Sub Sub2(A() As Integer, Result() As Integer)
Dim I As Integer, Uba As Integer, Lp As Integer, Hp As Integer
Dim K As Integer
Uba = UBound(A)
Lp = 1: Hp = Uba
K = A(1)
For I = 2 To Uba
If A(I) < K Then
Result(Lp) = A(I)
Lp = Lp + 1
Else
Result(Hp) = A(I)
Hp = Hp - 1
End If
Result(Lp) = K
Next I
End Sub
Private Sub Sub1(A() As Integer)
Dim K As Integer, I As Integer, J As Integer
Dim P As Integer
P = 1
For I = 2 To UBound(A)
K = A(I)
If K < A(P) Then
P = P + 1
For J = I - 1 To 1 Step -1
A(J + 1) = A(J)
Next J
A(1) = K
End If
Next I
End Sub
Private Sub Command2_Click()
Text1 =
Text2 =
End Sub