VB上机试题及答案11
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机操作练习题
1.某数组有20个元素,其值为随机产生的两位整数。
现要求将前10个元素及后10个元素对换。
即第1个元素及第20个元素互换,第2个数及第19个元素互换,…,第10个元素及第11个元素互换。
在窗体上输出数组原来各元素的值及对换后各元素的值。
Option explicit
Dim a(1 to 20) as integer, I as integer, j as integer, t as integer
Private Sub Form_Load()
Show
Print "原始数组是:"
Randomize
For i = 1 To 20
a(i) = Int(Rnd * 90) + 10
Print a(i);
If i Mod 10 = 0 Then Print
Next i
Print
Print "现在数组是:"
For i = 1 To 10
j = 21 - i
t = a(i): a(i) = a(j): a(j) = t
Next i
For i = 1 To 20
Print a(i);
If i Mod 10 = 0 Then Print
Next i
End Sub
2.从数组中删除一个数。
先定义一个一维数组,大小、数组的值自定。
从键盘上输入一个数,若这个数在数组当中,就把它删除;若这个数不在数组中,提示“该数不在数组中”
注意:1)如果数组中存在多个及该数相同的元素,每一个都能删除;
2)能实现多次删除
Private Sub Form_Load()
Show
ReDim a(9) As Integer
m = 1
Print "原来数组为:"
For i = 0 To 9
a(i) = InputBox("请输入第" & m & "个数:")
Print a(i);
m = m + 1
Next i
n = InputBox("查找的数是:")
i = 0: flag = False
Do
If a(i) = n Then
j = i: flag = True
For k = j To UBound(a) - 1
a(k) = a(k + 1)
Next k
ReDim Preserve a(UBound(a) - 1) i = i - 1
End If
i = i + 1
Loop While (i <= UBound(a))
If flag = False Then
MsgBox n & "不在该数组中"
Else
Print "删除" & n & "后的数组是:"
For i = 0 To UBound(a)
Print a(i);
Next i
End If
3.数组a中存放着升序排列的数据,使用array赋值,将inputbox输入的新数插入到数组中,插入后数组仍有序。
注意:要求利用动态数组,能够实现多次插入
Private Sub Form_Load()
Show
n = 8: ReDim a(n)
a = Array(5, 15, 23, 52, 68, 88, 90, 99)
n = n + 1: ReDim Preserve a(n)
m = InputBox("请输入要插入的数据:")
For i = 1 To n - 1
If m < a(i) Then Exit For
Next i
For k = n To i + 1 Step -1
a(k) = a(k - 1)
Next k
a(k) = m
For i = 1 To n
Print a(i);
Next i
Print
End Sub
4.6个评委为4位歌手打分,分数介于1-100之间。
去掉一个最高分,一个最低分,求出每位选手的最后得分。
将4位歌手得分从高到低排列输出,同时输出该选手的编号。
如:歌手3 95分歌手 1 87分歌手 4 80分歌手 2 70分
Option Base 1
Private Type geshou
xuhao As String
fenshu(6) As Integer
score As Integer
pingjun As Integer
End Type
Dim singer(1 To 4) As geshou
Private Sub Command1_Click()
For i = 1 To 4
For j = 1 To 6
singer(i).fenshu(j) = Int(Rnd * 100)
singer(i).xuhao = "歌手" & i
Next
Next
Call paixu
End Sub
Private Sub paixu()
Dim p As geshou
For i = 1 To 4
For j = 1 To 5
For k = j To 6
If singer(i).fenshu(j) > singer(i).fenshu(k) Then
t = singer(i).fenshu(j)
singer(i).fenshu(j) = singer(i).fenshu(k)
singer(i).fenshu(k) = t
End If
Next
Next
Next
For i = 1 To 4
For j = 2 To 5
singer(i).score = singer(i).score + singer(i).fenshu(j)
Next
singer(i).pingjun = singer(i).score / 4
Next
For i = 1 To 3
For j = i To 4
If singer(i).score < singer(j).score Then
p = singer(i): singer(i) = singer(j): singer(j) = p
End If
Next
Next
For i = 1 To 4
Print singer(i).xuhao & "得分:" & singer(i).pingjun
Next
End Sub
Private Sub Form_Load()
End Sub
10个评委给10个选手打分
Private Sub Form_Load()
Show
n = UBound(b)
For i = 1 To 10
For j = 1 To 10
a(i, j) = Val(InputBox("请第" & j & "位评委给第" & i & "位选手打分:"))
Next j
Next i
For i = 1 To 10
max = a(i, 1): sum = 0
min = a(i, 1): ave = 0
For j = 1 To 10
If a(i, j) > max Then max = a(i, j) If a(i, j) < min Then min = a(i, j) sum = sum + a(i, j)
Next j
ave = (sum - max - min) / (n - 2)
b(i) = ave
Next i
For i = 1 To n - 1
For j = i + 1 To n
If b(i) < b(j) Then
t = b(i): b(i) = b(j): b(j) = t
End If
Next j
Next i
Print "选手的得分由高到低为:"
For i = 1 To 10
Print b(i);
Next i
End Sub
5.编写函数求一元二次方程ax2+bx+c=0的解。
注意:要求考虑方程有两相等实根、两不等实根和两个虚根的情况。
Dim a As Single, b As Single, c As Single
Dim s As Single
a = InputBox("请输入a")
b = InputBox("请输入b")
c = InputBox("请输入c")
s = b ^ 2 - 4 * a * c
If s < 0 Then
MsgBox ("方程无解")
ElseIf s = 0 Then
Print -b / 2 * a
Else
Print ((-b) + Sqr(s)) / 2 * a & " " & ((-b) - Sqr(s)) / 2 * a
End If
End Sub
6. 任意输入一组字符,统计出大写字母多少个,小写字母多少个,数字多少个?要求用过程实现。
Call tongji(a, n, m, o)
Print "数字:" & n & Chr(13) & "小写:" & m & Chr(13) &
"大写:" & o
End Sub
Private Sub tongji(a As String, n As Integer, m As Integer, p As Integer)
For i = 1 To Len(a)
If Asc(Mid(a, i, 1)) > 47 And Asc(Mid(a, i, 1)) < 58 Then n = n + 1
ElseIf Asc(Mid(a, i, 1)) > 96 And Asc(Mid(a, i, 1)) < 123 Then
m = m + 1
ElseIf Asc(Mid(a, i, 1)) > 64 And Asc(Mid(a, i, 1)) < 91 Then
p = p + 1
End If
Next
End Sub
7.随机产生一个5*5的矩阵,将主对角线和次对角线元素都置为1,并求出矩阵的四周元素之和,显示在列表框中。
Option Base 1
Private Sub Form_Load()
Dim a(5, 5) As Integer
Dim s As Integer
For i = 1 To 5
For j = 1 To 5
If i = j Or i = 6 - j Then
a(i, j) = 1
Else
a(i, j) = Int(Rnd * 1000)
End If
Text1.Text = Text1.Text & " " & a(i, j)
s = s + a(i, j)
Next
Text1.Text = Text1.Text & vbCrLf & vbCrLf
Next
List1.AddItem (s)
End Sub
8.编写一个函数,能将字母按下列规律译成密码:
A<-->Z a<-->z
B<-->Y b<-->y
即第1个字母及第26个字母互换,第i个字母及第(26-i+1)个字母互换。
在文本框中任意输入一个字符串,调用该函数将密码显示在另一个文本框中。
Private Sub Command1_Click()
Dim s1 As String
s1 = Text1.Text
Text2.Text = convert(s1)
End Sub
Private Function convert(s1 As String) As String
For i = 1 To Len(s1)
If Asc(Mid(s1, i, 1)) < 91 And Asc(Mid(s1, i, 1)) >
64 Then
convert = convert & Chr(91 - Asc(Mid(s1, i, 1)) +
64)
ElseIf Asc(Mid(s1, i, 1)) < 123 And Asc(Mid(s1, i,
1)) > 96 Then
convert = convert & Chr(123 - Asc(Mid(s1, i, 1)) + 96)
End If
Next
End Function
9.编写2个函数,分别求两个正整数的最大公约数和最小公倍数,用户任意输入两个数,采用函数嵌套调用,该函数将它们在窗体显示。
Private Sub Form_Load()
Text1 = "": Text2 = ""
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Text2.SetFocus
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
Dim m As Integer, n As Integer, r As Integer, t As Integer, x
Cls
If KeyAscii = 13 Then
m = Text1.Text
n = Text2.Text
If m < n Then
t = m: m = n: n = t
End If
r = m Mod n
While r <> 0
m = n: n = r: r = m Mod n
Wend
Print
If m < 0 Or n < 0 Then
x = MsgBox("请输入正数", vbCritical + vbOKCancel)
If x = vbCancel Then
End
Else
Text1 = "": Text2 = ""
Text1.SetFocus
End If
Else
Print Text1.Text & "和" & Text2.Text & "的最大公约数是:"; n
End If
End If
End Sub
10. 编写计算阶乘的Function过程,利用e x的下列公式计算e (直到最后一项小于10-6为止)的近似值。
e x≈1+x/1!+x2/2!+x3/3!+…+x n/n!
Option Explicit
Private Sub Form_Load()
Show
Dim x As Integer, n As Integer, s As Double
x = InputBox("请输入一个数:")
n = 1: s = 1
Do
s = s + x ^ n / (jiecheng(n))
n = n + 1
Loop Until x ^ n / (jiecheng(n)) < 10 ^ (-6)
Print s
End Sub
Public Function jiecheng(n As Integer) As Double
Dim i As Integer, s As Double
s = 1
For i = 1 To n
s = s * i
Next i
jiecheng = s
End Function
11.输入整数N,显示具有N行的杨辉三角形,要求按正三角形的形式在图片框中显示。
Option Explicit
Private Sub Form_Load()
WindowState = 2
Show
Dim a(), n As Integer, i As Integer, j As Integer, g As Integer, e As Integer
n = InputBox("请输入一个数:")
ReDim a(n, n)
e = 80
For i = 1 To n
e = e - 5: g = e
For j = 1 To n
If j > i Then
a(i, j) = 0
Else
If i = j Then
a(i, j) = 1
Else
a(i, j) = a(i - 1, j) + a(i - 1, j - 1) End If
End If
If a(i, j) = 0 Then
Exit For
Else
Picture1.Print Tab(g); a(i, j);
g = g + 10
End If
Next j
Picture1.Print
Next i
End Sub
Private Sub Picture1_Click()
End Sub
12.编写一个过程,输出以下菱形图形:
A
BBB
CCCCC
DDDDDDD
CCCCC
BBB
A
主程序输入一个奇数(>=3),调用过程在窗体上输入图形。
Private Sub Command1_Click()
Dim n As Integer
n = InputBox("")
If n Mod 2 = 0 Or n <= 3 Then
MsgBox ("错误")
Else
Call draw(n)
End If
End Sub
Sub draw(n As Integer)
For i = 1 To (n + 1) / 2
s = Chr(64 + i)
Print Tab(41 - i + 1); String(2 * (i - 1) + 1, s)
Next
c = 1
For j = (n - 1) / 2 To 1 Step (-1)
c = c + 1
s = Chr(64 + i - c)
Print Tab(41 - i + c + 1); String(2 * (j - 1) + 1, s) Next
End Sub
13.编写一个将十进制转换为二进制字符串输出的函数。
调用函数计算用户输入一个十进制数,在文本框中输出二进制值。
注意:输入数据为负数,应该将符号位输出
如 -13 结果 -1101
Option Base 1
Dim a()
Private Function convert(y) As String
Dim i As Integer
i = 1
ReDim a(i)
x = Abs(y)
Do While x <> 0
ReDim Preserve a(i)
a(i) = x Mod 2
If a(i) = 1 Then
x = (x - 1) / 2
Else
x = x / 2
End If
i = i + 1
Loop
ReDim Preserve a(UBound(a)) If y < 0 Then
For i = 1 To UBound(a)
convert = convert & a(i)
Next
convert = "-" & convert Else
For i = 1 To UBound(a)
convert = convert & a(i) Next
End If
End Function
Private Sub Command1_Click()
Dim y As Integer
Text1.Text = ""
y = InputBox("请输入十进制数字")
Text1.Text = convert(y)
End Sub
Private Sub Form_Load()
End Sub
14.输入一个整数N,产生N个随机数(范围1—10*N),然后采用任何2种算法实现由小到大的排序。
将排序前后的数据显示出来。
Option Base 1
Private Sub Command1_Click()
Dim a() As Integer, n As Integer
n = InputBox("请输入数列项数")
ReDim a(n)
For i = 1 To n
a(i) = Int(Rnd * 10 * n + 1)
Print a(i);
Next
Print
ReDim Preserve a(n)
For i = 1 To n - 1
If a(i) > a(j) Then
t = a(i): a(i) = a(j): a(j) = t End If
Next
Next
ReDim Preserve a(n)
For i = 1 To n
Print a(i);
Next
End Sub
Private Sub Command2_Click()
Dim a() As Integer, n As Integer
n = InputBox("请输入数列项数")
ReDim a(n)
For i = 1 To n
a(i) = Int(Rnd * 10 * n + 1)
Print a(i);
Next
Print
ReDim Preserve a(n)
For i = 1 To n - 1
If a(j) > a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
End If
Next
Next
ReDim Preserve a(n)
For i = 1 To n
Print a(i);
Next
End Sub
Private Sub Form_Load()
End Sub
15.编写程序,在窗体上输出3~100之间的所有素数。
要求每行显示4个数。
Private Sub Command1_Click()
Dim f As Boolean, c As Integer
For i = 3 To 100
f = False
For j = 2 To Int(Sqr(i))
If i Mod j = 0 Then
f = True: Exit For
End If
Next
If f = False Then
Print i;
c = c + 1
If c Mod 4 = 0 Then
Print
End If
End If
Next
End Sub
Private Sub Form_Load()
End Sub
16.把文本框1、文本框2指定的范围内的所有素数添加到列表框中,并选中列表框数据中最后一位是9的所有数据(设定selected 属性),把它们的和值输出。
Public a As Integer
Private Function fact(n) As Long
If n = 1 Then
fact = 1
ElseIf n = 2 Then fact = 1
Else: fact = fact(n - 2) + fact(n - 1)
End If
End Function
Private Sub Command1_Click()
n = InputBox("请输入n")
Print fact(n)
End Sub
Private Function s(n) As Long
s1 = 1: s2 = 1
For i = 1 To n - 2
s = s1 + s2: t = s2: s2 = s: s1 = t
Next
End Function
Private Sub Command2_Click()
n = InputBox("请输入n")
Print s(n)
End Sub
17. 编写2个函数,分别采用递归法和递推法求斐波纳契数列的
第n个月的兔子数,n使用inputbox输入,调用函数的结果
在窗体上显示。
Private Sub Command1_Click()
List1.Clear
Dim i As Integer
For i = Val(Text1.Text) To Val(Text2.Text) If isprime(i) = True Then
List1.AddItem (i)
c = c + 1
If i Mod 10 = 9 Then
List1.Selected(c - 1) = True
s = s + i
End If
End If
Next
Print s
End Sub
Function isprime(n As Integer)
isprime = True
For i = 2 To n - 1
If n Mod i = 0 Then
isprime = False
Exit For
End If
Next
End Function
18 Dim sum As Long
Private Sub Command1_Click()
Dim i As Integer, j As Integer, a(40) As Long
a(1) = 1
a(2) = 1
For i = 3 To 40
a(i) = a(i - 1) + a(i - 2)
Next i
sum = 0
For j = 1 To 40
sum = sum + a(j)
Next j
End Sub
Private Sub Command2_Click()
Open "out18.txt" For Output As #1
Print #1, "数列1,1,2,3,5,8…的前四十项的之和是:" Print #1, sum
Close #1
End Sub
1.百钱买百鸡
Option Explicit
Private Sub Command1_Click()
Dim a As Integer, b As Integer
For a = 1 To 34
For b = 1 To 20
If 3 * a + 5 * b + (100 - a - b) / 3 = 100 Then Print a;
Print b;
Print 100 - a - b
End If
Next b
Next a
End Sub
2.分钱作业
Private Sub Command1_Click()
Dim a As Single,b as single,c as single
a = Text1.Text
b = Fix(a / 100)
Print "100元:";
Print b
c = a - 100 * b
b = Fix(
c / 50) Print "50元:"; Print b c = c - b *
50
b = Fix(
c / 20) Print "20元:"; Print b c = c - 20 *
b
b = Fix(
c / 0.05) Print "0.05元:"; Print b c = c -
0.05 * b
b = Fix((
c + 0.005) / 0.02) Print "0.02元:"; Print b
c = c - 0.02 * b
b = Fix(
c / 0.01) Print "0.01元:"; Print b
End Sub
3.最大公约数、最小公倍数
Option Explicit
Private Sub Command1_Click()
Dim a As Integer, b As Integer, c As Integer, t As Integer
a = InputBox("请输入第一个数:")
b = InputBox("请输入第二个数:")
If a < b Then
c = b
b = a
a = c
End If
t = a Mod b
Do While t <> 0
a = b
b = t
t = a Mod b
Loop
If b = 1 Then
MsgBox ("无最大公约数")
Else
MsgBox ("最大公约数是:" & b)
End If
End Sub
Private Sub Command2_Click()
Dim a As Integer, b As Integer, c As Integer, t As Integer, m As Integer, n As Integer
a = InputBox("请输入第一个数:")
b = InputBox("请输入第二个数:")
If a < b Then
c = b
b = a
a = c
End If
t = a * b
m = a Mod b
Do While m <> 0
a = b
b = m
m = a Mod b
Loop
n = t \ b
MsgBox ("最小公倍数是:" & n)
End Sub
4.输出九九表
Option Explicit
Private Sub Command1_Click()
Dim a As Integer, b As Integer
Print
For a = 1 To 9
For b = 1 To a
Print Tab(b * 9); a & "*" & b; "="; a * b;
Next b
Print
Next a
End Sub
5.排序
Option Explicit
Option Base 1
Dim a(1 To 10) As Integer
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Randomize
For i = 1 To 10
aaa:
a(i) = Int(Rnd() * 90 + 10)
For j = 1 To i - 1
If a(i) = a(j) Then
GoTo aaa
End If
Next j
Next i
For i = 1 To 10
Print a(i);
Next i
Print
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, t As Integer
For i = 1 To 9
For j = 1 + i To 10
If a(i) > a(j) Then
t = a(j)
a(j) = a(i)
a(i) = t
End If
Next j
Next i
For i = 1 To 10
Print a(i);
Next i
Print
End Sub
Private Sub Command3_Click()
Dim i As Integer, j As Integer, t As Integer For i = 1 To 9
For j = 1 To 10 - i
If a(j) > a(j + 1) Then
t = a(j + 1)
a(j + 1) = a(j)
a(j) = t
Next j
Next i
For i = 1 To 10
Print a(i);
Next i
Print
End Sub
6.求平方根
Option Explicit
Private Sub Command1_Click()
Dim a As Double, b As Double, c As Double, i As Double
a = 0
c = Text1.Text
b = c
Do While Abs(((a + b) / 2) ^ 2 - c) > 10 ^ (-5)
i = (a + b) / 2
If i ^ 2 - c > 0 Then
b = i
ElseIf i ^ 2 - c = 0 Then
Exit Do
Else
End If
Loop
MsgBox (i)
End Sub
7.闰年
Option Explicit
Private Sub 计算_Click()
Dim i As Integer
i = InputBox("请输入一个年份")
If i Mod 4 = 0 And i Mod 400 = 0 Then If i Mod 100 <> 0 Then
MsgBox "NOT"
Else
MsgBox "YES"
End If
Else
MsgBox "NOT"
End If
End Sub
8.三角
Option Explicit
Private Sub Command1_Click()
Dim a As Single
Dim b As Single
Dim c As Single
Dim p As Single
Dim s As Single
a = Text1.Text
b = Text2.Text
c = Text3.Text
p = (a + b + c) / 2
s = Sqr((p - a) * p + (p - b) * p + (p - c) * p) Text4.Text = s
End Sub
9.求素数
Private Sub Command1_Click()
Dim n As Double, i As Double
n = InputBox("请输入一个数:")
For i = 2 To n - 1
If n Mod i = 0 Then
MsgBox "NOT"
Exit For
End If
Next i
If i = n Then
MsgBox "YES"
End If
End Sub
Private Sub Command2_Click()
Dim a As Boolean, n As Double, i As Double a = False
n = InputBox("请输入一个数:")
For i = 2 To n - 1
If n Mod i = 0 Then
a = True
Exit For
End If
Next i
If a = True Then
MsgBox "NOT"
Else
MsgBox "YES"
End If
End Sub
Private Sub Command3_Click()
Dim n As Double, i As Double
n = InputBox("请输入一个数:")
i = 2
Do While i < n
If n Mod i = 0 Then
MsgBox "NOT"
Exit Do
End If
i = i + 1
Loop
If i = n Then
MsgBox "YES"
End If
End Sub
Private Sub Command4_Click()
Dim n As Double, i As Double, sushu As Boolean n = InputBox("请输入一个数:")
i = 2
sushu = True
Do While i < n And sushu = True
If n Mod i = 0 Then
sushu = False
End If
i = i + 1
Loop
If sushu = True Then MsgBox "YES" Else
MsgBox "NOT" End If
End Sub。