fortran课件 第7章_1.ppt

上传人:s****8 文档编号:67253042 上传时间:2022-12-24 格式:PPT 页数:46 大小:1.32MB
返回 下载 相关 举报
fortran课件 第7章_1.ppt_第1页
第1页 / 共46页
fortran课件 第7章_1.ppt_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《fortran课件 第7章_1.ppt》由会员分享,可在线阅读,更多相关《fortran课件 第7章_1.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、FORTRAN 95第第7章章 函数函数7 函数函数程序代码中需要重复的某个功能和重复使用某一段程序代码中需要重复的某个功能和重复使用某一段程序代码时,可用函数。程序代码时,可用函数。“函数函数”包括:自定义函数包括:自定义函数(function)和子程序和子程序(subroutine)自定义函数扩充库函数的功能自定义函数扩充库函数的功能71 子程序(子程序(SUBROUTINE)71 子程序(子程序(SUBROUTINE)以以subroutine 开头,要取名。以开头,要取名。以return 返回;返回;end或或end subroutine 或或end subroutine name结束结

2、束用用call 来调用来调用主程序不一定要放在最开头,书写顺序可任意主程序不一定要放在最开头,书写顺序可任意子程序独立地拥有属于自己的变量声明;主程序和子程序独立地拥有属于自己的变量声明;主程序和子程序中声明的变量各不相干子程序中声明的变量各不相干子程序拥有独立的行代码子程序拥有独立的行代码(format 等用)等用)互相之间传递参数互相之间传递参数 变量独立变量独立传递参数传递参数71 子程序(子程序(SUBROUTINE)Fortan在传递参数时,是在传递参数时,是地址调用地址调用,即调用时所传,即调用时所传递出去的参数和子程序中接受的参数使用相同的内递出去的参数和子程序中接受的参数使用相

3、同的内存地址来记录数据。可以视为同一变量。存地址来记录数据。可以视为同一变量。例:以初速度和角度,计算标枪的投射距离例:以初速度和角度,计算标枪的投射距离!传递参数同名不同意72 自定义函数(自定义函数(FUNCTION)与子程序的不同:与子程序的不同:1)会返回一个数值,并对储存返回值的)会返回一个数值,并对储存返回值的函数名函数名要有要有类型声明类型声明;2)调用时不用)调用时不用call,但调用前要对自定义函数名声,但调用前要对自定义函数名声明;明;Fortran 77:Real addExternal add等同于:Add(1.0,2.0)参数可用数值投标程序改写:投标程序改写:73

4、全局变量(全局变量(COMMON)定义一块共享的内存空间,不同的程序单元之间定义一块共享的内存空间,不同的程序单元之间(函数之间,函数与主程序之间),声明的变量使(函数之间,函数与主程序之间),声明的变量使用相同的内存位置,以传递数据。用相同的内存位置,以传递数据。FORTRAN 77使用使用两种:两种:1)无名公用区;)无名公用区;2)有名公用区)有名公用区731 COMMON 的使用的使用731 COMMON 的使用的使用无名公用区的规则和特点:无名公用区的规则和特点:1)COMMON语句必须在所有可执行语句之前语句必须在所有可执行语句之前,说明说明变量名、数组名和数组说明符;变量名、数组

5、名和数组说明符;COMMON A,B,NP(15),LOC(2,4)等同于等同于 DIMENSION NP(15),LOC(2,4)COMMON A,B,NP,LOC 2)虚拟参数不能使用;虚拟参数不能使用;3)一个程序只有一个无名公用区,可以分次定义;)一个程序只有一个无名公用区,可以分次定义;731 COMMON 的使用的使用对应关系:对应关系:主程序模块:Common a,b,c,dCommon a1,b1,c1,d1子程序:Common a1,b1,c1,d1Common a,bCommon cabcda1b1 c1d1a1b1 c1d1 abc731 COMMON 的使用的使用4)各

6、程序单位)各程序单位COMMON中的中的变量类型变量类型必须按位置必须按位置一一对应一一对应5)各程序单位中,无名公用区的变量数可以不同,)各程序单位中,无名公用区的变量数可以不同,从起始位置开始对应从起始位置开始对应 COMMON A,B,C,D,E,F,G COMMON N1,N2,N3,N4,N5,F6)字符变量不能和其他变量共用一个公用区字符变量不能和其他变量共用一个公用区!内存空间的相同内容在不同的数据类型下的数值不同731 COMMON 的使用的使用有名公用区:有名公用区:COMMON/Name1/A1,A2,/Name2/B1,B2,需要共享的变量不多时,用需要共享的变量不多时,

7、用参数传递,大量的或者在多参数传递,大量的或者在多个函数之间需要使用相同变个函数之间需要使用相同变量时用全局变量量时用全局变量BLOCK DATACOMMON中的变量不能使用接在子程序或主程序中的中的变量不能使用接在子程序或主程序中的data来赋来赋初值,要在初值,要在block data程序模块中使用程序模块中使用data设置初值。设置初值。Block data中只是用来填写全局变量的数中只是用来填写全局变量的数据内容,不能放置程序命令。数据内容在据内容,不能放置程序命令。数据内容在一开始执行程序时,即主程序执行之前初一开始执行程序时,即主程序执行之前初值内容就会设置完毕。值内容就会设置完毕

