- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
-fortran-第七章---过程.ppt
Fortran95/2003程序设计 第七章 过程 本章学习目标: 学习Fortran 语言中的过程如何帮助实现好的程序设计 ? 了解子程序与函数的不同 ? 掌握创建和调用子程序 ? 理解并学会使用INTENT 属性 ? 理解使用地址传递方案实现变量传递 ? 理解显式结构的形参数组、不定结构的形参数组和不定大小的形参数组之间的区别 ? 理解为什么不再使用不定大小的数组 ? 掌握在过程之间使用模块实现共享数据 ? 理解显式接口,以及为什么在模块内部定义过程更好 ? 能创建并且调用用户自定义函数 ? 掌握如何把Fortran 过程调用参数传递给其他过程。 Fortran 提供了一个特定机制,使得可以在构建最终的程序前容易地独立开发和调试子任务。可以把每个子任务作为独立的程序单元来编码,该独立程序单元被称为外部过程( external procedure) ,每个外部过程都可以独立于程序中的其它子任务(过程)来进行编译、调试。 Fortran 中有两种外部过程:子程序( subroutine) 和函数子程序( function subprogram)(或者就叫函数, function) 子程序通过在一个单独的CALL 语句中引入子程序名来进行调用,并且可以通过调用参数来返回多个结果。 函数通过在表达式中引入函数名来进行调用,它的结果是单个数值,该值用来为表达式赋值。 在实际编程时,把一个大程序任务分解为若干个子过程,可以获得很多好处:独立测试组件、复用子过程,隔离无意的副作用。 7.1 子程序 SUBROUTINE 语句标志着子程序的开始,定义了子程序名和相关参数表。子程序名必须遵循标准的Fortran 命名规则由字母和数字组成,最大长度可以到31 个字符,但第一个字符必须是字母。参数表含有一系列变量和/或数组,这些变量、数组的值将从调用程序传递给子程序。这些变量被称为形参(dummy agument ,形式参数),子程序实际上没有为它们真正分配任何内存空间。对从调用程序单元传递来的实际参数(实参)来说它们仅仅是占位符。 当程序调用子程序时,调用程序的执行暂时被挂起,子程序执行部分开始运行。当运行到子程序的RETURN 语句或END SUBROUTINE 语句时,调用程序又开始运行调用子程序语句下面的程序代码。 每个子程序是一个独立的程序单元,它开始于SUBROUTINE 语句,结束于END SUBROUTINE 语句。 任何可执行程序单元都可以调用子程序,包括另一个子程序。(但是,子程序不能调用它自身,除非它被定义为递归类型(recursive) )。 例7-1 用直角三角形两直角边计算斜边。 子程序中的RETURN 语句是可选的。当运行到END SUBROUTINE 语句时,程序会自动返回到调用程序。只有需要在子程序结束之前返回到调用程序时,才需要用到RETURN 语句。 例7-2 数据排序 7.1.2 INTENT 属性 子程序的形参可以与一个INTENT 属性联合使用。INTENT 属性与类型声明语句联合使用,来声明每个形参的类型, 告诉编译器如何使用形参。 7.1.3 Fortran 中的变量传递:地址传递方案 主程序和子程序之间用地址传递(pass-by-reference) 方案来进行通信。主程序传递一个指针来指向实参表中各个参数的存储位置,子程序查找调用程序所指向的内存位置,获得形参值。 参数列表中的值与子程序的调用参数在个数、类型、次序方面都必须完全匹配。如果存在不匹配, Fortran 程序不能识别这种现象,会在没有任何提示的情况下错用这些参数,产生错误结果。 例7-3 调用子程序形参不匹配示例 7.1.4 传递数组给子程序 通过内存位置指针将参数传递给子程序,如果参数是个数组,那么指针指向的就是数组中的第一个值。为此,子程序既需要知道数组的地址,也需要知道数组的大小。 有3 种可能的方式来指明形参数组的大小: (1)把数组的大小作为形参传递。 (2) 把子程序中的所有形参数组声明为不定结构的形参数组( assumed-shape dummy array) ,以创建一个子程序的显式接口。(7.3节介绍) (3) 用星号(*)来声明形参数组的长度,定义不定大小的形参数组(assumed-size dummy array) 。不会进行越界检测。 如果数组datal 和data2 的长度大于或等于比nvals ,则正常,否则出错。是早期版本的一个过渡行为,不再使用。 7.1.5 传递字符变量给子程序 例7-4 子程序数组越界 7.1.6 子程序中错误处理 字符变量作为子程序的形参时,用*来声明字符变量的长度。因为没有给形参分配内存,所以在编译时无需知道字符参数的长度。 不是最佳处理方式,因为一旦停止,将丢失
文档评论(0)