FORTRAN90程序设计.ppt

上传人:za****8 文档编号:15799704 上传时间:2020-09-07 格式:PPT 页数:32 大小:86.52KB
返回 下载 相关 举报
FORTRAN90程序设计.ppt_第1页
第1页 / 共32页
FORTRAN90程序设计.ppt_第2页
第2页 / 共32页
FORTRAN90程序设计.ppt_第3页
第3页 / 共32页
点击查看更多>>
资源描述
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,E3可以是整型或实型常数、变量、表达式。 E1称为循环变量的初始值;E2称为循环变量的终止值; E3称为循环变量的步长,当步长为1时,该项可以省略。 在循环开始时,E1,E2,E3应有确定的值。 由于实型数据在进行数据转换时,可能出现误差,因此,在使用循环变量、E1、E2和E3时,最好定义为整型。,有循环变量的DO循环结构,循环体是DO循环结构的主体,给出用于处理数据的有关语句,决定DO循环语句的执行结果。 ENDDO语句是DO循环结构的终端语句,表明DO循环语句到此结束,控制返回到DO语句执行。 下面给出一些合法的DO结构: DO I = 1, 10, 2!输出1、3、5、7、9 PRINT * , I ENDDO DO I = 10, 1, -2!输出10、8、6、4、2 PRINT * , I ENDDO,有循环变量的DO循环结构,DO循环结构的执行过程为: (1) 先计算E1、E2、E3的值,然后转换为与循环控制变量相同的类型; (2) 给循环控制变量赋初值V=E1; (3) 计算循环次数,计算公式为: R = MAX ( INT ( ( E2 - E1 + E3 ) / E3 ), 0 ) 例如,若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处理,则循环一次也不会被执行。例如: 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 = 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 ( 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 : 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是否为素数。 所谓素数,是一个正整数,该数只能被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 = = 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、CYCLE ),中断语句包括EXIT语句和CYCLE语句,用来强行控制或改变程序的执行顺序。 1.EXIT语句 EXIT语句功能:在循环体执行过程中强制性终止循环,将执行控制转移到当前循环之外的第一条语句执行。 EXIT语句的一般格式为: EXIT DO循环结构名,EXIT语句使用说明: (1) EXIT语句通常是作为逻辑IF语句的内嵌语句来使用,其作用是有条件中断,形式为: IF (逻辑表达式) EXIT 结构名 (2) 当EXIT语句中没有指定结构名时,则跳出当前结构。 (3) 结构化程序设计方法不提倡使用EXIT语句,但在某些情况,使用EXIT语句可简化程序。,中断语句( EXIT、CYCLE ),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 ) 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 IMPLICIT 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 )! 定义循环上界 PRINT *, 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 = = 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中的逻辑表达式是判断循环体是否被执行的条件,书写时应放在括号内。,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 , * , J , = , K ENDDO ENDDO END,嵌套DO循环的说明,(1) 三种DO循环都可以相互嵌套。但在嵌套时,内循环必须完整地包含于外循环之中,不得交叉,即遵循“完全包含”原则。如: DO WHILE ( AST = 0 ) DO J = 1, 10 内层嵌套外层嵌套 ENDDO ENDDO (2) 循环嵌套时,内外层不能使用相同的循环变量。但同一层并列的循环结构可以使用相同的循环变量。因为内外层若使用相同变量名,执行内循环时要对内循环变量赋值,这就相当于对外层循环变量重新赋值。,嵌套DO循环的说明,(3)在执行嵌套的循环时,可以将执行控制从循环体内转到本循环体内某个位置,或DO结构以外。但不能从DO结构外转到循环体内,也不能从外循环体转到内循环体。,循环的嵌套,例3.13 求四个阶乘之和2!+4!+6!+8! 的值。 可以用两重循环实现这个阶乘之和的计算。外层循环计算四个阶乘的和,里层循环计算一个阶乘。程序如下: PROGRAM EXAM IMPLICIT NONE REAL : S = 0.0, T INTEGER : I, J DO I = 2, 8, 2 T = 1.0 DO J = 1, I T = T * J ENDDO S = S + T ENDDO PRINT * , S = , S END,循环结构程序设计举例,例3.15 求 的前N项之和。这里,X和N从键盘输入。 解决此类问题的关键是找出多项式的通项式。我们发现从第二项开始,每项等于前一项乘以 ,因此只需一个单重循环,程序即可写出。,循环结构程序设计举例,例3.16 用梯形法求定积分 的值。 首先将积分区间(A,B) N等分,每个小区间的长度为H = ( B A ) / N。 第一个小梯形的下底为 ;上底为; 第I个小梯形的下底为 ;上底为 。 每个小区间的面积为 : 。,循环结构程序设计举例,例3.17 求三位数的水仙花数 。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如,407=43+03+73,所以407是水仙花数 。 方法一 该题可将100999之间的三位数的各位数字求出,然后再判断各位数字的立方和是否等于它本身。 方法二 该题采用穷举法也非常方便。所谓穷举法:即将所有可能的数字组合全部找到,然后选出符合条件的组合。,循环结构程序设计举例,例3.18 验证哥德巴赫猜想。哥德巴赫提出:一个不小于6的偶数必定能表示为两个素数之和。例如:6=3+3、8=3+5等。要求将650之间的全部偶数表示成两个素数之和。 分析:对于一个偶数N可以表示成任意两个数A、B之和(A为较小的数)。我们只需先判断A是否为素数,若A是素数,再判断B(B=N-A)是否为素数,若B是素数,则找到了答案。因为作为较小数的A最终必然为素数,所以判断它的范围可以从3开始,到N/2,步长为2。,练习题,1、阅读下列FORTRAN90程序段 INTEGER:I,J,K DO I = 1,5,2 DO J = 2,6,3 K = I + J ENDDO ENDDO 上述称序段执行完后K的值是 A) 11 B) 10 C)12 D) 30,练习题,2、阅读下列FORTRAN90程序段 INTEGER:N,K REAL:S,T READ *, N S = 0.0;K = 1 IF ( N = 5 ) THEN S = S + 32;T = 1 DO WHILE ( K N ) T = T * 2;S = S + T K = K +1;PRINT * , S END DO END IF PRINT * , S END 若从键盘输入:6,则运行后S的值为: A) 64.0 B) 32.0 C)94.0 D) 96.0,练习题,IMPLICIT NONE INTEGER:K,J REAL:S DO K=2,5,2 S=1.0 DO J=K,5 S=S+J ENDDO ENDDO PRINT*,S END S的值为_。,练习题,题目要求:从键盘输入5组数,每组有5个数,求出各组中元素绝对值之和的最大者和最小者。 IMPLICIT NONE INTEGER:I,J,SUM,MAX1,MAX2 MAX1 = 0; MIN1 = 0 DO I = 1 , 5 SUM = 0 DO J = 1 , 5 _(1)_ SUM = SUM + ABS(X) END DO IF ( SUM MAX1 )_(2)_ IF ( I= =1_(3)_ SUM MIN1 ) MIN1 = SUM END DO PRINT * , MAX1 , MIN1 END,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!