《循环结构的实现》由会员分享,可在线阅读,更多相关《循环结构的实现(37页珍藏版)》请在金锄头文库上搜索。
1、1 第三章第三章 循环结构的实现循环结构的实现 循环操作循环操作:重复执行一组指令重复执行一组指令 (或一个程序段或一个程序段) 循环分类循环分类:无条件的循环无条件的循环 有条件的循环有条件的循环 2 3 3.1 .1 循环的概念循环的概念 例例:打印打印3030个学生的学号和成绩个学生的学号和成绩 N=1N=1 100 READ 100 READ (*,*) NUM, GRADE(*,*) NUM, GRADE WRITE WRITE (*,*) NUM, GRADE(*,*) NUM, GRADE N=N+1 N=N+1 IF ( NIF ( N 属于直到型循环属于直到型循环 3 3 3
2、.2 .2 DODO循环结构循环结构 DODO 10 N=1, 3010 N=1, 30 READ READ (*,*) NUM, GRADE(*,*) NUM, GRADE 10 10 WRITE WRITE (*,*) NUM, GRADE(*,*) NUM, GRADE ENDEND DODO语句语句 循环体循环体 DODO s, v = es, v = e 1 1 , e, e 2 2 , e , e 3 3 循环终端循环终端 语句标号语句标号 循环循环 变量变量 循环变循环变 量初值量初值 循环变循环变 量终值量终值 循环变循环变 量增量量增量 4 DODO语句几点说明语句几点说明:
3、 1. 1. e e 1 1 、e e 2 2 、 e e 3 3 可以是常数、变量或表达式可以是常数、变量或表达式 DODO s, v = es, v = e 1 1 , e, e 2 2 , e , e 3 3 2. 2. e e 1 1 、e e 2 2 、 e e 3 3 的值可以正或负的值可以正或负, e e 1 1 、e e 2 2 的的 值可以为值可以为0 0, e e 3 3 的值不应为的值不应为0 0 3. 3. 脱离循环的条件脱离循环的条件:循环变量沿变化的循环变量沿变化的 方向超过终值方向超过终值 DO DO 1010,T=5.0T=5.0,25.025.0,0.50.5
4、 DO DO 1010,T= CT= C,50.0/2.050.0/2.0,0.50.5 C=5.0C=5.0 5 4. 4. 循环次数计算公式为循环次数计算公式为:r =INT(er =INT(e 2 2 - - e e1 1 + e+ e 3 3 )/ e)/ e 3 3 ) ) 5. 5. 如果如果v v的类型和的类型和 e e1 1 、e e 2 2 、 e e 3 3 的类型不一致的类型不一致, 先将先将e e 1 1 、e e 2 2 、 e e 3 3 的类型化成的类型化成v v的类型的类型,然后处然后处 理理 6. 6. 如果计算出循环次数如果计算出循环次数 r 0 循环体语句
5、循环体语句 DODO 循循 环环 属属 于于 当当 型型 循循 环环 DODO s, v = es, v = e 1 1 , e, e 2 2 , e , e 3 3 s s 适用范围适用范围:循环次数已知循环次数已知 DODO语句语句 循环体循环体 7 循环终端语句循环终端语句&继续语句继续语句( (CONTINUECONTINUE语句语句) ) 循环终端语句循环终端语句 循环体中带有语句标号的最后一个语句循环体中带有语句标号的最后一个语句 定义定义: : DODO 10 I = 110 I = 1,50 50 20 K=I*120 K=I*1 10 10 PRINTPRINT * *,I
6、I,K K 循环体循环体 规定规定: : 下列语句不能作为下列语句不能作为DODO循环的终端语句循环的终端语句: : 8 逻辑逻辑IFIF语句可作为语句可作为DODO循环的终端语循环的终端语 句句, ,但其内嵌语句不能是上述控制语句但其内嵌语句不能是上述控制语句! DODO 10 I = 110 I = 1,50 50 K=I*1 K=I*1 PRINTPRINT * *,I I,K K 10 IF 10 IF(K.GT.500)K.GT.500) GOTO GOTO 100100 GOTOGOTO语句语句, , DODO语句语句, , STOPSTOP语句语句, , ENDEND语句语句,
7、, END IFEND IF语句语句, ,块块IFIF语句语句, , ELSEELSE语句语句 , ,ELSE IFELSE IF语句语句, ,等等 9 继续语句继续语句( (CONTINUECONTINUE语句语句) ) CONTINUECONTINUE 形式形式: : 作用作用: : 将流程转移到将流程转移到逻辑上逻辑上的下一个操作的下一个操作 DODO 20 , I=1, 10 , 220 , I=1, 10 , 2 PRINT PRINT *, I*, I 2020 CONTINUECONTINUE 优点优点: : . .循环范围清晰循环范围清晰,易识别易识别; . .使一般可执行语句
8、不再作为终端使一般可执行语句不再作为终端 语句语句,仅执行其语句本身功能仅执行其语句本身功能; . .不用记哪些语句不能作终端语句不用记哪些语句不能作终端语句 10 DODO 循环的一些规定循环的一些规定 1. 1. 循环变量可以在循环体中被引用循环变量可以在循环体中被引用,但但 不应再被赋值不应再被赋值; . . 循环变量的初值循环变量的初值、终值和步长值在执终值和步长值在执 行循环体期间不能改变行循环体期间不能改变; DODO 20 , N=1, 10020 , N=1, 100 M=2*N M=2*N PRINT PRINT *, M*, M 2020 CONTINUECONTINUE
9、DODO 20 , N=1, 10020 , N=1, 100 N=2*N N=2*N PRINT PRINT *, N*, N 2020 CONTINUECONTINUE DODO 20 , I=K, J, M20 , I=K, J, M K=2*K K=2*K J=J+1 J=J+1 M=M/2 M=M/2 PRINT PRINT *, K, J, M*, K, J, M 2020 CONTINUECONTINUE 11 3 3. . 可以用转移语句从循环体内转到循环可以用转移语句从循环体内转到循环 体外体外,也可以在循环体内转移也可以在循环体内转移,但不允但不允 许从循环外转到循环内许从
10、循环外转到循环内; 4 4. . 正常出口正常出口&非正常出口非正常出口; DODO 10 , I=1, 10010 , I=1, 100 IFIF (I*I.GE.500) (I*I.GE.500) GOTOGOTO 100 100 1010 CONTINUECONTINUE 100100 PRINTPRINT *, I, I*I *, I, I*I 非正常出口非正常出口 正常出口正常出口 DO WHILEDO WHILE循环(当型循环)循环(当型循环) do while(e)do while(e) blockblock label term_stmt label term_stmt e e
11、为逻辑表达式为逻辑表达式 (或关系表达式)(或关系表达式) DO WHILEDO WHILE循环的执行循环的执行 1. 1.计算计算e e的值的值 2. 2.若若e e为真,执行循环体为真,执行循环体 若若e e为假,不执行,转去执行为假,不执行,转去执行ENDOENDO后后 的语句的语句 13 *统计平均成绩 integer count sum=0.0 count=0 read(*,*) score do while(score.ge.0.0) sum=sum+score count=count+1 read(*,*) score enddo aver=sum/count write(*,*
12、) count=,count write(*,*) average=,aver end 14 *辗转相除求最大公约数 integer m,n,r,t read(*,*) m,n if(m.lt.n) then t=m m=n n=t end if r=mod(m,n) do while(r.ne.0) m=n n=r r=mod(m,n) enddo write(*,*) The greatest, common divisor is, n end 15 DODO 循环的嵌套循环的嵌套(多重循环多重循环) 一个循环体内又完整的包含另一个循环结构一个循环体内又完整的包含另一个循环结构 注意事项注
13、意事项: 1. 1. 嵌套循环的各层不允许使用同一个变嵌套循环的各层不允许使用同一个变 量名作为循环控制变量量名作为循环控制变量; DO 20 I=1, 5 DO 10 I=2, 10, 2 10 CONTINUE 20 CONTINUE 16 3. 3. 嵌套嵌套DODO循环中循环中,可以共用一个循环终端语句可以共用一个循环终端语句; 2. 2. 对于任何形式的循环对于任何形式的循环,都不允许循环的交叉都不允许循环的交叉; DO 10 I=1, 5 DO 20 J=1, 3 M=I*J 10CONTINUE 20CONTINUE DO 10 I=1, 10 DO 20 J=0, 20, 2
14、20 CONTINUE 10 CONTINUE DO 10 I=1, 10 DO 10 J=0, 20, 2 10 CONTINUE 4 4. . 可以从内层循环根据需要将控制转到外层循可以从内层循环根据需要将控制转到外层循 环环,但不允许从外层循环将控制转到内层循环但不允许从外层循环将控制转到内层循环 17 C打印九九表 do 10 i=1,9 do 20 j=1,9 k=i*j write(*,*) i,*,j,=,k 20 continue write(*,*) 10continue end C百钱买百鸡 C100元钱买100只鸡 C公鸡5元/只 C母鸡3元/只 C小鸡1元/3只 int
15、eger x,y,z do 10 x=0,19 do 20 y=0,33 z=100-x-y if(15*x+9*y+z.eq.300) $ write(*,*) x,y,z 20 continue 10continue end 18 几种几种循环形式的关系和比较循环形式的关系和比较 1. DO循环用来处理已确定循环次数的问题。其他循环即可以 处理已知循环次数的问题,也可以处理不确定循环次数的问 题。对事先知道确定循环次数的问题,用DO循环比较方便。 2. DO循环实质上也是一种“当型循环”。 3. 几种形式的循环可以互相转换,或者说,同一个问题可用 任一种循环来处理。 4. 各种循环可以互相嵌套。但必须一个循环完整的包含在另 一个循环之内。 19 END DO 语句(Fortran 90) DODO 20 , I=1, 10 , 220 , I=1, 10 , 2 PRINT PRINT *, I*, I 2020 CONTINUECONTINUE DODO