VB改错练习答案.docx
《VB改错练习答案.docx》由会员分享,可在线阅读,更多相关《VB改错练习答案.docx(33页珍藏版)》请在冰豆网上搜索。
VB改错练习答案
一.选择结构
'题目:
在下面的程序段中过程pd可以判断任意三个数能否构成三角形的三边,利用该过程的判定结果,
'对能构成三角形的计算其面积,构不成的显示"不能构成三角形"
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
'**********FOUND**********
Dimx%,y%,z%,s%,bAsBoolean,hAsSingle
x=InputBox("请输入三角形的边长")
y=InputBox("请输入三角形的边长")
z=InputBox("请输入三角形的边长")
b=pd(x,y,z)
h=(x+y+z)/2
'**********FOUND**********
IfNotbThen
s=Sqr(h*(h-x)*(h-y)*(h-z))
Print"三角形面积是";s
Else
Print"不能构成三角形"
EndIf
EndSub
'**********FOUND**********
PublicFunctionpd()AsBoolean
Ifx>0Andy>0Andz>0Andx+y>zAndx+z>yAndy+z>xThen
pd=True
Else
pd=False
EndIf
EndFunction
(答案1)Dimx%,y%,z%,s!
bAsBoolean,hAsSingle
(答案2)Ifb=trueThen
(答案3)PublicFunctionpd(x%,y%,z%)AsBoolean
'------------------------------------------------
'题目:
请根据下列描述编写购物优惠程序。
某商场为了加速促成商品流通,采用购物打折的优惠办法,
每位顾客一次购物
(1)在100元以上者,按九五折优惠;
'
(2)在200元以上者,按九折优惠;
(3)在300元以上者,按八折优惠;
(4)在500元以上者,按七折优惠。
'------------------------------------------------
OptionExplicit
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
Ifx<100Then
'**********FOUND**********
x=y
Else
Ifx<200Then
y=0.95*x
Else
Ifx<300Then
y=0.9*x
Else
Ifx<500Then
y=0.8*x
Else
y=0.7*x
'**********FOUND**********
ElseIf
EndIf
EndIf
EndIf
'**********FOUND**********
Text2.Text=x
EndSub
(答案1)y=x
(答案2)EndIf
(答案3)Text2.Text=y
'------------------------------------------------
'题目:
程序功能根据输入的学习成绩,分别显示
优秀(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
(答案2)Case90to100
(答案3)Caseelse
二.一般
'------------------------------------------------
'题目:
程序功能为求解一元二次方程的实根,请修正程序中错误。
'------------------------------------------------
OptionExplicit
PrivateSubForm_Load()
Dima!
b!
c!
root1#,root2#,workAsDouble
a=Val(InputBox("请输入系数a的值"))
b=Val(InputBox("请输入系数b的值"))
c=Val(InputBox("请输入系数c的值"))
'**********FOUND**********
work=b*2-4*a*c
Ifwork>=0Anda<>0Then
'**********FOUND**********
root1=(Sqr(work))/(2*a)
'**********FOUND**********
root2=(Sqr(work))/(2*a)
Print"有二个实根"+Str$(root1)+","+Str$(root2)
Else
Print"无实根!
"
EndIf
EndSub
(答案1)work=b^2-4*a*c
(答案2)root1=(-b+Sqr(work))/(2*a)
(答案3)root2=(-b-Sqr(work))/(2*a)
'------------------------------------------------
'题目:
求s=72+102+132+……832的值。
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Cls
DimsAsLong
DimiAsInteger
'**********FOUND**********
s=1
'**********FOUND**********
Fori=72To832
s=s+i
'**********FOUND**********
loop30
Prints
EndSub
===(答案1)======(答案2)=======(答案3)===
s=0Fori=72To832step30Nexti
'------------------------------------------------
'题目:
该程序的功能是求出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
(答案2)Printi;Space(10);
(答案3)IfkMod4=0ThenPrint
'------------------------------------------------
'题目:
输入一个字符串,将所有的小写字母都转换为大写字母。
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Dims1AsString,s2AsString,iAsInteger,tAsString
s1=InputBox("输入字符串,#号结束")
i=1
'**********FOUND**********
s1=Mid(s1,i,1)
DoWhilet<>"#"
'**********FOUND**********
Ift>="a"Andt<="z"Thent=Chr(Asc(t)-30)
s2=s2+t
i=i+1
t=Mid(s1,i,1)
Loop
'**********FOUND**********
Print"新字符串为:
";s1
EndSub
(答案1)t=Mid(s1,i,1)
(答案2)Ift>="a"Andt<="z"Thent=Chr(Asc(t)-32)
(答案3)Print"新字符串为:
";s2
三.级数
'------------------------------------------------
'题目:
程序功能:
求1+2+3……,直到其和超出3000为止,并输入结果。
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Cls
DimiAsInteger
DimsAsSingle
i=0
'**********FOUND**********
s=1
Do
'**********FOUND**********
i=i+2
s=s+i
'**********FOUND**********
Loops>3000
Print"从1到:
";i;"的和是";s
EndSub
(答案1)s=0
(答案2)i=i+1
(答案3)Loopuntils>3000
'------------------------------------------------
'题目:
用自定义函数的方法求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
(答案3)sum=sum+x^(i-1)/ss
'------------------------------------------------
'题目:
在下列程序段中,过程fb可以显示任意长度的菲波那契数列
,
现要求通过键盘输入一数字,利用该过程显示不超过指定数字大小的数列
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
DimxAsInteger
x=Val(InputBox("请指定显示范围"))
'**********FOUND**********
callfby
EndSub
PublicSubfb(xAsInteger)
Dimi&,j%,k%
j=1
i=1
Printi;j;
k=i+j
'**********FOUND**********
DoWhilek>x
Printk;
i=j
j=k
'**********FOUND**********
k=i-j
Loop
EndSub
(答案1)callfb(x)
(答案2)DoWhilek(答案3)k=i+j
四.数字关系
'------------------------------------------------
'题目:
编程求一个十进制整数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)
(答案2)Ch=Mid(S1,i,1)
(答案3)Sum=Sum+Val(Ch)
'------------------------------------------------
'题目:
下面函数的功能是:
求变量s(s=a+aa+aaa+aaaa+……)
'的值。
其中,a是一个0-9的数字,总共累加a项。
'例如,当a=3时,s=3+33+333(共累加3项)。
'------------------------------------------------
OptionExplicit
PublicFunctionCalc(aAsInteger)
DimsAsLong
DimtAsLong
DimiAsInteger
s=a
'**********FOUND**********
t=1
Fori=2Toa
'**********FOUND**********
t=t+a
s=s+t
Nexti
Calc=s
Prints
EndFunction
PrivateSubCommand1_Click()
DimiAsInteger
i=InputBox("请输入数字(0-9):
")
'**********FOUND**********
Calccalli
EndSub
(答案1)t=a
(答案2)t=t*10+a
(答案3)CallCalc(i)
'------------------------------------------------
'题目:
一个两位的正整数,如果将它的个位数与十位数对调,则产生另一个正整数,
我们把后者叫做前者的对调数,
现给定一个两位的正数,请找到另一个两位的正整数,使得这两个两位正整数之和
'等于它们各自的对调数之和。
'例如:
12+32=23+21。
下面程序把具有这种特征的两位正整数都找出来。
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
DimkAsInteger,gAsInteger,hAsInteger,mAsInteger
DimnAsInteger,iAsInteger,tAsInteger,sAsInteger,jAsInteger
k=InputBox("请输入一个两位数")
k=Val(k)
g=Int(k/10)
'**********FOUND**********
h=k-g*10m=h*10+g
Print
Print"输入的两位数是";k
Print
'**********FOUND**********
Forn=1To99
i=Int(n/10)
j=n-i*10
t=i*10+j
s=j*10+i
Ifk+n=m+sThen
Print"";k;"+(";t;")=(";s;")+";m
'**********FOUND**********
End
Nextn
EndSub
(答案1)h=k-g*10:
m=h*10+g
(答案2)Forn=11To99
(答案3)EndIf
五.数组
'------------------------------------------------
'题目:
下面程序段将7个随机整数从小到大排序
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Dimt%,m%,n%,w%,a(7)AsInteger
Form=1To7
a(m)=Int(10+Rnd()*90)
Printa(m);"";
Nextm
Print
Form=1To6
t=m
'**********FOUND**********
Forn=2To7
'**********FOUND**********
Ifa(t)>a(n)Thenn=t
Nextn
'**********FOUND**********
Ift=mThen
w=a(m)
a(m)=a(t)
a(t)=w
EndIf
Nextm
Form=1To7
Printa(m)
Nextm
EndSub
(答案1)Forn=m+1To7
(答案2)Ifa(t)>a(n)Thent=n
(答案3)Ift<>mThen
'------------------------------------------------
'题目:
以下程序用于建立一个三行三列的矩阵,使其两条对角线上数字为1,其余位置为0
'------------------------------------------------
OptionExplicit
PrivateSubForm_Click()
Dimx(3,3),nAsInteger,mAsInteger
Forn=1To3
Form=1To3
'**********FOUND**********
Ifn=mThenx(n,m)=1Elsex(n,m)=0
'**********FOUND**********
Nextn,m
Forn=1To3
Form=1To3
'**********FOUND**********
Printx(m,n)
Nextm
Print
Nextn
EndSub
(答案1)Ifn=mOrm=3+1-nThenx(n,m)=1Elsex(n,m)=0
(答案