Fortran第三讲含习题课与实验

上传人:痛*** 文档编号:181930999 上传时间:2023-01-18 格式:PPT 页数:36 大小:224.50KB
收藏 版权申诉 举报 下载
Fortran第三讲含习题课与实验_第1页
第1页 / 共36页
Fortran第三讲含习题课与实验_第2页
第2页 / 共36页
Fortran第三讲含习题课与实验_第3页
第3页 / 共36页
资源描述:

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

1、Fortran程序设计第三讲 循环控制 回顾第二讲 逻辑运算逻辑常量:逻辑常量:.TRUE.FALSE.TRUE.FALSE.关系运算符:关系运算符:=5000的最小n值:INTEGER:i=1,s=0DOs=s+iIF(s5000)EXITi=i+1END DOWRITE(*,*)i,s3.2 DO WHILE循环一般形式:DO WHILE(逻辑表达式)END DO例:用DO WHILE形式实现例INTEGER:i=1,s=0DO WHILE(i=100)s=s+ii=i+1END DO3.3 迭代或计数循环通常,以特定次数执行一个语句块可以采用这样的形式:DO index=istart,i

2、end,incrEND DOindex是整型变量,称为循环计数器或循环控制变量如果incr是1,也就是每循环一次,计数器加1的话,incr可以省略详解三个循环参数istart,iend和incr可以是常量、变量或表达式。如果是变量或表达式,其值是在循环开始前进行计算,产生的数值用于控制循环循环过程:在DO循环执行的开始处,程序将数值istart赋给控制变量index,如果index*incriend*incr,程序执行循环体内的语句在循环体内的语句被执行后,控制变量重新计算为:index=index+incr如果index*incriend*incr,程序再次执行循环体内的语句1.只要inde

3、x*incriend*incr,第二步就反复执行,当该条件不满足时,就跳到DO循环的结尾处执行其后面的第一条语句循环次数的计算1incristartienditerDO i=1,10 END DODO i=1,10,2 END DODO i=1,10,-1 END DODO i=3,-3,-2 END DO3.3 计数循环的使用细节循环体内的语句缩进以提高程序的可读性控制变量不能在循环体内修改计数器递增计数和递减计数都是可以的循环控制变量和参数,应该总是整数在循环体内,也可以采用IF()EXIT 语句随时退出循环如果循环正常结束,循环控制变量的值并不是确定的(依编译器而定),所以,不要依赖这个

4、值3.3 例程用计数循环的方法来计算s=1+2+.+100!例程PROGRAM example3_3_1INTEGER:i,s=0DO i=1,100 s=s+iEND DOWRITE(*,*)i,sEND PROGRAM example3_3_13.4 CYCLE语句如果CYCLE语句在循环体内执行,那么当前循环马上会被中止,控制器将返回循环的顶部,继续下一个循环PROGRAM test_cycleINTEGER:iDO i=1,5IF(i=3)CYCLEWRITE(*,*)iEND DOWRITE(*,*)End of loop!END PROGRAM test_cycleCYCLE常用来

5、在循环中跳过某些特定的数,比如下面是跳过所有偶数:PROGRAM test_cycleINTEGER:iDO i=1,10IF(MOD(i,2)=0)CYCLEWRITE(*,*)iEND DOWRITE(*,*)End of loop!END PROGRAM test_cycle3.4 例程计算1到100之间所有个位数不为6的数的和!例程:例程:PROGRAM test_cyclePROGRAM test_cycleINTEGER:i,s=0INTEGER:i,s=0DO i=1,100DO i=1,100IF(MOD(i,10)=6)CYCLEIF(MOD(i,10)=6)CYCLE s=

6、s+i s=s+iEND DOEND DOWRITE(WRITE(*,*)i,s)i,sEND PROGRAM test_cycleEND PROGRAM test_cycle3.5 EXIT语句在中DO 和IF()EXIT构成了一个循环,在其它形式的循环中,EXIT语句仍可使用EXIT语句的应用会使循环控制更加灵活那么什么时候适用于EXIT语句呢?例:计算n21.4121我们写一个程序计算前100项的和:PROGRAM test_exitINTEGER:iREAL:s=0DO i=1,100s=s+(1./2)*iWRITE(*,*)i,sEND DOWRITE(*,*)End of loo

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

