FORTRAN90程序设计.ppt

上传人:牧羊曲112 文档编号:5431274 上传时间:2023-07-06 格式:PPT 页数:32 大小:222.99KB
返回 下载 相关 举报
FORTRAN90程序设计.ppt_第1页
第1页 / 共32页
FORTRAN90程序设计.ppt_第2页
第2页 / 共32页
FORTRAN90程序设计.ppt_第3页
第3页 / 共32页
FORTRAN90程序设计.ppt_第4页
第4页 / 共32页
FORTRAN90程序设计.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《FORTRAN90程序设计.ppt》由会员分享,可在线阅读,更多相关《FORTRAN90程序设计.ppt(32页珍藏版)》请在三一办公上搜索。

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

2、量、表达式。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*,IENDDODO I=10,1,-2!输出10

3、、8、6、4、2 PRINT*,IENDDO,有循环变量的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、4)继续执行。,注意事项,(1)E3的缺省意味着循环步长为1,此时E3前面的逗号也必须省略。例如:DO I=1,10,1DO 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)循环变

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

6、。例如:DO I=1,20 IF(I*3=100)GOTO 100 ENDDO100 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_FACTORIALIMPLICIT NONEINTEGER:N,T,IREAD*,NT=1DO I=1

7、,N T=T*IEND DOPRINT*,TEND 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)之中的所有整数整除

8、,如果都不能整除,则N为素数。实际上根据数论知识,判断N是否为素数,不必将N被2到(N 1)整除,只要被2到(若 不是整数,取其整数部分)整除即可。,PROGRAM EXAMIMPLICIT NONEINTEGER:N,I,J,SWITCHREAD*,NJ=SQRT(REAL(N)SWITCH=1DO I=2,JIF(MOD(N,I)=0)SWITCH=0END DOIF(SWITCH=1)THENPRINT*,N,IS A PRIME NUMBERELSEPRINT*,N,IS NOT A PRIME NUMBEREND IFEND,无循环变量DO结构,在DO循环结构中,当DO语句中仅包含关

9、键词DO而无循环变量控制或条件控制时,称为无循环变量的重复DO结构。它的形式为:DO结构名:DO 循环体 ENDDO DO结构名 方括号内的DO结构名是可选项,作用是给DO结构命名。重复DO结构是一个无休止的死循环。尽管在语法上没有错误,但程序却不能正常结束。因此,必须在循环体中加入能在满足某种条件时停止循环的语句。,中断语句(EXIT、CYCLE),中断语句包括EXIT语句和CYCLE语句,用来强行控制或改变程序的执行顺序。1.EXIT语句EXIT语句功能:在循环体执行过程中强制性终止循环,将执行控制转移到当前循环之外的第一条语句执行。EXIT语句的一般格式为:EXIT DO循环结构名,EX

10、IT语句使用说明:(1)EXIT语句通常是作为逻辑IF语句的内嵌语句来使用,其作用是有条件中断,形式为:IF(逻辑表达式)EXIT 结构名(2)当EXIT语句中没有指定结构名时,则跳出当前结构。(3)结构化程序设计方法不提倡使用EXIT语句,但在某些情况,使用EXIT语句可简化程序。,中断语句(EXIT、CYCLE),2.CYCLE语句 CYCLE语句功能:用于终止执行本次循环中剩余的语句,重新执行下一轮循环。CYCLE语句的一般格式为:CYCLE DO循环结构名 CYCLE语句通常是作为逻辑IF语句的内嵌语句来使用,其作用是有条件转移,形式为:IF(逻辑表达式)CYCLE DO循环结构名,中

11、断语句(EXIT、CYCLE),例3.5 输入一组整数,求这组数的正数的个数及正数的总和。当输入数据等于0时终止循环。PROGRAM MAINIMPLICIT NONEINTEGER:K,SUM=0,NUM=0DO READ*,KIF(K=0)EXIT IF(K 0)CYCLE NUM=NUM+1SUM=SUM+KENDDO PRINT*,NUM=,NUM,SUM=,SUMEND,中断语句(EXIT、CYCLE),例3.6 运用重复DO结构编写一个程序:求两个正数M和N的最大公约数及最小公倍数。用辗转相除法来求最大公约数。例如,若输入49和35两个数,先用49除以35,余数为14,再用35为被

12、除数,14为除数做除法,余数为7,再将14为被除数,7为除数做除法,此时余数为零,最后为除数的7就是最大公约数。最小公倍数则等于M乘以N,再除以最大公约数。,PROGRAM EXAMIMPLICIT NONEINTEGER M,N,T,P,R,KREAD*,M,NP=M*NIF(M N)THENT=M;M=N;N=TEND IFR=MOD(M,N)DO IF(R=0)EXITM=N N=R R=MOD(M,N)ENDDOK=P/NPRINT*,N,KEND,中断语句(EXIT、CYCLE),IMPLICIT NONE INTEGER:I,J,K,N PARAMETER(N=10)!定义循环上界

13、 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),JLOOP3:DO K=1,N!内层循环,结构名LOOP1 IF(K 2)CYCLE LOOP3 IF(I=1.AND.J 1)EXIT LOOP2!跳出内层和中层循环 PRINT(31X,I2),K END DO LOO

