Fortran-第三讲(含习题课与实验.ppt

上传人:牧羊曲112 文档编号:5431270 上传时间:2023-07-06 格式:PPT 页数:36 大小:222KB
返回 下载 相关 举报
Fortran-第三讲(含习题课与实验.ppt_第1页
第1页 / 共36页
Fortran-第三讲(含习题课与实验.ppt_第2页
第2页 / 共36页
Fortran-第三讲(含习题课与实验.ppt_第3页
第3页 / 共36页
Fortran-第三讲(含习题课与实验.ppt_第4页
第4页 / 共36页
Fortran-第三讲(含习题课与实验.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《Fortran-第三讲(含习题课与实验.ppt》由会员分享,可在线阅读,更多相关《Fortran-第三讲(含习题课与实验.ppt(36页珍藏版)》请在三一办公上搜索。

1、Fortran程序设计,第三讲 循环控制,回顾第二讲,逻辑运算,逻辑常量:.TRUE.FALSE.关系运算符:=/=组合逻辑运算符:.AND.OR.EQV.NEQV.NOT.,IF结构,CASE结构,简单IF结构IF ELSE 结构IF ELSEIF ELSE 结构逻辑IF语句,选择子只能是整数、字符或逻辑表达式,第三讲 内容,DO循环DO WHILE循环迭代或计数循环CYCLE和EXIT语句习题课,循环结构,在程序设计中,总是会遇到一些重复执行的代码,显然,我们不可能将一段重复N次代码的代码书写N次,解决这一问题的方法是在程序中使用循环结构结构化程序设计中的三种基本结构顺序结构分支结构循环结

2、构,3.1 DO 循环,一般形式:DOIF(逻辑表达式)EXITEND DO在DO和END DO之间的语句块重复执行,直到逻辑表达式为真的时候,执行EXIT,EXIT的执行会控制程序转到END DO之后的第一条语句处,例:计算S=1+2+3+100的值INTEGER:i=1,s=0DOs=s+iIF(i=100)EXITi=i+1END DO,例:令s=1+2+3+n,求满足s5000的最小n值:INTEGER:i=1,s=0DOs=s+iIF(s5000)EXITi=i+1END DOWRITE(*,*)i,s,3.2 DO WHILE循环,一般形式:DO WHILE(逻辑表达式)END D

3、O,例:用DO WHILE形式实现例INTEGER:i=1,s=0DO WHILE(i=100)s=s+ii=i+1END DO,3.3 迭代或计数循环,通常,以特定次数执行一个语句块可以采用这样的形式:DO index=istart,iend,incrEND DOindex是整型变量,称为循环计数器或循环控制变量如果incr是1,也就是每循环一次,计数器加1的话,incr可以省略,详解,三个循环参数istart,iend和incr可以是常量、变量或表达式。如果是变量或表达式,其值是在循环开始前进行计算,产生的数值用于控制循环循环过程:在DO循环执行的开始处,程序将数值istart赋给控制变量

4、index,如果index*incriend*incr,程序执行循环体内的语句在循环体内的语句被执行后,控制变量重新计算为:index=index+incr如果index*incriend*incr,程序再次执行循环体内的语句只要index*incriend*incr,第二步就反复执行,当该条件不满足时,就跳到DO循环的结尾处执行其后面的第一条语句,循环次数的计算,DO i=1,10 END DO,DO i=1,10,2 END DO,DO i=1,10,-1 END DO,DO i=3,-3,-2 END DO,3.3 计数循环的使用细节,循环体内的语句缩进以提高程序的可读性控制变量不能在循

5、环体内修改计数器递增计数和递减计数都是可以的循环控制变量和参数,应该总是整数在循环体内,也可以采用IF()EXIT 语句随时退出循环如果循环正常结束,循环控制变量的值并不是确定的(依编译器而定),所以,不要依赖这个值,3.3 例程,用计数循环的方法来计算s=1+2+.+100,!例程3_3_1.f90PROGRAM example3_3_1INTEGER:i,s=0DO i=1,100 s=s+iEND DOWRITE(*,*)i,sEND PROGRAM example3_3_1,3.4 CYCLE语句,如果CYCLE语句在循环体内执行,那么当前循环马上会被中止,控制器将返回循环的顶部,继续

6、下一个循环,PROGRAM test_cycleINTEGER:iDO i=1,5IF(i=3)CYCLEWRITE(*,*)iEND DOWRITE(*,*)End of loop!END PROGRAM test_cycle,CYCLE常用来在循环中跳过某些特定的数,比如下面是跳过所有偶数:PROGRAM test_cycleINTEGER:iDO i=1,10IF(MOD(i,2)=0)CYCLEWRITE(*,*)iEND DOWRITE(*,*)End of loop!END PROGRAM test_cycle,3.4 例程,计算1到100之间所有个位数不为6的数的和,!例程:3_

7、4_1.f90PROGRAM test_cycleINTEGER:i,s=0DO i=1,100IF(MOD(i,10)=6)CYCLE s=s+iEND DOWRITE(*,*)i,sEND PROGRAM test_cycle,3.5 EXIT语句,在3.1中DO 和IF()EXIT构成了一个循环,在其它形式的循环中,EXIT语句仍可使用EXIT语句的应用会使循环控制更加灵活那么什么时候适用于EXIT语句呢?,例:计算,我们写一个程序计算前100项的和:PROGRAM test_exitINTEGER:iREAL:s=0DO i=1,100s=s+(1./2)*iWRITE(*,*)i,s

8、END DOWRITE(*,*)End of loop!END PROGRAM test_exit可以看到,当循环进行到第25次的时候,和数s已经收敛到1了,后面的循环没有意义,那么,如果控制循环,当输出达到我们的要求后就停止呢?,例:利用EXIT完成例,当前后两次计算得到的s之差小于我们给定的某值时,选择退出循环:!例程3_5_2.f90PROGRAM test_exitINTEGER:iREAL:s=0,tDO i=1,100t=ss=s+(1./2)*iWRITE(*,*)i,sIF(ABS(s-t)=0.000001)EXITEND DOWRITE(*,*)End of loop!EN

9、D PROGRAM test_exit,3.6 给循环命名,可以给循环指定一个名称,当循环比较大而且出现了多重嵌套的时候,会很有用,一般形式为:,名称:DO IF(逻辑表达式)CYCLE 名称IF(逻辑表达式)EXIT 名称 END DO 名称,名称:DO index=istart,iend,incr IF(逻辑表达式)CYCLE 名称IF(逻辑表达式)EXIT 名称 END DO 名称,CYCLE EXIT后面的名称是可选项,但是如果使用的话,必须和DO语句上的保持一致,3.7 嵌套循环,一个循环可以完全嵌入另外一个循环,这种情况叫循环的嵌套,PROGRAM nested_loopsINTE

10、GER:i,j,productDO i=1,3 DO j=1,3product=i*jWRITE(*,*)i,*,j,=,product END DOEND DOENDPROGRAM nested_loops,PROGRAM nested_loopsINTEGER:i,j,productouter:DO i=1,3 inner:DO j=1,3product=i*jWRITE(*,*)i,*,j,=,product END DO innerEND DO outerENDPROGRAM nested_loops,起名字:,如果交换END DO后面的inner与outer,会出错,嵌套必须是完全包

11、含,例:3_7_1.f90,如果CYCLE或EXIT语句出现在嵌套循环里,而且没有命名,那么CYCLE或EXIT作用于哪个循环呢?属于包含它的最内层循环我们将例改写一下执行结果?,PROGRAM nested_loopsINTEGER:i,j,productDO i=1,3 DO j=1,3IF(j=2)CYCLEproduct=i*jWRITE(*,*)i,*,j,=,product END DOEND DOENDPROGRAM nested_loops,起个名字会有更多的灵活性下面这个程序,将CYCLE指定给外层循环运行结果是?,PROGRAM nested_loopsINTEGER:i,

12、j,productouter:DO i=1,3 inner:DO j=1,3 IF(j=2)CYCLE outerproduct=i*jWRITE(*,*)i,*,j,=,product END DO innerEND DO outerENDPROGRAM nested_loops,3.8 IF与循环的嵌套,IF结构可以嵌入循环循环也可以嵌入IF结构如果嵌套,嵌入的结构必须完全在另外一个结构之内下面是错误的:,IF(ab)THEN.DO i=1,3.END IF.END DO,DO i=1,3.IF(ab)THEN.END DO.END IF,对前三讲内容的总结,程序的结构以PROGRAM p

13、rogram_name开始以END PROGRAM program_name结束声明语句必须放在第一条可执行语句之前程序分三种基本结构,以这三种基本结构为起点,构成复杂的程序,对前三讲内容的总结,基本的数据类型整型INTEGER:i,j,kINTEGER:i=1,j=2INTEGER,PARAMETER:UPPER=100实型REAL:aREAL:a=3.,b=4.1REAL,PARAMETER:PI=3.14字符CHARACTER(len=6):nameCHARACTER(7),PARAMETER:NAME=Richard,对前三讲内容的总结,算术运算与逻辑运算优先级运算顺序显示声明与隐式声

14、明IMPLICIT NONE内置函数,对前三讲内容的总结,IF结构,IF(逻辑表达式)THEN.END IF,IF(逻辑表达式)THEN.ELSE.END IF,IF(逻辑表达式)THEN.ELSE IF(逻辑表达式)THEN.ELSE IF(逻辑表达式)THEN.ELSE.END IF,对前三讲内容的总结,CASE结构,SELECT CASE(case_expr)CASE(情况选择_1)程序块1CASE(情况选择_2)程序块2CASE DEFAULT 程序块nEND SELECT,case_expr 不能是实型保留DEFAULT选择支是良好的编程习惯,对前三讲内容的总结,循环结构,DO.IF

15、(逻辑表达式)EXIT.END DO,DO WHILE(逻辑表达式).END DO,DO index=istart,iend,incr.END DO,CYCLE与EXIT的用法循环嵌套(外层循环必须完全包含内层循环)IF与循环嵌套(必须是完全包含的),Fortran程序设计,第三讲 习题课,程序设计一:example1.f90,计算机中,计算三角函数的值采用计算三角函数的无穷级数的前N项得到近似值,当误差小于计算机表示精度时,求得数值即为可用,展开表达式为:,其中N为保留在级数中的项数编写一程序,读入x的度数,然后利用上述公式计算x的正弦值,并与内置的正弦函数计算得到的值进行比较,程序设计二:

16、example2.f90,一门大炮以初速度300米/秒,与地面成theta角发射一发炮弹,假设空气的阻力总是与运动的方向相反,且与速度的平方成正比(阻力系数为k),炮弹出口时,阻力为炮弹重量的2倍,试求出炮弹的最大高度和水平射程,程序设计三:example3.f90,编程输出100以内的所有素数,实验一,实验目的:熟练掌握Fortran编程的流程熟练掌握前三讲的知识点实验内容:复合梯形求积分法的公式如下:,将积分区域分为n个相等的子空间,对每个子空间近似进行梯形求积式中h=(b-a)/n,也就是每个小梯形的宽度编程利用这个公式,计算积分分别把区间分为40,80和200个小区间,比较计算精度的情况,下周上课前交预习报告,预习要求:实验报告包含以下部分:完整的问题分析输入与输出变量的说明算法(伪代码或者框图都可以)源代码,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号