《Fortran程序设计第六章-循环结构上.ppt》由会员分享,可在线阅读,更多相关《Fortran程序设计第六章-循环结构上.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章 循环结构(上)6.1 6.1 引言引言6.2 6.2 无循环变量的无循环变量的DODO结构结构6.3 6.3 带循环变量的带循环变量的DODO结构结构6.4 DO WHILE6.4 DO WHILE结构结构6.1 6.1 引言引言 循环的定义循环的定义计算处理方法和处理过程完全一样,只是数值变化,计算处理方法和处理过程完全一样,只是数值变化,重复地运行某个语句块。这个语句体被重复执行的情重复地运行某个语句块。这个语句体被重复执行的情形,称为循环。形,称为循环。由于由于Fortran90中不提倡语句带有标号,也不提倡使中不提倡语句带有标号,也不提倡使用用Goto语句,因而排除了用语句,因
2、而排除了用IF语句和语句和goto语句构成循环语句构成循环的情况。这样在循环程序段中均由的情况。这样在循环程序段中均由Do结构实现,其结构实现,其Do结结构共有三种形式:构共有三种形式:1不带循环变量的不带循环变量的DO结构结构 2带循环变量的带循环变量的DO结构结构 3Do WHILE结构结构例例1:求:求S=1+2+3+N的值(的值(N由键盘输入由键盘输入N2)。)。INTEGER:S,N,IS=05READ(*,*)NIF(NN)THENS=S+I;I=I+1GOTO10ENDIFWRITE(*,*)S=,SEND此种循环此种循环fortran90不提倡使用。不提倡使用。例例2:读入某战
3、士打靶的成绩,计算其平均成绩。:读入某战士打靶的成绩,计算其平均成绩。INTERGER:S,MARK,IREAL:AVES=0DOI=1,10READ*,MARKS=S+MARKENDDOAVE=S/10.0WRITE(*,*)AVE=,AVEEND带循环变量的循环结构带循环变量的循环结构2循环结构组成。循环结构组成。循环体:需重复处理的语句序列;循环体:需重复处理的语句序列;循环控制机制:根据已知条件判断循环是否继续执行。循环控制机制:根据已知条件判断循环是否继续执行。3循环的分类:循环的分类:(1)循环次数未知)循环次数未知如例如例1所示所示(2)循环次数已知)循环次数已知如例如例2所示所
4、示6.2 不带循环变量的DO循环 1.无循环变量无循环变量DO结构的一般形式结构的一般形式结构名结构名:DO循环体循环体ENDDO结构名结构名其中其中方括号内的内容是可选的。方括号内的内容是可选的。DO语句为入口语句;语句为入口语句;ENDDO表示表示DO结构的出口;结构的出口;循环体可以是一条或多条简单可执行语句。循环体可以是一条或多条简单可执行语句。也可是也可是IF结构、结构、CASE结构或另一个结构或另一个DO结构。结构。DO READ*,X SUM=SUM+X PRINT*,SUMEND DO执行过程:执行过程:从从DO语句进入循环,执行读语句、累加、输出;然后遇到语句进入循环,执行读
5、语句、累加、输出;然后遇到ENDDO语句,然后返回循环体的第一条语句,继续执行循环体语句,语句,然后返回循环体的第一条语句,继续执行循环体语句,一直进行下去。一直进行下去。该该DO 结构是一个无休止的的循环,称为结构是一个无休止的的循环,称为死循环死循环 要终止该循环必须添加一个要终止该循环必须添加一个EXIT语句。语句。1.EXIT语句:语句:格式:格式:EXITDO结构名结构名作用:停止循环,将控制转移到当前循环或指定结构之外。作用:停止循环,将控制转移到当前循环或指定结构之外。单独使用将无条件终止循环,一般的用法是有条件的控单独使用将无条件终止循环,一般的用法是有条件的控制循环出口。格式
6、为:制循环出口。格式为:IF(逻辑表达式)(逻辑表达式)EXITDO结构名结构名功能:当条件为真时,停止正在进行的循环,将控制转移功能:当条件为真时,停止正在进行的循环,将控制转移到到EXIT后指定的结构之外,若没有指定结构名,则跳出后指定的结构之外,若没有指定结构名,则跳出当前循环。当前循环。EXIT语句语句应用举例应用举例例例 6-1 求求1+1/2+1/3+1/N的值。的值。例例6-2 求一批数中负数的个数及负数的总和。要求数据一求一批数中负数的个数及负数的总和。要求数据一个一个地由键盘输入,输入的数据为个一个地由键盘输入,输入的数据为0时终止循环。时终止循环。带循环变量DO结构的一般形
7、式DO结构名:结构名:DO,V=E1,E2,E3循环体循环体ENDDODO结构名结构名 V是循环控制变量,可以是整型或实型。E1是循环控制变量的初始值;E2是循环变量的终止值;E3是循环变量的增量。E1、E2、E3可以是整型、实型的常数、变量或表达式,当为表达式时,其中涉及的变量应具有具体的值。符号可正可负。6.3 带循环变量的带循环变量的DO结构结构执行过程执行过程(1)对表达式)对表达式E1,E2,E3分别求值。默认分别求值。默认E3的值为的值为1(2)令)令V变量被赋值为变量被赋值为E1。(3)测测试试循循环环次次数数R,若若R=0则则跳跳过过循循环环体体,转转去去执执行行终终端端语语句
8、句后后面面的的第第一一条条语语句句,若若R0,则则执执行行循循环环体体直直到循环终端语句。到循环终端语句。(4)执执行行终终端端语语句句后后,V增增加加一一个个步步长长E3,循循环环次次数数减减1,(5)返回(返回(3)重复执行()重复执行(3)()(4)(1)E2不允许为最大整数值不允许为最大整数值(2)E3不允许为零,否则循环不能终止不允许为零,否则循环不能终止注意:是判断一个注意:是判断一个DO语句是否成立的条件语句是否成立的条件(3)DO循环变量在循环体内不能再次定义循环变量在循环体内不能再次定义DOI=3,6I=5!错误!错误J=J+IENDDO(4)循循环环变变量量的的初初值值E1
9、、终终值值E2和和步步长长E3只只是是在在循循环环入入口口有有效效,进进入入循循环环后后,它它的的值值与与循循环环次次数无关。数无关。注意事项注意事项注意事项:注意事项:(5)在带循环变量)在带循环变量DO 结构中仍可使用结构中仍可使用EXIT语句。语句。(6)循环正常退出时,)循环正常退出时,V的值超过循环变量的终值。循环非的值超过循环变量的终值。循环非正常退出时,正常退出时,V保持当前值。保持当前值。(7)循环变量在循环体内不能被重新赋值,但是在循环体外)循环变量在循环体内不能被重新赋值,但是在循环体外则可被重新赋值。则可被重新赋值。(8)在)在DO结构中包含的结构中包含的IF结构和结构和
10、CASE结构等必须时完整结构等必须时完整的结构,不允许出现结构的交叉。的结构,不允许出现结构的交叉。(9)循环可以不经)循环可以不经END DO,但是不能从循环体外转入循环,但是不能从循环体外转入循环体内。体内。DO WHILE结构的一般形式:结构名:DO WHILE(逻辑表达式)循环体 END DO 结构名循环体DO WHILE判 定 条件ENDDO相当于 DO IF(.NOT.逻辑表达式)EXIT 循环体 END DO6.4 DO WHILE结构结构TFDO WHILE 执行过程执行过程嵌套嵌套DO结构的有关规定:结构的有关规定:1.各种各种DO结构都可以嵌套,但必须完整嵌套。结构都可以嵌
11、套,但必须完整嵌套。2.对于带循环变量的对于带循环变量的DO结构,并列的结构,并列的DO结构可以用同结构可以用同一个变量名作循环变量,而嵌套的一个变量名作循环变量,而嵌套的DO循环结构则不能使循环结构则不能使用相同的循环变量。用相同的循环变量。3.EXIT语句强行终止当前或指定循环。语句强行终止当前或指定循环。4.可从循环体内跳到循环外,但不能从循环体外跳到循环可从循环体内跳到循环外,但不能从循环体外跳到循环体内。体内。程序举例程序举例补充:循环控制的设计方法:补充:循环控制的设计方法:1关键:找出循环体关键:找出循环体a)求累加和求累加和S=S+Tb)求连乘积求连乘积T=T*Nc)求求XNT
12、=T*Xd)求连加的循环次数求连加的循环次数S=S+1e)其他其他S=S+AA=2确定循环的初值确定循环的初值a)求累加和求累加和初值为初值为0或所给数据的第一项或所给数据的第一项b)求连乘积求连乘积初值为初值为1或所给数据的第一项或所给数据的第一项c)求最大值求最大值初值为所给数据的第一项或足够小的量初值为所给数据的第一项或足够小的量d)求最小值求最小值初值为所给数据的第一项或足够大的量初值为所给数据的第一项或足够大的量注意:赋值语句的位置注意:赋值语句的位置3循环次数的选定循环次数的选定a)已知累加计算的项数已知累加计算的项数Nb)未未知知计计算算项项数数N,当当通通项项值值小小于于一一个
13、个值值时时停停止止,可可取取N为一个足够大的值。为一个足够大的值。1累加和计算累加和计算例例1:求:求S=2+4+6+200的值的值S=0DON=1,100S=S+2*NEnddoPRINT*,SEND累加和:累加和:S新新=S原原+通项通项2被加数不能直接用表达式表示被加数不能直接用表达式表示例2:求重复:A=A*X/N注意:分母不能为零!3一批数据的处理一批数据的处理顺序查找法顺序查找法例:从例:从11000的正整数中,所有的正整数中,所有3的倍数之和及个数。的倍数之和及个数。算法:顺序查找算法:顺序查找程序:程序:S=0N=0DOI=1,1000IF(MOD(I,3)=0)THENS=S
14、+IN=N+1ENDIFENDDOPRINT*,S,NEND4嵌套循环嵌套循环例例:全全校校30个个班班,每每班班50个个学学生生,每每学学生生三三门门课课程程,要要求求统统计计并并打打印印出出每每个个班班的的平平均均成成绩绩和和全全校校总总(平平均均)成绩成绩ST=0.0A1:DOI=1,30S=0A2:DOJ=1,50READ(*,*)A1,A2,A3B=A1+A2+A3S=S+BENDDOA2A=S/50PRINT*,I,AST=ST+SENDDOA1SA=ST/(50*30)PRINT*,SAEND5穷举法穷举法例:一个口袋中有白球例:一个口袋中有白球3只,红球只,红球3只,黑球只,黑
15、球6只,只,任取任取8只,有多少种取法?只,有多少种取法?INTEGER:X,Y,ZN=0X:DOX=0,3Y:DOY=0,3Z:DOZ=0,6IF(X+Y+Z)=8)N=N+1ENDDOZENDDOYENDDOXPRINT*,NEND练习:求以下公式的值:练习:求以下公式的值:当最后一项绝对值小于当最后一项绝对值小于1010时停止。时停止。例:输入例:输入M、N,求最大公约数。,求最大公约数。程序:程序:INTEGERR,TREAD*,M,NIF()()THENT=M;M=N;N=TENDIF10R=MOD(M,N)IF()()THENM=N;N=R;GOTO10ENDIFPRINT*,NE
16、ND请改写为请改写为DO循环结构循环结构练习:练习:1、输入、输入M、N,求最小公倍数。,求最小公倍数。2、求数列、求数列1,1,2,3,5,8的前的前30项。项。(重复:(重复:FN=FN-1+FN-2)DO的非整型增值的非整型增值例例7:打印出所有的:打印出所有的“水仙花数水仙花数”。所谓。所谓“水仙水仙花数花数”是指一个是指一个3位数,其各位数字的立方和等位数,其各位数字的立方和等于该数本身。例如,于该数本身。例如,153是一个是一个“水仙花数水仙花数”,因为因为153=13+53+33integer:i,j,k,ndon=100,999i=n/100j=n/10-i*10k=mod(n,10)if(n=i*i*i+j*j*j+k*k*k)print*,nenddoendQUESTION?27