fortran循环结构及基本语句..
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
假
判定条件 真
计数型ห้องสมุดไป่ตู้
当型
直到型
[例5.1] 求S=1+2+3+…+N的值(N由键盘输入,N>2)。编写程序。 解:求解这一问题,将执行N-1次加法运算。 如果将等式写成S=0+1+2+…+N,则执行N次加法运算。 重复问题易采用循环结构实现。 用S保存和,用N保存最大求和值,用I作计数器。编写程序如下:
真
执行循环体 v+e3 v r-1 r DO循环语句下面一条语句
5.3 使用DO WHILE循环语句实现循环
<DO循环语句>→[<名字>:] DO WHILE (<循环条件>) <语句1>
<语句2>
…… <语句n> ENDDO [<名字>] 说明:
循环体
① 循环条件可以是关系表达式,也可以是逻辑表达式,但不能是算术 表达式或字符表达式。 ②使用DO WHILE语句时要特别注意死循环的产生,要保证循环体中至少 有一条对循环控制条件有影响的语句,否则将产生死循环。
<DO循环语句>→[<名字>:] DO <v>=<e1>,<e2>[,<e3>]
<语句1> <语句2> ……
<语句n>
ENDDO [<名字>] 说明: ①v为循环变量,一般为整型变量,用来控制循环次数。e1、e2和e3为表达式, 其类型与循环变量类型相同。e1代表循环变量v的初值,e2代表循环变量v的 终值,e3代表循环变量v的步长,e3可缺省,e3缺省指e3为1。 ②循环次数计算公式是:MAX((e2-e1)/e3 + 1 ,0)。 ③如果e3>0,则一般要求e1≤e2,否则循环次数为0,即循环体一次也不执行。 ④如果e3<0,则一般要求e1≥e2,否则循环次数为0,即循环体一次也不执行。 ⑤在循环体中可引用循环变量v的值,但不能赋值,即修改它的值。
DO WHILE循环语句在每次循环体执行前都要计算表示循环控 制条件的逻辑表达式,其计算结果决定循环体是否继续执行,循环 体的执行过程必须对循环控制条件产生影响。
PROGRAM cycle2
sum=0
计算表示循环控制条件的逻辑表达式 READ(*,*)x 结果赋予log log=.TRUE. 真 执行循环体 循环语句下面一条语句 假
Program ex3
INTEGER REAL av sum=0 sum,n,x
n=0
READ(*,*)x DO WHILE (x/=-1) n=n+1 sum=sum+x READ(*,*)x ENDDO av=sum/n WRITE(*,*) '平均成绩为:',av END
5.2 使用DO循环语句实现计数型循环
DO循环语句执行过程说明:下面DO循环语句的循环次数为5: M=1;N=5;L=1
DO I=M,N+5,L+1
write(*,*)I,M,N,L
!输出1、3、5、7、9
M=M+1;N=N*I;L=2*L+I ENDDO
程序运行后,输出结果为:
1 3 5 7 9 1 2 3 4 5 5 5 15 75 525 1 3 9 23 53 计算表达式e1,e2,e3 e1 v 计算循环次数r:MAX(INT((e2-e1)/e3+1),0)r r 0 假
sum=0.0
DO I=1,50,1 READ(*,*) x sum=sum+x ENDDO WRITE(*,*)'sum=', sum END
(5)I+1I。
(6)转步骤(3)。 (7)输出结果sum。 (8)结束。
对于上述算法和程序,不管程序规模多大,长度不变。
循环结构分为两类:
循环体的循环次数事先确定(如[例5.1]中循环结构),这类循环结 构称为确定性循环,或称“计数型”循环,使用计数型循环语句 (如DO循环语句)实现这类循环结构。循环次数为:MAX((终值初值)/步长+1,0)。
DO WHILE (0<=x .AND. x<=100) sum=sum+x READ(*,*) x ENDDO Write(*,*)'sum=',sum END
5.4 使用IF和GOTO语句实现循环
用IF语句实现选择结构,用GOTO语句实现无条件控制转移,两者结合可实现循 环结构,特别是“直到型”循环结构。IF语句给出循环条件,GOTO语句控制循 环转移。由于GOTO语句易造成程序错误,故现代程序设计方法不提倡使用此法 实现循环。 Program INTEGER M,N,R1,R2,R3,gcd,lcm read(*,*)'输入两个自然数:' read(*,*)M,N R1=M;R2=N 100 R3=MOD(R1,R2) !求R1除以R2的余数 R1=R2;R2=R3 IF (R2/=0) GOTO 100 !或 IF (R2==0)THEN ! ELSE ! GOTO 100 ! ENDIF gcd=R1;lcm=M*N/gcd WRITE(*,"(1X,I3,'和',I3,'的最大公约数为:',I3)")M,N,gcd WRITE(*,"(1X,I3,'和',I3,'的最小公倍数为:',I3)")M,N,lcm END
第五讲
循环结构及基本语句
5.1 循环结构概述
对于问题规模较大的重复问题适宜采用循环结构。
如:从键盘输入50个数,求50个数之和,并输出。 求解算法: (1)初始化:0.0sum。 (2)1I。 (3)如果I>50,则执行步骤(7)。 (4)输入一个数x,并累加到sum中。 求解程序: Program ex1
循环体的循环次数事先不确定(如[例5.2]中循环结构),这类循环 结构称为非确定性循环,或称“条件型”循环,使用条件型循环语 句(如DO WHILE循环语句)实现这类循环结构。条件型循环又分 “当型”循环和“直到型”循环。
初值循环变量v v≤终值 真 v+步长v 假
判定条件 真 循环体
假 循环体
Program ex2
INTEGER S,N,I
READ(*,*)N
S=0
DO I=1,N,1 S=S+I EDNDO WRITE(*,*) 'S=',S END
[例5.2] 读入某班级考试成绩(人数不定),计算其平均成绩,并输出。
解:由于学生人数不定,所以输入的学生成绩个数不确定,以输入-1作 为结束标志(因为成绩不可能为负数),从而动态确定学生人数n。 平均成绩计算公式是:av=(x1+x2+…+xn)/n