循环结构程序设计(大学fortran程序课件)

上传人:F****n 文档编号:88198379 上传时间:2019-04-20 格式:PPT 页数:43 大小:273KB
返回 下载 相关 举报
循环结构程序设计(大学fortran程序课件)_第1页
第1页 / 共43页
循环结构程序设计(大学fortran程序课件)_第2页
第2页 / 共43页
循环结构程序设计(大学fortran程序课件)_第3页
第3页 / 共43页
循环结构程序设计(大学fortran程序课件)_第4页
第4页 / 共43页
循环结构程序设计(大学fortran程序课件)_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《循环结构程序设计(大学fortran程序课件)》由会员分享,可在线阅读,更多相关《循环结构程序设计(大学fortran程序课件)(43页珍藏版)》请在金锄头文库上搜索。

1、第四章 循环结构程序设计,DO语句 DO WHILE语句 循环的嵌套 循环结构的程序设计方法,循环结构,循环结构的基本思想是重复,即利用计算机运算速度快以及能进行逻辑控制的特性,重复执行某些语句,以完成大量的计算要求。,4.1 用DO语句实现循环,例如,当X取1,2,3,10时,分别计算sinx和cosx的值。 INTEGER X DO X=1,10,1 PRINT *,X,SIN(X*1.0),COS(X*1.0) END DO END,4.1.1 DO循环一般格式,DO i=e1,e2,e3 (循环体) END DO 其中i代表循环变量,它可以是整型或实型变量。e1、e2、e3称为循环参数

2、表达式,分别表示循环变量的初值、终值和步长。循环体是在循环过程中被重复执行的语句组。,例 求5!,PROGRAM LOOP INTEGER P,K P=1 DO K=5,1,-1 P=P*K END DO PRINT *,P END,说明,(1)当循环变量变化的步长为1时,表达式e3可以省略。即DO K=1,10,1与DO K=1,10等价。 (2)如果循环变量和循环参数表达式的类型不一致,其处理办法与赋值语句一样,先将表达式的最后结果转换成循环变量的类型,然后再进行处理。 (3) DO循环的执行次数 r=MAX(INT(e2-e1+e3)/e3) ,0)。,例,INTEGER X DO X=

3、1.2,5.6,2.4 PRINT *,X END DO END 程序执行后的输出结果为: 3 5 如果循环变量的步长为0,程序在编译和连接时都没有问题,但在执行过程中求循环执行次数时将出现语法错,即进行了除零运算。这是应当避免的。,4.1.2 DO循环执行过程,计算e1、e2、e3的值,e1i,计算循环次数r,r=0?,执行循环体,i+e3i,r-1r,END DO下面的语句,Y,N,说明:,循环体指的是DO语句与END DO语句之间的语句,因此循环体并不包括DO语句,执行程序时DO语句也只执行一次。如果循环参数表达式e1、e2、e3中含有变量,那么即便在循环体中改变变量的值,循环参数并不改

4、变。 在循环体内给循环变量赋值,是不允许的。,分析下面的程序:,INTEGER X,Y,Z,K X=1 Y=7 Z=2 DO K=X,Y,Z+1 X=2 Y=Y+X Z=Z*K PRINT *, K ,X,Y,Z END DO END,程序的执行结果为: 1 2 9 2 4 2 11 8 7 2 13 56,例,INTEGER K DO K=1,5,2 K=K+1 PRINT *,K END DO END 编译时将给出错误信息: error FOR3598: assignment to DO variable K detected between K and =,(3) 退出循环后循环变量的值

5、与最后一次循环时循环变量的值不同,前者比后者多一个步长。例如: DO K=1,10,2 L=K END DO PRINT *,K,L END 程序的执行结果为: 11 9,例4.1 求,累加项F的递推式为: Fi=Fi-1*X/I 可用赋值语句F=F*X/I来实现。 READ *,X,N F=1.0 Y=1.0 DO I=1,N F=F*X/I Y=Y+F END DO PRINT *,Y=,Y END,例4.2 一个整数的因子(不包括该数本身)之和等于它本身,则称该数为完数。例如6的因子有1,2,3,且1+2+3=6,因此6是完数。输入一个整数,判断它是否完数,根据完数的定义,先求整数的因子

6、之和,然后判断该数本身是否等于因子之和,若是则为完数。 INTEGER M,SUM,I READ *,M SUM=0 DO I=1,M/2 !该循环求因子之和 IF (MOD(M,I)=0) SUM=SUM+I ENDDO IF (M=SUM) THEN PRINT *,M,是完数 ELSE PRINT *,M,不是完数 ENDIF END,例4.3 Fibonacci数列定义如下: F1=1 F2=1 Fn=Fn-1+Fn-2 (n2) 求Fibonacci数列的前30项。,设待求项为F,待求项前面的第1项为F1,待求项前面的第2项为F。首先根据F1和F2推出F,再将F1作为F2,F作为f1

