FORTRAN90程序设计3讲义教材

上传人:yuzo****123 文档编号:141457258 上传时间:2020-08-08 格式:PPT 页数:32 大小:265KB
返回 下载 相关 举报
FORTRAN90程序设计3讲义教材_第1页
第1页 / 共32页
FORTRAN90程序设计3讲义教材_第2页
第2页 / 共32页
FORTRAN90程序设计3讲义教材_第3页
第3页 / 共32页
FORTRAN90程序设计3讲义教材_第4页
第4页 / 共32页
FORTRAN90程序设计3讲义教材_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《FORTRAN90程序设计3讲义教材》由会员分享,可在线阅读,更多相关《FORTRAN90程序设计3讲义教材(32页珍藏版)》请在金锄头文库上搜索。

1、FORTRAN90语言程序设计,计算机中心 楚红 2006.12,第3部分 循环结构程序设计,带循环变量的DO循环结构 不带循环变量的DO循环结构 DO-WHILE控制的循环结构 循环的嵌套 循环结构程序设计举例,有循环变量的DO循环结构,有循环变量DO结构的格式 DO V = E1 , E2 , E3 循环体 ENDDO DO循环语句由三部分组成:DO语句、循环体和ENDDO语句。 DO语句是DO循环的开始语句,指定用于控制循环执行的有关参数(初始值、终止值和步长),决定是否执行循环体。 DO是关键词,表示DO循环结构的入口语句。 V是循环变量,循环变量的类型可以为整型或实型,E1,E2,E

2、3可以是整型或实型常数、变量、表达式。 E1称为循环变量的初始值;E2称为循环变量的终止值; E3称为循环变量的步长,当步长为1时,该项可以省略。 在循环开始时,E1,E2,E3应有确定的值。 由于实型数据在进行数据转换时,可能出现误差,因此,在使用循环变量、E1、E2和E3时,最好定义为整型。,有循环变量的DO循环结构,DO循环结构的执行过程为: (1) 先计算E1、E2、E3的值,然后转换为与循环控制变量相同的类型; (2) 给循环控制变量赋初值V=E1; (3) 计算循环次数,计算公式为: R = MAX ( INT ( ( E2 - E1 + E3 ) / E3 ), 0 ) 例如,若

3、DO语句为“DO L = 2, 20, 2”,循环次数为:R = MAX ( INT ( ( 20 2 + 2 ) / 2 ) , 0 ) = 10; (4) 检查循环次数,当R 0时,执行循环体;当 R0时,跳过循环体,循环结构执行结束; (5) 当执行到循环终端语句时,循环变量按步长增值,循环变量 = 循环变量 + E3; (6) 循环次数减1:R = R 1 ;返回 (4) 继续执行。,注意事项,(1)E3的缺省意味着循环步长为1,此时E3前面的逗号也必须省略。例如: DO I = 1 , 10 , 1 DO I = 1 , 10 两者含义相同。 (2) 若循环次数R 0,按R = 0处

4、理,则循环一次也不会被执行。例如: DO I = 10 , 1 , 2 循环变量R = INT ( ( 1 - 10 + 2 ) / 2 ) = -3,一次也不会执行循环。 (3) E1、E2、E3的类型应与循环变量相同。当E1、E2、E3的类型与循环变量不相同时, 在循环执行时,系统将E1、E2、E3转换成循环变量的类型。 例如:DO I = 1.6 , 3.6 , 1.6 应先将实型转化成整形,即:DO I = 1 , 3 , 1,因此循环次数是3次,而不是2次。,注意事项,(4) 循环变量在循环体中可以被引用,但不能被重新赋值。例如,下面的用法是错误的: DO I = 1 , 10 I

