Youjizz

7 Bondagebrunette.com Fi Registered Apply Bondage Brunette 程式迴圈 - 维基百科,自由的百科全书

7 Bondagebrunette.com Fi Registered Apply Bondage Brunette

search Bondagebrunette.com Bondagebrunette.com Bondagebrunette.com Registered
  • 6 Registered searchsearch Bondagebrunette.com Bondagebrunette.com search Apply Apply Registered Apply searchp Bondagebrunette.com l Apply
  • 7 迴圈的特殊指令
  • 8 迴圈變式及迴圈不變式
  • 9 不同語言的迴圈比較表
  • 10 參考資料
  • 指定執行次數的迴圈(for loop)[编辑]

    主条目:For迴圈
    参见:迴圈计数器

    大部份程式語言都提供迴圈的指令,可以依指定的次數重覆執行一段程式。

    若指定的次數N小於1,程式語言會忽略整個迴圈不去執行,若指定的次數N為1,則迴圈只會執行一次。

    在迴圈進行時,迴圈计数器也會隨著變化,大部份的程式語言可以允許迴圈计数器上數或是下數,每次的變化量可以是1或是其他不為0的數值。

      FOR I = 1 TO N for I := 1 to N do begin
      xxx xxx
      NEXT I end;
    
      DO I = 1,N for ( I=1; I<=N; ++I ) {}
    

    在許多程式語言中,迴圈计数器要使用整數才能得到準確的結果。由於硬體的限制,在迴圈计数器使用浮點數時,結果可能會不符預期,如以下的迴圈

      for X := 0.1 step 0.1 to 1.0 do

    依其四捨五入的誤差、硬體及編譯器的差異,不一定會執行10次,可能只會執行9次。而且X的數值可能會有些誤差,不是預期的0.1, 0.2, 0.3, ..., 1.0。

    指定條件的迴圈(while loop/doWhile loop)[编辑]

    主条目:While迴圈
    参见:Do-while迴圈

    大多數的程式語言都有指令,可以在特定條件成立時繼續迴圈的進行,或是特定條件不成立時繼續迴圈的進行,進行到特定條件成立為止。前者一般會標示while,後者一般會標示until。

    其判斷條件可能在迴圈一開始就進行,或是在迴圈最後才進行。前者的迴圈不一定會執行,而後者1的迴圈至少會執行一次。

      DO WHILE (test) repeat 
      xxx xxx 
      LOOP  until test;
    
      while (test) {}  while (test);
    

    指定集合的迴圈[编辑]

    主条目:Foreach循环

    許多程式語言支援一種特別的迴圈,可以針對一個陣列中的元素或是一個集合中的所有成員進行迴圈中的指令,包括AdaD語言SmalltalkPerlJavaC#Visual BasicRubyPythonJavaScriptFortran 95等程式語言都有這類的迴圈結構:

      someCollection do: [:eachElement |xxx].
    
      foreach (item; myCollection) {}
    
      foreach someArray {}
    
      Collection<String> coll; for (String s : coll) {}
    
      foreach (string s in myStringCollection) {}
    
      $someCollection | ForEach-Object {}
      
      forall ( index = first:last:step... )
    

    泛用迴圈結構[编辑]

    有些程式語言有泛用迴圈結構,可以用來表示指定次數或指定條件的迴圈,像C語言的for指令或是Common Lisp語言中的do指令都是這類的例子,不過為了程式的可讀性考量,在這些程式語言中還是儘量使用一些含義較明確的指令(如while指令)。

    無窮迴圈[编辑]

    無窮迴圈一般會用在有一段程式需要永遠執行,或是該程式在沒有發生特殊事件(如故障)時需要永遠執行的場合,例如一個事件驅動的程式需要持續執行迴圈,處理發生的事件,直到使用者結束或中斷程式為止。

    若在指定條件的迴圈中,其判斷條件用到的變數數值永遠不會改變,這種程式錯誤也會使得此迴圈變成無窮迴圈。

    提早結束整個迴圈[编辑]

    當使用指定次數的迴圈查表時,會希望在查到需要的資料時就可以直接結束迴圈的進行,有些程式語言可以用breakexit的指令達到這様的功能,這些指令會結束這個迴圈,接著會執行迴圈後面的指令。若此迴圈在副程式中,也可以用return中斷迴圈的進行, 同時離開副程式。

    以下是Ada程式語言的一個範例,利用exit ... when...的方式中提早結束迴圈。

    with Ada.Text IO;
    with Ada.Integer Text IO;
     
    procedure Print_Squares is 
     X : Integer;
    begin
     Read_Data : loop
     Ada.Integer Text IO.Get(X);
     exit Read_Data when X = 0;
     Ada.Text IO.Put (X * X);
     Ada.Text IO.New_Line;
     end loop Read_Data;
    end Print_Squares;
    

    Python支援一個特別的條件判斷式,可以根據最近使用迴圈是否曾用break提早結束而做不同的處理,舉例如下:

    for n in set_of_numbers:
     if isprime(n):
     print "Set contains a prime number"
     break
    else:
     print "Set did not contain any prime numbers"
    

    上例中的else子句是for迴圈的一部份,不是內層if區塊的一部份。Python語言的for迴圈及while 迴圈都支援else子句,當迴圈沒有用break提早結束時就會執行。

    迴圈的特殊指令[编辑]

    有時在使用迴圈的程式中會希望在特定情形下跳過目前迴圈區塊的指令,回到迴圈開始執行下一個迴圈,一般這類的指令會命名為continueskipnext,其效果是提早結束這次迴圈的進行,繼續進行下一個迴圈,若此迴圈已經是最後一次執行,這類指令會結束迴圈的進行,繼續進行後續的指令。

    像Perl及Ruby等程式語言有redo指令,可以重新執行目前的迴圈,若在指定次數的迴圈中,其迴圈計數器的數值不會變化。Ruby程式語言有retry指令,可以讓迴圈計數器回到初值,重新執行整個迴圈。

    迴圈變式及迴圈不變式[编辑]

    迴圈變式Loop variant)及 迴圈不變式Loop invariant)是判斷迴圈正確性的工具[1]

    迴圈變式是一個初值不為負的整數表示式,在每次執行迴圈時迴圈變式的數值需減少,但在正常的迴圈執行過程中迴圈變式的數值不會變成負值。迴圈變式用來確保迴圈會結束。

    迴圈不變式是一個和迴圈有關的判斷式,在第一次進入迴圈之前,迴圈不變式的值需為真,在後續每一次執行迴圈時,其值也要為真。當迴圈正確的結束時,其終止條件和迴圈不變式都會成立。迴圈不變式可用來監控在迴圈進行時,某一指定性質的狀態。

    像是Eiffel之類的程式語言本身就有支援迴圈變式及迴圈不變式,其他語言可能需要有附加元件才能支持此功能,例如Java就需要配合Java建模語言Java Modeling Language)規範的loop statements才能支持此機能。

    不同語言的迴圈比較表[编辑]

    程式語言 條件判斷式 迴圈 early exit continuation redo retry 正確性判斷機制
    迴圈啟始 迴圈中間 迴圈結尾 指定次數 指定集合 泛用 無窮[1] 迴圈變式 迴圈不變式
    Ada 1 1 1 1 只針對陣列 0 1 1多層迴圈 0
    C 1 0 1 0[2] 0 1 z7 Bondagebrunette.com Fi Registered Apply Bondage Brunette 程式迴圈 - 维基百科,自由的百科全书t x Porn c7 Bondagebrunette.com Fi Registered Apply Bondage Brunette 程式迴圈 - 维基百科,自由的百科全书a Beegxxx