8、E(*,*)i,s)i,sIF(ABS(s-t)=0.000001)EXITIF(ABS(s-t)=0.000001)EXITEND DOEND DOWRITE(WRITE(*,*)End of loop!)End of loop!END PROGRAM test_exitEND PROGRAM test_exit3.6 给循环命名可以给循环指定一个名称,当循环比较大而且出现了多重嵌套的时候,会很有用,一般形式为:名称:DO IF(逻辑表达式)CYCLE 名称IF(逻辑表达式)EXIT 名称 END DO 名称名称:DO index=istart,iend,incr IF(逻辑表达式)CYCL

9、E 名称IF(逻辑表达式)EXIT 名称 END DO 名称CYCLE EXIT后面的名称是可选项,但是如果使用的话,必须和DO语句上的保持一致3.7 嵌套循环一个循环可以完全嵌入另外一个循环,这种情况叫循环的嵌套PROGRAM nested_loopsINTEGER:i,j,productDO i=1,3 DO j=1,3product=i*jWRITE(*,*)i,*,j,=,product END DOEND DOENDPROGRAM nested_loopsPROGRAM nested_loopsINTEGER:i,j,productouter:DO i=1,3 inner:DO j=

10、1,3product=i*jWRITE(*,*)i,*,j,=,product END DO innerEND DO outerENDPROGRAM nested_loops起名字:如果交换END DO后面的inner与outer,会出错,嵌套必须是完全包含例:如果CYCLE或EXIT语句出现在嵌套循环里,而且没有命名,那么CYCLE或EXIT作用于哪个循环呢?属于包含它的最内层循环我们将例改写一下执行结果?PROGRAM nested_loopsINTEGER:i,j,productDO i=1,3 DO j=1,3IF(j=2)CYCLEproduct=i*jWRITE(*,*)i,*,j

11、,=,product END DOEND DOENDPROGRAM nested_loops起个名字会有更多的灵活性下面这个程序,将CYCLE指定给外层循环运行结果是?PROGRAM nested_loopsINTEGER:i,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_loops3.8 IF与循环的嵌套IF结构可以嵌入循环循环也可以嵌入IF结构如果嵌套,嵌入的结构必须

12、完全在另外一个结构之内下面是错误的:IF(ab)THEN .DO i=1,3 .END IF .END DODO i=1,3 .IF(ab)THEN .END DO .END IF对前三讲内容的总结程序的结构以PROGRAM program_name开始以END PROGRAM program_name结束声明语句必须放在第一条可执行语句之前程序分三种基本结构,以这三种基本结构为起点,构成复杂的程序对前三讲内容的总结基本的数据类型整型INTEGER:i,j,kINTEGER:i=1,j=2INTEGER,PARAMETER:UPPER=100实型REAL:a字符CHARACTER(len=6)

13、:nameCHARACTER(7),PARAMETER:NAME=Richard对前三讲内容的总结算术运算与逻辑运算优先级运算顺序显示声明与隐式声明IMPLICIT NONE内置函数对前三讲内容的总结IF结构IF(逻辑表达式)THEN.END IFIF(逻辑表达式)THEN.ELSE.END IFIF(逻辑表达式)THEN.ELSE IF(逻辑表达式)THEN.ELSE IF(逻辑表达式)THEN.ELSE.END IF对前三讲内容的总结CASE结构SELECT CASE(case_expr)CASE(情况选择_1)程序块1CASE(情况选择_2)程序块2CASE DEFAULT 程序块nEN

14、D SELECT case_expr 不能是实型保留DEFAULT选择支是良好的编程习惯对前三讲内容的总结循环结构DO.IF(逻辑表达式)EXIT.END DODO WHILE(逻辑表达式).END DODO index=istart,iend,incr.END DOuCYCLE与EXIT的用法u循环嵌套(外层循环必须完全包含内层循环)uIF与循环嵌套(必须是完全包含的)Fortran程序设计第三讲 习题课 程序设计一:计算机中,计算三角函数的值采用计算三角函数的无穷级数的前N项得到近似值,当误差小于计算机表示精度时,求得数值即为可用,展开表达式为:Nnnnnxx1121)!12()1(sin

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

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!