- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Fortran95/2003程序设计 第九章 过程的附加特性 本章学习目标: 学习在Fortran 过程中如何使用多维数纽 ? 理解何时、如何使用SAVE 属性或者SAVE 语句 ? 理解可分配数组和自动数组之间的区别以及何时在过程中分别使用它们 ? 理解纯过程和逐元过程 ? 学习怎样声明和使用内部子程序及函数 9.1 给子程序和函数传递多维数组 9.1.1 显式结构的形参数组 9.1.2 不定结构的形参数组( assumed-shape dummy arrays) 在声明不定结构的数组时,数组中的下标都用冒号来代替。只有子程序或者函数有显式接口,才能使用这种数组,调用程序不知道子程序接口的所有信息。通常采用的方式是将子程序放在模块中,然后在调用程序中use该模块。 例9-1 使用不定结构的形参数组 9.2 SAVE 属性和语句 当离开过程后,过程中的所有局部变量和数组的值都成为未定义的值。 Fortran 提供了一种方式来保存在调用过程之间的局部变量和数组。例如定义局部变量: 任意在类型声明语句中初始化的局部变量都会被自动保存,例如: Fortran 也提供了SAVE 语句,任何列在SAVE 语句中的局部变量都会在调用过程中保存;如果SAVE 语句中没有变量,那么所有的局部变量都会被被保存起来。 任何共享数据的模块都应该使用SAVE语句保存数据,并通过USE 语句使用该模块数据。 例9-2 计算均值 注意,使用save仅在子程序中保留变量值,其值如果没有返回,则调用程序仍不可见该值。 9.3 过程中的动态数组 如果用SAVE 属性来声明可分配数组,或者数组出现在一个SAVE 语句中,那么数组只会在该过程第一次被调用的时候利用ALLOCATE 语句分配一次内存。如果没有用SAVE 属性来声明可分配数组,那么在每次调用过程的时候都必须用ALLOCATE 语句给数组分配空间,当返回到调用程序的时候,数组的内容会被自动地释放掉。 9.4 过程中的自动数组 Fortran 95/2003 提供了另外一种简单的方式在过程执行的时候自动创建临时数组,在过程执行到返回之后自动释放掉数组。这种数组被称为自动数组(automatic arrays) 。自动数组是局部的显式结构数组,它的下标由形式参数或者来自于模块的数据指定。 回顾一下不同的数组类型: 1.带有常数下标的显式结构数组 2. 形参数组 (1)显式结构形参数组。 ( 2 )不定结构形参数组。 (3)不定大小的形参数组。 3. 自动数组 4. 预定义结构数组 9.5 在Fortran 2003 过程中的可分配数组 在Fortran 2003 的两点改变: (1)可以使用可分配形式参数 (2)函数可以返回可分配的值 9.5.1 可分配形式参数 如果Fortran 2003 子程序有显式接口,那么对于子程序来说,它的形式参数可以是可分配的。如果声明形式参数为可分配的,那么用于调用子程序的相应实际参数也必须是可分配的。 形式参数可以有INTENT 属性。INTENT 属性可能影响到子程序的操作: (1)如果可分配参数具有INTENT (IN) 属性,那么不允许在子程序中对这个数组分配或者释放空间,数组中的值也不能被修改。 (2) 如果可分配参数具有INTENT (INOUT) 属性,那么当调用子程序的时候,将会传递给它相应的实际参数的状态(是否可分配)和数据。数组可以在子程序的任何位置被释放、重分配或者修改。形式参数的最终状态(是否可分配)和数据将会返回给实际参数所在的调用程序。 (3)如果可分配参数具有INTENT (OUT) 属性,那么调用程序中的实际参数将会在入口处被自动地释放掉,实际数组中的所有数据都会丢失。子程序可以以任何方式来使用没有分配的参数,形式参数的最终状态(是否可分配)和数据将会返回给实际参数所在的调用程序。 例9-3:说明可分配数组形式参数用法的程序 9.5.2 可分配函数(Allocatable Functions ) Fortran 2003 函数的返回值允许有ALLOCATABLE 属性。在函数的入口不会分配返回变量。在函数内部每当需要的时候,可以分配和释放变量。但是返回之前必须分配和赋值。 例9-4:说明可分配函数用法的程序。 9.6 纯过程(pure procedures )和逐元过程(elemental procedures) 9.6.1 纯过程 纯函数是没有任何副作用的函数。即,它们不会修改输入参数,不会修改任何在函数外部可见的其他数据(如模块中的数据),它的局部变量没有SAVE 属性,不能在类型声明语句中初始化局部变量(因为这一初始化隐含有SAVE 属性)。任何被纯函数调用的过程也必须是纯过程。在纯函数中每个参数都必须定义为INTENT (IN) ,
原创力文档


文档评论(0)