VB程序设计 习题及答案第7章 过程.docx
《VB程序设计 习题及答案第7章 过程.docx》由会员分享,可在线阅读,更多相关《VB程序设计 习题及答案第7章 过程.docx(17页珍藏版)》请在冰豆网上搜索。
VB程序设计习题及答案第7章过程
第7章过程
7.1编写程序,利用Sub过程计算下式的值:
s=a!
+b!
+c!
a,b,c的值由键盘输入
【参考答案】
程序代码设计
PrivateSubForm_Click()
DimsAsInteger,nAsInteger
Fori=1To3
n=InputBox("n=")
Callfact(n,f)
s=s+f
Nexti
Print"s=";s
EndSub
PrivateSubfact(n,f)
f=1
Fori=1Ton
f=f*i
Nexti
EndSub
运行结果:
如a、b、c的值分别输入为4、5、6
则程序运行结果如图7-1所示:
7.2编写程序,打印100~200之间的所有素数。
要求:
(1)每行输出5个素数。
(2)利用Function过程判断每个数是否为素数,是返回1,否则返回0。
【参考答案】
程序代码设计
PrivateSubForm_Click()
Print2;
k=1
Fori=3To100
f=prime(i)
Iff=1Then
k=k+1
IfkMod5=0ThenPrintiElsePrinti;
EndIf
Nexti
EndSub
PrivateFunctionprime(n)
prime=1
Fori=2Ton-1
IfnModi=0Thenprime=0:
ExitFor
Nexti
EndFunction
程序运行结果如图7-2所示:
7.3编写程序,利用Function过程计算下式的值:
(1+2+3+…+m)+(1+2+3+…+n)
y=───────────────
(1+2+3+…+p)
【参考答案】
程序代码设计
PrivateSubForm_Click()
m=Val(InputBox("输入m:
"))
n=Val(InputBox("输入n:
"))
p=Val(InputBox("输入p:
"))
y=(sum(m)+sum(n))/sum(p)
Print"sum=";y
EndSub
PrivateFunctionsum(n)
s=0
Fori=1Ton
s=s+i
Nexti
sum=s
EndFunction
运行结果:
如输入m值为:
20,n值为:
15,p值为:
10
则程序运行结果如图7-3所示:
7.4编写Function过程计算n!
调用该函数过程计算下式的值:
S=1+1/(1+4!
)+1/(1+4!
+7!
)+…+1/(1+4!
+…+19!
)
【参考答案】
程序代码设计
PrivateSubForm_Click()
s=0
t=0
Fori=1To19Step3
t=t+fact(i)
s=s+1/t
Nexti
Print"s=";s
EndSub
PrivateFunctionfact(n)
f=1
Fori=1Ton
f=f*i
Nexti
fact=f
EndFunction
程序运行结果如图7-4所示。
xx2x3xn
7-5计算ex=1+─+─+─+…+─
1!
2!
3!
n!
xn
设x=1,2,3,4,5,6时,分别打印ex的值,要求精度─<0.0001
n!
用Function过程计算n!
调用该过程,计算上式的值。
【参考答案】
程序代码设计
PrivateSubForm_Click()
Forx=1To6
Sum=1
t=1
n=0
Do
n=n+1
t=t*x
term=t/fact(n)
Sum=Sum+term
LoopUntilterm<0.0001
Print"e^";x;"=";Sum
Nextx
EndSub
PrivateFunctionfact(n)
f=1
Fori=1Ton
f=f*i
Nexti
fact=f
EndFunction
程序运行结果如图7-5所示:
7.6编写两个Function过程,分别计算40,16,34,26,52的最大公约数和最小公倍数。
【参考答案】
程序代码设计
PrivateSubForm_Click()
Dima(1To5)AsInteger
a
(1)=40
a
(2)=16
a(3)=34
a(4)=26
a(5)=52
a1=a
(1)
a2=a
(2)
b=gcd(a1,a2)
d=b
c=a
(1)*a
(2)/b
Fori=3To5
a1=c
a2=a(i)
b=gcd(a1,a2)
c=c*a(i)/b
Nexti
Print"最小公倍数为:
";c
Fori=3To5
d=gcd(d,a(i))
Nexti
Print"最大公约数为:
";d
EndSub
PrivateFunctiongcd(x,y)
Ifxt=x
x=y
y=t
EndIf
r=xMody
DoWhiler<>0
x=y
y=r
r=xMody
Loop
gcd=y
EndFunction
程序运行结果如图7-6所示:
7.7利用Function过程计算下式的值:
cos2x(0>x)
f(x)=int(6x2-5x+1)(0≤x≤3)
e3-x(3调用该Function过程计算f(f(f(a)))+f(f(2+f(b)))的值。
a,b的值由键盘输入。
【参考答案】
程序代码设计
PrivateSubForm_Click()
a=Val(InputBox("输入a的值:
"))
b=Val(InputBox("输入b的值:
"))
t=f(f(f(a)))+f(f(2+f(b)))
Print"计算结果:
";t
EndSub
PrivateFunctionf(x)
Ifx<0Then
f=Cos(2*x)
ElseIfx<=3Then
f=Int(6*x*x-5*x+1)
Else
f=Exp(3-x)
EndIf
EndFunction
运行结果:
如a、b的值分别输入为3和5
则程序运行结果如图7-7所示。
7.8编写程序,利用Sub过程计算5×4的数组中,每行最大元素及其位置和每列最大元素及其位置。
【参考答案】
说明:
采用随机函数Rnd产生20个1~20之间的随机整数,存放在数组a中。
程序代码设计
PrivateSubForm_Click()
Dima(1To5,1To4)AsInteger
RandomizeTimer
Fori=1To5
Forj=1To4
a(i,j)=Int(20*Rnd+1)
PrintFormat(a(i,j),"@@@@@");
Nextj
Print
Nexti
Fori=1To5
Callhd(a(),i,m)
Print"第";i;"行";"最大元素是:
";a(i,m);"位置在第";m;"列"
Nexti
Print
Forj=1To4
Callld(a(),j,n)
Print"第";j;"列";"最大元素是:
";a(n,j);"位置在第";n;"行"
Nextj
EndSub
PrivateSubhd(x()AsInteger,i,m)
Max=x(i,1)
m=1
Forj=2To4
Ifx(i,j)>MaxThen
Max=x(i,j)
m=j
EndIf
Nextj
EndSub
PrivateSubld(x()AsInteger,j,n)
Max=x(1,j)
n=1
Fori=2To5
Ifx(i,j)>MaxThen
Max=x(i,j)
n=i
EndIf
Nexti
EndSub
程序运行结果如图7-8所示:
7.9编写程序,要求该程序在输入某人的编号、实发工资数额后,自动确定发给多少张一百元、五十元、十元、五元、一元、五角、一角、五分、一分的钞票,并输出实发工资总额和所需各种钞票的总数目。
(要求用Sub过程处理除一百元以外的钞票的数目)
【参考答案】
程序代码设计
PrivateSubForm_Click()
num=Val(InputBox("输入职工编号:
"))
s$=InputBox("输入职工工资:
")
l=Len(s$)
s0=Val(Left$(s$,l-5))
Callfenp(l,s$,s1,s2,s3,s4,s5,s6,s7,s8)
Print"职工编号:
";num,"职工工资:
";s$
Print"100元";s0
Print"50元";s1
Print"10元";s2
Print"5元";s3
Print"1元";s4
Print"5角";s5
Print"1角";s6
Print"5分";s7
Print"1分";s8
EndSub
PrivateSubfenp(l,s$,s1,s2,s3,s4,s5,s6,s7,s8)
l1=Val(Mid$(s$,l-4,1))
l2=Val(Mid$(s$,l-3,1))
l3=Val(Mid$(s$,l-1,1))
l4=Val(Mid$(s$,l,1))
s1=l1\5
s2=l1Mod5
s3=l2\5
s4=l2Mod5
s5=l3\5
s6=l3Mod5
s7=l4\5
s8=l4Mod5
EndSub
程序运行结果如图7-9所示:
(注意:
输入的工资保留到分)
7.10编写程序,把任意一个十进制数N转换成分别用二进制、八进制和十六进制表示的数,要求用Sub过程实现数制的转换。
【参考答案】
程序代