1、上机程序调试题题目及参考答案第二部分 VB上机考试模拟试题一、程序调试题(改错或填空)(二)程序调试题题1 Modify.bas模块中的getanswer过程是用于计算一元二次方程的根,并将结果输出来。Option ExplicitPublic Sub getanswer() 该过程是用于计算一元二次方程的根,并将结果输出来。 Dim dalt!, a#, b#, c# a = InputBox(输入系数a) b = InputBox(输入系数b) c = InputBox(输入系数c) dalt = b * b - 4 * a * c If -1- dalt 0 then dalt = Sq
2、r(dalt) MsgBox Format(-b + dalt) / 2 / a), 0.00 + Chr(13) + Chr(10) + Format(-b - dalt) / 2 / a, 0.00) Elseif -2- dalt =0 then MsgBox Format(-b / 2 / a, 0.00) + Chr(13) + Chr(10) + Format(-b / 2 / a, 0.00) Else dalt= -3- Sqr(-dalt) MsgBox Format(-b + dalt) / 2 / a, 0.00) + +i + Chr(13) + Chr(10) + F
3、ormat(-b - dalt) / 2 / a, 0.00) + -i End IfEnd Sub题2 打印输出一菱形图案。Public Sub prt() 打印由#组成的菱形图案 # # # # # # # # # Dim i As Integer, j As Integer Dim start As String 每行起始空格数 Dim count As Integer 每行#个数 For i = 1 To 9If i = 5 Then-1- start=space(21-i) count = 2 * i - 1 Else start = Space(11 + i) -2- count=
4、19-2*i End If -3- form1.print start; For j = 1 To count Form1.Print #; Next j -4- form1.print Next iEnd Sub题3 过程pyramid用以打印一个数字金字塔,请在横线上填入必要的内容(将横线删除掉后填入正确的内容),使其完整。Option ExplicitPublic Sub pyramid() 打印数字金字塔 1 222 33333 4444444 555555555 6666666 77777 888 9 Dim i As Integer Dim j As Integer Dim sta
5、rt As String 每行起始空格数 Dim num As Integer 每行数字个数 For i = 1 To 9 If i = 5 Then start = Space(20 - i) num = 2 * i - 1 Else start= -1- Space(10 + i) num= -2- 2 * (10-i) - 1 End If Form1.Print start; For j = 1 To num -3- form1.print trim(str(i); Next j -4- form1.print Next iEnd Sub题4 改错。Option ExplicitPub
6、lic Sub prt() 打印由数字组成的如下所示金字塔图案 9 888 77777 6666666 555555555 44444444444 3333333333333 222222222222222 111111*11 Dim i As Integer, j As Integer * 错误1 * For i = 9 To 1 step -1 Form1.Print Space(i); * 错误2 * For j = 1 To 2 *(10- i) - 1 * 错误3 * Form1.Print trim(str(i); Next j Form1.Print Next iEnd Sub题
7、5 计算s=7+77+777+(n个7组成的数)。Public Sub total() 计算s=7+77+777+(n个7组成的数) Const n = 20 Dim s As Single Dim i As Integer For i = 1 To n s=s+ -1-number(i) Next i Form1.Print s=; sEnd SubPublic Function number(-2- n as integer ) As Single Dim i As Integer number = 0 For i = 1 To n -3-number=number*10+7 number
8、=value(number & 7) Next iEnd Function题6 Modify.bas模块中的过程eat用于计算猴子共摘了多少个桃子。Option ExplicitPublic Sub eat() 该过程是用于计算猴子共摘了多少个桃子。 (小猴在一天摘了若干个桃子,当天吃掉了一半多一个; 第二天吃了剩下的一半多一个; 以后每天都吃尚存的一半零一个,到第7天早上要吃时只剩下一个了), 并将结果输出来。 Dim n%, i%, x% x = 1 for i=6 to -1-1 step -2- -1 -3- x=2*(x+1) Next i Form1.Print 共有; x; 个桃
9、子End Sub题7 Modify.bas模块中的Prime过程是求出100到200之间所有的素数,并打印出来。Public Sub prime() 打印出100到200之间所有的素数,并统计素数的个数 Dim i As Integer Dim j As Integer Dim k As Integer Dim t As Integer 统计素数的个数 Dim b As Boolean For i = 100 To 200 b = True - 1 -k=2 j = Int(Sqr(i) Do While k = j And b If i Mod k = 0 Then - 2 - b=fals
10、e End If - 3 - k=k+1 Loop if - 4 - b b=true then t = t + 1 Form1.Print i End If Next iForm1.Print t=; tEnd sub 题8 过程even用以验证一个偶数可以分解为两个素数之和;Isprime用以判断x是否是素数。请在横线上填入必要的内容(将横线删除掉后填入正确的内容),使其完整。Public Sub even() 从键盘输入一个大于4的偶数,将它所有的不重复的分解式求出 Dim x As Integer Dim i As Integer -1- do while x4 or x mod 20
11、 do while x4 or x mod 2=1保证x是大于4的偶数 x = Val(InputBox(x=) Loop For i = 3 To x / 2 Step 2 在不大于x的奇数中找素数 -2- if isprime(i) and isprime(x-i) Form1.Print x; =; i; +; x - i End If Next iEnd SubPublic Function Isprime(x As Integer) As Boolean Dim i As Integer -3- isprime=true For i = 2 To x - 1 -4- if x mod
12、 i=0 then Isprime = False Exit For End If Next iEnd Function题9 Modify.bas模块中的find过程是用于找出被3、5、7除,余数为1的最小的5个整数,并将结果输出来。Option ExplicitPublic Sub find() 该过程是用于找出被3、5、7除,余数为1的最小的5个整数,并将结果输出来。 Dim countN%, n% countN = 0 n = 1 Do n=-1- n+1 if -2- n mod 3=1 and n mod 5=1 and n mod 7=1then Form1.Print n cou
13、ntN = countN + 1 End If Loop -3- until countN=5 while countN5End Sub题10 Modify.bas模块中的过程rn通过调用函数isLeapYear判断某年是否是闰年,若是,则打印今年是闰年,否则打印今年不是闰年。 闰年的判断方法是:凡是年份不能被4整除的都不是闰年,而且如果年份能被100整除但不能被400整除的也不是闰年。Option ExplicitPublic Sub rn() 该过程通过调用函数isLeapYear判断某年是否是闰年,若是,则打印今年是润年 否则,打印今年不是闰年。Const year = 2023 If
14、-1- Isleapyear(year) Then Form1.Print 今年是闰年 Else Form1.Print 今年不是闰年 End If End Sub Function isLeapYear(y As Integer) As Boolean If y Mod 4 0 Or (y Mod 100 = 0 And y Mod 400 0) Then isLeapYear = False Else isLeapYear = True End IfEnd Function题11 Modify.bas模块中的CountTo60过程是用于从一堆一分、二分、五分的硬币中取出20枚,使其总值为6
15、0分,要求输出取法的数量及每一种取法的一分、二分、五分的个数。请建立工程将Modify.bas模块加入工程中进行调试。注意:只要修改标出出错位置的下面那一条语句即可,其余代码不要改动。 从一堆一分、二分、五分的硬币中取出20枚,使其总值为60分 输出取法的数量及每一种取法的一分、二分、五分的个数 Dim one As Integer 一分硬币个数 Dim two As Integer 二分硬币个数 Dim five As Integer 五分硬币个数 Const n = 20 总数20枚 Dim k As Integer 取法数量 k = 0 For one = 1 To n * 错误1 *
16、For two = one + 1 To n for two=1 to n-one five = n - one - two * 错误2 * If one + two + five = 60 Then if one+two*2+five*5=60 then k = k + 1 Form1.Print one=; one; two=; two; five=; five End If * 错误3 * Next one next two * 错误4 * Next two next one Form1.Print k=; kEnd Sub题12 过程same用以找出1100之间所有的同构数。所谓同构数
17、是指一个数出现在它的平方数的右端,如25在25平方625的右端,则25为同构数。利用数字转字符再取出右端字符的方法进行判断。Public Sub same() Dim i As Integer Dim x As String, x2 As String For i = 1 To 1000 x1= -1- trim(str(i) 将i转字符型 x2= -2- trim(str(i2) 将i2转字符型 if -3- x1=right(x2,len(x1) Then Form1.Print i; 是同构数 End If Next iEnd Sub题13 Modify.bas模块中的Armstrong
18、Number过程是用于求出1999之间所有的Armstrong数,并打印出来。所谓Armstrong数是指一个数等于它每位上数字的立方和。Public Sub ArmstrongNumber() Dim armstrong As Integer Dim i As Integer Dim hundred As Integer 百位上的数字 Dim ten As Integer 十位上的数字 Dim one As Integer 个位上的数字 For i = 1 To 999 hundred = -1- i100 ten = -2-(i mod 100)10 i10 mod 10 one = -3
19、-(i mod 100) mod 10 i mod 10 If -4- i=hundred3+ten3+one3 Then Form1.Print i; is armstrong number End If Next iEnd Sub题14 过程cloze用以求11000中的所有完数。所谓完数是指一个数的所有因子之和等于其自身。请在横线上填入必要的内容(将横线删除掉后填入正确的内容),使其完整。Option ExplicitDim a(50) As Integer 存放每个数分解出来的因子Public Sub cloze() 求1-100中的所有完数 Dim i As Integer, j A
20、s Integer Dim n As Integer 因子个数 Dim s As Integer 因子和 For i = 1 To 1000 n = 0 s = 0 factor -1- i,n For j = 1 To n s = s + a(j) Next j -2- if i=s then Form1.Print i End If Next iEnd SubPublic Sub factor(ByVal x As Integer, ByRef k As Integer) Dim i As Integer a(1) = 1 k = 1 -3- for i=2 to x/2 for i=2
21、to x-1 If x Mod i = 0 Then k = k + 1 -4-a(k)=i End If Next iEnd Sub题15 Modify.bas模块中的Summary过程是用于计算并打印出s=1+2+22+23+,直至s超过1E+16。Option ExplicitPublic Sub summary()该过程是用于计算s=1+2+22+23+,直至s超过1E+16 Dim s As Single Dim i As Integer -1- s=1 i = 1 -2- do while s=1E+16 s = s + 2 i -3- i=i+1 Loop Form1.Print
22、 s=; sEnd Sub题16 Modify.bas模块中的qiuN过程是用于求出满足不等式1+2x+3x2+4x3+(n+1)xn1000的最大n值。其中x是大于等于1的实数,其值由键盘输入。Option ExplicitPublic Sub qiuN() 该过程是用于求出满足不等式1+2x+3x2+4x3+(n+1)xn1000的最大n值, 其中x是大于等于1的实数,其值由键盘输入。 Dim x As Single, s As Single, n As Integer, s1 As Single, p As Single x = Val(InputBox(x=) s = 1: n = 1
23、 p = x while -1- s1000 s1 = s s = s + (n + 1) * p p=p* -2- x n= -3-n+1 Wend n= -4- n-1 form1.Print The Maxism of n; n, s=; s1End Sub题17 sum过程用于计算f=1-1/(2*3)+1/(3*4)-1/(4*5)+1/(19*20),请在横线上填入必要的内容。Option ExplicitPublic Sub sum() Dim f As Single Dim i As Integer Dim sign As Integer -1- sign=-1 f = 1 -
24、2- for i=2 to 19 f = f + sign / (i * (i + 1) -3- sign=-sign Next i Form1.Print f=; fEnd Sub题18 Modify.bas模块中的JiSuan过程是用于计算1-(1/2)+(1/3)-+(1/99)-(1/100)的值并打印出来。Public Sub JiSuan() 计算1-(1/2)+(1/3)-.+(1/99)-(1/100)的值并打印出来 Dim i As Integer * 错误1 * Dim k As Integer dim k as single Dim s As Single s = 0 *
25、 错误2 * For i = 1 To 100 for i=1 to 100 step2 k = 1 / i s = s + k * 错误3 * k = 1 / i + 1 k=1/(i+1) s = s + k Next i Form1.Print s=; sEnd Sub题19 Modify.bas模块中的summary过程是用于计算1!+2!+20!,并打印出计算结果,但不完整,请在横线上填入必要的内容,使其完整。Modify.bas模块中的nFaction函数过程用于计算n!。Public Function nFactor(ByVal n As Integer) As Double D
26、im i As Integer Dim temp As Double -1- temp=1 For i = 1 To n temp = temp * i Next i nFactor = -2- tempEnd FunctionPublic Sub summary() Dim sum As Double Dim i As Integer Dim n As Integer n = 20 For i = 1 To n sum = sum + -3- nfactor(i) Next iForm1.Print sum= & -4- sumEnd Sub题20 Modify.bas模块中的find过程是
27、用于从1到10000中找出这样的数,该数各个位的数字的阶乘相加之和等于该数,并将结果输出。其中阶乘由fact函数计算。Option ExplicitPublic Sub find() 该过程是用于从1到10000中找出这样的数, 该数各个位的数字的阶乘相加之和等于该数,并将结果输出。 Dim k, a, n, i Dim p As Integer For k = 1 To 10000 a = LTrim(Str(k) n = 0 For i= -1- 1 to len(a) p = Val(Mid(a, i, 1) n= -2- n+fact(p) Next i If n = k Then form1.Print k Next kEnd Sub Function fact(x As Integer) As Long 该函数用于计算阶乘 Dim y As Long Dim i% y = 1 For i% = 1 To x y = y *
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2