第四讲 循环结构的Fortran 程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015/12/20 17
§3 Fortran循环结构程序设计的其它问题 一、do循环与do while循环的互换
Do循环和do while循环是Fortran90中常用的2种基本循环结构, 前者主要用于确定循环次数的问题、而后者则常用来处理事先 无法确定循环次数的问题,但也并非绝对,很多情况下二者可 以互换使用。 比如:输入一个整数,判断是否为素数。 分析:所谓素数指这样的整数:除了 1和本身不能被其它任何 数整除的数。判断一个数是否为素数,可以按照 2 , 3 , … , m-1逐一检查能否除下,但当m很大时检查量太大。 有一个结论:只需检查 2 , 3 , … , m1/2 即可判断 m 是否为素数。
i+e3→i r-1→r
end do下面的语句 5
(2)由于在循环过程 中,循环变量会自动按 循环要求变化,因此不 能在循环体内给循环变 量进行赋值。
Integer i Do i=1,5,2 i=i+1 Print*,i End do End Error for3598: assignment to variable i detected between i and = Integer i,m Do i=1,10,2 m=i End do Print*,i,m End 输出为:11 9
11
(2)cycle语句
Cycle 语句是用来结束本次循环,即跳过循环体中尚未执行的 语句。在循环结构中, cycle 语句将使控制直接转向循环条件 的测试部分,从而决定是否继续执行循环。
Cycle语句与exit语句的区别在于:cycle语句只是结束本次循 环,而不是终止整个循环的执行。Exit语句则是结束所在循环, 跳出所在循环体。 Integer:: x=0,y=0
第四讲 循环结构程序设计
循环结构在程序设计中广泛使用,是一种非常重要的程序 结构。 其基本思想是重复,即重复执行某些语句、以完成大量的 计算要求。 但是,循环不是简单的重复,因为尽管每次都执行相同的 语句,但是在循环过程中变量在变化,而且完成了循环次数或 在一定的条件下能退出循环。 本讲介绍Fortran90实现循环结构的2种方法:
2015/12/20 16
2 n 1 x3 x5 x7 x 例2:求 sin x x ,直 (1) n1 3! 5!-6 7! (2n 1)!
到最后一项的绝对值小于10
时,停止计算。X右键盘输入。
real x,a,s integer::i=1 read*,x 分析:这种累加求和的问题, s=x 关键是如何求累加项,通常 a=x 的办法是利用前一项来求后 do while (abs(a)>=1.0e-6) 一项,即利用递推法来求累 i=i+1 a=-x*x/(2*i-2)/(2*i-1)*a 加项。 s=s+a end do print*,x,s End
Integer m,n m=1 Do n=1,5,1 m=m*n End do Print*,m end
2015/12/20
Hale Waihona Puke 3说明: (1)步长为1时,表达式e3可以省略。比如“do i=1,10,1”与 “do i=1,10”相同。 ( 2 )循环变量与参数表达式数据类型不 Integer a Do a=1.3,5.9,2.6 一致时,其处理方法与赋值语句相同, Print*,a do 即先计算参数表达式、并把结果转换成 End End 循环变量类型,然后进行处理。比如, 输出为:1 3 5 “ do i=1.3,5.9,2.6” 相 当 于 “ do i=1,5,2 ” (3)参数表达式“ i=e1,e2,e3”表示循环次数为:
2015/12/20
6
Integer n,i Real x,F,y Read*,x,n F=1.0 Y=1.0 Do i=1,n F=F*x/i Y=Y+F End do Print*,’x=’,x,’n=’,n Write(*,*)’y=’,y End 从键盘输入:3,3 ↙ 输出为:x=3.0 n=3 y=13.0
2015/12/20
满足循 环条件 ? 是

执行循环体
end do下面的语句
15
三、do while循环举例
例1:输入一个整数,输出其位数。 分析:输入的整数存入变量m中,用变量n来统计m的位数,程 序为: Integer:: m,n=0 read*,m Do while (m>0) n=n+1 m=m/10 end do print*,‘n=’,n End 比如:129 ↙ n=3
If(条件)exit
表示条件为真执行 exit终止循环,为 假时exit不执行,将继续执行循环。
比如:求两个整数m和n的最大公约数和最小公倍数。 分析:最大公约数在[1,min(m,n)]范围内,且同时能被m和n整 除 , 因 此 利 用 do i=min(m,n),1 搜 寻 , 一 旦 mod(m,i)=0 、 mod(n,i)=0 则此时的 i 就是最大公约数,并利用 exit 退出循环。 然后利用最大公约数,求出最小公倍数。程序为:
这个问题既可用 do 循环实现,也可利用 do while 来解决,程 序分别为:
r=max(int((e2-e1+e3)/e3),0) 比如: do i=10,1,-2 的循环次数 r=5 ,而 do i=10,1,2 的 r=0 (即不循环),注意: 1、步长不能为0; 2、循环次数不能为0。
2015/12/20 4
二、do循环的执行过程
Do 循环的执行过程可示意为右图, 说明如下: (1)循环体指do语句和end do语句之 间的语句,不包括 do 语句,因此 do 语 句在循环过程中只执行一次。如果循 环参数表达式中含变量,那么即使在 循环体中改变变量的值,循环参数并 不改变。比如: Integer a,b,c,I
Print*,x,log(x*1.0),sin(x*1.)
End do End
2015/12/20
2
一、do循环的一般格式
do i= e1,e2,e3 循环体 end do (do语句) (执行的操作) (结束语句)
其中:(1)i代表循环变量(可为整型或实型); (2)e1,e2[,e3]称为参数表达式,分别为循环变量的 初值、终值和步长; (3)循环体是循环过程被重复执行的语句组; (4)end do是循环结束的终端语句,其与do语句配合 使用。 比如,计算5!
2015/12/20
10
2015/12/20
Integer a,b,t,i read*,a,b if(a>b)then t=a a=b b=t end if Do i=a,1,-1 if(mod(a,i)==0.and.mod(b,i)==0)then print*,'g=',i exit end if end do print*,‘l=’,a*b/i !求最小公倍数 End 比如:12,9 ↙ g=3, l=36
进入 do 循环后,首先计算 出循环变量 i 的初值 1 、终 值 7 、步长 3 (即执行 do 语 句),尽管在循环体中改 变了变量a、b、c的值,但 是循环变量的初值、终值、 步长不再变化。
计算e1, e2,e3的值
e1→i 计算循环次数r

