For循环

✍ dations ◷ 2025-06-22 01:48:05 #For循环

for循环(英语:for loop)在计算机科学是一种编程语言的迭代陈述,能够让代码反复的执行。

它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或是循环变量。这使得for循环能够知道在迭代过程中的执行顺序。

C语言中传统的for-loop包含三个部分:初始化、条件、递增,这三个部分都是可有可无的。

for (INITIALIZATION; CONDITION; AFTERTHOUGHT) {    // Code for the for-loop's body goes here.}

初始化是宣告(或者赋值)任何需要的变量的动作。如果你要使用多个变量,则变量的种类要一致。条件的部分则是检查是否离开这个循环,也就是让代码往下执行。如果条件判断为假,则离开循环。递增在每跑一次循环都会重复执行一次。

for (int i=0; i<100; i++)   // Prints the numbers 0 to 99 (and not 100), each separated by a space.{    System.out.print(i);    System.out.print(' ');}System.out.println();

使用指针的for循环

这种形式的for循环是大多数其他for循环的变革:他允许除了数字以外的计数方式。他通常用隐含或外显指针的方式呈现,而在此循环变量会依序表示。以下是一个代表性的例子(语言:Python):

for item in some_iterable_object:    do Something    do Something Else

矩阵化for循环

有一些语言支持比较特别的for循环,如同它可以同时处理所有的指针in parallel,像是在FORTRAN 95中的for all语法。举例来说,在以下的for循环伪代码片段,当计算A(i)的新的值,除了第一个(也就是 i = 2),A(i - 1)的引用会得到新的值。然而,在for all 版本,每个计算都会使用一开始的值,不会更改 A.

for     i := 2 : N - 1 do A(i) :=  / 3; next i;for all i := 2 : N - 1 do A(i) :=  / 3;

和一般的for循环可能差距比较大。

以c语言为例:

for (;;)   printf("just keep going on!");

这个代码会不断的印出"just keep going on!"。

矩阵赋值:

for(int i=0;i<bound_of_matrix;i++)   matrix = i;

以上给予矩阵 matrix 依序从0到bound_of_matrix-1 的值。

就像巢穴一样,一层包覆一层,所以以下这个代码一共会执行(bound_of_x)乘上(bound_of_y)次。

for(int i=0;i<bound_of_x;i++)   for(int j=0;j<bound_of_y;j++)      matrix = j;

常见的错误

死循环

这里指的是无意产生的死循环,容易导致死机。

for (int i=0;i<10;i--)   printf("confused");

超出界限

编译器会显示out of bound,通常是指尝试取矩阵界限外的值。

循环内的变量在出循环之后,便无法使用。

主要缘起为许多需要重复执行的代码,而不一样的编程语言也会有不一样的语法型式。

在Fortran 的DO 循环 同等于for循环。Fortran的 DO 循环语法为:

         DO label counter = first, last, step         statements  label  statement

接下来的两个例子做出来的结果等同于其他语言的三个参数的for循环。其中变量COUNTER被初始化为1,以1递增,并且到5的时候停下。

   DO 9, COUNTER = 1, 5, 1     WRITE (6,8) COUNTER8    FORMAT( I2 )9  CONTINUE

Fortran 77 或之后的版本,也可能写成:

do counter = 1, 5  write(*, '(i2)') counterend do

如果递增为1,则递增的部分可以省略。例如:

* DO loop example.       PROGRAM MAIN         SUM SQ = 0         DO 199 I = 1, 9999999           IF (SUM SQ.GT.1000) GO TO 200199        SUM SQ = SUM SQ + I**2200      PRINT 206, SUMSQ206      FORMAT( I2 )       END

1958: Algol

Algol 在Algo158首次正式格式化。

COBOL在许多努力之下,在1959年终正式格式化。他使用PERFORM 动词,而PERFORM动词有很多功能,像是后来加上的"结构化"的语法,像是 END-PERFORM。忽略宣告和初始化变量的必要,类似for循环的语法为:

      PERFORM VARYING I FROM 1 BY 1 UNTIL I > 1000             ADD I**2 TO SUM-SQ.      END-PERFORM

如果PERFORM有TEST AFTER,这个循环的执行的结果会有点不同:循环内的程序会被执行至少一次。

BASIC 中的循环有时称为 for-next循环。

For I = 1 to 5; Print I;Next I

1964: PL/I

由IBM公司在1950年代发明的第三代高级编程语言, 有些类似PASCAL语言。

do counter = 1 to 5 by 1; /* "by 1" is the default if not specified */  /*statements*/;  end;

指令可以用来结束循环,像c语言的break,而则像continue。

Algol68 很类似现在的for语言了:

FOR i FROM 1 BY 2 TO 3 WHILE i≠4 DO ~ OD


for Counter := 1 to 5 do  (*statement*);

1972: C/C++

for (initialization; condition; increment/decrement)    statement

1972: Smalltalk

1980: Ada

for Counter in 1 .. 5 loop   -- statementsend loop;

1980: Maple

Maple有两种型式的for循环,一个是指针一定范围的值,另一个是指针一定大小的容器。第一种:


for  from  by  to  while  do    od;

第二种:

for  in  while  do    od;


他的for循环 { ... } for 初始化一个内部的变量, 并且执行到他不大于限制的值(若递增为负则以此类推)。

1 1 6 {STATEMENTS} for

1983: Ada 83 and above

procedure Main is  Sum_Sq : Integer := 0;begin  for I in 1 .. 9999999 loop     if Sum_Sq <= 1000 then      Sum_Sq := Sum_Sq + I**2    end if;  end loop;end;

1984: MATLAB

for i = 1:5      -- statementsend

1987: Perl

for ($counter = 1; $counter <= 5; $counter++) { # implictly or predefined variable  # statements;}for (my $counter = 1; $counter <= 5; $counter++) { # variable private to the loop  # statements;}for (1..5) { # variable impicitly called $_; 1..5 creates a list of these 5 elements  # statements;}statement for 1..5; # almost same (only 1 statement) with natural language orderfor my $counter (1..5) { # variable private to the loop  # statements;}


Do, {x, 0, 1, 0.1}]


For]

