小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VB程序設(shè)計(jì)程序控制結(jié)構(gòu)(二)

 你喜歡那個(gè) 2012-05-13

For循環(huán)控制結(jié)構(gòu)

循環(huán)控制結(jié)構(gòu)屬于計(jì)數(shù)型循環(huán),程序按照此種結(jié)構(gòu)中指明的循環(huán)次數(shù)來執(zhí)行循環(huán)體部分,采用ForNext循環(huán)語句,其語法格式如下:

          For <循環(huán)變量> = <初始值> To <終值> [Step 步長]

                         [循環(huán)體]

                         [Exit For]

                       [循環(huán)體]

           Next 循環(huán)變量

    在此格式中,使用了這樣幾個(gè)參數(shù):

1. 循環(huán)變量。用于統(tǒng)計(jì)循環(huán)次數(shù),該變量為數(shù)值型變量。

2. 初始值。用于設(shè)置循環(huán)變量的初始值,該變量為數(shù)值型變量。

3. 終值。用于設(shè)置循環(huán)變量的終止值,該變量為數(shù)值型變量。

4. 步長。用于決定循環(huán)變量每次的增值,為數(shù)值型變量。當(dāng)步長為1時(shí),可以省略[Step 步長]選項(xiàng)。

5. 循環(huán)體。重復(fù)執(zhí)行的部分。

6.  Exit For。在某些情況下,可強(qiáng)制退出For循環(huán)。

7.  Next循環(huán)變量。用于結(jié)束一輪For循環(huán)。根據(jù)終止值和當(dāng)前循環(huán)變量的值的大小關(guān)系決定是否執(zhí)行下一輪循環(huán)。

通常情況下,For循環(huán)的執(zhí)行過程是先給循環(huán)變量賦初值,然后判斷。若循環(huán)變量的值沒有超出終值,則執(zhí)行一輪循環(huán)體,然后將循環(huán)變量加上步長值,判斷是否可以執(zhí)行下一輪循環(huán),接著重復(fù)上述過程;否則退出循環(huán)。

若循環(huán)體中存在Exit For語句,則在執(zhí)行過程中,滿足條件即可強(qiáng)制跳出For循環(huán)。若存在For循環(huán)嵌套,使用Exit For語句只能跳出最內(nèi)層的循環(huán),繼續(xù)執(zhí)行外層循環(huán)。

當(dāng)For循環(huán)的循環(huán)體內(nèi)沒有任何具體語句時(shí),該循環(huán)部分可作為延時(shí)工具使用。

【例6.7】編寫程序,求1n(正整數(shù))的所有正整數(shù)之和。

(1) 分析。根據(jù)題意,n的值由用戶輸入。要求n個(gè)正整數(shù)的和,可看作n次加法操作,即加法操作被循環(huán)執(zhí)行n次,其中,n是循環(huán)變量,控制循環(huán)次數(shù)。

(2) 在窗體的單擊事件上編寫下面的事件過程。

Private Sub Form_Click()

     Dim s As Single,i As Integer

     n=Val(InputBox("請輸入n","提示"))

     s=0

     For i =1 To  n step 1

       s= s + i

     Next i

    Print  "1"; n; "之和為:"; s

End Sub

(3) 程序功能。運(yùn)行程序后,單擊窗體彈出一個(gè)輸入框由用戶輸入n的值,然后在窗體上顯示1nn個(gè)數(shù)的和。當(dāng)輸入100時(shí),運(yùn)行結(jié)果如圖6-7所示。

6.2.2  當(dāng)循環(huán)控制結(jié)構(gòu)

雖然在For…Next結(jié)構(gòu)中增加帶條件的Exit For語句,可以在循環(huán)次數(shù)不確定只給出循環(huán)結(jié)束條件的情況退出循環(huán)結(jié)構(gòu),但是在這種情況下,使用當(dāng)循環(huán)控制結(jié)構(gòu)會(huì)更方便,當(dāng)循環(huán)控制結(jié)構(gòu)采用While…Wend循環(huán)語句,其講法格式為:

While 條件

                           [循環(huán)體]

Wend

說明:

1.“條件”可以是關(guān)系表達(dá)式或邏輯表達(dá)式。While循環(huán)就是當(dāng)給定的“條件”為True時(shí),執(zhí)行循環(huán)體,為False時(shí)不執(zhí)行循環(huán)體。如果開始條件就不成立,則循環(huán)體一次也不執(zhí)行。因此While循環(huán)出可直接稱為當(dāng)型循環(huán)。

