VB程序改错40题含答案.docx
《VB程序改错40题含答案.docx》由会员分享,可在线阅读,更多相关《VB程序改错40题含答案.docx(58页珍藏版)》请在冰豆网上搜索。
VB程序改错40题含答案
【程序改错】
题目:
该程序实现将输入的0-255之间的正整数转换成二进制数
OptionExplicit
PrivateSubForm_Click()
Constn=8
Dima(n)AsInteger,sAsString,mAsInteger,xAsInteger
x=Val(InputBox("请输入一个0-255之间的正整数:
"))
Printx
Form=1Ton
a(m)=xMod2
x=x/2
Nextm
s=""
Form=nTo0Step-1
s=Str(a(m))
Nextm
Prints
EndSub
答案:
=======(答案1)=======
Form=0Ton
=======(答案2)=======
x=x\2
=========或=========
x=int(x/2)
=======(答案3)=======
s=s+Str(a(m))
第3题(1.0分)题号:
463
'【程序改错】
'题目:
以下程序功能是输入三个数,由大到小排序。
OptionExplicit
DimAAsInteger
DimBAsInteger
DimCAsInteger
PrivateSubForm_Click()
DimnTempAsInteger
A=Val(InputBox("Pleaseinputfirstinteger","输入正整数"))
B=Val(InputBox("Pleaseinputsecondinteger","输入正整数"))
C=Val(InputBox("Pleaseinputthirdinteger","输入正整数"))
IfA<=CThen
nTemp=A
A=B
B=nTemp
EndIf
IfB<=CThen
nTemp=A
A=C
C=nTemp
EndIf
IfA<=BThen
nTemp=B
B=C
C=nTemp
EndIf
Print"Theintegersinorderis";A;B;C
EndSub
答案:
=======(答案1)=======
IfA<=BThen
=========或=========
IfB>=AThen
=======(答案2)=======
IfA<=CThen
=========或=========
IfC>=AThen
=======(答案3)=======
IfB<=CThen
=========或=========
IfC>=BThen
第4题(1.0分)题号:
127
'【程序改错】
'题目:
下面程序可输出如下图形:
'*
'***
'*****
'*******
'*********
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
DimmAsInteger,nAsInteger,sAsString,iAsInteger,jAsInteger
n=4
m=1
s="*"
Fori=5To1Step-1
PrintSpc(n)
Forj=1To2*m-1
Prints;
Nextj
Print
n=n+1
m=m-1
Nexti
EndSub
答案:
=======(答案1)=======
PrintSpc(n);
=========或=========
PrintSpc(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),利用绘图方法
'在图片框中显示其图形。
结果如图1
OptionExplicit
PrivateConstpi=3.14159
PrivateSubCommand1_Click()
DimxAsInteger
Picture1.Scale(-pi,-1200)-(pi,1200)
Forx=-piTopiSteppi
Picture1.PSet(x,1000*pi*Sin(x)),vbRed
Nextx
EndSub
答案:
=======(答案1)=======
DimxAsSingle
=========或=========
Dimx!
=======(答案2)=======
Forx=-piTopiSteppi/180
=======(答案3)=======
Picture1.PSet(x,1000*Sin(x)),vbRed
=========或=========
Picture1.PSet(x,Sin(x)*1000),vbRed
第6题(1.0分)题号:
497
'【程序改错】
'题目:
编程求一个十进制整数n的各位数字之和,设n为小于或等于5位的数。
OptionExplicit
PrivateSubForm_Click()
DimNAsInteger,SumAsInteger,S1AsString,S2AsString
DimiAsInteger,ChAsString
Sum=0
N=InputBox("输入整数n")
S1=Str(N)
S1=RTrim(S1)
Fori=1ToLen(S1)
Ch=Mid(N,i,1)
Sum=Val(Ch)
Nexti
Print"该整数的各位数之和是:
";Sum
EndSub
答案:
=======(答案1)=======
S1=Trim(S1)
=========或=========
S1=lTrim(S1)
=======(答案2)=======
Ch=Mid(S1,i,1)
=======(答案3)=======
Sum=Sum+Val(Ch)
=========或=========
Sum=Sum+Val(Ch)
第7题(1.0分)题号:
454
'【程序改错】
'题目:
本程序的功能是随机产生的10个两位正整数,并进行递减排序。
OptionExplicit
PrivateSubCreateRND()
DimTempAsInteger
DimIAsInteger
DimNAsInteger
DimX(10)AsInteger
DimJAsInteger
N=10
Print"数据:
"
ForI=1ToN
X(I)=Int(Rnd()*90)
PrintX(I);
NextI
Print
Print"排序:
"
ForI=0ToN-1
ForJ=I+1ToN
IfX(I)>X(J)Then
Temp=X(I)
X(J)=X(I)
X(I)=Temp
EndIf
NextJ
PrintX(I);
NextI
Print
EndSub
PrivateSubCommand1_Click()
CreateRND
EndSub
答案:
=======(答案1)=======
X(I)=Int(10+Rnd()*90)
=========或=========
X(I)=Int(10+Rnd()*90)
=======(答案2)=======
IfX(I)=========或=========
IfX(I)<=X(J)Then
=========或=========
IfX(J)>X(I)Then
=========或=========
IfX(J)>=X(I)Then
=======(答案3)=======
temp=X(J)
第9题(1.0分)题号:
130
'【程序改错】
'题目:
以下程序段用于计算5的N次方。
OptionExplicit
PrivateSubForm_Click()
DimnAsInteger,kAsInteger,sAsLong
n=InputBox("Inputn")
k=0
s=0
DoWhilek<=n
s=s*5
k=k+1
Next
Print"5的";"n次方是";s
EndSub
答案:
=======(答案1)=======
k=1
=======(答案2)=======
s=1
=======(答案3)=======
Loop
第11题(1.0分)题号:
452
'【程序改错】
'题目:
用自定义函数的方法求sum(x),求当-1≤x≤1时,
'sum(x)=x/2!
+x^2/3!
+x^3/4!
+……+x^n/(n+1)!
,
'当x〉1或x〈-1时,函数值为0。
当n〈=0时,输入数
'据错误。
X、N都是由用户输入。
OptionExplicit
PrivateSubCommand1_Click()
DimsAsSingle
DimnAsInteger,xAsSingle,kAsInteger
n=Val(InputBox("Pleaseinputaintegervalue:
"))
x=Val(InputBox("Pleaseinputasinglevalue:
"))
Ifn<=0Then
k=MsgBox("数据输入错误!
",vbRetryCancel+vbExclamation,"数据输入")
ExitSub
EndIf
s=Sum(x,n)
Prints
EndSub
FunctionSum(xAsSingle,nAsInteger)
DimiAsInteger,ssAsLong
ss=1
Sum=0
Ifx>1Orx<-1Then
ExitDo
Else
Fori=2Ton
ss=ss*i
Sum=x^(i-1)/ss
Nexti
EndIf
EndFunction
答案:
=======(答案1)=======
exitFunction
=======(答案2)=======
Fori=2Ton+1
=========或=========
Fori=2To1+n
=======(答案3)=======
sum=sum+x^(i-1)/ss
第14题(1.0分)题号:
136
'【程序改错】
'题目:
程序功能为打印下列图形:
'*
'**
'***
'****
'*****
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Cls
DimiAsInteger
DimjAsInteger
Fori=1To7
Forj=1To5
Print"*";
Loop
Print
Nexti
EndSub
答案:
=======(答案1)=======
Fori=1To5
=======(答案2)=======
Forj=1Toi
=======(答案3)=======
Nextj
=========或=========
Next
第16题(1.0分)题号:
461
'【程序改错】
'题目:
产生30个小于100的成绩随机数,并统计出优、良
'、中等、及格、不及格数的个数,并计算出成绩属
'于优秀段的成绩平均分。
OptionExplicit
PrivateSubForm_Click()
Dimk%,a%,bjg%,jg%,zd%,lh%,yxAsInteger
DimpjfAsInteger
Randomize
pjf=0
Fork=1To30
a=Int(Rnd())
SelectCasea
Case0To59
bjg=bjg+1'不及格
Case60To69
jg=jg+1'及格
Case70To79
zd=zd+1'中等
Case80To89
lh=lh+1'良好
Case90To100
yx=yx+1'优秀
pjf=pjf+1
EndSelect
Nextk
Ifyx>0Thenpjf=pjf/30
Debug.Print"不及格"+Str$(bjg)+"人,及格"+Str$(jg)+"人,中等"+Str$(zd)+"人";
Debug.Print"良好"+Str$(lh)+"优秀"+Str$(yx)+"人"
Debug.Print"优秀分数段成绩平均分"&pjf
EndSub
答案:
=======(答案1)=======
a=Int(Rnd()*100)
=========或=========
a=Int(Rnd*100)
=======(答案2)=======
pjf=pjf+a
=======(答案3)=======
Ifyx>0Thenpjf=pjf/yx
第17题(1.0分)题号:
456
'【程序改错】
'题目:
挑选单数并排序程序:
程序启动后由计算机自动产
'生20个属于[100,300]之间的随机整数,单击"显
'示全体"按钮时,在Form1上显示这20个随机数;
'单击"显示奇数"按钮时,在Form1上显示其中的奇数;
'单击"排序"按钮时,在Form1上将这些奇数从小到大显示。
'要求显示格式为每行显示5个数据。
OptionExplicit
Privatea(20)AsInteger,b(20)AsInteger
PrivatekAsInteger
PrivateSubcmdodd_Click()
DimIAsInteger
k=0
ForI=1To20
Ifa(I)/2=Int(a(I)/2)Then
k=k+1
b(k)=a(I)
EndIf
NextI
ForI=1Tok
Printb(I);
IfInt(I/5)<>I/5ThenPrint
NextI
Print
EndSub
PrivateSubcmdAll_Click()
Randomize
DimIAsInteger
ForI=1To20
a(I)=Int(Rnd()*20+100)
Printa(I),
IfInt(I/5)=I/5ThenPrint
NextI
Print
EndSub
PrivateSubcmdsort_Click()
DimIAsInteger
DimJAsInteger
DimTempAsInteger
ForI=1Tok-1
ForJ=ITok
Ifb(I)>b(J)ThenTemp=b(I):
b(I)=b(J):
b(J)=Temp
NextJ
NextI
ForI=1Tok
Printb(I);
IfInt(I/5)=I/5ThenPrint
NextI
EndSub
答案:
=======(答案1)=======
Ifa(I)/2<>Int(a(I)/2)Then
=========或=========
Ifa(I)mod2<>0Then
=========或=========
If0<>a(I)mod2Then
=========或=========
Ifa(I)/2<>a(I)\2Then
=========或=========
Ifint(a(I)/2)<>a(I)/2Then
=========或=========
Ifa(I)\2<>a(I)/2Then
=======(答案2)=======
IfInt(I/5)=I/5ThenPrint
=========或=========
IfImod5=0ThenPrint
=========或=========
If0=Imod5ThenPrint
=========或=========
IfI/5=int(I/5)ThenPrint
=========或=========
IfI/5=I\5ThenPrint
=========或=========
IfI\5=I/5ThenPrint
=======(答案3)=======
a(I)=Int(Rnd()*200+100)
第19题(1.0分)题号:
499
'【程序改错】
'题目:
编程将一个数从已经有序(设从小到大排序)的数组
'中删除,使数组还继续保持有序而且其余元素按照下
'标连续存放。
OptionExplicit
PrivateSubForm_Click()
DimA()AsInteger,NAsInteger,FlagAsInteger
DimiAsInteger,XAsInteger,PAsInteger
Flag=0
N=InputBox("输入元素个数")
DimA(N)
Fori=1ToN
A(i)=InputBox("输入数组的第"&i&"个元素")
Nexti
Print"删除某元素前的数组"
Fori=1ToN
PrintA(i);
Nexti
Start:
X=InputBox("输入要删除的元素:
")
Fori=1ToN
IfX=A(i)ThenP=i:
Flag=1
Nexti
IfFlag=0ThenMsgBox("没有此元素"):
GoToStart
Fori=PToN-1
A(i+1)=A(i)
Nexti
N=N+1
Print"删除元素后的数组:
"
Fori=1ToN
PrintA(i);
Nexti
EndSub
答案:
=======(答案1)=======
ReDimA(N)
=======(答案2)=======
A(i)=A(i+1)
=========或=========
A(i)=A(1+i)
=======(答案3)=======
N=N-1
第20题(1.0分)题号:
139
'【程序改错】
'题目:
随机产生并输出100以内大于50的20个整数,输
'出时每5个数一行。
OptionExplicit
PrivateSubForm_Click()
RandomizeTimer
DimiAsInteger,maAsInteger
i=1
DoUntili<20
ma=Rnd()*100\1
Ifma>50Then
Printma;
i=i+1
Ifi\5=0Then
Print
EndIf
EndIf
Loop
EndSub
答案:
=======(答案1)=======
i=0
=======(答案2)=======
Dowhilei<20
=========或=========
Dowhile20>i
=========或=========
Dowhilei<=19
=========或=========
Dowhile19>=i
=======(答案3)=======
Ifimod5=0Then
第23题(1.0分)题号:
474
'【程序改错】
'题目:
程序功能为求解一元二次方程的实根,请修正程序中错误。
OptionExplicit
PrivateSubForm_Load()
Dima!
b!
c!
root1#,root2#,workAsDouble
a=Val(InputBox("请输入系数a的值"))
b=Val(InputBox("请输入系数b的值"))
c=Val(InputBox("请输入系数c的值"))
work=b*2-4*a*c
Ifwork>=0Anda<>0Then
root1=(Sqr(work))/(2*a)
root2=(Sqr(work))/(2*a)
Debug.P