资源描述:
《fortran循环结构及基本语句》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五讲循环结构及基本语句5.1循环结构概述对于问题规模较大的重复问题适宜采用循环结构。如:从键盘输入50个数,求50个数之和,并输出。求解算法:求解程序:(1)初始化:0.0sum。(2)1I。(3)如果I>50,则执行步骤(7)。(4)输入一个数x,并累加到sum中。(5)I+1I。(6)转步骤(3)。(7)输出结果sum。(8)结束。对于上述算法和程序,不管程序规模多大,长度不变。Programex1sum=0.0DOI=1,50,1READ(*,*)xsum=sum+xENDDOWRITE(*,*)'sum=',sum
2、END循环结构分为两类:循环体的循环次数事先确定(如[例5.1]中循环结构),这类循环结构称为确定性循环,或称“计数型”循环,使用计数型循环语句(如DO循环语句)实现这类循环结构。循环次数为:MAX((终值-初值)/步长+1,0)。循环体的循环次数事先不确定(如[例5.2]中循环结构),这类循环结构称为非确定性循环,或称“条件型”循环,使用条件型循环语句(如DOWHILE循环语句)实现这类循环结构。条件型循环又分“当型”循环和“直到型”循环。初值循环变量vv≤终值v+步长v假真计数型判定条件判定条件循环体假真循环体假真当型
3、直到型[例5.1]求S=1+2+3+…+N的值(N由键盘输入,N>2)。编写程序。解:求解这一问题,将执行N-1次加法运算。如果将等式写成S=0+1+2+…+N,则执行N次加法运算。重复问题易采用循环结构实现。用S保存和,用N保存最大求和值,用I作计数器。编写程序如下:Programex2INTEGERS,N,IREAD(*,*)NS=0DOI=1,N,1S=S+IEDNDOWRITE(*,*)'S=',SEND[例5.2]读入某班级考试成绩(人数不定),计算其平均成绩,并输出。解:由于学生人数不定,所以输入的学生成绩个数不确定,
4、以输入-1作为结束标志(因为成绩不可能为负数),从而动态确定学生人数n。平均成绩计算公式是:av=(x1+x2+…+xn)/nProgramex3INTEGERsum,n,xREALavsum=0n=0READ(*,*)xDOWHILE(x/=-1)n=n+1sum=sum+xREAD(*,*)xENDDOav=sum/nWRITE(*,*)'平均成绩为:',avEND5.2使用DO循环语句实现计数型循环→[<名字>:]DO=,[,]<语句1><语句2>……<语句n>ENDDO[<名字
5、>]说明:①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循环语句执行过程说明:下面D
6、O循环语句的循环次数为5:M=1;N=5;L=1DOI=M,N+5,L+1!输出1、3、5、7、9write(*,*)I,M,N,LM=M+1;N=N*I;L=2*L+IENDDO程序运行后,输出结果为:11513253531597475239552553计算表达式e1,e2,e3e1v计算循环次数r:MAX(INT((e2-e1)/e3+1),0)rr0执行循环体v+e3vr-1rDO循环语句下面一条语句真假5.3使用DOWHILE循环语句实现循环→[<名字>:]DOWHILE(<循环条件>)<语句1>
7、<语句2>……<语句n>ENDDO[<名字>]说明:①循环条件可以是关系表达式,也可以是逻辑表达式,但不能是算术表达式或字符表达式。②使用DOWHILE语句时要特别注意死循环的产生,要保证循环体中至少有一条对循环控制条件有影响的语句,否则将产生死循环。循环体DOWHILE循环语句在每次循环体执行前都要计算表示循环控制条件的逻辑表达式,其计算结果决定循环体是否继续执行,循环体的执行过程必须对循环控制条件产生影响。计算表示循环控制条件的逻辑表达式结果赋予loglog=.TRUE.循环语句下面一条语句真假执行循环体PROGRAMcycl
8、e2sum=0READ(*,*)xDOWHILE(0<=x.AND.x<=100)sum=sum+xREAD(*,*)xENDDOWrite(*,*)'sum=',sumEND5.4使用IF和GOTO语句实现循环用IF语句实现选择结构,用GOTO语