8、。74 函数中的变量函数中的变量741 传递参数的注意事项传递参数的注意事项SUBROUTINE NAME(虚拟参数,虚拟参数,)Call name(实在参数,实在参数,)函数或子程序的虚参数,在调用前不配置内存,只函数或子程序的虚参数,在调用前不配置内存,只是形式。调用时,与实参按地址结合。退出子程序是形式。调用时,与实参按地址结合。退出子程序时,虚参又变得无定义。时,虚参又变得无定义。741 传递参数的注意事项传递参数的注意事项类型匹配类型匹配可以直接传递常数,常量的类型也要匹配可以直接传递常数,常量的类型也要匹配传递常量时,要确定传递常量时,要确定函数不改变相对应的函数不改变相对应的虚参

9、的内容虚参的内容742 数组参数数组参数1)传递数组参数实际上传递的是数组元素的内存地址)传递数组参数实际上传递的是数组元素的内存地址 函数所接受到的数组实参,都在函数执行前已经配置了内存空间,函函数所接受到的数组实参,都在函数执行前已经配置了内存空间,函数中的声明只是定义如何去使用它们,可以使用其中一部分;把一维数中的声明只是定义如何去使用它们,可以使用其中一部分;把一维变成二维;改变坐标范围等。变成二维;改变坐标范围等。2)函数数组参数传递时,虚参数组不要超过实参数组的范围。)函数数组参数传递时,虚参数组不要超过实参数组的范围。编译器不会辨别,但执行会出错编译器不会辨别,但执行会出错.3)

10、数组在声明时,要使用常数来确定数组的尺寸,当作为函数组在声明时,要使用常数来确定数组的尺寸,当作为函数的虚参,可用虚参变量来声明数组的尺寸。数的虚参,可用虚参变量来声明数组的尺寸。4)作为函数虚参的多维数组,最高一维的大小可以不声明,)作为函数虚参的多维数组,最高一维的大小可以不声明,其他维必须声明尺寸。其他维必须声明尺寸。742 数组参数数组参数实参是数组实参是数组742 数组参数数组参数可调数组虚参,尺寸用虚参量声明可调数组虚参,尺寸用虚参量声明例例2,数组作为函数的虚参时,可用虚参量来声明数组尺寸,最高维尺,数组作为函数的虚参时,可用虚参量来声明数组尺寸,最高维尺寸甚至可以不设置,但不能

11、超过实参数组的范围寸甚至可以不设置,但不能超过实参数组的范围调用时虚参不要超过实参数组范围调用时虚参不要超过实参数组范围字符串数组的传递字符串数组的传递:传递字符串变量时可以不声明长度传递字符串变量时可以不声明长度 不同于数组,不能写为不同于数组,不能写为str(8)Str(8:8)传递单个内存空间传递单个内存空间多维数组的传递多维数组的传递:最高一维的大小可以不声明,其他维必须声明尺寸最高一维的大小可以不声明,其他维必须声明尺寸 不能写成不能写成 write(*,*)a数组声明为:数组声明为:A(L,M,N)A(x,y,z)的内存位置为:的内存位置为:1+(x-1)+(y-1)*L+(z-1

12、)*L*M 未用到最高维未用到最高维 program ch_arrayimplicit none character(len=5):ch(5)!字符串数组字符串数组5*5 data ch/12345,bbbbb,ccccc,ddddd,eeeee/call sub(ch)stopendsubroutine sub(B)implicit none integer i character(len=4):B(5)write(*,(1X,A)(B(i),i=1,5)returnend subroutine字符串数组的传递字符串数组的传递 chCh(1)Ch(2)Ch(3)Ch(4)Ch(5)12345

13、bbbbbccccccdddddeeeeeb12345bbbbbcccccddeeeB(1)B(2)B(3)B(4)B(5)7-4-3 变量的生存周期变量的生存周期函数中的变量(不含所输入的参数)的生存时间,函数中的变量(不含所输入的参数)的生存时间,仅在子程序被调用期间。仅在子程序被调用期间。声明中用声明中用SAVE,可保证程序整个执行过程中,始,可保证程序整个执行过程中,始终保留其内存空间,上一设置的内容有记忆。终保留其内存空间,上一设置的内容有记忆。Fortran 90Integer,save:counter=1Visual Fortran 中中都保留函数中变量都保留函数中变量 !注意初

14、值和赋值的区别注意初值和赋值的区别744 传递函数传递函数传递的参数可以是函数名(传递的参数可以是函数名(function,subroutine)作实参的函数名要先声明。作实参的函数名要先声明。函数声明时,函数声明时,intrinsic 表示库函数;表示库函数;external表示表示自定义的函数。自定义的函数。844 传递函数传递函数在函数不作参数传递时在函数不作参数传递时External 可省略,库函数不必声明可省略,库函数不必声明子程序可作参数子程序可作参数作业四(提交到作业四(提交到):):练习函数名作传递参数:练习函数名作传递参数:题题1、编程编程:主程序计算主程序计算x=-44的整数时的整数时,x+2*func(x,nf)其中其中func为自定义函数,为自定义函数,其参数其参数 nf为一函数名为一函数名,func=x+nf(x)x30时时,nf 为为 库函数库函数LOG();x=30时时,nf 为自为自定义函数定义函数func2(x)=sin(x)+5

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