r=0 ?

执行循环体
2015/12/20
a=1;b=7;c=2 Do i=a,b,c+1 a=2;b=b+a;c=c*i Print*,i,a,b,c End do End 输出为:1 2 9 2 4 2 11 8 7 2 13 56
integer:: m=1,n=1 do while (m<=5) n=n*m m=m+1 end do print*,n End
2015/12/20
14
二、do while循环的执行过程
Do while 循环的执行过程可示意为 右图,说明如下: ( 1 )当给定的条件满足时,执行 do while和end do之间的循环体语句; (2)语句执行完毕后,程序自动返回 到 do while 语 句 , 再 一 次 判 断 do while语句中的条件。 (3)如果条件仍然满足,则再执行一 遍循环体语句,如果条件不满足,则 结束循环,去执行end do后的语句。
12
§2
用do while语句实现循环
对于循环次数确定的循环问题,使用do循环是比较方便的。但 是,有些循环问题事先是无法确定循环次数的,只能通过给定 的条件来决定是否继续循环。这时可以使用do while语句来实 现循环。
一、do while循环的一般格式
do while (条件表达式) 循环体 end do (do while语句) (执行的操作) (结束语句)
2015/12/20
9
四、do循环中的控制语句
在do循环中,为了使用的方便可以加入一些控制语句,此处介 绍2个这样的语句。 (1)exit语句 Exit的意思是退出,所以在do循环的循环体内加入exit将迫使 循环立即终止,即退出循环体,而继续执行循环结构以后的语 句。通常exit与if语句配合使用,即
Do
( 3 )由于每循环一次循环变量自动增 加一个步长的值,因此退出循环后循环 变量的值,比最后一次循环时循环变量 的值多1个步长。
三、do循环举例
x 2 x3 xn 例1:输入x、n,计算输出: y 1 x 2! 3! n!
分析:累加项可表示为递推 Fi=Fi-1*x/i,用赋值语句 F=F*x/i 来实现。重复加是循环操作,程序为:
其中:(1)表示循环的条件表达式,要用括号括起来; (2)循环体是在循环过程中被重复执行的语句组; (3)end do是循环结束的终端语句,do while语句与 end do语句要配合使用。
2015/12/20 13
比如:
real:: p=1.0 do while (P>0) print*,p read*,p end do End 该程序输出所输入的全部正数,直到输入负数或零,程序 结束。 (4)对于循环次数确定的循环问题也可以使用 do while语句 来实现,比如:求5!
例如:求1~100中全部奇数之和。 注意: 在程序中,do语句中的内容省略,表示 循环条件永远成立。当 x 为偶数时执行 cycle语句---直接执行下一次循环。当 x 大于 100 时,执行 exit 语句 --- 跳出循 环体。
2015/12/20
do x=x+1 if(mod(x,2)= =0)then cycle else if(x>100)then exit else y=y+x end if end do print*,y End
2015/12/20 8
例3:找出3位整数中全部的水仙花数。 分析:利用do循环逐一判断3位整数[100,999]中哪些是水仙花 数,并输出,程序为:
Integer m,m1,m2,m3,n Do m=100,999 m1=m/100 m2=mod(m/10,10) m3=mod(m,10) n=m1**3+m2**3+m3**3 If(n.eq.m) Print*,m,’是水仙花数’ End do end
1、do循环结构;
2、do while循环结构。
2015/12/20 1
§1
用do语句实现循环
循环次数事先可以确定下来,用 do 语句实现循环,非常方 便。比如,当 x=1 、 2 、 3 、 … 、 10 时,分别计算 lnx 和 sinx 的值,用do循环实现的程序如下: Integer x Do x=1,10,1
2015/12/20 7
例 2 :输入一个整数,判断并输出是否为完数(除自身外所有 因子之和等于本身的数),比如6=1+2+3,所以6是完数。 分析:因为找一个整数的因子及求它们的和可以用循环来实现, 而用选择结构可进行判断与输出其是否为完数,程序为:
Integer m,i,sum Read*,m Sum=0 Do i=1,m/2 !求除本身之外的因子及之和 If(mod(m,i).eq.0) sum=sum+i End do if(m.eq.sum)then Write(*,*) m,”是完数” Else Print*,m,’不是完数’ End if end
相关文档
最新文档