5、= I * I ENDDO 因为循环变量在循环体内不能被赋值,若改成:J = I * I 则就正确了。 (5) E1、E2、E3的值在循环体中被改变后,不影响循环次数的计算。因此,试图通过改变循环体中E1、E2、E3的值来改变循环次数是不可能的。例如: J = 10 DO I = 1 , J J = 20 ENDDO !该循环次数在循环体执行之前已计算好,共执行10次,不会因为循环体内J值的改变而增加循环次数。,注意事项,(6)可以不经过ENDDO语句退出循环,即将执行控制从循环体内转移到循环体外。也可在循环体内转移,但不能从循环体外转移到循环体内。例如: DO I = 1, 20 IF (

6、I * 3 = 100 ) GOTO 100 ENDDO 100 PRINT * , I * 3 (7)DO循环和其它结构 ( 如块IF结构、CASE结构 ) 可以相互嵌套使用,但结构的嵌套必须是完整嵌套,不允许结构的交叉。,有循环变量的DO循环结构,DO循环结构的命名 DO循环结构名: DO V = E1 , E2 , E3 循环体 ENDDO DO循环结构名 例3.1 求N!的值 因为N!= 1 * 2 * 3 * * N。该题显然是一个累积问题的计算,存放累积的变量的初值应为1。源程序,PROGRAM CALCULATE_FACTORIAL IMPLICIT NONE INTEGER :

7、 N, T, I READ *, N T = 1 DO I = 1, N T = T * I END DO PRINT *, T END PROGRAM CALCULATE_FACTORIAL,引申 例如求解如下表达式。,有循环变量的DO循环结构,例3.3 求FIBONACCI数列:1,1,2,3,5,的前40个数。 分析:FIBONACCI数列的递推公式为:F1=1,F2=1 , ( N3 ) 根据递推公式可知,FIBONACCI数列从第3顶开始,等于前2顶之和。因而程序只需一个DO循环,采取辗转赋值法即可。,有循环变量的DO循环结构,例3.4 判断一个整数N是否为素数。 所谓素数,是一个正

8、整数,该数只能被1和它本身整除。那么判断一个数N是否为素数就是将其被2到(N 1)之中的所有整数整除,如果都不能整除,则N为素数。实际上根据数论知识,判断N是否为素数,不必将N被2到(N 1)整除,只要被2到 (若 不是整数,取其整数部分)整除即可。,PROGRAM EXAM IMPLICIT NONE INTEGER : N , I , J, SWITCH READ * , N J = SQRT ( REAL ( N ) ) SWITCH = 1 DO I = 2 , J IF ( MOD ( N , I ) = = 0 ) SWITCH = 0 END DO IF ( SWITCH = =

9、 1 ) THEN PRINT * , N , IS A PRIME NUMBER ELSE PRINT * , N, IS NOT A PRIME NUMBER END IF END,无循环变量DO结构,在DO循环结构中,当DO语句中仅包含关键词DO而无循环变量控制或条件控制时,称为无循环变量的重复DO结构。它的形式为: DO结构名 : DO 循环体 ENDDO DO结构名 方括号内的DO结构名是可选项,作用是给DO结构命名。 重复DO结构是一个无休止的死循环。尽管在语法上没有错误,但程序却不能正常结束。 因此,必须在循环体中加入能在满足某种条件时停止循环的语句。,中断语句( EXIT、CY

10、CLE ),中断语句包括EXIT语句和CYCLE语句,用来强行控制或改变程序的执行顺序。 1.EXIT语句 EXIT语句功能:在循环体执行过程中强制性终止循环,将执行控制转移到当前循环之外的第一条语句执行。 EXIT语句的一般格式为: EXIT DO循环结构名,EXIT语句使用说明: (1) EXIT语句通常是作为逻辑IF语句的内嵌语句来使用,其作用是有条件中断,形式为: IF (逻辑表达式) EXIT 结构名 (2) 当EXIT语句中没有指定结构名时,则跳出当前结构。 (3) 结构化程序设计方法不提倡使用EXIT语句,但在某些情况,使用EXIT语句可简化程序。,中断语句( EXIT、CYCL

11、E ),2.CYCLE语句 CYCLE语句功能:用于终止执行本次循环中剩余的语句,重新执行下一轮循环。 CYCLE语句的一般格式为: CYCLE DO循环结构名 CYCLE语句通常是作为逻辑IF语句的内嵌语句来使用,其作用是有条件转移,形式为: IF ( 逻辑表达式 ) CYCLE DO循环结构名,中断语句( EXIT、CYCLE ),例3.5 输入一组整数,求这组数的正数的个数及正数的总和。当输入数据等于0时终止循环。 PROGRAM MAIN IMPLICIT NONE INTEGER : K , SUM = 0 , NUM = 0 DO READ * , K IF ( K = =0 )