14、P3 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)当逻辑表达式的值为“真”时,执行循环体,遇到E

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

16、循环都可以相互嵌套。但在嵌套时,内循环必须完整地包含于外循环之中,不得交叉,即遵循“完全包含”原则。如:DO WHILE(AST=0)DO J=1,10 内层嵌套外层嵌套 ENDDOENDDO(2)循环嵌套时,内外层不能使用相同的循环变量。但同一层并列的循环结构可以使用相同的循环变量。因为内外层若使用相同变量名,执行内循环时要对内循环变量赋值,这就相当于对外层循环变量重新赋值。,嵌套DO循环的说明,(3)在执行嵌套的循环时,可以将执行控制从循环体内转到本循环体内某个位置,或DO结构以外。但不能从DO结构外转到循环体内,也不能从外循环体转到内循环体。,循环的嵌套,例3.13 求四个阶乘之和2!+

17、4!+6!+8!的值。可以用两重循环实现这个阶乘之和的计算。外层循环计算四个阶乘的和,里层循环计算一个阶乘。程序如下:PROGRAM EXAMIMPLICIT NONEREAL:S=0.0,TINTEGER:I,JDO I=2,8,2T=1.0DO J=1,IT=T*JENDDOS=S+TENDDOPRINT*,S=,SEND,循环结构程序设计举例,例3.15 求 的前N项之和。这里,X和N从键盘输入。解决此类问题的关键是找出多项式的通项式。我们发现从第二项开始,每项等于前一项乘以,因此只需一个单重循环,程序即可写出。,循环结构程序设计举例,例3.16 用梯形法求定积分 的值。首先将积分区间(

18、A,B)N等分,每个小区间的长度为H=(B A)/N。第一个小梯形的下底为;上底为;第I个小梯形的下底为;上底为。每个小区间的面积为:。,循环结构程序设计举例,例3.17 求三位数的水仙花数。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如,407=43+03+73,所以407是水仙花数。方法一 该题可将100999之间的三位数的各位数字求出,然后再判断各位数字的立方和是否等于它本身。方法二该题采用穷举法也非常方便。所谓穷举法:即将所有可能的数字组合全部找到,然后选出符合条件的组合。,循环结构程序设计举例,例3.18 验证哥德巴赫猜想。哥德巴赫提出:一个不小于6的偶数必定能

19、表示为两个素数之和。例如: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,KDO I=1,5,2DO J=2,6,3 K=I+JENDDOENDDO上述称序段执行完后K的值是A)11 B)10 C)12 D)30,练习题,2、阅读下列FORTRAN90程

20、序段INTEGER:N,KREAL:S,TREAD*,NS=0.0;K=1IF(N=5)THENS=S+32;T=1DO WHILE(K N)T=T*2;S=S+TK=K+1;PRINT*,SEND DOEND IFPRINT*,SEND若从键盘输入:6,则运行后S的值为:A)64.0 B)32.0 C)94.0 D)96.0,练习题,IMPLICIT NONE INTEGER:K,J REAL:SDO K=2,5,2 S=1.0 DO J=K,5 S=S+J ENDDOENDDOPRINT*,SEND S的值为_。,练习题,题目要求:从键盘输入5组数,每组有5个数,求出各组中元素绝对值之和的最大者和最小者。IMPLICIT NONEINTEGER:I,J,SUM,MAX1,MAX2MAX1=0;MIN1=0DO I=1,5SUM=0DO J=1,5_(1)_SUM=SUM+ABS(X)END DOIF(SUM MAX1)_(2)_ IF(I=1_(3)_ SUM MIN1)MIN1=SUMEND DOPRINT*,MAX1,MIN1END,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号