2. 循環(huán)結(jié)構(gòu)執(zhí)行過程如下:

(1) 執(zhí)行While語句,判斷條件是否為真。

(2) 如果條件為真,就執(zhí)行循環(huán)體;否則,轉(zhuǎn)到④執(zhí)行。

(3) 執(zhí)行Wend語句,轉(zhuǎn)到①執(zhí)行。

(4) 執(zhí)行Wend語句下面的語句。

(5) While循環(huán)語句本身不能修改循環(huán)條件,所以必須在While…Wend語句的循環(huán)體內(nèi)設(shè)置相應(yīng)的語句,使得整個(gè)循環(huán)趨于結(jié)束,以避免死循環(huán)。

【例6.8】用While循環(huán)語句計(jì)算1~100所有奇數(shù)的和。

Private Sub Command1_click()

   Dim i%, sum&

   i = 1

   While i <= 100

      sum = sum + i

      i = i + 2

   Wend

   Text1.Text = sum

End Sub

【例6.9】用While循環(huán)語句求n!n的值由用戶輸入。

Private Sub Command1_click()

   Dim fact&, n&, i%

   n = Val(Text1.Text)

   fact = 1

   i = 1

   While i <= n

     fact = fact * i

    i = i + 1

  Wend

  Text2.Text = fact

End Sub

在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。例如在求累加中循環(huán)結(jié)束的條件是i>100,因此在循環(huán)體中應(yīng)該有使i增值以最終能使i>100的語句,例中使用i=i+1語句來表達(dá)到此目的。如果無此語句,則i的值始終不改變,循環(huán)永不結(jié)束,構(gòu)成死循環(huán),程序正常結(jié)束。

6.2.3  Do 循環(huán)控制結(jié)構(gòu)

在已知循環(huán)次數(shù)的情況下,使用For…Next 語句完成循環(huán)比較方便,但如果循環(huán)次數(shù)未知,則要使用Do 循環(huán)控制結(jié)構(gòu)來實(shí)現(xiàn),該控制結(jié)構(gòu)采用Do…Loop循環(huán)語句。Do…Loop循環(huán)比較靈活,可以根據(jù)需要決定是條件滿足時(shí)執(zhí)行循環(huán)體,還是一直執(zhí)行循環(huán)體直到條件滿足。Do…Loop循環(huán)可以有兩種格式,既可以在初始位置判斷條件是否成立,也可以在執(zhí)行一輪循環(huán)體后再判斷條件是否成立,能否進(jìn)入下一輪循環(huán)。

Do…Loop循環(huán)的兩種格式如下:

1. 語法格式一:          Do

                                   <語句塊>

                                   [Exit  Do

                                   語句塊]

                              Loop { While|Until} <條件>

2. 語法格式二:          Do { While|Until }<條件>

                                          <語句塊>

                                          [Exit  Do

                                             語句塊]

                                          Loop

                   

上述兩種格式構(gòu)成了Do循環(huán)的兩種使用方法。這兩種格式既有共同點(diǎn)又有明顯的差異。上面2種格式有下面4種共同點(diǎn)。

(1) 均可以有一定的循環(huán)條件,但循環(huán)體部分為空。此種情況下,可以用于延時(shí)。

(2) 均可以在程序的執(zhí)行過程中用“Exit Do”語句退出循環(huán)。

(3) 均可以嵌套使用,而且可以互相嵌套。

(4) 均有兩種判斷條件的格式:一種為“While <條件>”,判斷時(shí)只要條件成立,則繼續(xù)執(zhí)行循環(huán)體,然后重復(fù)上述判斷過程;否則退出循環(huán)。另一種為“Until <條件>”,判斷時(shí)只要條件成立就退出循環(huán),否則繼續(xù)執(zhí)行循環(huán)體,然后重復(fù)判斷過程。

上述兩種格式有下面兩個(gè)不同點(diǎn)。

(1) 第一種格式中的判斷條件“WhileUntil條件”的位置在整個(gè)循環(huán)體的最后,而第二種格式中的判斷條件“WhileUntil 條件”的位置在整個(gè)循環(huán)體的起始位置。

(2) 第一種格式的執(zhí)行過程是先執(zhí)行一遍循環(huán)體,再進(jìn)行判斷;而第二種格式的執(zhí)行過程是先對條件進(jìn)行判斷,判斷為能夠執(zhí)行循環(huán)體時(shí),才能進(jìn)入循環(huán)體執(zhí)行相應(yīng)語句。所以第一種格式至少要執(zhí)行一次循環(huán)體,而第二種格式則可能根本不執(zhí)行循環(huán)體。