7、,为求下一项作准备。如此一直递推下去。具体过程如下: 1 1 2 3 5 第一次 F2 + F1 F 第二次 F2 + F1 F 第三次 F2 +F1 F,例4.4 所谓“水仙花数”是指一个三位整数,其各位数字立方和等于该数本身。例如,153就是一个水仙花数。输出全部“水仙花数”。,在100,999范围内,对所有整数逐一验证是否符合的条件,输出符合条件的数。这种方法称为穷举法。,4.1.3 与循环有关的控制语句,EXIT语句 在循环体内使用EXIT语句,将迫使所在循环立即终止,即跳出所在循环体,而继续执行循环结构后面的语句。通常将EXIT语句与IF语句配合使用,即在循环体中使用语句: IF (

8、e) EXIT,例4.6 求两个整数a与b的最大公约数和最小公倍数。,分析:根据例1.7介绍的算法,找出a与b中较小的一个,则最大公约数必在1与最小整数的范围内。使用DO语句,循环变量i从较小整数变化到1。一旦循环控制变量i同时整除a与b,则i就是最大公约数,然后使用EXIT语句强制退出循环。求出最大公约数后,直接应用最小公倍数和最大公约数之间的关系求出最小公倍数。,INTEGER A,B,GCD,LCM,T PRINT *,请输入两个自然数 READ *,A,B IF (AB) THEN T=A;A=B;B=T END IF DO T=A,1,-1 IF (MOD(A,T)=0.AND.MO

9、D(B,T)=0) THEN PRINT *,GCD=,T EXIT END IF END DO PRINT *,LCM=,A*B/T END,2. CYCLE语句,CYCLE语句用来结束本次循环,即跳过循环体中尚未执行的语句。在循环结构中,CYCLE语句将使控制直接转向循环条件测试部分,从而决定是否继续执行循环。 CYCLE语句和EXIT语句的区别在于:CYCLE语句只结束本次循环,而不是终止整个循环的执行。EXIT语句则是结束所在循环,跳出所在循环体。,例4.7 求1100之间的全部奇数之和。,INTEGER : X=0,Y=0 DO X=X+1 IF (MOD(X,2)=0) THEN

10、CYCLE ELSE IF (X100) THEN EXIT ELSE Y=Y+X END IF END DO PRINT *,Y END,4.2 用DO WHILE语句实现循环,对于循环次数确定的循环问题使用DO循环是比较方便的。但是,有些循环问题事先是无法确定循环次数的,只能通过给定的条件来决定是否继续循环。这时可以使用DO WHILE语句来实现循环。,4.2.1 DO WHILE循环的一般格式,DO WHILE循环一般格式如下: DO WHILE (逻辑表达式) 循环体 END DO 其中逻辑表达式表示循环的条件,它要用括号括起来。循环体是在循环过程中被重复执行的语句组。END DO是循

11、环终端语句,DO WHILE语句和END DO语句要配合使用。,例:输出所输入的全部正数,直到输入负数或零,程序结束。,REAL : P=1.0 DO WHILE (P0) PRINT *,P READ *,P END DO END,DO WHILE循环的执行过程,执行循环体,END DO下面的语句,满足循环条件?,例4.8 输入一个整数,输出其位数。,输入的整数存入变量N中,用变量K来统计N的位数。程序如下: INTEGER : N,K=0 READ *,N DO WHILE (N0) K=K+1 N=N/10 END DO PRINT *,K=,K END,4.3 几种循环组织方式的比较,

12、实现循环结构的三种语句,它们各具特点。一般而言,事先能确定循环次数的循环问题用DO循环,而事先不能确定循环次数的循环问题用DO WHILE循环。但这并不是绝对的,很多情况下它们是可以相互代替的。,例4.11 输入一个整数m,判断是否素数。,程序1:用DO循环实现。 IMPLICIT NONE INTEGER M,I,J READ *,M J=SQRT(REAL(M) DO I=2,J IF (MOD(M,I)=0) EXIT END DO IF (IJ.AND.M1) THEN PRINT *,M, is a prime number ELSE PRINT *,m, is not prime

13、number END IF END,程序2:用DO WHILE循环实现 IMPLICIT NONE INTEGER M,I,J READ *,M I=2 J=SQRT(REAL(M) DO WHILE(IJ.AND.M1) THEN PRINT *,M, is a prime number ELSE PRINT *,m, is not prime number END IF END,程序3:用DO循环和逻辑IF语句的嵌套实现。 IMPLICIT NONE INTEGER M,I,J READ *,M I=2 J=SQRT(REAL(M) DO IF (MOD(M,I)=0.OR.IJ) EXI

14、T I=I+1 END DO IF (IJ.AND.M1) THEN PRINT *,M, is a prime number ELSE PRINT *,m, is not prime number END IF END,4.4 循环的嵌套,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。 在设计多重循环时,要特别注意内、外循环之间的关系,以及各语句放置的位置,不要搞错。,例4.12 求100,1000以内的全部素数。,(1) 判断一个数是否素数。 (2) 利用穷举法将判断一个数是否素数的程序段,对指定范围内的每一个数都执行一遍,即可求出某个范围内的全部素数。

15、 LOGICAL FLAG DO M=101,1000,2 FLAG=.TRUE. I=2 J=SQRT(REAL(M) DO WHILE(I=J.AND.FLAG) IF (MOD(M,I)=0) FLAG=.FALSE. I=I+1 END DO IF (FLAG) THEN PRINT *,M, is a prime number END IF END DO END,例4.13 已知 计算M的值。,分析:该问题要求对5个X值,10个Y值,计算出50个F值。然后每10个F相加得到一个S值,共得到5个S值。最后这5个S相乘,得到一个M值。可以用一个二重循环来计算和输出各值。 每个S值是由10

16、个F值累加得到的。累加前S要清0。M是由5个S值累乘得到的,累乘前M应置1。X和Y都是有规律的值,可以由循环变量I,J得到。,4.5 程序举例,例4.15 已知某球从100m高度自由落下,落地后反复弹起。每次弹起的高度都是上次高度的一半。求此球第10次落地后反弹起的高度和球所经过的路程,分析:用变量H来表示下落的高度,变量R来表示反弹的高度,变量S来表示小球经过的路程,则H的初值为100,反弹高度R=H/2。弹起一次小球要经过下降和上升两个阶段,小球经过的路程为H+R,这个过程如图所示。,INTEGER N REAL H,S,R H=100 S=0 DO N=1,10 R=H/2 S=S+H+

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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