上海海事大学VB程序改错40题.docx
《上海海事大学VB程序改错40题.docx》由会员分享,可在线阅读,更多相关《上海海事大学VB程序改错40题.docx(59页珍藏版)》请在冰豆网上搜索。
![上海海事大学VB程序改错40题.docx](https://file1.bdocx.com/fileroot1/2023-1/26/0e6feda0-7cc6-4406-b5fc-acd014f68852/0e6feda0-7cc6-4406-b5fc-acd014f688521.gif)
上海海事大学VB程序改错40题
第2题(1.0分)题号:
129
'------------------------------------------------
'【程序改错】
'------------------------------------------------
'题目:
该程序实现将输入的0-255之间的正整数转
'换成二进制数
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Constn=8
Dima(n)AsInteger,sAsString,mAsInteger,xAsInteger
x=Val(InputBox("请输入一个0-255之间的正整数:
"))
Printx
'**********FOUND**********
Form=1Ton
a(m)=xMod2
'**********FOUND**********
x=x/2
Nextm
s=""
Form=nTo0Step-1
'**********FOUND**********
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","输入正整数"))
'**********FOUND**********
IfA<=CThen
nTemp=A
A=B
B=nTemp
EndIf
'**********FOUND**********
IfB<=CThen
nTemp=A
A=C
C=nTemp
EndIf
'**********FOUND**********
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
'**********FOUND**********
PrintSpc(n)
Forj=1To2*m-1
Prints;
Nextj
Print
'**********FOUND**********
n=n+1
'**********FOUND**********
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()
'**********FOUND**********
DimxAsInteger
Picture1.Scale(-pi,-1200)-(pi,1200)
'**********FOUND**********
Forx=-piTopiSteppi
'**********FOUND**********
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)
'**********FOUND**********
S1=RTrim(S1)
Fori=1ToLen(S1)
'**********FOUND**********
Ch=Mid(N,i,1)
'**********FOUND**********
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
'**********FOUND**********
X(I)=Int(Rnd()*90)
PrintX(I);
NextI
Print
Print"排序:
"
ForI=0ToN-1
ForJ=I+1ToN
'**********FOUND**********
IfX(I)>X(J)Then
'**********FOUND**********
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")
'**********FOUND**********
k=0
'**********FOUND**********
s=0
DoWhilek<=n
s=s*5
k=k+1
'**********FOUND**********
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
'**********FOUND**********
ExitDo
Else
'**********FOUND**********
Fori=2Ton
ss=ss*i
'**********FOUND**********
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
'**********FOUND**********
Fori=1To7
'**********FOUND**********
Forj=1To5
Print"*";
'**********FOUND**********
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
'**********FOUND**********
a=Int(Rnd())
SelectCasea
Case0To59
bjg=bjg+1'不及格
Case60To69
jg=jg+1'及格
Case70To79
zd=zd+1'中等
Case80To89
lh=lh+1'良好
Case90To100
yx=yx+1'优秀
'**********FOUND**********
pjf=pjf+1
EndSelect
Nextk
'**********FOUND**********
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
'**********FOUND**********
Ifa(I)/2=Int(a(I)/2)Then
k=k+1
b(k)=a(I)
EndIf
NextI
ForI=1Tok
Printb(I);
'**********FOUND**********
IfInt(I/5)<>I/5ThenPrint
NextI
Print
EndSub
PrivateSubcmdAll_Click()
Randomize
DimIAsInteger
ForI=1To20
'**********FOUND**********
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