【例6.10】編程求兩自然數(shù)m、n的最大公約數(shù)。

(1) 分析??刹捎幂氜D(zhuǎn)相除法求得最大公約數(shù)。算法分析如下:

第一步 m除以n得到余數(shù)r

第二步 r=0,則n為要求的最大公約數(shù),算法結(jié)束;否則執(zhí)行第三步;

第三步 n賦值給m,r賦值給n,再轉(zhuǎn)到第一步執(zhí)行。

(2) 在窗體上創(chuàng)建文本框Text1Text2,用來供用戶輸入mn的值;創(chuàng)建命令按鈕Command1,并為Command1的單擊事件編寫下面過程。

Private Sub command1_Click()

  Dim m As Integer, n As Integer, r As Integer

  m = Val(Text1.Text)

  n = Val(Text2.Text)

  r = m Mod n

  Do Until  r = 0

         m = n

         n = r

         r = m Mod n

  Loop

  Print " 它們的最大公約數(shù)是";n

End Sub 

(3) 程序功能。執(zhí)行程序后,用戶在文本框Text1Text2中輸入mn的值,單擊Command1按鈕,在窗體上輸出mn的最大公約數(shù)。例如,分別輸入812時(shí),運(yùn)行結(jié)果如圖6-12所示。

【例6.11】編程。目前我國人口約為13億,按人口年增長0.8%計(jì)算,多少年后我國人口達(dá)到26億。

(1) 分析。由題目可知,每年人口增長率相同,即由前一年人口數(shù)量求下一年人口數(shù)量的公式相同,經(jīng)過若干年循環(huán),人口達(dá)到26億,由于循環(huán)次數(shù)未知,所以只能用DoLoop循環(huán)實(shí)現(xiàn)。x表示人口數(shù)量初值,n表示年數(shù)。

(2) 創(chuàng)建Command1按鈕,為Command1的單擊事件編寫下面的過程。

Private Sub Command1_Click()

  Fontsize=12

  x = 13

  n = 0

  Do While x < 26

   x = x * 1.008

   n = n + 1

 Loop

  Print n;"年后,我國人口將達(dá)到";x;""

End Sub

(3) 程序功能。運(yùn)行程序,在窗體上顯示所求結(jié)果,如圖6-13所示。

6.2.4  多重循環(huán)

多重循環(huán)又叫循環(huán)嵌套,如果在一個(gè)循環(huán)的循環(huán)體內(nèi)又包括一個(gè)完整的循環(huán)結(jié)構(gòu),則稱循環(huán)嵌套。嵌套可以繼續(xù)下去形成多個(gè)層次。循環(huán)嵌套一般最常見的達(dá)到二重,其次是三重,三重以上一般不常見。

若結(jié)構(gòu)A是一個(gè)循環(huán)結(jié)構(gòu),結(jié)構(gòu)BA的循環(huán)體,且B也一個(gè)完整的循環(huán)結(jié)構(gòu),則稱AB的外循環(huán),BA的內(nèi)循環(huán)。

多重循環(huán)的執(zhí)行機(jī)制是,外循環(huán)A每執(zhí)行一次,其內(nèi)循環(huán)B要執(zhí)行多次直到循環(huán)B結(jié)束;如此繼續(xù),直到最外層的循環(huán)執(zhí)行完畢,整個(gè)多重循環(huán)才結(jié)束。

多重循環(huán)既可以出現(xiàn)在For循環(huán)語句中,也可以出現(xiàn)在Do…Loop語句中。

【例6.12】輸出100以內(nèi)的所有素?cái)?shù)。

算法分析:

(1) 判斷某數(shù)m是否為素?cái)?shù)最簡單的方法是分別判斷m能否被i整除,i=23,m1。在判斷過程中,只要遇到一個(gè)i能整除m,就說明m不是素?cái)?shù),否則m是素?cái)?shù)。

(2) 100以內(nèi)的每個(gè)自然數(shù)進(jìn)行素?cái)?shù)的判斷,若是由輸出之。

(3) 上述步驟(1)用一個(gè)內(nèi)循環(huán)實(shí)現(xiàn),步驟②用一個(gè)外循環(huán)實(shí)現(xiàn)。

