
Fortran程序设计第六章循环结构上.ppt
27页第六章 循环结构(上)§§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语句,因而排除了用语句,因而排除了用IF语句和语句和goto语句构成循环语句构成循环的情况这样在循环程序段中均由的情况这样在循环程序段中均由Do结构实现,其结构实现,其Do结结构共有三种形式:构共有三种形式: 1.不带循环变量的.不带循环变量的DO结构结构 2.带循环变量的.带循环变量的DO结构结构 3..Do WHILE结构结构例例1:求:求S=1+2+3+…+N的值(的值(N由键盘输入由键盘输入N>2)。
INTEGER:: S,,N,,I S=05 READ ((*,,*))NIF((N<=2))GOTO 5I=110IF((I>N))THEN S=S+I;I=I+1 GOTO 10 ENDIFWRITE((*,,*))‘S=‘,,SEND此种循环此种循环fortran90不提倡使用不提倡使用例例2:读入某战士打靶的成绩,计算其平均成绩读入某战士打靶的成绩,计算其平均成绩 INTERGER:: S,,MARK,,IREAL::AVES=0DO I=1,,10 READ *,,MARK S=S+MARKEND DOAVE=S/10.0WRITE((*,,*))‘AVE=‘,,AVEEND 带循环变量的循环结构带循环变量的循环结构2.循环结构组成.循环结构组成循环体:需重复处理的语句序列;循环体:需重复处理的语句序列;循环控制机制:根据已知条件判断循环是否继续执行循环控制机制:根据已知条件判断循环是否继续执行3.循环的分类:.循环的分类:((1)循环次数未知)循环次数未知 如例如例1所示所示((2)循环次数已知)循环次数已知 如例如例2所示所示 6.2 不带循环变量的DO循环 1. 无循环变量无循环变量DO结构的一般形式结构的一般形式[结构名结构名:] DO 循环体循环体 END DO [结构名结构名]其中其中 方括号内的内容是可选的。
方括号内的内容是可选的 DO语句为入口语句;语句为入口语句; END DO表示表示DO结构的出口;结构的出口; 循环体可以是一条或多条简单可执行语句循环体可以是一条或多条简单可执行语句 也可是也可是IF结构、结构、CASE结构或另一个结构或另一个DO结构DO READ *,,X SUM=SUM+X PRINT *,,SUMEND DO执行过程:执行过程: 从从DO语句进入循环,执行读语句、累加、输出;然后遇到语句进入循环,执行读语句、累加、输出;然后遇到ENDDO语句,然后返回循环体的第一条语句,继续执行循环体语句,语句,然后返回循环体的第一条语句,继续执行循环体语句,一直进行下去一直进行下去 该该DO 结构是一个无休止的的循环,称为结构是一个无休止的的循环,称为死循环死循环 要终止该循环必须添加一个要终止该循环必须添加一个EXIT语句1.EXIT语句:语句: 格式:格式:EXIT [DO 结构名结构名] 作用:停止循环,将控制转移到当前循环或指定结构之外作用:停止循环,将控制转移到当前循环或指定结构之外。
单独使用将无条件终止循环,一般的用法是有条件的控单独使用将无条件终止循环,一般的用法是有条件的控制循环出口格式为:制循环出口格式为: IF(逻辑表达式)(逻辑表达式)EXIT [DO 结构名结构名] 功能:当条件为真时,停止正在进行的循环,将控制转移功能:当条件为真时,停止正在进行的循环,将控制转移到到EXIT后指定的结构之外,若没有指定结构名,则跳出后指定的结构之外,若没有指定结构名,则跳出当前循环当前循环EXIT语句语句应用举例应用举例例例 6-1 求求1+1/2+1/3+……+1/N的值例例6-2 求一批数中负数的个数及负数的总和要求数据一求一批数中负数的个数及负数的总和要求数据一个一个地由键盘输入,输入的数据为个一个地由键盘输入,输入的数据为0时终止循环时终止循环带循环变量DO结构的一般形式[DO结构名:结构名:] DO, V=E1,,E2[,,E3] 循环体循环体 END DO [DO结构名结构名] V是循环控制变量,可以是整型或实型 E1是循环控制变量的初始值;E2是循环变量的终止值;E3是循环变量的增量。
E1、E2、E3可以是整型、实型的常数、变量或表达式,当为表达式时,其中涉及的变量应具有具体的值符号可正可负6.3 带循环变量的带循环变量的DO结构结构执行过程执行过程 ((1)对表达式)对表达式E1,,E2,,E3分别求值默认分别求值默认E3的值为的值为1((2)令)令V变量被赋值为变量被赋值为E13)) 测测试试循循环环次次数数R,,若若R=0则则跳跳过过循循环环体体,,转转去去执执行行终终端端语语句句后后面面的的第第一一条条语语句句,,若若R>0,,则则执执行行循循环环体体直直到循环终端语句到循环终端语句4)) 执执行行终终端端语语句句后后,,V增增加加一一个个步步长长E3,,循循环环次次数数减减1,,((5)) 返回(返回(3)重复执行()重复执行(3)()(4))((1))E2不允许为最大整数值不允许为最大整数值((2))E3不允许为零,否则循环不能终止不允许为零,否则循环不能终止 注意:是判断一个注意:是判断一个DO语句是否成立的条件语句是否成立的条件((3))DO循环变量在循环体内不能再次定义循环变量在循环体内不能再次定义 DO I=3,,6 I=5 !!错误!!错误 J=J+I ENDDO ((4))循循环环变变量量的的初初值值E1、、终终值值E2和和步步长长E3只只是是在在循循环环入入口口有有效效,,进进入入循循环环后后,,它它的的值值与与循循环环次次数无关。
数无关 注意事项注意事项注意事项:注意事项:((5)在带循环变量)在带循环变量DO 结构中仍可使用结构中仍可使用EXIT语句6)循环正常退出时,)循环正常退出时,V的值超过循环变量的终值循环非的值超过循环变量的终值循环非正常退出时,正常退出时,V保持当前值保持当前值7)循环变量在循环体内不能被重新赋值,但是在循环体外)循环变量在循环体内不能被重新赋值,但是在循环体外则可被重新赋值则可被重新赋值8)在)在DO结构中包含的结构中包含的IF结构和结构和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结构都可以嵌套,但必须完整嵌套。
结构都可以嵌套,但必须完整嵌套2.对于带循环变量的对于带循环变量的DO结构,并列的结构,并列的DO结构可以用同结构可以用同一个变量名作循环变量,而嵌套的一个变量名作循环变量,而嵌套的DO循环结构则不能使循环结构则不能使用相同的循环变量用相同的循环变量3.EXIT语句强行终止当前或指定循环语句强行终止当前或指定循环4.可从循环体内跳到循环外,但不能从循环体外跳到循环可从循环体内跳到循环外,但不能从循环体外跳到循环体内程序举例程序举例补充:循环控制的设计方法:补充:循环控制的设计方法:1.. 关键:找出循环体关键:找出循环体a) 求累加和求累加和S=S+Tb) 求连乘积求连乘积T=T*Nc) 求求XNT=T*Xd) 求连加的循环次数求连加的循环次数S=S+1e) 其他其他S=S+A A=…2.. 确定循环的初值确定循环的初值a) 求累加和求累加和初值为初值为0或所给数据的第一项或所给数据的第一项b) 求连乘积求连乘积初值为初值为1或所给数据的第一项或所给数据的第一项c) 求最大值求最大值初值为所给数据的第一项或足够小的量初值为所给数据的第一项或足够小的量d) 求最小值求最小值初值为所给数据的第一项或足够大的量初值为所给数据的第一项或足够大的量 注意:赋值语句的位置注意:赋值语句的位置3.. 循环次数的选定循环次数的选定a) 已知累加计算的项数已知累加计算的项数Nb) 未未知知计计算算项项数数N,,当当通通项项值值小小于于一一个个值值时时停停止止,,可可取取N为一个足够大的值。
为一个足够大的值1.累加和计算.累加和计算例例1:求:求S=2+4+6+…+200的值的值 S=0 DO N=1,,100 S=S+2*N End do PRINT *,,S END累加和:累加和:S新新=S原原+通项通项2.被加数不能直接用表达式表示.被加数不能直接用表达式表示例2:求重复:A=A*X/N注意:分母不能为零!3.一批数据的处理.一批数据的处理——顺序查找法顺序查找法例:从例:从1~1000的正整数中,所有的正整数中,所有3的倍数之和及个数的倍数之和及个数算法:顺序查找算法:顺序查找 程序:程序: S=0N=0DO I=1,,1000IF((MOD((I,,3))= =0))THEN S=S+I N=N+1ENDIFENDDOPRINT *,,S,,NEND4.嵌套循环.嵌套循环 例例::全全校校30个个班班,,每每班班50个个学学生生,,每每学学生生三三门门课课程程,,要要求求统统计计并并打打印印出出每每个个班班的的平平均均成成绩绩和和全全校校总总((平平均均))成绩成绩 ST=0.0A1: DO I=1,,30 S=0A2: DO J=1,,50 READ((*,*))A1,A2,A3 B=A1+A2+A3 S=S+B END DO A2 A=S/50 PRINT *,,I,,AST=ST+SENDDO A1SA=ST/((50*30))PRINT *,,SAEND5.穷举法.穷举法 例:一个口袋中有白球例:一个口袋中有白球3只,红球只,红球3只,黑球只,黑球6只,只,任取任取8只,有多少种取法?只,有多少种取法? INTEGER:: X,Y,ZN=0X:DO X=0,,3Y: DO Y=0,,3Z: DO Z=0,,6 IF((((X+Y+Z))= =8))N=N+1 ENDDO Z ENDDO YENDDO X PRINT *,,NEND练习:求以下公式的值:练习:求以下公式的值:当最后一项绝对值小于当最后一项绝对值小于1010时停止。
时停止 例:输入例:输入M、、N,求最大公约数求最大公约数程序:程序:INTEGER R,,TREAD *,,M,,NIF((M.LT.N))THEN T=M; M=N; N=TENDIF10R=MOD((M,,N))IF((R.NE.0))THEN M=N; N=R; GOTO 10 ENDIF PRINT *,,N END 请改写为请改写为DO循环结构循环结构练习:练习:1、输入、输入M、、N,求最小公倍数求最小公倍数2、求数列、求数列1,,1,,2,,3,,5,,8……的前的前30项 (重复:(重复:FN=FN-1+FN-2)) DO的非整型增值的非整型增值例例7:打印出所有的:打印出所有的“水仙花数水仙花数”所谓“水仙水仙花数花数”是指一个是指一个3位数,其各位数字的立方和等位数,其各位数字的立方和等于该数本身例如,于该数本身例如,153是一个是一个“水仙花数水仙花数”,,因为因为153=13+53+33 integer:: i, j, k, n do n=100,999 i=n/100 j=n/10-i*10 k=mod(n,10) if (n= =i*i*i+j*j*j+k*k*k) print*, n enddo endQUESTION???27。












