fortran 第8章节2.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
fortran 第8章节2

第八章 函 数 § 8-5特殊参数的使用方法 Fortran 90 中:可设置某些参数的属性:为只读或可写等 参数个数可以不定 传递参数的顺序可变 §8-5-1 参数的属性 FORTRAN 90用INTENT设置虚参的属性: 类型,INTENT(IN):: 参数变量名 !参数为只读,不能改变数值,否则编译会出现错误信息 类型,INTENT(OUT):: 参数变量名 !参数在程序中重新设置数值,否则编译会出现警告 类型,INTENT(INOUT):: 参数变量名 !参数可读可写,和没指定一样 Fortran 中,变量作为实参传递出去之后,在调用函数后有可能被改变,以此来限制或提醒。 §8-5-2 函数的使用接口(INTERFACE) INTERFACE是一段程序模块,说明所要调用的函数的参数类型及返回值的类型等。 例: 结构: §8-5-2 函数的使用接口(INTERFACE) 必须要使用的情况: 函数返回值为数组 指定参数位置来传递参数时 所调用的函数的参数数目不固定 输入指针参数时 函数返回值为指针时 §8-5-3 不定个数的参数的传递 Fortran 90 中采用optional 命令来声明可省略参数,要用interface作函数的参数定义,或用Module来定义 §8-5-4 改变参数的传递位置 Fortran 90中,可以改变参数传递位置,要用interface声明 subroutine sub(a, b,c) … Call sub(b=2, c=3, a=1) 直接代入函数变量名来传递 子程序接受到的是a=1, b=2, c=3 对于有多个可省略参数的函数,调用时可使用这个办法只传递其中的部分参数 例: Subroutine sub(a, b, c, d, e, f) implicit none integer, optional:: a, b, c, d, e, f … end subroutine sub Call sub(b=3, f=5) !只输入b和f的值,其他省略 例:要计算A*X**2+B*X+C, 对于A, B,C没有的情况默认为0来计算 §8-6 特殊的函数类型 Fortran 90中的函数可以特别指定成 RECURSIVE 递归 PURE ELEMENTAL 这三种特殊类型 §8-6-1 递归(RECURSIVE) 递归――函数除了被其他程序块调用外,可以自己调用自己来执行程序 必要条件: 每次被调用时,递归函数中的局部变量(那些不是传递的参数和SAVE的变量)独立存在,每次被调用会使用不同的内存地址。 用result来设置另一个储存返回值的变量 程序中要设置调用终点,以免无限循环调用 格式 : Recursive 类型 function func_name( parameters) result (ans) 例题, 计算N! 执行: 【ans = n * fact(n-1) 】 n=4 第一次调用:ans=4*fact(3) , 调用fact(n-1) 第二次调用:n=3, ans=3*fact(2), 调用fact(n-1) 第三次调用:n=2, ans=2*fact(1), 调用fact(n-1) 第四次调用:n=1, ans=1, 返回 每次被调用时,递归函数中的局部变量独立存在,每次被调用会使用不同的内存地址。 执行: n=4 第一次调用:ans=4*fact(3) , count=1, localcount=1, count=2 第二次调用:n=3, ans=3*fact(2), localcount=2, count=3 第三次调用:n=2, ans=2*fact(1), localcount=3, count=4 第四次调用:n=1, ans=1, localcount=4, count=5返回 write(6,(I2,th enter, n=,I2)) localcount, n … ans = n * fact(temp) write(6,(I2,th exit, n=,I2, ans=,I5, count=, i3)) localcount, n, ans, count 特别注意改变传递参数带来的问题 非递归函数的局部变量可能每次调用放在相同的内存位置 用Subroutine 快速排序法 (Quick Sort) Sort and division: 把第一个数放到某个位置s, 使左边的数据小于a(

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档