For循环
✍ dations ◷ 2025-11-09 18:45:09 #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++
更多信息:C syntax § Iteration statements
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} for1983: 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;}参考文献
- ^ For loops in C++. . (原始内容存档于2016-03-05).
- ^ PostScript Language Reference. Addison-Wesley Publishing Company. : 596. ISBN 0-201-37922-8.
- ^ OCaml expression syntax. . (原始内容存档于2013-04-12).
https://web.archive.org/web/20180906124543/http://terms.naer.edu.tw/detail/2337520/
相关
- 低钙血症低钙血症或低血钙症(Hypocalcaemia)系指血清中的钙离子浓度过低的状况,正常比例为 2.1 至 2.6 mmol/L(约为 8.8 到 10.7mg/dl,4.3 到 5.2 mEq/L),如果低于 2.1 mmol/L,就会认定为低
- 康斯坦丁康斯坦丁影业股份有限公司,简称康斯坦丁影业股份,以及康斯坦丁影业(德语:Constantin Film AG),于1950年,由影坛大亨沃伦弗尔.巴雷德尔(德语:Waldfried Barthel)和柏贝.菲列逊(德语:Preben
- 拉贾卡萨布兰卡拉贾卡萨布兰卡(英语: Raja Casablanca 或 Raja Club Athletic (RCA);阿拉伯语: الرجاء البيضاوي الرياضي; 拉丁文转换: ar-Raja' al-Baydawy ar-Riy
- 陈薇安陈薇安(Chen Wei-an,1995年11月1日-)为台湾女子篮球运动员,目前效力于国泰人寿,主要位置为锋线摇摆人。母亲陈贞敏也是前篮球运动员。
- 莫拉古迪莫拉古迪(Moragudi),是印度安得拉邦Cuddapah县的一个城镇。总人口5961(2001年)。该地2001年总人口5961人,其中男性2967人,女性2994人;0—6岁人口703人,其中男370人,女333人;识字率54.89
- 傅惟慈傅惟慈(1923年-2014年3月16日),中国翻译家。生于哈尔滨,逝于北京。1950年毕业于北京大学西方语言文学系,1987年退休,退休前执教于北京大学、北京语言文化大学等高校(其中1950—1952
- 陈怡霓陈怡霓(1956年10月-),广东普宁人。女,汉族。1984年7月参加工作,2001年1月加入致公党。暨南大学医学院医疗系毕业,英国伯明翰大学实验医学专业毕业。2006年11月,任致公党广州市委主任
- 霍希夔霍希夔(1534年-?年),字虞卿,山西平阳府临汾县人,大同府应州军籍,明朝政治人物。隆庆二年(1568年)戊辰科第三甲第三百二十一名进士。官至主事。
- 成田翔成田翔(日语:成田 翔/なりた かける ,1998年2月3日-)是一名出身于日本秋田县秋田市的棒球选手,司职投手,目前效力于日本职棒千叶罗德海洋。71 吉井理人 | 72 的场直树 | 77 今冈真
- 卡莫罗战役1919年 – 别廖扎 – 平斯克 – 利达 – – – 第一次别列津纳河 – 陶格夫匹尔斯1920年雷提契夫 – 莫济里 – 克罗斯坦 – 柯济亚廷 – 第二次别列津纳河 – 基辅 – 沃罗达卡 – 葛烈波基 – 米尔诺夫卡 – 奥斯赞尼卡 – 济沃陶 – 米德维杜卡 – 杜如库夫 – 瓦西考夫 – 比斯垂克 – 第一次布列斯特 – 第一次格罗德诺 – 第一次尼门河 – 柏利斯皮尔 – 奥图阿河 – 都布诺 – 科布因 – 洛姆查 – 勃狄 – 德彼林 – 那谢斯克 – 瑟罗克 – 雷兹明 –