VB程序改错40题
- 格式:doc
- 大小:94.00 KB
- 文档页数:10
1.程序的功能是:单击命令按钮“输出”,在图片框Picture1中输出费波那契数列的前20项项值,要求按区输出,每行输出4个项值。
程序中有两处错误,请修改程序并运行,直到得出正确结果。
注意:程序中的修改行就在注释行:'**********found*************' '请不要删除该行'的下面,请不要修改程序中的其他部分。
最后把修改后的文件按原来文件名存盘。
第1个出错位置:For i=3 to 20第2个出错位置:If i Mod 4=0 then Picture1.PrintPrivate Sub Command1_Click()Dim f(40) As LongDim i As IntegerPicture1.Clsf(1) = 0f(2) = 1Picture1.Print f(1), f(2),'**********found*************' '请不要删除该行'For i = 1 To 40For i=3 to 20f(i) = f(i - 1) + f(i - 2)Picture1.Print f(i),'**********found*************' '请不要删除该行'If i Mod 4 = 0 Then Picture.PrintIf i mod 4=0 then picture1.printNext iEnd Sub2. 程序的功能是:程序运行时,单击“输出”按钮,产生10个[0,99]之间的随机整数存入数组A中,并按照相反的顺序输出在窗体上。
程序中有两处错误,请修改程序并运行,直到得出正确结果。
第1个出错位置:A(i)=Int(Rnd*100+0) p50第2个出错位置:Print A(11-i);Private Sub Command1_Click()RandomizeDim A(10), I As IntegerForm1.ClsFor I = 1 To 10'*********found******** '请不要删除该行A(I) = Int(Rnd * 99) A(i)=Int(Rnd*100+0)Print A(I);Next IPrintFor I = 1 To 10'*********found******** '请不要删除该行Print A(I); Print A(11-i) (注意答案中间无;)Next IEnd Sub3. 在考生文件夹下有一个工程文件Modi1.vbp,相应的窗体文件为Modi1.frm,此外还有一个名为Modiin.dat的文本文件,其内容如下:32 43 76 58 28 12 98 57 31 42 53 64 75 86 97 13 24 35 46 57 68 79 80 59 37程序运行后,单击窗体,将把文件Modiin.dat中的数据输入到二维数组Mat中,在窗体上按5行5列的矩阵形式显示出来,然后交换矩阵第一行和第三行的数据,并在窗体上输出交换后的矩阵。
程序改错题总结规律:变量初始值、循环变量的边界值、循环变量的变化规律、多个条件的连接、变量的类型等1. '程序功能:求s=1+3+5+7+...直到s>2000为止。
程序中有两行有错误。
改正错误,使它能输出正确的结果。
2025Private Sub Command1_Click()Dim i As Integer, s As Longs = 0i = 1Do Until s < 2000s = s + ii = i + 1LoopPrint sEnd Sub2. '程序功能:求三位偶数中,个位数字与十位数字之和除以10所得的余数是百位数字的数的个数。
程序中有两行有错误。
改正错误,使它能输出正确的结果。
45Private Sub Command1_Click()Dim count As IntegerDim a As Integer, b As Integer, c As Integer Dim x As Integercount = 0x = 100While x <= 999a = Int(x / 100)b = Int(x / 10) - a * 10c = x - a * 100 - b * 10if mod(x,2)=0 OR mod(b+c,10)=a then count = count + 1End Ifx = x + 1LoopPrint countEnd Sub3. '程序功能:求200到400间,能被3整除但不能被7整除的数的个数。
程序中有两行有错误。
改正错误,使它能输出正确的结果。
57Private Sub Command1_Click() Dim count As IntegerDim x As Integercount = 0x = 200While x <= 400If x Mod 3 = 0 Or x Mod 7 <> 0 Thencount = count + 1End Ifx = x + 1LoopPrint countEnd Sub4. '程序功能:求能被3整除且至少有一位数字为5的三位数的个数。
1.在考生文件夹下有一个工程文件Modi.vbp,相应的窗体文件为Modi.frm。
其功能是:产生30个[0,90]的随机整数,放入一个数组中,然后输出其中的最大值。
程序运行后,单击命令按钮,可求出数组中的最大值,并在窗体上显示。
运行界面请参阅附图。
在窗体的代码窗口中,已给出了部分程序,程序中有两处错误,请修改程序并运行,直到得出正确结果。
注意:程序中的修改位置就在注释行:’**********found*************’’请不要删除该行’的下面一行中,请不要改动程序中的其他部分。
最后把修改后的文件按原来文件名存盘,提交程序改错题文档。
VERSION 5.00Begin VB.Form Form1Caption = "Form1"ClientHeight = 2100ClientLeft = 1905ClientTop = 1875ClientWidth = 3660LinkTopic = "Form1"ScaleHeight = 2100ScaleWidth = 3660Begin mandButton Command1Caption = "输出最大值"Height = 375Left = 960TabIndex = 0Top = 1320Width = 1575EndEndAttribute VB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseOption Base 1Private Sub Command1_Click()Dim arrN(30) As IntegerDim Max As IntegerRandomizeForm1.ClsFor i = 1 To 30’**********found*************’’请不要删除该行’arrN(i) = Int(Rnd * 51) 91Print Format(arrN(i),"@@@@@@");If i Mod 6 =0 Then PrintNext i’**********found*************’’请不要删除该行’Max = arrN(0) 1For i = 2 To 30If Max<arrN(i) ThenMax = arrN(i)End IfNext iPrint "Max=";Max2. 在考生文件夹下有一个工程文件Modi.vbp,相应的窗体文件为Modi.frm。
(本试卷完成时间 60分钟)[考试须知]1.改错题界面不作要求,主要用来调试程序,题目中有参考界面,则仅作参考;2.考试结束后,文件须存放在指定位置,否则不予评分;3.程序代码书写应成锯齿形。
一、改错题(14分)[题目]随机生成30个三位正整数显示在列表框List1中,并从中找出所有回文数显示在多行文本框Text1中。
Option ExplicitOption Base 1Private Sub Command1_Click()Dim i As IntegerDim A(30) As IntegerFor i = 1 To 30A(i) = Int(Rnd * 900 + 100)List1.AddItem A(i)Next iFor i = 1 To 30If judge(A) ThenText1 = Text1 & CStr(A(i)) & Chr(13) & Chr(10)End IfNext iEnd SubPrivate Function judge(ByVal x As Integer) As BooleanDim S As String, i As IntegerS = Str(x)For i = 1 To Len(S) \ 2If Mid(S, i, 1) = Mid(S, Len(S) - i + 1, 1) Then Exit ForNext iIf i > Len(S) \ 2 Thenjudge = TrueElsejudge = FalseEnd IfEnd Function[要求]1.新建工程,Copy上述代码,改正程序中的错误;2.改错时,不得增加或删除语句,但可适当调整语句位置;3.按要求保存文件,上传窗体文件……G1.frm。
(本试卷完成时间 60分钟)[考试须知]1.改错题界面不作要求,主要用来调试程序,题目中有参考界面,则仅作参考;2.考试结束后,文件须存放在指定位置,否则不予评分;3.程序代码书写应成锯齿形。
VB程序调试试题集锦1. 某Visual Basic程序的一个事件过程如下:Private Sub Command1_Click()Dim ch As Stringch = "abcd"Label1.Caption = chEnd Sub窗体中标签对象的属性设置如图所示。
运行程序,单击命令按钮Command1,出现“要求对象”的出错信息提示。
引起该错误的语句是(A)Dim ch As String (B)ch = "abcd"(C)Label1.Caption = ch (D)End Sub2. 某Visual Basic程序的一个事件过程如下:Private Sub Command1_Click()Dim x As SingleDim y As Singlex = -10y = Abc(x)Label1.Caption = Str(y)End Sub运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,引起该错误的语句是 (A)Dim y As Single (B)x = -10(C)y = Abc(x) (D)Label1.Caption = Str(y)3. 某Visual Basic程序的一个事件过程如下:Private Sub Command1_Click()Dim a As IntegerDim x As Doublea = -4x = Sqr(a)Label1.Caption = Str(x)End Sub运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,此时程序正执行的语句是(A)Dim a As Integer (B)Dim x As Double(C)x = Sqr(a) (D)Label1.Caption = Str(x)4.下列Visual Basic程序用于计算1010的值:Private Sub Command1_Click()Dim n As Integer, s As Integern = 10s = 10 ^ nText1.Text = Str(s)End Sub运行程序时,单击命令按钮Command1后弹出如图所示的出错信息提示,引起该错误的原因是(A)变量s的数据类型说明不当(B)变量n的数据类型说明不当(C)文本框Text1的宽度不够(D)s值太大,因此不能在文本框Text1中输出5.某Visual Basic程序的一个事件过程如下:Private Sub Command1_Click()Dim r As SingleDim pi As Doubler = 100pi = 3.14Label1.Caption = "圆面积为:" + Val(pi * r * r)End Sub运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,引起该错误的语句是 (A)Dim r As Single(B)Dim pi As Double(C)pi = 3.14(D)Label1.Caption = "圆面积为:" + Val(pi * r * r)6. 某Visual Basic程序段如下:Dim a(1 To 10) As IntegerDim i As Integera(1) = 1For i = 2 To 10a(i) = a(i - 1) * iNext i运行该程序段,会出现的错误提示为(A)下标越界 (B)子程序或函数未定义(C)要求对象 (D)溢出7. 有如下的Visual Basic程序:Private Sub Command1_Click()Const pi = 3.14Dim s As Single, r As Singler = Val(text1.Text)pi = 3.1415s = pi * r ^ 2Label1.Caption = "面积为" + Str(s)End Sub程序运行后,单击命令按钮Command1,出现如图所示的错误提示,下列原因分析正确的是 (A)常量不能用小数(B)pi是常量,不允许赋值(C)文本框Text1中输入的数据不是常量(D)表达式结果超过了变量类型的范围8. 某Visual Basic程序如下:Private Sub Command1_Click()Dim a(1 To 10) As IntegerDim i As IntegerFor i = 1 To 10a(i) = i * iNext iList1.AddItem Str(a(i))End Sub运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,此时程序正执行的语句是(A)For i = 1 To 10 (B)a(i) = i * i(C)Next i (D)List1.AddItem Str(a(i))9. 某Visual Basic程序如下:Private Sub Command1_Click()Dim i As Integer, sum As Integersum = 0For i = 10 To 2 Step -2sum = sum + iNext iText1.Text = Str(sum)End Sub运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,此时程序正执行的语句是(A)Sum = 0 (B)For i = 10 To 2 Step -2(C)sum = sum + i (D)Text1.Text = Str(sum)10. 某Visual Basic程序如下:Private Sub Command1_Click()Dim x As Integer, i As IntegerFor i = 1 To 10 Step 3x = i * (i + 2)List1AddItem Str(x)Next iEnd Sub运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,引起该错误的语句是 (A)For i = 1 To 10 Step 3 (B)x = i * (i + 2)(C)List1AddItem Str(x) (D)Next i11. 某Visual Basic程序段如下:Dim a(1 To 11) As IntegerDim i As Integera(1) = 1If i = 5 Thena(i) = a(i - 1) * i运行该程序段,会出现的错误提示为12. 某Visual Basic程序段如下:Dim a(1 To 10) As IntegerDim i As Integera(1) = 1For i = 2 To 10a(i) = a(i - 1) * iNext i运行该程序段,会出现的错误提示为 13. 某Visual Basic程序段如下:Dim i As IntegerDo While i <= 10If i Mod 2 = 1 Theni = i + 1Loop运行该程序段,会出现的错误提示为。
【程序改错】题目:该程序实现将输入的 0 - 255 之间的正整数转换成二进制数Option ExplicitPrivate Sub Form_Click()Const n = 8Dim a(n) As Integer, s As String, m As Integer, x As Integer x = Val(InputBox("请输入一个 0 - 255 之间的正整数:"))Print xFor m = 1 To na(m) = x Mod 2x = x / 2Next ms = " "For m = n To 0 Step -1s = Str(a(m))Next mPrint sEnd Sub答案:=======(答案1)=======For m = 0 To n=======(答案2)=======x= x \ 2=========或=========x= int(x/2)=======(答案3)=======s = s + Str(a(m))第3题(1.0分)题号:463'【程序改错】'题目:以下程序功能是输入三个数,由大到小排序。
Option ExplicitDim A As IntegerDim B As IntegerDim C As IntegerPrivate Sub Form_Click()Dim nTemp As IntegerA = Val(InputBox("Please input first integer", "输入正整数"))B = Val(InputBox("Please input second integer", "输入正整数"))C = Val(InputBox("Please input third integer", "输入正整数"))If A <= C ThennTemp = AA = BB = nTempEnd IfIf B <= C ThennTemp = AA = CC = nTempEnd IfIf A <= B ThennTemp = BB = CC = nTempEnd IfPrint "The integers in order is"; A; B; CEnd Sub答案:=======(答案1)=======If A <= B Then=========或=========If B >= A Then=======(答案2)=======If A <= C Then=========或=========If C >= A Then=======(答案3)=======If B <= C Then=========或=========If C >= B Then第4题(1.0分)题号:127'【程序改错】'题目:下面程序可输出如下图形:' *' ***' *****' *******' *********'------------------------------------------------Option ExplicitPrivate Sub Form_Click()Dim m As Integer, n As Integer, s As String, i As Integer, j As Integer n = 4m = 1s = "*"For i = 5 To 1 Step -1Print Spc(n)For j = 1 To 2 * m - 1Print s;Next jPrintn = n + 1m = m - 1Next iEnd Sub答案:=======(答案1)=======Print Spc(n);=========或=========Print Spc(i);=========或=========Spc(n);=========或=========Spc(i);=======(答案2)=======n = n - 1=========或=========n = - 1+n=======(答案3)=======m = m + 1第5题(1.0分)题号:469'【程序改错】'题目:已知一个函数f(x)=1000*sin(x),利用绘图方法' 在图片框中显示其图形。
第57题(1.0分)题号:465'------------------------------------------------'【程序改错】'------------------------------------------------'题目:用InputBox函数输入一个字符串,编写程序按与' 输入的字符相反的次序用Msgbox函数输出这个字' 符串。
如输入字符串为"abcdefgh",则输出为"h' gfedcba",输出效果如图1。
'------------------------------------------------ Option ExplicitPrivate Sub Command1_Click()Dim pristr As String, outstr As StringDim i As Integerpristr = InputBox("please input a string")'**********FOUND**********For i = 0 To Len(pristr)'**********FOUND**********outstr = outstr + Mid(pristr, Len(pristr) - i) Next i'**********FOUND**********MsgBox outstr, , "The Output Result "End Sub答案:=======(答案1)=======For i = 0 To Len(pristr) - 1=========或=========For i = 0 To -1+Len(pristr)=======(答案2)=======outstr = outstr + Mid(pristr, Len(pristr) - i, 1)=========或=========outstr = Mid(pristr, Len(pristr) - i, 1)+outstr=======(答案3)=======MsgBox outstr, vbQuestion, "The Output Result "第59题(1.0分)题号:147'------------------------------------------------'【程序改错】'------------------------------------------------'题目:下面的程序用来产生并输出图示的杨辉三角。
VB程序改错题程序改错1.题目:已知C的公式表示如下:'n!'C=------------------'(n-m)!某m!'函数过程fac()求k!函数,在Fomr_Click事件中完成运算,'请修正程序中错误。
'------------------------------------------------OptionE某plicitPrivateFunctionfac(kAInteger)ASingleDim某ASingle,jAInteger 某=0Forj=1Tok某=某^jNe某tjfac=某EndFunctionPrivateSubForm_Click()DimCASingleDimmAInteger,nAIntegerm=Val(InputBo某(\请输入一个整数(m):\n=Val(InputBo某(\请输入一个整数(n):\C=fac(n)/fac(n-m)某fac(m)Print\EndSub2.题目:程序功能为打印下列图形:'某'某某'某某某'某某某某'某某某某某'------------------------------------------------OptionE某plicitPrivateSubForm_Click()ClDimiAIntegerDimjAIntegerFori=1To7Forj=1To5Print\LoopPrintNe某tiEndSub3.题目:本程序的功能是随机产生的10个两位正整数,并进行递减排序。
'------------------------------------------------OptionE某plicitPrivateSubCreateRND()DimTempAIntegerDimIAIntegerDimNAIntegerDim某(10)AIntegerDimJAIntegerN=10Print\数据:\ForI=1ToN某(I)=Int(Rnd()某90)Print某(I);Ne某tIPrintPrint\排序:\ForI=0ToN-1ForJ=I+1ToNIf某(I)>某(J)ThenTemp=某(I)某(J)=某(I)某(I)=TempEndIfNe某tJPrint某(I);Ne某tIPrintEndSub4.题目:随机产生并输出100以内大于50的20个整数,输出时每5个数一行。
第52题(1.0分)题号:450'------------------------------------------------'【程序改错】'------------------------------------------------'题目:统计一顺序文件text.txt中的空格、字母、数字和其它字符个数。
'------------------------------------------------Option ExplicitPrivate Sub Command1_Click()Dim s As String, C As StringDim I As Integer, L As Integer, spac As Integer, character As Integer, digit As Integer, other As Integer'**********FOUND**********Open App.Path & "\text.txt" For Output As #1'**********FOUND**********Do Until EOF(0)Line Input #1, sL = Len(s)For I = 1 To LC = Mid(s, I, 1)If C >= "a" And C <= "z" Or C >= "A" And C <= "Z" Thencharacter = character + 1ElseIf C = " " Thenspac = spac + 1'**********FOUND**********ElseIf C >= "0" And C < "9" Thendigit = digit + 1Elseother = other + 1End IfNext ILoopClose #1Print "字符个数为:"; character; "数字个数为:"; digitPrint "空格个数为:"; spac; "其它个数为:"; other End Sub答案:=======(答案1)=======Open App.Path & "\text.txt" For Input As #1=========或=========Open "text.txt" For Input As #1=======(答案2)=======Do Until EOF(1)=========或=========Do While Not EOF(1)=======(答案3)=======ElseIf C >= "0" And C <= "9" Then第57题(1.0分)题号:465'------------------------------------------------ '【程序改错】'------------------------------------------------'题目:用InputBox函数输入一个字符串,编写程序按与' 输入的字符相反的次序用Msgbox函数输出这个字' 符串。
如输入字符串为"abcdefgh",则输出为"h ' gfedcba",输出效果如图1。
'------------------------------------------------ Option ExplicitPrivate Sub Command1_Click()Dim pristr As String, outstr As StringDim i As Integerpristr = InputBox("please input a string")'**********FOUND**********For i = 0 To Len(pristr)'**********FOUND**********outstr = outstr + Mid(pristr, Len(pristr) - i) Next i'**********FOUND**********MsgBox outstr, , "The Output Result "End Sub答案:=======(答案1)=======For i = 0 To Len(pristr) - 1=========或=========For i = 0 To -1+Len(pristr)=======(答案2)=======outstr = outstr + Mid(pristr, Len(pristr) - i, 1)=========或=========outstr = Mid(pristr, Len(pristr) - i, 1)+outstr=======(答案3)=======MsgBox outstr, vbQuestion, "The Output Result "第59题(1.0分)题号:147'------------------------------------------------'【程序改错】'------------------------------------------------'题目:下面的程序用来产生并输出图示的杨辉三角。
' 1' 1 1' 1 2 1' 1 3 3 1' 1 4 6 4 1' 1 5 10 10 5 1'------------------------------------------------ Option Explicit Public Sub readin(a() As Integer, n As Integer) Dim i, j As IntegerFor i = 1 To n'**********FOUND**********a(i, n) = 1a(i, 1) = 1Next iFor i = 3 To n'**********FOUND**********For j = 2 To na(i, j) = a(i - 1, j) + a(i - 1, j - 1) Next jNext iEnd SubPublic Sub printf(a() As Integer, n As Integer) Dim i, j As IntegerFor i = 1 To n'**********FOUND**********For j = 1 To nPrint Tab(5 * j + 10); a(i, j);Next jPrintNext iPrintEnd SubPrivate Sub Form_Click()Dim x(10, 10) As IntegerCall readin(x(), 6)Call printf(x(), 6)End Sub答案:=======(答案1)=======a(i, i) = 1=======(答案2)=======For j = 2 To i - 1=========或=========For j = 2 To -1 + i=======(答案3)=======For j = 1 To i第60题(1.0分)题号:146'------------------------------------------------'【程序改错】'------------------------------------------------'题目:用辗转相除法求两个整数的最大公约数。
'------------------------------------------------Option ExplicitFunction gcd(ByVal m As Integer, ByVal n As Integer) As Integer Dim r As Integerr = m Mod nDo While r <> 0'**********FOUND**********n = mn = rr = m Mod nLoop'**********FOUND**********gcd = rEnd FunctionPrivate Sub Form_Click()Dim a As Integer, b As Integer, c As Integera = InputBox("输入一个整数")b = InputBox("输入一个整数") a = Val(a)b = Val(b)'**********FOUND**********Call gcd(a, b)Print a, b, cEnd Sub答案:=======(答案1)=======m = n=======(答案2)=======gcd = n=======(答案3)=======c = gcd(a, b)第66题(1.0分)题号:467'------------------------------------------------'【程序改错】'------------------------------------------------'题目:从计算机输入三个数 , 找出中间数'------------------------------------------------Option ExplicitPrivate Sub FindMidNum()Dim x As Integer, y As Integer, z As Integer, A As Integer x = InputBox("PLEASE INPUT THE FIRST NUMBER")y = InputBox("PLEASE INPUT THE SECOND NUMBER")z = InputBox("PLESSE INPUT THE THIRD NUMBER")'**********FOUND**********If x > y ThenA = xx = yy = AEnd If'**********FOUND********** If y = z ThenPrint y'**********FOUND********** ElseIf x = z ThenPrint zElsePrint xEnd IfEnd SubPrivate Sub Form_Click()FindMidNumEnd Sub答案:=======(答案1)=======If x < y Then=========或=========If y > x Then=======(答案2)=======If y >= z Then=========或=========If z <= y Then=======(答案3)=======ElseIf x >= z Then=========或=========ElseIf z <= x Then 第70题(1.0分)题号:142'------------------------------------------------ '【程序改错】'------------------------------------------------'题目:程序功能根据输入的学习成绩,分别显示优秀' (90分以上), 良好(75分以上),及格(60分以上) ' 不及格四个等级.'------------------------------------------------ Option ExplicitPrivate Sub Form_Click()ClsDim i As Integeri = InputBox("请输入学习成绩")Select Case i'**********FOUND**********Case 0 < i < 100MsgBox "成绩应该在0--100之间"""'**********FOUND**********Case 90Print "优秀"Case 75 To 89Print "良好"Case 60 To 74Print "及格"'**********FOUND**********CaseMsgBox "不及格", vbCriticalEnd SelectEnd Sub答案:=======(答案1)=======Case is>100 ,is<0=========或=========case is<0 ,is>100=======(答案2)=======Case 90 to 100=======(答案3)=======Case else第71题(1.0分)题号:473'------------------------------------------------'【程序改错】'------------------------------------------------'题目:下列程序进行-n阶乘运算,当阶乘的值超过-21147483648 溢出报错,并将结果输出为-1。