1989: Bash

*第一種for i in 1 2 3 4 5do    # must have at least one command in loop    echo $i  # just print value of idone
*第二種for (( i = 1; i <= 5; i++ ))do    # must have at least one command in loop    echo $i  # just print value of idone

1990: Haskell

forM_  $ indx -> do statements


如果你想要用更正式的方式存 的内容,一个比较官方的方式为:

import Control.Monad as MforLoopM_ :: Monad m => a -> (a -> Bool) -> (a -> a) -> (a -> m ()) -> m ()forLoopM_ indx prop incr f = do        f indx        M.when (prop next) $ forLoopM_ next prop incr f  where          next = incr indx

并且可以这样使用:

  forLoopM_ (0::Int) (< len) (+1) $ indx -> do -- whatever with the index

1991: Oberon-2, Oberon-07, or Component Pascal

FOR Counter := 1 TO 5 DO  (* statement sequence *)END

1991: Python

for counter in range(1, 6):  # range(1, 6) gives values from 1 to 5 inclusive (but not 6)  # statements

1993: AppleScript

repeat with i from 1 to 5	-- statements	log iend repeat

1993: Lua

for i = start, stop, interval do     -- statementsend

这个代码

for i = 1, 5, 2 do     print(i)end

即会印出:

1 3 5


for (int i = 0; i < 5; i++) {    //perform functions within the loop;    //can use the statement 'break;' to exit early;    //can use the statement 'continue;' to skip the current iteration}

1995: JavaScript

JavaScript 支持像是C语言的三个参数的循环,并且支持break和continue。

for (let i = 0; i < 5; i++) {    // ...}

1995: PHP

for ($i = 0; $i <= 5; $i++){  for ($j = 0; $j <= $i; $j++)  {    echo "*";  }  echo "<br>";}

1995: Ruby

for counter in 1..5  # statementsend5.times do |counter|  # counter iterates from 0 to 4  # statementsend1.upto(5) do |counter|  # statementsend

1996: OCaml

请参考

 (* for_statement := "for" ident '='  expr  ( "to" ∣  "downto" ) expr "do" expr "done" *)for i = 1 to 5 do    (* statements *)  done ;;for j = 5 downto 0 do    (* statements *)  done ;;

1998: ActionScript 3

for (var counter:uint = 1; counter <= 5; counter++){  //statement;}

参考文献

  1. ^ For loops in C++. . (原始内容存档于2016-03-05). 
  2. ^ PostScript Language Reference. Addison-Wesley Publishing Company. : 596. ISBN 0-201-37922-8. 
  3. ^ OCaml expression syntax. . (原始内容存档于2013-04-12). 

https://web.archive.org/web/20180906124543/http://terms.naer.edu.tw/detail/2337520/

相关