VB常用算法(一)累加和連乘

字號(hào):

1、算法說(shuō)明
     累加形式:V=V+e
     連乘形式:V=V*e
     其中:V是變量,e是遞增表達(dá)式。累加和連乘一般通過(guò)循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn)。
     注意:需在執(zhí)行循環(huán)體前對(duì)變量V賦初值。一般的,累加時(shí)置初值0;連乘時(shí)置初值為1.
     舉例
     求N!的結(jié)果。
     Private Sub Command1_Click()
     Dim n%, i%, s&
     n = Val(InputBox("輸入n"))
     s = 1
     For i = 1 To n
     s = s * i
     Next i
     Print s
     End Sub
     錯(cuò)誤的寫法:
     Private Sub Command1_Click()
     Dim n%, i%, s&
     n = Val(InputBox("輸入n"))
     For i = 1 To n
     s = 1 ‘賦初值語(yǔ)句位置不對(duì)!
     s = s * i
     Next i
     Print s ‘輸出s的值為n,而不是n!
     End Sub
     應(yīng)用舉例
     根據(jù)下列公式,求自然對(duì)數(shù)e的的近似值。
     要求:誤差小于0.00001
     Private Sub Command1_Click()
     Dim i%, n&, t!, e!
     e = 2
     i = 1
     t = 1
     Do While t > 0.00001
     i = i + 1
     t = t / i
     e = e + t
     Loop
     Print "計(jì)算了"; i; "項(xiàng)目和是:"; e
     Print Exp(1) ‘與上句輸出值進(jìn)行對(duì)比以證明算法的正確性
     End Sub
     解題技巧
     1) 由于這類題目往往是根據(jù)精度要求來(lái)求值,因此我們不能預(yù)知具體循環(huán)次數(shù),所以這類題目一般用Do循環(huán),很少用For循環(huán)。設(shè)定循環(huán)變量和通項(xiàng)變量,注意各變量的初值;
     2) 分解通項(xiàng)表達(dá)式中各因子,并分別將各因子用循環(huán)變量表示;
     3) 如果步驟2中有的因子比較復(fù)雜,難以直接用變量表示,此時(shí)可以考慮使用Function過(guò)程;
     4) 根據(jù)步驟1、2、3,寫出通項(xiàng)表達(dá)式;
     5) 根據(jù)精度要求(往往是通項(xiàng)小于10負(fù)多少次方這樣一個(gè)關(guān)系表達(dá)式),寫出一條滿足精度要求后跳出循環(huán)的語(yǔ)句。通常是用:if 通項(xiàng)表達(dá)式>10^(-N) then exit do ,注意這句話一般需放在累加或者連乘式之前。
     實(shí)例說(shuō)明
     以2002年春上機(jī)試卷06編程題為例
     根據(jù)X值計(jì)算:
     n=1,2,……
     要求:n項(xiàng)絕對(duì)值小于等于10-6為止。
     1、由于循環(huán)次數(shù)不確定,因此確定用Do循環(huán)結(jié)構(gòu)并定義循環(huán)變量用n表示(初值1);用戶輸入的值用x表示;通項(xiàng)用dblCos表示;累加值用sum表示,初值為0;
     2、分解通項(xiàng)式的組成
     可以分解為三部分:
     可以表示為:(-1)^(n+1)
     可以表示為:x^(2*(n-1))
     比較復(fù)雜,難以直接表示
     3、由于步驟2中復(fù)雜, 此時(shí)考慮使用過(guò)程。
     于是定義過(guò)程,輸入值是n,返回值是
     于是有:
     private Function comp(n as long)as long
     dim I as long
     dim result as long
     result=1 ‘此處注意,由于是連乘,初值為1
     for I=1 to 2*(n-1)
     result=result*I
     next I
     comp=result
     End Function
     注意:由于是參數(shù)按地址傳遞,因此對(duì)于本題,實(shí)參的值不能在過(guò)程中被改變?。ㄒ彩歉腻e(cuò)題??嫉牡胤剑。。?BR>     4、根據(jù)步驟1、2、3,寫出通項(xiàng)dblCos的表達(dá)式