族谱网 头条 人物百科

For循环

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:572
转发:0
评论:0
for循环的种类传统的for循环for-loopsC语言中传统的for-loop包含三个部分:初始化、条件、递增,这三个部分都是可有可无的。for(INITIALIZATION;CONDITION;AFTERTHOUGHT){//Codeforthefor-loop"sbodygoeshere.}初始化是宣告(或者赋值)任何需要的变数的动作。如果你要使用多个变数,则变数的种类要一致。条件的部分则是检查是否离开这个循环,也就是让程式码往下执行。如果条件判断为假,则离开循环。递增在每跑一次循环都会重复执行一次。在此以Java为例:for(inti=0;i<100;i++)//Printsthenumbers0to99(andnot100),eachseparatedbyaspace.{System.out.print(i);System.out.print("");}System.out.pr...

for 循环的种类

传统的 for 循环 for-loops

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

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

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

for(inti=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):

foriteminsome_iterable_object:doSomethingdoSomethingElse

矩阵化for循环

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

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

应用范例

以c语言为例:

作为死循环

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

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

配合矩阵

矩阵赋值:

for(inti=0;i<bound_of_matrix;i++)matrix[i]=i;

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

巢状循环

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

for(inti=0;i<bound_of_x;i++)for(intj=0;j<bound_of_y;j++)matrix[i][j]=j;

常见的错误

死循环

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

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

超出界线

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

循环内的变数

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

不同语言的For循环

BASH

for((i=1; i <=5; i++ ))doecho$i# just print value of idone

C语言

for(counter=1;counter<=5;counter++)//statement;

C++语言

1 for(i=0;i<3;i++)

FORTRAN

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

JAVA

for(inti=0;i<5;i++){//循环语句;}

Lua

fori=1,5,2doprint(i)end

PHP

for($i=0;$i<5;$i++){# statements;}

VB

Fori=1To5===PASCAL===fornoti=1dobegini=0;writeln("Go on!");end."循环语句Nexti

C / C++ / Java / C#代码:

intj=5,x=0;for(inti=1;i<=j;++i){++x;j=1;}// x的值为1

VB代码:

DimjAsInteger=5,xAsInteger=0Fori=1tojx=x+1j=1Nexti" x的值为5

发展概论

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

1957: FORTRAN

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

DO labelcounter=first,last,stepstatementslabelstatement

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

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

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

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

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

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

1958: Algol

Algol在Algo158首次正式格式化。

1960: COBOL

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

PERFORMVARYINGIFROM1 BY1 UNTILI>1000ADDI**2 TOSUM-SQ.END-PERFORM

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

1964: BASIC

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

ForI=1to5;PrintI;NextI

1964: PL/I

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

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

1968: Algol 68

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

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

1970: Pascal

forCounter:=1to5do(*statement*);

1972: C/C++

更多资料:C syntax#Iteration statements

for(initialization;condition;increment/decrement)statement

1972: Smalltalk

1980: Ada

forCounterin1..5loop-- statementsendloop;

1980: Maple

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

第二种:

1982: PostScript

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

116{STATEMENTS}for

1983: Ada 83 and above

procedureMainisSum_Sq:Integer:=0;beginforIin1..9999999loopifSum_Sq<=1000thenSum_Sq:=Sum_Sq+I**2endif;endloop;end;

1984: MATLAB

fori=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;}statementfor1..5;# almost same (only 1 statement) with natural language orderformy$counter(1..5){# variable private to the loop# statements;}

1988: Mathematica

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

For[x=0,x<=1,x+=0.1,f[x]]

1989: Bash

*第一種 for i in 12345do# must have at least one command in loopecho$i# just print value of idone

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

1990: Haskell

forM_[1..5]$\indx->dostatements

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

importControl.MonadasMforLoopM_::Monadm=>a->(a->Bool)->(a->a)->(a->m())->m()forLoopM_indxpropincrf=dofindxM.when(propnext)$forLoopM_nextpropincrfwherenext=incrindx

并且可以这样使用:

forLoopM_(0::Int)(do-- whatever with the index

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

FORCounter:=1TO5DO(* statement sequence *)END

1991: Python

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

1993: AppleScript

repeatwithifrom1to5-- statementslogiendrepeat

1993: Lua

fori=start,stop,intervaldo-- statementsend

这个程式码

fori=1,5,2doprint(i)end

即会印出:

135

1995: Java

for(inti=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(vari=0;i<5;i++){// ...}

1995: PHP

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

1995: Ruby

forcounterin1..5# statementsend5.timesdo|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" *)fori=1to5do(* statements *)done;;forj=5downto0do(* statements *)done;;

1998: ActionScript 3

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

相关条目

Foreach循环


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 氮循环
基本概念空气中含有大约78%的氮气,占有绝大部分的氮元素。氮是许多生物过程的基本元素;它存在于所有组成蛋白质的氨基酸中,是构成诸如DNA等的核酸的四种基本元素之一。在植物中,大量的氮素被用于制造可进行光合作用供植物生长的叶绿素分子。加工,或者固定,是将气态的游离态氮转变为可被有机体吸收的化合态氮的必经过程。一部分氮素由闪电所固定,同时绝大部分的氮素被非共生或共生的固氮细菌所固定。这些细菌拥有可促进氮气氢化成为氨的固氮酶,生成的氨再被这种细菌通过一系列的转化以形成自身组织的一部分。某一些固氮细菌,例如根瘤菌,寄生在豆科植物(例如豌豆或蚕豆)的根瘤中。这些细菌和植物建立了一种互利共生的关系,为植物生产氨以换取糖类。因此可通过栽种豆科植物使氮素贫瘠的土地变得肥沃。还有一些其它的植物可供建立这种共生关系。其它植物利用根系从土壤中吸收硝酸根离子或铵离子以获取氮素。动物体内的所有氮素则均由在食物链中进...
· while循环
程式范例C/C++unsignedintcounter=5;unsignedlongfactorial=1;while(counter>0){factorial*=counter--;/*当满足循环条件(本例为:counter>0)时会反复执行该条语句*/}printf("%lu",factorial);VB"这是一个用While循环的例子dimcounterasIntegerdimTickasIntegercounter=5tick=1Print"Start"whilecounter>0counter=counter-tick"循环语句WendPrint"End"
· 水循环
形容水循环指水在一个既没有起点亦没有终点的循环中不断移动或改变存在的模式。当水在地球中移动时,将会在气态、固态和液态,三个状态中不断转变。水由一个地方移动至另一个地方所需的时间可以秒作单位,亦可以是数以千年计。而地球中的总水量约为1.37X10km,其中以包含海洋的含水量。而尽管水在水循环中不断改变,但地球的含水量基本不变。水会透过各种物理变化或生物物理变化而达成移动。而蒸馏和降水在整个水循环中担当一个非常重要的角色,这两个过程于每年令505,000km的水产生移动。它们亦令地球中大部分水产生移动。河流所带动的水流只属于中等,而由冰直接升华至水蒸气更是非常少。以下会列出一些涉及水循环的过程:降水:一些空中凝结的水从空中坠下至地面或海面,而下雨则成为最常见的降水现象。当然落雪、落冰雹、雾、雪丸和雪雨也是降水的现象之一。而每年大约有505,000km透过降水,这个现象返回陆地或海洋。当中有39...
· 循环系统
分类以动画方式说明典型的人体红血球循环系统。此动画是在实际的测量时间(20秒一个周期)下不但呈现出红血球在进入微血管后产生变形,而且沿着循环系统的氧化更迭状态也改变了颜色。无循环系统一个没有循环系统的动物的例子是扁形虫(扁形动物门)。它们的体腔没有内层或流动性。它们有一个口直通错综复杂的消化系统。因为这种虫子太扁平了,消化的物质可以扩散到所有的细胞中。氧气可以从水中扩散到扁形虫的细胞中。因此无需循环系统,每一个细胞也能获得营养、水和氧气。细菌和原核生物也没有循环系统。开管式循环系统淋巴系统是开放的循环系统,淋巴主要由水、无机盐(主要是Na+、Cl-、K+、Mg2+和Ca2+)和有机化合物(主要是碳水化合物、蛋白质和脂类)组成。氧气主要由血红蛋白运输。它们是自由漂浮的细胞,也是血细胞,在血淋巴中。他们在节肢动物的免疫系统中发挥作用。闭锁式循环系统循环系统主要由心脏、血液和血管组成。所有脊椎动...
· 三羧酸循环
发现汉斯·阿道夫·克雷布斯像1930年代,柠檬酸循环中的一些化学反应就已由阿尔伯特·圣捷尔吉阐明。阿尔伯特·圣捷尔吉因他对柠檬酸循环中的一个重要中间体延胡索酸的研究,而获得1937年诺贝尔生理学或医学奖。柠檬酸循环本身则是由德国生物化学家汉斯·阿道夫·克雷布斯在1937年于锡菲大学发现的。他因对柠檬酸循环的研究而获得1953年诺贝尔生理医学奖。进化构成柠檬酸循环的一些化学反应在厌氧细菌中就已出现了。柠檬酸循环本身则可能经过多次进化。从理论上说,柠檬酸循环并不是没有相关的替代方案。然而,柠檬酸循环的效率却是最高的。即使存在进化上独立的能替代柠檬酸循环的过程,它们也应该已通过趋同演化而与柠檬酸循环融合。在有氧呼吸中的位置糖类在细胞质基质中发生糖酵解后,生成的终产物是丙酮酸。丙酮酸通过线粒体外膜上的通道蛋白,再通过线粒体内膜上的丙酮酸转位酶进入线粒体基质。之后,丙酮酸经丙酮酸脱氢酶复合体氧化,转...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信