收藏 分销(赏)

VB上机试题及答案.doc

上传人:精*** 文档编号:9797646 上传时间:2025-04-08 格式:DOC 页数:38 大小:78.04KB 下载积分:12 金币
下载 相关 举报
VB上机试题及答案.doc_第1页
第1页 / 共38页
VB上机试题及答案.doc_第2页
第2页 / 共38页


点击查看更多>>
资源描述
上机操作练习题 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 Print 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 End Sub 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过程,利用ex的下列公式计算e(直到最后一项小于10-6为止)的近似值。 ex≈1+x/1!+x2/2!+x3/3!+…+xn/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 For j = i + 1 To n 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 For j = 1 To n - i 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 End If 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 a = i 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.Tex
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服