12、EXIT IF ( K 0 ) CYCLE NUM = NUM + 1 SUM = SUM + K ENDDO PRINT *, NUM = , NUM , SUM = , SUM END,中断语句( EXIT、CYCLE ),例3.6 运用重复DO结构编写一个程序:求两个正数M和N的最大公约数及最小公倍数。 用辗转相除法来求最大公约数。例如,若输入49和35两个数,先用49除以35,余数为14,再用35为被除数,14为除数做除法,余数为7,再将14为被除数,7为除数做除法,此时余数为零,最后为除数的7就是最大公约数。最小公倍数则等于M乘以N,再除以最大公约数。,PROGRAM EXAM IM

13、PLICIT NONE INTEGER M , N , T, P, R , K READ *, M , N P = M * N IF ( M N ) THEN T = M ; M = N ; N = T END IF R = MOD ( M , N ) DO IF ( R = = 0 ) EXIT M = N N = R R = MOD ( M , N ) ENDDO K = P / N PRINT *, N , K END,中断语句( EXIT、CYCLE ),IMPLICIT NONE INTEGER: I, J, K, N PARAMETER ( N = 10 )! 定义循环上界 PRI

14、NT *, LOOP: 1ST 2ND 3RD LOOP1 : DO I = 1 , N! 外层循环,结构名LOOP1 IF ( I 3 ) EXIT LOOP1! 当I 3时,跳出外层循环 PRINT ( 11X , I2 ) , I LOOP2 : DO J = 1, N! 中层循环,结构名LOOP1 IF ( J 2) CYCLE LOOP2 IF (I = = 2 .AND. J 1 ) EXIT LOOP2 PRINT ( 21X , I2 ) , J LOOP3: DO K = 1, N! 内层循环,结构名LOOP1 IF ( K 2 ) CYCLE LOOP3 IF (I = =

15、 1 .AND. J 1) EXIT LOOP2 ! 跳出内层和中层循环 PRINT ( 31X , I2) , K END DO LOOP3 END DO LOOP2 END DO LOOP1,DO-WHILE结构,DO-WHILE循环的一般形式为: 结构名: DO WHILE ( 逻辑表达式 ) 循环体 ENDDO 结构名 结构名是为DO-WHILE结构的命名,用法同前面对块IF、CASE等结构的命名类似,可以缺省。 关键词DO WHILE称为DO WHILE语句,是循环的入口。关键词ENDDO称为ENDDO语句,是循环的出口。 DO WHILE中的逻辑表达式是判断循环体是否被执行的条件,

16、书写时应放在括号内。,DO-WHILE结构,DO-WHILE结构的执行过程为: (1) 计算逻辑表达式的值; (2) 当逻辑表达式的值为“真”时,执行循环体,遇到ENDDO语句后返回到 (1) 继续。当逻辑表达式的值为“假”时,退出循环结构。,DO-WHILE结构,例3.9输入两个正数M、N,求最大公约数和最小公倍数。 例3.10 用下面的级数计算的近似值,精度要求第N项的值小于10-5时结束。 , 使用DO-WHILE语句来判断,当某一项的值小于精度要求时,退出循环。,循环的嵌套,在一个DO循环中又完整地包含一个DO循环,称为DO循环的嵌套或多重循环。例如,打印一个99的乘法表,可用下面的程序实现: INTEGER:I,J DO I = 1, 9 DO J = 1, 9 K = I * J PRINT * , I ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号