1、第5章 循环结构程序设计,5.2 无循环变量的DO结构,5.3 带循环变量的DO结构,5.4 DO WHILE结构,5.5 DO结构嵌套,5.6 隐含DO循环,5.7 程序举例,主要内容,5.1 引言,5.1 引言,例1 打印sinx的值,每10度为一个间隔,x的范围为0360。 请采用顺序结构编写该程序。,PROGRAM MAINREAL:PIPI=3.14159/180PRINT*,SIN(0)PRINT*,SIN(10*PI)PRINT*,SIN(20*PI)PRINT*,SIN(360*PI) END PROGRAM MAIN,利用循环结构实现如下:,PROGRAM MAINREAL:
2、X,PIX=0PI=3.14159/180DOPRINT*,SIN(X*PI)X=X+10IF (X360) EXITENDDO END PROGRAM MAIN,常见的循环运算还有:,循环的分类:,1、已知循环次数 2、已知循环条件 循环的表示及适用范围: 循环均由Do结构表示,其Do结构共有三种形式:1不带循环变量的DO结构2带循环变量的DO结构3Do WHILE循环结构,5.2 不带循环变量的DO结构,一、一般形式 结构名:DO !循环开始语句循环体 !循环体ENDDO 结构名 !循环结束语句,说明: 1、结构名可以省略,多层嵌套时,为使结构清晰才用; 2、循环体可以为0n条语句或结构,
3、包含以下语句:重复语句,循环变量的变化,循环控制语句等; 3、DO 循环入口语句,只能从该语句进入循环; 4、ENDDO 循环终止语句,可以不经过该语句退出循环,无循环变量的DO结构,使用范围: 循环次数未知,仅给定了循环终止条件,二、无循环变量的DO结构执行过程:,进入DO结构后,从DO语句下面第一句执行起顺次执行到END DO前的最后一句, 再返上来从DO语句下面第一句执行起,重复执行整个DO块。 如此反复执行DO块,其间如遇到EXIT语句,就停止执行DO块,退出循环,转向执行END DO下面的语句。 对于不带控制变量的DO结构,DO块中必须有EXIT语句,使它停止循环,否则循环将无休无止
4、一直进行下去,形成死循环。,例:,DO READ *,XSUM=SUM+XPRINT *,SUM END DO,该DO 结构是一个无休止的循环,称为死循环 要终止该循环必须添加一个出口EXIT语句。,三、 EXIT和CYCLE语句,1、EXIT语句 循环出口语句,一般形式为: EXIT DO结构名 作用:停止循环,将控制转移到当前循环(或指定do结构)之外。 一般用法 IF (逻辑表达式) EXIT DO结构名,EXIT语句流程图:,语句组 EXIT 语句组,对上例改进后:,DO READ *,XIF(X=0) EXITSUM=SUM+XPRINT *,SUM END DO,分析:这类问题关键
5、在找通项ai,只要给出n值,用循环n次的DO循环结构,每次循环时累加一个ai即可。需要的变量有:累加项数I ,通项T,总和S,总项数N。,例5-2求,PROGRAM MAINIMPLICIT NONEINTEGER:N,I=1REAL:T,S=0.0READ *,NDO T=1.0/I !通项S=S+T !累加和I=I+1 !累加项数IF(IN) EXITENDDOPRINT *,“SUM=“,S END PROGRAM MAIN,2 、CYCLE语句,短路语句,一般形式为: CYCLE DO结构名 作用:在循环执行到该语句时,跳过循环体在它后面的那些语句。再从循环体的第一条语句开始执行。 一
6、般用法:IF (逻辑表达式) CYCLE DO结构名,例5-3:求一批数中,负数的个数及负数的总和。,要求从键盘一个一个的输入,当输入的数据为0时,终止循环。 分析 重复:计数 num=num+1求和 sum=sum+x 终止:if(x=0) exit 跳过:if(x0) cycle,例:求一批数中,负数的个数及负数的总和。,DO READ *,XIF(X=0) EXITIF(X0) CYCLENUM=NUM+1SUM=SUM+X ENDDO,DO READ *,XIF(X=0) EXITIF(X0) THENNUM=NUM+1SUM=SUM+XENDIF ENDDO,例5-5 用迭代法求方程
7、X2+4X+1=0的根。,算法: 将方程改写成X=f(X)形式。令x=(-x2-1)/4 找出初值X0,代入上式,求得X1; 将X1作为X0,代入上式,求得新的X1; 反复代入,这就是迭代法; 当两次求得的X1的值达到一定精度,即|xn+1-xn|时,则得到方程的根。 如果迭代一定次数仍达不到给定精度,则认为迭代可能是发散的,就不再迭代下去了,并给出相应提示信息。,PROGRAM ITERATIONIMPLICIT NONEINTEGER:I,M !M用于控制迭代次数REAL:X0,X,EREAD*,X0,E,MI=0DOX=(-X0*X0-1)/4IF(ABS(X-X0)=M) THENPR
8、INT*,DEVERGENT!EXITENDIFENDDOIF(IM)PRINT (1X,“I=“,I4,4X,“X=“,F12.7),I,X END PROGRAM ITERATION,5.3 带循环变量的DO结构,使用范围:计数型循环已知循环次数 一般形式: 结构名: DO 循环控制变量V=初值e1, 终值e2 , 步长值e3 循环体 !重复执行的语句 ENDDO DO结构名 e1、e2、e3可以是正值,也可以是负值,最好是整型。 例:DO I=1,100,2S=S+IENDDO,执行过程,计算初值、终值、增量(步长)的值,并将它们转换成循环变量的类型,计算得到的值不再发生变化。 将初值赋
9、予循环变量,即v=e1。 计算应循环的次数。 检查循环次数,若0则跳过循环体,执行end do语句下面的一个执行语句。如果0,则执行循环体。 执行终端语句时,循环变量增加一个步长。 循环次数减1。 返回,重复执行。,流程图:,计算e1、e2、e3的值 循环变量置初值v=e1,计算循环次数R,R0,执行循环体,V=v+e3 R=R-1,是,否,例:求1到10这十个数的和与连乘积,求若干个数之和或连乘积,可采用“累加”或“累乘”法。 累加法是设置一个存放和数的变量,称为“累加器”,初始值为0,累加过程通过循环实现; 累乘的算法设置的是“累乘器”,初始值为1,在循环体内,乘数应与累乘器相乘。设置适当
10、的数据类型。,程序代码:,PROGRAM LEIJIAIMPLICIT NONEINTEGER:I,SUMSUM=0DO I=1,10SUM=SUM+IENDDOPRINT*,1+2+3+10=,S END,“累加器”,初始值为0,累加,有关注意事项:,e1,e2,e3可为常量、已有值的变量或表达式 e3=1时可省略 2. v与e1,e2,e3类型不一致,按赋值语句转化。do I=1.5,3.6,1.2 do I=1,3,1 3. 语句执行次数: do语句:1次(负责赋初值和循环次数的计算) 循环体语句次数:max(int(e2-e1+e3)/e3), 0),计算公式: max(int(e2-
11、e1+e3)/e3), 0),循环次数r的计算:,DO I = 2,20,2 DO A= 0.5,6.6,1.3 A实型 DO I = 0.5,6.6,1.3 I整型 DO X= -0.5,-1.5,-0.3 DO I = 20,2,2,r = 10,r = 5,r = 7,r = 4,r = 0,设计DO循环时,应避免以下两种情况:(1)e1e2, 而e30(2)e1e2, 而e30,有关注意事项:,4、 e3不允许为零(可正、可负),否则程序出错do I=1.5,6.5,-0.5 I的取值为:? 5、循环变量可不在循环体内出现,仅控制循环次数。do I=1,10print*,aenddo,
12、有关注意事项:,6、DO循环变量在循环体内不能赋以新值,但可以引用。即循环变量在循环体中不能出现在赋值号的左边。 例: DO I=3,6I=I+1 !错误J=I+1;PRINT*,IENDDO,7、循环变量在循环体内不能被重新赋值,但在循环体外可以被重新赋值。两个并列的DO循环可以使用相同的循环变量DO I=1,10,2ENDDO I=20 DO I=1,5ENDDO,有关注意事项:,有关注意事项:,8、循环变量的初值E1、终值E2和步长E3只是在循环入口有效,进入循环后,它的值与循环次数无关。即循环的初值、终值和步长一旦确定,永不再变。 例如:,integer:i,j,m m=2 do i=
13、1,10,mj=j+im=m+1 enddo print *,j,i,m end,M=3 DO K=1,M M=M+1 WRITE(*,*)K,M END DO END,3,2,有关注意事项:,9、在带循环变量DO 结构中仍可使用EXIT和CYCLE语句。 10、在DO结构中包含的IF结构和CASE结构等必须是完整的结构, 不允许出现结构的交叉。DO I=1,10IF(e) THENENDDOENDIF,有关注意事项:,11、循环可以不经ENDDO终止,但是不能从循环体外转入循环体内(GOTO)。例,以下结构是非法的:DO I=1,N10: A=A+1ENDDOGOTO 10,有关注意事项:,
14、12、给定一个循环,首先要判断循环是否一次也不做。如果循环一次也不做,循环变量的值如何? 例: S = 0DO i = 10 , 1S = S + iEND DOPrint *, S, i,有关注意事项:,13、循环正常退出时,v的值超过循环变量的终值;循环非正常退出时,v保持当前值。,例1: INTEGER:I REAL:A=0 DO I=1,10A=A+I ENDDO PRINT*,I END,例2: INTEGER:I REAL:S=0 DO I=1,10,2S=S+IIF(I=5) EXIT ENDDO PRINT*,I END,只要能被2到N-1之中的任一个数整除,N就不是素数,否则
15、N就是素数,1不是素数,2是特殊的素数。 定理:mod(N,2),mod(N,3),mod(N,N-1),如余数均不为0, N为素数。 分析: 重复求余(通项)、判定do结构余数:等于零终止循环,不是素数不等于零,继续循环,常常利用这种特点来进行问题的求解。 例5-6:判断一个整数N是否为素数。,例5-6:判断一个整数N是否为素数。,PROGRAM PRIMEIMPLICIT NONEINTEGER:N,IREAD*,NDO I=2,N-1IF(MOD(N,I)=0) EXITENDDOIF(IN-1)THENPRINT*,N,IS A PRIME NUMBER.ELSEPRINT*,N,IS
16、 NOT A PRIME NUMBER.ENDIF END,N/2或SQRT(REAL(N),5.4 DO WHILE 结构,DO WHILE结构的一般形式: 结构名: DO WHILE(逻辑表达式)循环体END DO 结构名,相当于: DO IF(.NOT.逻辑表达式)EXIT循环体 END DO,例5-18:输入M、N,求最大公约数。,分析:辗转相除法(欧几里德算法)M N R(M和N的余数)21 6 36 3 0当R为零时,N为最大公约数。,是,否,程序代码:,PROGRAM GCDIMPLICIT NONEINTEGER:M,N,RPRINT*,INPUT M,N:READ*,M,NR
17、=MOD(M,N)DO WHILE (R/=0)M=NN=RR=MOD(M,N)ENDDOPRINT*,THE GCD IS,N END,改为不带循环控制变量的DO结构:,PROGRAM GCDIMPLICIT NONEINTEGER:M,N,RPRINT*,INPUT M,N:READ*,M,NDO R=MOD(M,N)IF (R=0) EXIT M=NN=RENDDOPRINT*,THE GCD IS,N END,思考:如何求两个数的最小公倍数?,最小公倍数=M*N/最大公约数,5.5 DO结构嵌套,DO结构嵌套:一个DO结构循环体内可以包含另一个完整的DO循环结构,这就是DO循环结构的嵌
18、套 注意: 1、内循环必须完全嵌套在外循环体内,不能相互交叉。 ii: do i=1,2 jj: do j=2,4enddo jjenddo ii,DO结构嵌套注意事项:,2、循环嵌套中各层的循环控制变量不能同名; 3、执行到EXIT语句,没有指明结构名时,转到当前循环体外;若指定了结构名,则转出该结构名代表的循环体外; 4、可以从循环体内转到循环体外,但不允许从DO结构外转到DO结构内!,II: DO I=3,50 JJ: DO J= 2,I-1IF (MOD(I,J)=0) EXITEND DO JJIF(J=I) PTINR*,IEND DO II,IF (MOD(I,J)=0) EXI
19、T II,例:,嵌套DO结构的执行过程:,do i=1,3do j=1,2print*,i*jenddo enddo print*,i,j end,分析:,画表法 I = 1 2 3 J= 1 2 1 2 1 2 1、表决定了执行的顺序和次数 2、执行重复语句:注意语句的位置(决定语句执行的次数) 3、内循环体语句的次数计算( mn ),例:求1!+2!+3!+4!+5!,INTEGER:SUM,I,P SUM=0 DO I=1,5P=1DO J=1,IP=P*JENDDOSUM=SUM+P ENDDO PRINT*,SUM END,算法说明:,I:,J:,Int(i/2),Sqrt(real
20、(i),例5-11:求出2050之间的全部素数,程序代码:,PROGRAM PRIME20_50IMPLICIT NONEINTEGER:I,JDO I=20,50DO J=2,SQRT(REAL(I)IF (MOD(I,J)=0) EXITENDDOIF (JSQRT(REAL(I) PRINT*,IENDDO END,SQRT(I*1.0),例5-11:算法2(使用逻辑变量),PROGRAM PRIMEIMPLICIT NONEINTEGER:I,JLOGICAL:SWITHDO I=20,50SWITH=.TRUE.DO J=2,SQRT(REAL(I)IF(MOD(I,J)=0) TH
21、ENSWITH=.FALSE.EXITENDIFENDDOIF(SWITH) PRINT*,IENDDO END,对任意I,先假定I是素数,SWITH=.TRUE.,例5-12:求出全部的水仙花数。,水仙花数:各位数字的立方和等于该数 例如:153=13+53+33 “穷举法”,算法1:,PROGRAM FLOWERIMPLICIT NONEINTEGER:I,J,K,M,NDO I=1,9DO J=0,9DO K=0,9M=I*100+J*10+KN=I*3+J*3+K*3IF(M=N) PRINT (I4),MENDDO ENDDO ENDDO END PROGRAM FLOWER,找出所
22、有可能,即穷举 注意:a不能从0开始,算法2(习题5.14):,PROGRAM FLOWERIMPLICIT NONEINTEGER:I,A,B,C,MDO I=100,999A=I/100B=MOD(I,100)/10C=MOD(I,10)M=A*3+B*3+C*3IF(M=I) PRINT*,IENDDO END PROGRAM FLOWER,采用一重DO结构即可实现。注意数字分解的算法P91,5.6 隐含DO循环,隐含DO循环实际上是带控制变量的DO结构。但简化成只有DO结构的第一句,且把DO关键字隐去。 隐含DO循环的形式为: (list,v=u1,u2,u3) 说明: 1、左括号相当
23、于DO,右括号相当于ENDDO; 2、List可以是一个或多个常量、变量、数组元素等,甚至可以是另外的隐含DO循环(隐含DO循环嵌套),类似于: do v=u1,u2,u3list enddo,区别?,READ *,(A(I),I=1,5) READ *,A(1),A(2),A(3),A(4),A(5),DO I=1,5READ *,A(I) END DO,不能独立存在,主要用于输入输出语句,常用于数组的输入输出。,区别?,DO I=1,5PRINT (5I5), A(I) END DO,PRINT (5I5),(A(I),I=1,5) PRINT (5I5), A(1),A(2),A(3),
24、A(4),A(5),有格式输出例:,区别?,1、输入、输出格式的区别:,隐DO、显DO执行过程的区别,PRINT *,(I,I=1,3),DO I=1,3PRINT*,I ENDDO,PRINT*,1,2,3 输出一行,PRINT*,1 PRINT*,2 PRINT*,3 输出三 行,READ (6I3) ,(x,y,I=1,3) 如输入 1 2 3 4 5 6 X,Y的值为 。,练习:,DO I=1,3READ(2I3),X,Y ENDDO,必须输入三 行 1 2 3 4 5 6,隐含do循环只能用于输入、输出语句和数组构造器中,错例,S=0 S=S+(I,I=1,3),几种常见的隐含DO循
25、环的形式,1.按指定步长读写。例如PRINT *,(J,J=1,7,2) 2.隐含DO循环与普通变量混合使用。例如PRINT *,A,B,(X(I) ,I=1,3),C 3.用于输出一些特殊符号。例如PRINT *,(-,I=1,80) 4.隐含DO循环可以并列出现。例如print *,(I,I=1,2),(J,J=1,2),PRINT *,(a,J=1,2),I,I=1,2),即 PRINT*, (a,J=1,2),1, (a,J=1,2),2,输出结果:aa 1 aa 2,5.隐含DO循环可以嵌套使用。例如:,练习:用隐DO循环语句打印下列图案: * * * * * *,分析: (1)这是
26、一个典型的循环嵌套问题; (2)该图案中一共有6行,打印时需一行一行进行,设正在处理的行为第 i 行,则 i 从1 6; (3)每行的字符个数与所在行有关,设 j 表示第 i 行第 j 个字符,则 j 从 1 2*i-1; (4)每行的起始位置。设第一行为第20列的话,则第 i 行的位置可用21-i 来表示。,参考代码:,PROGRAM STARINTEGER:I,JDO I=1,6PRINT *,( ,J=1,21-I),(*,J=1,2*I-1)ENDDO END,经典程序讲解,数学游戏类问题:例5-13验证角谷猜想,角谷猜想是日本数学家角谷静夫提出的。 思路为: 任意一个自然数,若为偶数
27、则除以2;若为奇数则乘以3后加1。如此经过有限次运算后最终能得到自然数1。 算法思想:读入一个数,用不带循环变量的DO循环验证,为1时退出。,PROGRAM SUPPOSEIMPLICIT NONEINTEGER:N,I=0READ*,NDOIF(MOD(N,2)=0)THENN=N/2ELSEN=N*3+1ENDIFPRINT (3X,I5),NI=I+1IF(N=1) EXITENDDOPRINT (1X,“I=“,I5),I END PROGRAM SUPPOSE,验证角谷猜想,验证成功退出,例5-17验证哥德巴赫猜想,内容为: 任意一个大偶数(4)可表示为两个素数之和。 注意: 对于一
28、个大偶数只需表示成一对素数之和即可验证。例如:10=3+7、10=5+5、10=7+3,我们只取第一种组合为答案。 算法思想: 对一个偶数N,从2开始找到一个较小的素数I,只要判断另一个数N-I也是素数即可;若N-I不是素数,则增大I,再找到稍大一点的素数I,直到N-I也是素数为止。,PROGRAM GUESS_PRIMEIMPLICIT NONEINTEGER:N,I,I1,K !I1表示N-I的值LOGICAL:A,BREAD*,NDO I=2,N-2A=.TRUE. !逻辑变量A标记I是否为素数DO K=2,I/2IF(MOD(I,K)=0) A=.FALSE.ENDDOI1=N-IB=
29、.TRUE. !逻辑变量B标记I1是否为素数DO K=2,I1/2IF(MOD(I1,K)=0) B=.FALSE.ENDDOIF(A.AND.B)THENWRITE(*,(1X,I4,“=“,I4,“+“,I4)N,I,I1EXITENDIFENDDO END PROGRAM GUESS_PRIME,例:习题5-17(P107),找出21000间的全部同构数。 所谓同构数是指这样的一个数:它出现在它的平方数的右端。例如:5,6,25等。 算法思想: 对一个数N,先求出它的平方数,再根据该数是1位、2位、3位分别使用MOD函数取相应的平方数的右端位数,最后比较得出结论。,PROGRAM TGS
30、IMPLICIT NONEINTEGER:I,MINTEGER:NDO I=2,1000N=I*IIF(I10) THENM=MOD(N,10)ELSEIF(I100) THENM=MOD(N,100)ELSEM=MOD(N,1000)ENDIFIF(M=I) PRINT*,IENDDO END PROGRAM TGS,IF结构判断I是几位数?,MOD函数取平方数的右边,数学公式问题:例5-14求以下公式的值:,通项的绝对值小于10-12时停止累加。,分析:,重复执行: S新=S原+通项循环变量n为项数循环次数未知,但已知循环条件,通项,累加和算法?,1、重复语句 计算通项AS=S+A2、 D
31、O结构的选择与写法三种循环结构循环体的区别3、循环初值的确定:第一次循环所需要的值,循环结构编程步骤?,如何用前一项表示后一项? 迭代算法: A=A/N,注意:分母不能为零!,此题适合使用不带循环变量的DO结构表示 PROGRAM MAINIMPLICIT NONEREAL(KIND=8):S,A !S表示和,A表示通项INTEGER:NS=1.0_8 !使用种别为8的实型变量以达到更高的精度(P101)N=1;A=1.0DOA=A/NIF(ABS(A)1E-12) EXITS=S+AN=N+1ENDDOPRINT (1X,I4,F16.12),N,S END,阅读程序 验证,如何用前一项表示
32、后一项? 迭代算法,注意:分母不能为零!,累加求和;循环变量的变化,类似例1:求以下公式的值:,当通项的绝对值小于10-10时停止累加。,分析:,重复执行: S新=S原+通项循环变量n为项数循环次数未知,但已知循环条件,通项,a=a*x/N,此题若使用DO WHILE结构表示 n=1;a=1.0;s=1.0 READ*,x Do WHILE(abs(a)=1E-10)a=a*x/nS=s+an=n+1 enddo,先项数-分子、分母不得为零 再将项数代入通项计算公式,决定通项后看累加和语句,条件相反、循环体相同,阅读程序 验证,例2、求以下公式的值:,当通项的绝对值小于10-5时停止累加。,分
33、析:,通项,累加和算法重复执行 S新=S原+通项A 循环变量n为项数循环次数未知,但已知循环条件,用DO WHILE结构表示 n=1; s=0 Do WHILE(abs(a)=1e-5)a= (-1)*(n-1)*1.0/nS=s+an=n+1 enddo,用不带循环变量的DO结构表示 n=1; s=0 Doa=(-1)*(n-1)*1.0/nIf(abs(a)1e-5)exitS=s+an=n+1 enddo,阅读程序验证: 条件a未定义,表达式的写法,改变初值或语句顺序 原则:程序执行结果与公式一致,引申:例3求下列公式的值,重复:,S=S+A,注意:分母不能为零!,求最大值最小值问题:,
34、例5-10: 有一批实数,用零作终止标记。请编写程序找出这批数中的最大值,并求出该最大值是这批数中的第几个数(若最大值数多次出现,只打印出第一个位置)。,引入变量BMAX存放最大值IMAX存放最大值序号,分析:,1、赋初值:输入第一个数,假设是最大值,2、重复:输入其它数,与最大值比较,遇零终止。,选择结构,赋值语句, Read*,x I=1 Bmax=x;Imax=I Read*,x Do while (x/=0)I=I+1If(xBmax)thenBmax=x;Imax=IEndifRead*,x Enddo Print*,Bmax,Imax ,数据的输入格式: 2 8 3 10 6 0
35、错误的输入格式: 2,8,3,10,6,0,阅读程序 验证,If(xBmax)Bmax=x Imax=I 错误, Read*,x I=1 Bmax=x;Imax=I DoRead*,x If(x=0) ExitI=I+1If(xBmax)thenBmax=x;Imax=IEndif Enddo Print*,Bmax,Imax ,改用不带循环变量的DO结构,例:求数列1,1,2,3,5,8的前30项。,利用未知项与已知项之间存在的某种关系,从已知项出发能逐项求出未知项的方法叫递推法。已知项是递推的初始条件,上式中 F1= 1和F2 = 1。未知项对已知项的某种依赖关系称为递推公式,如F(n)
36、=F(n-1) + F(n-2)。,裴波拉契数列的递推公式如下:,数学递推问题:,f1=1;f2=1;print*,f1,f2 n=3 do while(n=30)f=f1+f2print*,ff1=f2f2=fn=n+1 Enddo End,循环变量变化:体现递推(注意顺序),程序实现数学递推式:数学中的下标变量变为程序中的简单变量,继续循环的条件,例5-16:用牛顿迭代法求方程X3-4x-1=0的近似根。 (对比P85例5-5),已知x0=1.5,迭代公式为:,当|xn+1-x n|=10-5 ,x=xn,数学求根与积分问题:,x=1.5 y= x-(x*3-4*x-1)/(3*x*2-4
37、) Do while(abs(y-x)1e-5)X=y Y=x-(x*3-4*x-1)/(3*x*2-4) Enddo Print*,y end,循环条件的值,积分区间a,b由键盘输入,且0ab,例5-19:用梯形法计算下列定积分的值,分析:求定积分,在几何意义上就是求曲线f(x)=sinx,x轴,X=a及X=b所围成的曲边梯形的面积。见图5-7(P105),算法:1、将区间【a,b】划分N等分,即划分为N个小曲边梯形,每个小区间的宽度为:H=(B-A)/N; 2、设第i个小区间的左端点为xi,右端点为xi+1,则其面积为:si=(f(xi)+f(xi+1)H/2; 3、用带循环变量的DO结构
38、将N个小曲边梯形的面积累加。,PROGRAM TEGEREAL_SINXIMPLICIT NONEREAL:A,B,H,S,F0,F1,XINTEGER:N,IPRINT*,INPUT A,B,N:READ*,A,B,NH=(B-A)/NS=0.0;X=ADO I=1,NF0=SIN(X)F1=SIN(X+H)S=S+(F0+F1)*H/2X=X+HENDDOPRINT*,S END,小梯形的高,小梯形的上底,小梯形的下底,1、下面关于DO循环的规定,错误的是_。 (A) DO循环的循环控制变量不能在循环体内赋值 (B) DO循环的控制变量表达式,终值和步长可以是整型和实型 (C) DO循环是
39、当型循环 (D) DO循环的循环控制变量不能是双精度型,练习:,2、 有如下循环入口语句INTEGER:I DO I=-0.5,-0.5,-1.0该循环的执行次数为_。 (A) 0 (B) 1 (C) 出错 (D) 无限,练习:,B,3. 有如下循环入口语句DO I=1,15,3正常结束时I=_。 (A) 13 (B) 15 (C) 16 (D) 不一定,练习:,C,DO结构小结, DO结构共有哪三种形式?适用范围?,不带循环变量的DO结构,带循环变量的DO结构,DO WHILE循环结构,用于已知循环次数,用于已知循环条件,用于已知循环终止条件,练习:,DO WHILE 循环结构的循环体执行次数最少为 次 带循环变量的DO结构的循环体执行次数最少为 次 不带循环变量的DO结构的循环体执行次数最少为 次,0,0,1,本章小结,1、三种循环结构的适用范围和写法 2、三种循环结构的执行过程 3、循环结构的编程步骤、调试方法 4、三种循环结构循环体的区别 5、常见算法的理解和实现编程技巧 6、隐DO的写法、适用范围、执行过程与显DO的区别,本章作业,课后习题至少5道(讲过的除外) 发至邮箱: 邮件标题栏注明:专业班级、学号、姓名 邮件正文注明:第5章作业,