VB题库(编程题)及参考答案
VB题库(编程题)及参考答案题库(编程题)参考答案
1、已知x,y,z 3个变量中存放了3个不同的数,比较它们的大小并进行调整,使得x Dim x!, y!, z! x = InputBox("input x") y = InputBox("input y") z = InputBox("input z") Print "排序前"; x; " "; y; " "; z If x > y Then t = x: x = y: y = t: If x > z Then t = x: x = z: z = t: If y >z Then t = y: y = z: z = t: Print "排序后" ; x; " "; y; " "; z End Sub 2、计算0~200之间所有能被11或5整除的数之和 Private Sub Form_Click() Dim n%, s% s = 0 For n = 0 To 200 If n Mod 5 = 0 Or n Mod 11 = 0 Then s = s + n Next n Print s End Sub 3、输入三角形三条边a,b,c的值,根据其数值,判断能否构成三角形。Private Sub Command1_Click() a = Val(InputBox("输入a的长")) b = Val(InputBox("输入b的长")) c = Val(InputBox("输入c的长")) If (a + b > c) And (a + c > b) And (b + c > a) Then Msgbox “能构成三角形~” Else Msgb ox “不能构成三角形~” End If End Sub 4、随机产生10个[30,100]内的整数,求最小值及所对应的下标。 Private Sub Form_Click() Dim a(9), min%, imin% For i = 0 To 9 a(i) = Int(Rnd * 71 + 30) Print a(i); Next i Print Min = a(0) :imin=0 For i = 1 To 9 If a(i)< min Then min = a(i): imin = i Next i Print "min="; min Print "imin="; imin End Sub 5、随机产生10个[30,100]内的整数,求最大值、最小值和平均值。 Private Sub Form_Load() Dim a(9) As Integer,i%,sum%,min%,max% sum = 0 Randomize For i=0 to 9 a(i) = Int(Rnd * 71 + 30) Print a(i); next i min = a(0):max = a(0) For i = 0 To 9 If min > a(i) Then min = a(i) If max < a(i) Then max = a(i) sum = sum + a(i) Next i Print "最大数是" ; max Print "最小数是" ; min Print "平均数是" ; avg/10 End Sub 6、略 7、某次歌曲大奖赛,有7个评委。如果分别输入7个评委对某个参赛者的打分 数,按照去掉一个最高分和一个最低分的计算办法,求出该参赛者的平均得分。 方法1:思路:将7个数从大到小排序,去掉首尾两数后,将剩余的数求平均Option Base 1 Dim a%(7), i%, j%, t%, s% Private Sub Command1_Click() a(1) = Val(Text1.Text) a(2) = Val(Text2.Text) a(3) = Val(Text3.Text) a(4) = Val(Text4.Text) a(5) = Val(Text5.Text) a(6) = Val(Text6.Text) a(7) = Val(Text7.Text) For i= 1 To 6 '排序 For j =1 To 7 - i If a(j) <= a(j + 1) Then t = a(j) a(j) = a(j + 1) a(j+ 1) = t End If Next j Next i For i= 2 To 6 …去掉最大值,最小值,然后求和 s = s + a(i) Next i Print "平均分=; "; s /5 '打印平均分 End Sub 方法2: Dim a(6) As Integer,i%,Min%,Max%,Sum% a(0) = Val(Text1.Text) a(1) = Val(Text2.Text) a(2) = Val(Text3.Text) a(3) = Val(Text4.Text) a(4) = Val(Text5.Text) a(5) = Val(Text6.Text) a(6) = Val(Text7.Text) Sum = a(0) Max = a(0) Min = a(0) For i = 1 To 6 ‘边找最大、最小值,边求和 If Min > a(i) Then Min = a(i) If Max < a(i) Then Max = a(i) Sum = Sum + a(i) Next i Print “平均分”; (Sum - Min - Max) / 5 ‘去掉最大值,最小值,然后求平均值 End Sub 8、求s=a+aa+aaa+...aaaaa(n个a),其中a和n的值随机产生,a的范围是[1,9] 的整数,n的范围是[5,10]。如a=3,n=6,则s=3+33+333+3333+33333+333333。编程确定n 和a的值,并计算s。 Private Sub Form_click() Dim s!, t!, i!, a%, n% a = Int(Rnd * 9 + 1) n = Int(Rnd * 6 + 5) t = 0: s = 0 Print "a="; a, "n="; n For i = 1 To n t = t * 10 + a s = s + t Print t Next i Print Print "s="; s End Sub 9、求100以内的素数。 Private Sub Command1_Click() Dim i As Integer, m As Integer, tag As Boolean j = 0 For m = 2 To 100 tag = True For i = 2 To m - 1 If (m Mod i) = 0 Then tag = False Next i If tag Then Print m; j = j + 1 If j = 10 Then j = 0: Print End If Next m End Sub 10、计算100~300之间所有能被3和7整除的数之和。 Private Sub Command1_Click() Dim s%, i% s = 0 For i = 100 To 300 If i Mod 3 = 0 Or i Mod 7 = 0 Then s = s + i Next i Print "s=" & s End Sub 11、输入一年份,判断它是否为闰年,并显示有关信息。(判断闰年的条件是:年份能 被4整除但不能被100整除,或者能被400整除) Private Sub Command1_Click() Dim y% y = Val(Text1) If y Mod 4 = 0 And y Mod 100 <> 0 Or y Mod 400 = 0 Then MsgBox (y & "年是闰年") Else MsgBox (y & "年是平年") End If End Sub 12、编程求200--400范围内5的倍数或7的倍数之和。(一个数如果同时是7和5的倍 数,则只能加一次。) Private Sub Command1_Click() Dim s1%, s2%, s3%, i% s1 = 0 s2 = 0 For i = 200 To 400 If i Mod 5 = 0 Or i Mod 7 = 0 Then s1 = s1 + i End If Next i For i = 200 To 400 If i Mod 5 = 0 And i Mod 7 = 0 Then s2 = s2 + i End If Next i s3 = s1 - s2 Print s3 End Sub 13、利用InputBox函数输入两个整数,求它们的最大公约数。 14、随机产生一个三位正整数,然后逆序输出,产生的数与逆序数同时显示。例如, 产生246,输出是642。 Private Sub Command1_Click() Dim x%, x1%, x2%, x3% Text1 = Int(Rnd * 900 + 100) x = Val(Text1) x1 = x Mod 10 x2 = (x Mod 100) \ 10 x3 = x \ 100 Text2 = x1 * 100 + x2 * 10 + x3 End Sub 15、从键盘输入任意长度的字符串,要求将字符顺序倒置,例如,将输入的"ABCDEFG" 变换成"GFEDCBA"。 Private Sub Form_Click() Dim i, a, b, n As String n = InputBox("输入字符") i = Len(n) For a = 1 To i / 2 b = Mid(n, a, 1) Mid(n, a, 1) = Mid(n, i + 1 - a, 1) Mid(n, i + 1 - a, 1) = b Next a Print n End Sub 16、利用随机函数生成一个4×4的矩阵(即二维矩阵),范围是[20,50]内的整数,输出该矩阵所有数据之和。 Private Sub Form_Click() Dim a(3, 3), sum% For i = 0 To 3 For j = 0 To 3 a(i, j) = Int(Rnd * 31 + 20) Print a(i, j); sum = sum + a(i, j) Next j Print Next i Print "sum="; sum End Sub 17、利用随机函数生成一个4×4的矩阵(即二维矩阵),范围是[20,50]内的整数,求它的两条对角线上元素之和。 Private Sub Command1_Click() Dim a%(3, 3), i%, j%, sum% For i = 0 To 3 For j = 0 To 3 a(i, j) = Int(Rnd * 31 + 20) Print a(i, j); ""; Next j Print Next i sum = 0 For i = 0 To 3 sum = sum + a(i, i) + a(i, 3 - i) Next i Print “sum=”;sum End Sub 18、编一子过程ProcMin,求一维数组a中的最小值,子过程的形参自己确定。Sub s(b(), min) Dim i% min = b(LBound(b)) For i = LBound(b) + 1 To UBound(b) If b(i) < min Then min = b(i) Next i End Sub 19、编一个冒泡排序法子过程,对已知的若干整数按递减次序排列。提示:子过程的形式为sub sort1(a%())。 Sub sort(a%()) Dim n%, imin%, i%, j% N=UBound(a) For i = 0 To n - 1 For j = 0 To n- 1 - i If a(j,1) > a(j ) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t End If Next j Next i End Sub 20、一个4×4的二维数组A和一个一维数组D,数组A中元素随机生成,范围是1,20。请将A中元素按列的顺序放入D中,并分别输出两个数组。 21、编一个选择排序法子过程,对已知的若干整数按递增次序排列。提示:子过程的形式为sub sort1(a%())。 Sub sort(a%()) Dim imin%, i%, j% For i = 0 To UBound(a) – 1 imin = i For j = i + 1 To UBound(a) If a(j) < a(imin) Then imin = j Next j t = a(i): a(i) = a(imin): a(imin) = t Next i End Sub 22、编写一函数,利用牛顿切线法求根。f(x)=3*x^3-5*x+13 迭代公式如图所示: 23、求0到200 被5 或11 整除的数的和 Private Sub Command1_Click() Dim i% For i = 0 To 200 If (i Mod 11 = 0) Or (i Mod 5 = 0) Then Sum = Sum + i Next i Print "总和是"; Sum End Sub 24、已知有序数组a(),编程插入x(x的值为34)使之仍然有序。数组a中的元素分别为{12,16,24,29,43,63,70,88,97}。 参见题35 25、计算100~300之间所有能被3和7整除的数之和。 Private Sub Command1_Click() Dim s%, i% s = 0 For i = 100 To 300 If (i Mod 3 = 0) AND (i Mod 7 = 0) Then s = s + i Next i Print "s=" & s End Sub 26、声明一个整型的二维数组a(1 to 4,1 to 4),用随机函数产生各元素,范围介于[1,20]之间,编程将第2行和第4行对应元素交换。 Private Sub Form_Click() Dim a(1 To 4, 1 To 4), i%, j%, t For i = 1 To 4 For j = 1 To 4 a(i, j) = Int(Rnd * 19 + 1) Print Tab(j * 5); a(i, j); Next j Next i Print:Print For j = 1 To 4 t = a(2, j): a(2, j) = a(4, j): a(4, j) = t Next j For i = 1 To 4 For j = 1 To 4 Print Tab(j * 5); a(i, j); Next j Next i End Sub 27、定义三个4×4的二维数组A,B,C,其中A和B中的元素均随机生成,数组A的范围是1,20,数组B的范围是100,200,数组C是A和B相加得到的。请编程生成并输出A,B,C。 Private Sub Command1_Click() Dim a(3, 3), b(3, 3), c(3, 3), t%, m% For i = 0 To 3 For j = 0 To 3 a(i, j) = Int(Rnd * 20 + 1) Print a(i, j); Next j Print Next i Print For i = 0 To 3 For j = 0 To 3 b(i, j) = Int(Rnd * 101 + 100) Print b(i, j); Next j Print Next i Print For i = 0 To 3 For j = 0 To 3 c(i, j) = a(i, j) + b(i, j) Print c(i, j); Next j print Next i End Sub 28、随机产生10个1~100的正整数放入数组,显示产生的数,求最大值、最小值、平均值。 Private Sub Form_Click() Dim a(1 To 10) As Integer, i%, maxa%, mina%, suma% For i = 1 To 10 a(i) = Int(Rnd * 99 + 1) Print a(i); Next i mina = a(1) maxa = a(1) suma = a(1) For i = 2 To 10 If a(i) > maxa Then maxa = a(i) If a(i) < mina Then mina = a(i) suma = suma + a(i) Next i Print Print "max="; maxa, "min="; mina, "aver="; suma / 10 End Sub 29、利用随机函数生成一个4×4的矩阵(即二维矩阵),范围是[20,50]内的整数,输出每行中的最大值和下标。 方法1: Private Sub Command1_Click() Dim a%(3, 3), i%, j%, m%, n%, max% For i = 0 To 3 For j = 0 To 3 a(i, j) = Int(Rnd * 31 + 20) Print a(i, j); ""; Next j Print Next i For i = 0 To 3 max = a(i, 0): m = i: n = 0 For j = 0 To 3 If a(i, j) > a(m, n) Then m = i: n = j Next j Print "第"; i + 1; "行"; "最大值为"; a(m, n); "下标为"; "("; m; n; ")" Next i End Sub *方法2: Private Sub Command1_Click() Dim a%(3, 3), i%, j%, imax% For i = 0 To 3 For j = 0 To 3 a(i, j) = Int(Rnd * 31 + 20) Print a(i, j); ""; Next j Print Next i imax = 0 For i = 0 To 3 For j = 0 To 3 If a(i, imax) < a(i, j) Then imax = j Next j Print "第"; i + 1; "行"; "最大值为"; a(i, imax); "下标为"; "("; i; imax; ")" Next i End Sub 30、声明一个整型的二维数组a(1 to 4,1 to 4),用随机函数产生各元素,范围介于[1,20]之间,编程将第1行和第3行对应元素交换。 Private Sub Form_Click() Dim a%(1 To 4, 1 To 4), i%, j% Print "排序前:" For i = 1 To 4 For j = 1 To 4 a(i, j) = Int(Rnd * 20 + 1) Print Tab(j * 4); a(i, j); Next j Print Next i Print "排序后:" For j = 1 To 4 t = a(1, j): a(1, j) = a(3, j): a(3, j) = t Next j For i = 1 To 4 For j = 1 To 4 Print Tab(j * 4); a(i, j); Next j Print Next i End Sub 31、编写一个过程计算并输出区间[100,1000]内所有素数的和(要求判断素数使用过程(函数或子过程)来实现。调用该过程。(提示:只能被1和自身整除的自然数称为素数。) Function sushu%(ByVal x%) Dim Tag As Boolean, i% Tag = True For i = 2 To x - 1 If (x Mod i) = 0 Then Tag = False Next i If Tag Then sushu = x End Function Private Sub Command1_Click() Dim i%, k% For i = 100 To 1000 If sushu(i) Then List1.AddItem i Next i Sum = 0 For k = 0 To List1.ListCount - 1 Sum = Sum + Val(List1.List(k)) Next k Label1 = ",100,1000,内所有素数和为:" & Sum End Sub 32、随机生成一个整型的二维数组,范围在[10,20]之间,以上三角形式输出该数组。 Dim a%(4, 4), i%, j% Private Sub Form_ Activate () For i = 0 To 4 For j = 0 To 4 a(i, j) = Int(Rnd * 11 + 10) Print a(i, j); ""; Next j Print Next i End Sub Private Sub Command2_Click() …上三角形式输出 For i = 0 To 4 Print Tab((i + 1) * 4); For j = i To 4 Print a(i, j); ""; Next j Print End Sub Private Sub Command3_Click() ……下三角形式输出 For i = 0 To 4 For j = 0 To i Print a(i, j); ""; Next j Print Next i