53第二部分浙江省VB二级试题解A.程序调试题一、选择结构程序调试01OptionExplicitPublicSubgetanswer()'该过程是用于计算一元二次方程的根,并将结果输出来。Dimdalt!,a#,b#,c#a=InputBox(输入系数a)b=InputBox(输入系数b)c=InputBox(输入系数c)dalt=b*b-4*a*cif----1----thendalt=Sqr(dalt)MsgBoxFormat((-b+dalt)/2/a),0.00+Chr(13)+Chr(10)+Format((-b-dalt)/2/a,0.00)elseif---2----thenMsgBoxFormat(-b/2/a,0.00)+Chr(13)+Chr(10)+Format(-b/2/a,0.00)Elsedalt=---3----MsgBoxFormat((-b+dalt)/2/a,0.00)++i+Chr(13)+Chr(10)+Format((-b-dalt)/2/a,0.00)+-iEndIfEndSub二、单重循环程序调试02OptionExplicit‘这条语句要求在该模块中,使用变量前必须先声明。PublicSubUppersen()'该过程是将一个英文句子的每个单词的首字母都变成大写。'从键盘上任意输入一条英文句子,'将句子中的每个单词的首字母都变成大写'例如:输入Iamagoodstudent.'要求输出IAmAGoodStudent.DimoldsenAsString,newsenAsString54DimcharAsString,lastcharAsStringDimkAsInteger,iAsIntegeroldsen=InputBox(请输入英文句子:)k=-------1--------'以空格作为单词的界定,空格后的字母转换为大写字母lastchar=---------2--------Fori=1Tokchar=------3--------Iflastchar=Thenchar=UCase(char)EndIfnewsen=newsen&charlastchar=charNextiForm1.Printinput:;oldsenForm1.Printoutput:;newsenEndSub程序调试03PublicSubJiSuan()'该过程用于计算1-(1/2)+(1/3)-...+(1/99)-(1/100)的值并打印出来。DimiAsInteger'******错误1*******DimkAsIntegerDimsAsSingles=0'*******错误2*******Fori=1To100k=1/is=s+k'*******错误3*******k=1/i+1s=s+kNextiForm1.Prints=;sEndSub程序调试04OptionExplicit55PublicSubsame()'该过程找出1--1000之间所有的同构数'所谓同构数是指一个数出现在它的平方数的右端'如25在25平方625的右端,则25为同构数'利用数字转字符再取出右端字符的方法进行判断DimiAsLongDimx1AsString,x2AsStringFori=1To1000x1=-------1--------'将i转字符型x2=-------2--------'将i^2转字符型If------3------ThenForm1.Printi;是同构数EndIfNextiEndSub程序调试05PublicSubArmstrongNumber()'该过程是用于求出1--999之间所有的Armstrong数,并输出。'所谓Armstrong数是指一个数等于它每位上数字的立方和。例如:371=3^3+7^3+1^3,那么371就是一个Armstrong数。DimarmstrongAsIntegerDimiAsIntegerDimhundredAsInteger'百位上的数字DimtenAsInteger'十位上的数字DimoneAsInteger'个位上的数字Fori=1To999hundred=----1----ten=Int((iMod100)\10)one=----2----If----3----ThenForm1.Printi;isarmstrongnumberEndIfNextiEndSub程序调试06PublicSubsum()'该过程是用于计算并输出f=1-1/(2*3)+1/(3*4)-1/(4*5)+……+1/(19*20)。56DimfAsSingleDimiAsIntegerDimsignAsInteger-----1------f=1-----2------f=f+sign/(i*(i+1))------3-------NextiForm1.Printf=;fEndSub程序调试07OptionExplicitPublicSubeat()'该过程是用于计算猴子共摘了多少个桃子。'(小猴在一天摘了若干个桃子,当天吃掉了一半多一个;'第二天吃了剩下的一半多一个;'以后每天都吃尚存的一半零一个,到第7天早上要吃时只剩下一个了),'并将结果输出来。Dimn%,i%,x%x=1fori=6to---1----step----2---------3----NextiForm1.Print共有;x;个桃子EndSub程序调试08PublicSubFabonia()'该过程是对以下数列进行运算:'有一个数列,它的前三个数是0,1,2,'从第四个数起,每个数都是它前面的两个数之和'求出该数列的第17个数是多少'求出该数列的第几个数起每个数都超过1E+8Dimlast_oneAsLongDimlast_twoAsLongDimthis_oneAsLongDimiAsInteger57last_one=1'数列的第二个数last_two=2'数列的第三个数i=4'从数列的第四个数求起Dothis_one=last_one+last_twolast_one=------1-------last_two=------2-------Ifi=17ThenForm1.PrintNo:17=;this_oneEndIf------3-------LoopWhilethis_one=100000000#Form1.PrintNo:;------4------;is1E+8EndSub程序调试09PublicSubFindat()'该过程是用于在一个字符串变量中查找”at”,并用消息框给出查找结果的报告:没有找到或找到的个数。Dimstr1AsStringDimlengthAsInteger'字符串长度DimsumAsInteger'查到的个数DimiAsIntegerstr1=InputBox(请输入一个字符串)length=----1----i=1sum=0DoWhilei----2----If----3----=atThensum=sum+1EndIfi=i+1LoopIf----4----ThenMsgBox没有找到!ElseMsgBox找到了&Str(sum)&个EndIfEndSub58程序调试10注:此题题目和第41`题相同,但算法不一样。OptionExplicitPublicSubComDiv()'该过程是求任意两个正整数的最大公约数DimmAsInteger,nAsInteger'任意两个正整数DimiAsIntegerDimdivAsInteger'最大公约数'输入两个正整数,要求m与n都必须大于零Dom=Val(InputBox(m=))n=Val(InputBox(n=))LoopWhile----1----'先将两个整数中的较小数假设为最大公约数,再依次往下'寻找能同时除尽m和n的数即为最大公约数-----2-----IfnmThendiv=nEndIfDoWhilemModdiv0OrnModdiv0----3-----LoopForm1.Printm;和;n;的最大公约数是:;divEndSub程序调试11PublicSubWrap()'该过程用于判断一个字符串是否“回文”。'所谓“回文”是指字符串顺读与倒读都是一样的,如“潮起潮落,落潮起潮”。DimlengthAsIntegerDimstr1AsStringDimstrleftAsStringDimstrrightAsStringDimkAsIntegerstr1=InputBox(请输入任意的字符串)'输入任意字符串'****错误1*****length=Val(str1)k=159Do'****错误2*****strleft=Left(str1,k)'从左边起逐个取出一个字符'****错误3*****strright=Right(str1,k)'从右边起逐个取出一个字符'****错误4****Ifstrleft0strrightThenExitDoEndIfk=k+1LoopWhilek=length/2Ifklength/2ThenForm1.Printstr1&是回文ElseForm1.Printstr1&不是回文EndIfEndSub程序调试12OptionExplicitPublicSubDToB()'该过程是将一个十进制正整数转换成为一个二进制数。'采用连除2取余数的方法,将一个十进制数转换为二进制数。DimDecAsIntegerDimBinAsStringDimresAsIntegerDimiAsIntegerDec=Val(InputBox(x=))'输入一个十进制数Form1.Print十进制数:;DecDores=-----1------'求出除以2的余数Bin=Trim(Str(res))&-----2------Dec=-----3------LoopWhile----4------Form1.Print转换为二进制数为:;BinEndSub程序调试13PublicSubGuess()60'该过程是猜数游戏,由计算机产生一个[1,100]的任意整数,'输入猜数后计算机给出提示,如果5次后还没有猜中就结束游戏并公布正确答案。DimRAsIntegerDimXAsIntegerDimtimesAsIntegerRandomizeR=Int(Rnd*100)+1'产生一个在区间[1,100]的任意整数times=1DoX=Val(InputBox(输入猜数X))SelectCaseXCaseRForm1.Print猜中了ExitDo'*****错误1******CaseIsRForm1.Print太大了,继续猜!CaseElseForm1.Print太小了,继续猜!EndSelecttimes=times+1'******错误2******LoopWhiletimes5Iftimes5ThenForm1.Print猜数失败,游戏结束!'******错误3******Form1.Print正确答案为&Str(X)EndIfEndSub程序调试14OptionExplicitPublicSubsummary()'该过程是用于计算s=1+2+2^2+2^3+……,直至s超过1E+16DimsAsSingleDimiAsInteger------1------i=1------2------61s=s+2^i------3------LoopForm1.Prints=;sEndSub程序调试15OptionExplicitPublicSubfind()'该过程是用于找出被3、5、7除,余数为1的最小的5个整数,并将结果输出来。DimcountN%,n%countN=0n=1Don=----1----if-----2----thenForm1.PrintncountN=countN+1EndIfLoop----3-----EndSub程序调试16OptionExplic