VB程序改错40题.docx
《VB程序改错40题.docx》由会员分享,可在线阅读,更多相关《VB程序改错40题.docx(19页珍藏版)》请在冰豆网上搜索。
VB程序改错40题
第57题(1.0分)题号:
465
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
用InputBox函数输入一个字符串,编写程序按与
'输入的字符相反的次序用Msgbox函数输出这个字
'符串。
如输入字符串为"abcdefgh",则输出为"h
'gfedcba",输出效果如图1。
'------------------------------------------------
OptionExplicit
PrivateSubCommand1_Click()
DimpristrAsString,outstrAsString
DimiAsInteger
pristr=InputBox("pleaseinputastring")
'**********FOUND**********
Fori=0ToLen(pristr)
'**********FOUND**********
outstr=outstr+Mid(pristr,Len(pristr)-i)
Nexti
'**********FOUND**********
MsgBoxoutstr,,"TheOutputResult"
EndSub
答案:
=======(答案1)=======
Fori=0ToLen(pristr)-1
=========或=========
Fori=0To-1+Len(pristr)
=======(答案2)=======
outstr=outstr+Mid(pristr,Len(pristr)-i,1)
=========或=========
outstr=Mid(pristr,Len(pristr)-i,1)+outstr
=======(答案3)=======
MsgBoxoutstr,vbQuestion,"TheOutputResult"
第59题(1.0分)题号:
147
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
下面的程序用来产生并输出图示的杨辉三角。
'1
'11
'121
'1331
'14641
'15101051
'------------------------------------------------
OptionExplicit
PublicSubreadin(a()AsInteger,nAsInteger)
Dimi,jAsInteger
Fori=1Ton
'**********FOUND**********
a(i,n)=1
a(i,1)=1
Nexti
Fori=3Ton
'**********FOUND**********
Forj=2Ton
a(i,j)=a(i-1,j)+a(i-1,j-1)
Nextj
Nexti
EndSub
PublicSubprintf(a()AsInteger,nAsInteger)
Dimi,jAsInteger
Fori=1Ton
'**********FOUND**********
Forj=1Ton
PrintTab(5*j+10);a(i,j);
Nextj
Print
Nexti
Print
EndSub
PrivateSubForm_Click()
Dimx(10,10)AsInteger
Callreadin(x(),6)
Callprintf(x(),6)
EndSub
答案:
=======(答案1)=======
a(i,i)=1
=======(答案2)=======
Forj=2Toi-1
=========或=========
Forj=2To-1+i
=======(答案3)=======
Forj=1Toi
第60题(1.0分)题号:
146
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
用辗转相除法求两个整数的最大公约数。
'------------------------------------------------
OptionExplicit
Functiongcd(ByValmAsInteger,ByValnAsInteger)AsInteger
DimrAsInteger
r=mModn
DoWhiler<>0
'**********FOUND**********
n=m
n=r
r=mModn
Loop
'**********FOUND**********
gcd=r
EndFunction
PrivateSubForm_Click()
DimaAsInteger,bAsInteger,cAsInteger
a=InputBox("输入一个整数")
b=InputBox("输入一个整数")
a=Val(a)
b=Val(b)
'**********FOUND**********
Callgcd(a,b)
Printa,b,c
EndSub
答案:
=======(答案1)=======
m=n
=======(答案2)=======
gcd=n
=======(答案3)=======
c=gcd(a,b)
第65题(1.0分)题号:
492
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
输入两个正整数m和n,求其最大公约数。
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
DimmAsInteger,nAsInteger,rAsInteger
m=InputBox("输入m的值:
")
n=InputBox("输入n的值:
")
DoWhilen<>0
'**********FOUND**********
r=m/n
m=n
'**********FOUND**********
n=m
Loop
'**********FOUND**********
Print"两数的最大公因子为:
";n
EndSub
答案:
=======(答案1)=======
r=mModn
=======(答案2)=======
n=r
=======(答案3)=======
Print"两数的最大公因子为:
";m
第66题(1.0分)题号:
467
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
从计算机输入三个数,找出中间数
'------------------------------------------------
OptionExplicit
PrivateSubFindMidNum()
DimxAsInteger,yAsInteger,zAsInteger,AAsInteger
x=InputBox("PLEASEINPUTTHEFIRSTNUMBER")
y=InputBox("PLEASEINPUTTHESECONDNUMBER")
z=InputBox("PLESSEINPUTTHETHIRDNUMBER")
'**********FOUND**********
Ifx>yThen
A=x
x=y
y=A
EndIf
'**********FOUND**********
Ify=zThen
Printy
'**********FOUND**********
ElseIfx=zThen
Printz
Else
Printx
EndIf
EndSub
PrivateSubForm_Click()
FindMidNum
EndSub
答案:
=======(答案1)=======
Ifx=========或=========
Ify>xThen
=======(答案2)=======
Ify>=zThen
=========或=========
Ifz<=yThen
=======(答案3)=======
ElseIfx>=zThen
=========或=========
ElseIfz<=xThen
第70题(1.0分)题号:
142
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
程序功能根据输入的学习成绩,分别显示优秀
'(90分以上),良好(75分以上),及格(60分以上)
'不及格四个等级.
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Cls
DimiAsInteger
i=InputBox("请输入学习成绩")
SelectCasei
'**********FOUND**********
Case0
MsgBox"成绩应该在0--100之间"""
'**********FOUND**********
Case90
Print"优秀"
Case75To89
Print"良好"
Case60To74
Print"及格"
'**********FOUND**********
Case
MsgBox"不及格",vbCritical
EndSelect
EndSub
答案:
=======(答案1)=======
Caseis>100,is<0
=========或=========
caseis<0,is>100
=======(答案2)=======
Case90to100
=======(答案3)=======
Caseelse
第71题(1.0分)题号:
473
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
下列程序进行-n阶乘运算,当阶乘的值超过-21147483648
溢出报错,并将结果输出为-1。
'------------------------------------------------
OptionExplicit
'**********FOUND**********
PrivateFunctionjc(ByValnAsInteger)AsInteger
DimIAsInteger
DimresultAsLong
result=1
I=1
DoWhileI<=n
Ifresult<2114748348/IThen
'**********FOUND**********
result=result
I=I+1
Else
lblerr.Caption="溢出"
'**********FOUND**********
jc=-I
ExitFunction
EndIf
Loop
jc=-result
EndFunction
PrivateSubForm_Click()
MsgBoxjc(3)
EndSub
答案:
=======(答案1)=======
PrivateFunctionjc(ByValnAsInteger)AsLong
=======(答案2)=======
result=result*I
=========或=========
result=I*result
=======(答案3)=======
jc=-1
第72题(1.0分)题号:
145
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
该程序的功能是求出100到200之间的全部素数,
'并且按每行4个、每个数据之间有10个空格的格
'式输出。
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
DimkAsInteger,iAsInteger,jAsInteger
k=0
Fori=100To200
'**********FOUND**********
Forj=1Toi-1
IfiModj=0ThenExitFor
Nextj
Ifj=iThen
'**********FOUND**********
Printi;Tab(10);
k=k+1
'**********FOUND**********
IfkMod5=0ThenPrint;
EndIf
Nexti
EndSub
答案:
=======(答案1)=======
Forj=2Toi-1
=========或=========
Forj=2To-1+i
=======(答案2)=======
Printi;Space(10);
=========或=========
Printi;Spc(10);
=======(答案3)=======
IfkMod4=0ThenPrint
=========或=========
If0=kMod4ThenPrint
=========或=========
ifk/4=k\4thenPrint
=========或=========
ifk\4=k/4thenPrint
=========或=========
ifk/4=int(k/4)thenPrint
第73题(1.0分)题号:
132
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
求s=2!
+4!
+6!
+8!
,阶乘的计算用Function过程
'fact实现
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
DimiAsInteger,sAsLong
'**********FOUND**********
Fori=2To8
s=s+fact(i)
Nexti
Prints
EndSub
'**********FOUND**********
PublicFunctionfact()
DimtAsLong
DimiAsInteger
t=1
Fori=1Ton
t=t*i
Nexti
'**********FOUND**********
fact=i
EndFunction
答案:
=======(答案1)=======
Fori=2To8Step2
=======(答案2)=======
PublicFunctionfact(ByValnAsInteger)
=========或=========
PublicFunctionfact(nAsInteger)
=========或=========
PublicFunctionfact(n%)
=========或=========
PublicFunctionfact(n)
=========或=========
PublicFunctionfact(ByValn%)
=========或=========
PublicFunctionfact(ByValn)
=======(答案3)=======
fact=t
第76题(1.0分)题号:
479
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
下面的程序用“冒泡”法完成数组a中的10个整数
'按升序排列,请修正程序中错误。
'------------------------------------------------
OptionExplicit
PrivateSubCommand1_Click()
Dima
DimiAsInteger,jAsInteger,a1AsInteger
a=Array(-2,5,24,58,43,-10,87,75,27,83)
Fori=1To9
'**********FOUND**********
Forj=iTo9
'**********FOUND**********
Ifa(j)>=a(i)Then
a1=a(i)
a(i)=a(j)
'**********FOUND**********
a(j)=a(i)
EndIf
Nextj
Nexti
Fori=0To9
Printa(i)
Nexti
EndSub
答案:
=======(答案1)=======
Forj=i+1To9
=========或=========
Forj=1+iTo9
=======(答案2)=======
Ifa(i)>=a(j)Then
=======(答案3)=======
a(j)=a1
第77题(1.0分)题号:
490
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
输入一个字符串,将所有的小写字母都转换为大写字母。
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Dims1AsString,s2AsString,iAsInteger,tAsString
s1=InputBox("输入字符串,#号结束")
i=1
'**********FOUND**********
s1=Mid(s1,i,1)
Whilet<>"#"
'**********FOUND**********
Ift>="a"Andt<="z"Thent=Chr(Asc(t)-30)
s2=s2+t
i=i+1
t=Mid(s1,i,1)
Wend
'**********FOUND**********
Print"新字符串为:
";s1
EndSub
答案:
=======(答案1)=======
t=Mid(s1,i,1)
=======(答案2)=======
Ift>="a"Andt<="z"Thent=Chr(Asc(t)-32)
=======(答案3)=======
Print"新字符串为:
";s2
第79题(1.0分)题号:
487
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
设窗体中有图片框Pic1,现要求在其中绘制10个同心圆,
'然后将此图以Test.BMP作文件名存入磁盘。
'------------------------------------------------
OptionExplicit
PrivateSubCommand1_Click()
DimXAsInteger
DimYAsInteger
Dim