圖片框Picture1Click事件過程代碼如下:

  Private Sub Picture1_Click()

    Dim m%, i%, k%, count%

    count = 0

    For m = 101 To 200 Step 2         '外循環(huán)

      k = Sqr(m + 1)                 '1是為避免在求m時(shí)可能出現(xiàn)的誤差

      For i = 2 To k                  '內(nèi)循環(huán)

        If (m Mod i) = 0 Then Exit For

        'm能被i整除,表明該m不是素?cái)?shù),退出內(nèi)循環(huán)

        Next i

        If i >= k + 1 Then             'If是設(shè)計(jì)的輸出格式

        Picture1.Print m;

        count = count + 1

        If (count Mod 5) = 0 Then Picture1.Print

        End If

       Next m

       Label1.Caption = "100200之間的素?cái)?shù)共有" & count & "個(gè)。"

  End Sub

程序運(yùn)行結(jié)果如圖6-14所示。

 

    該程序是由兩層循環(huán)組成的循環(huán)嵌套結(jié)構(gòu),外層是自For m = 101 To 200 Step 開始到Next m 結(jié)束的語句,內(nèi)層是由For i =2 To k 開始到Next結(jié)束的語句。外循環(huán)的步長為2而不是1,目的是將偶數(shù)減去,減少循環(huán)次數(shù)。

內(nèi)層循環(huán)中If (m Mod i)=0 Then Exit For 語句的作用是一旦m能被i整除,強(qiáng)行結(jié)束內(nèi)循環(huán)。例如當(dāng)m=105時(shí),由于105能被3整除,所以內(nèi)層循環(huán)執(zhí)行到i=3就強(qiáng)行結(jié)束,不再執(zhí)行i=4, i=5……。

一般情況下,循環(huán)過程要從頭到尾地執(zhí)行,不能中途退出。在某些情況下,為了減少循環(huán)次數(shù)或便于程序調(diào)試,可能需要提前強(qiáng)制退出循環(huán)。VB為此提供了出口語句Exit

一般編程時(shí),多采用條件形式的出口語句:

If條件 Then Exit For

If條件 Then Exit Do

If條件 Then Exit Sub

If條件 Then Exit Function

使用出口語句除能減少循環(huán)次數(shù)結(jié)構(gòu)外,其意義還在于它顯式地標(biāo)出了循環(huán)的出口點(diǎn),這樣改善某些循環(huán)的可讀性,并易于代碼的編寫。

對于循環(huán)的嵌套,要注意下面事項(xiàng):

在多重循環(huán)結(jié)構(gòu)中,各層循環(huán)的循環(huán)控制變量不能同名。但并列循環(huán)的循環(huán)控制變量名可以相同,也可以不同。

外層循環(huán)必須完全包含內(nèi)層循環(huán),不能交叉。

小結(jié):

循環(huán)結(jié)構(gòu)是用來描述現(xiàn)實(shí)世界中循環(huán)現(xiàn)象的重要手段。所謂循環(huán)結(jié)構(gòu),表示在執(zhí)行語句時(shí),需要對其中的某些語句重復(fù)執(zhí)行多次,被重復(fù)執(zhí)行的語句塊稱為循環(huán)體。使用循環(huán)結(jié)構(gòu)避免不必要的操作,簡化程序結(jié)構(gòu),節(jié)省存儲(chǔ)空間。

常用的循環(huán)語句有ForNext循環(huán)語句和DoLoop循環(huán)語句兩種格式。無論何種類型的循環(huán)結(jié)構(gòu),循環(huán)體的執(zhí)行次數(shù)都由循環(huán)類型和條件決定,并且在某個(gè)時(shí)候得以終止循環(huán)。通常,循環(huán)結(jié)構(gòu)從現(xiàn)實(shí)事物中抽象出一個(gè)計(jì)數(shù)器變量,在計(jì)數(shù)器變量的取值范圍內(nèi),進(jìn)行循環(huán)操作。

作業(yè):

1、  列出所學(xué)的循環(huán)語句,試比較各種循環(huán)語句的功能。

2、如果知道循環(huán)次數(shù),應(yīng)選擇哪種循環(huán)語句?如果不知道循環(huán)次數(shù),應(yīng)選擇哪種循環(huán)語句?為什么?

3、循環(huán)結(jié)構(gòu)允許嵌套嗎?如果允許,在設(shè)計(jì)這種結(jié)構(gòu)時(shí)應(yīng)注意什么問題?

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多