a$ = "奇数" ! s, k8 D6 m* o! o' g$ t0 ^) U/ |
End If ) h) \5 F0 v( t |
Print num; "‐‐‐‐ "; "是一个"; a$
) w0 U, [- ?% u) t) G+ Y# X& xEnd Sub
# a5 b" F" v3 n9 R& X2.分析下面程序运行的结果。
8 Q2 i" [3 R' L" B% X" UPrivate Function Multiply (n as Integer) As Integer
5 Q$ C2 i% s( a: B; H Multiply=1 ( s2 x. [( \$ _
do While n>0 & O! \# g8 i6 J
Multiply=Multiply*n
, P7 G# f/ o- h n=n-1 1 `7 W9 M: \) f+ I2 R& F% ?+ F
Loop 7 Z, |. L( F+ u% Q3 C9 _
End Function
4 Z8 U& P3 w6 [9 oPrivate Sub Form_Click()
7 C/ C+ k, D7 R8 T( E Dim Sum As Integer, I As Integer
, h! K& w/ F$ e4 w% z; o' v; C For I=5 to 1 Step-1
. b7 Y ~" x2 [8 F! ^5 K& z, z. a! c6 w Sum=Sum+Multiply(I) `% V. D2 v3 R/ t. x
Next
& Z$ i5 E7 r c8 N1 `: { Print "Sum=";Sum, 3 i+ U7 X, V; k4 K
End Sub
! [ j# z# h8 E% o7 b* B. t9 {2 B4 p解答: 5 |; a- G' Y u' i# M
本题是计算: 5! * S2 P; s5 L! x4 f, r4 T, I, w
所以运行结果: % @1 O2 D0 G6 Y' [ v/ r
Sum=120
9 T# D8 w4 Z- N3 G本程序只计算了5!=120。因为,形参n 是按地址传递的,在第一次调用Multiply 函数后n 的值为0,由于实参与形参共享地址单元,实参i 的值也是0。当执行Sum=Sum+Multiply(I) 语句后,Sum 的值是120,执行Next 语句后在判断语句For I=5 to 1 Step -1 时就退出 For 循环。因此循环只执行了一次,求了5!的值。 9 h8 n: i& t) _% {' G6 {! ]
3.分析下面程序运行的结果。
( Z" [3 K9 j h7 o# y4 WPrivate Function Multiply (ByVal n as Integer) As Integer
2 j: x7 R! b# u7 r( K2 CMultiply=1 " ^% \: e" b7 A' h, R' a+ {
do While n>0
) d4 c# o; z3 a( `; G# g Multiply=Multiply*n - v) r+ C% r6 r9 d6 k8 P
n=n-1
! K1 t1 X! v; h Loop * E. f2 C1 r) z& p" G, [: V
End Function
N; B% ]$ y3 w$ A6 K: L ~ v+ n# pPrivate Sub Form_Click()
& k) E' M$ e( ? Dim Sum As Integer, I As Integer : R0 J" N$ D2 r( T: A# w6 G0 E- u
For I=5 to 1 Step-1
8 i1 o. w/ \+ Q# S1 V. C: w1 m$ `7 H Sum=Sum+Multiply(I) ! ]7 ]+ i0 A& { o7 m
Next ; f2 k! m/ b& h5 |3 V
Print "Sum=";Sum, & n& k* }( d% j& E
End Sub $ p- i" o# s; @- B! I( G/ W. B
解答: 1 o6 \$ r! C4 e7 ~
运行结果:
; ^; F7 F$ Q) d1 f, p Sum=153 2 q1 O+ q. S- z7 g5 ]# {& e! Z
4.用函数调用的方法计算∑n
* ^9 v; ?( |. Y" S6 a解答:
3 z8 J9 j) E* z( F( a0 {Private Static Function Fac(n As Integer) As Integer
2 H% ]/ {9 n* v/ K% [ Dim f As Integer
2 c& Z4 o9 _, x9 d4 f' ^5 l- [ f = f + n $ A4 }$ S. ~* L& W
Fac = f
5 |. | H7 j, |0 }' f+ HEnd Function 7 C2 q7 G6 [8 n! Q9 C7 H# k
Private Sub Form_Click() # K7 ^- |" T, Y% M; p) c
Dim I As Integer 4 D: j. j& s( Y$ J5 g, e
For I = 1 To 5
- f& q' g, q: z, J9 _ N9 Q6 p: ]+ Q Print "∑"; I & "=" & Fac(I)
O6 O9 Q6 O# F/ a Next I : Q2 r5 h# l9 x" K
End Sub ' ]2 x% M& t( e% f, Y4 z
程序分析:
; v! _* x+ ]6 ~# z$ u0 z6 n( l; ]●过程定义语句Private Static Function Fac(n As Integer) 是为了使过程中所有的局部变量为静态变量。在过程头前加上 Static 关键字时,无论过程中的变量是用 Static 、Dim 或Private 声明的还是隐式声明的,都会变成静态变量。 : B; A3 [# ?# Z, Y( d/ ^
●被调函数Fac 是计算∑n 的值,局部变量f 为静态变量,在每次调用Fac 函数结束时变量 f 的值保留为∑i,再与下次的I+1 相加。
c* b0 `- c I/ p5 b0 m2 f1 {' N●如果不用Static 声明变量 f ,则以前的和不会保留,每次调用时函数中 f 的初值为0。 |