版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fortran95/2003第九章过程的附加特性1精选课件ppt本章学习目标:
学习在Fortran过程中如何使用多维数纽•理解何时、如何使用SAVE属性或者SAVE语句•理解可分配数组和自动数组之间的区别以及何时在过程中分别使用它们•理解纯过程和逐元过程•学习怎样声明和使用内部子程序及函数2精选课件ppt9.1给子程序和函数传递多维数组9.1.1显式结构的形参数组9.1.2不定结构的形参数组(assumed-shapedummyarrays)3精选课件ppt在声明不定结构的数组时,数组中的下标都用冒号来代替。只有子程序或者函数有显式接口,才能使用这种数组,调用程序不知道子程序接口的所有信息。通常采用的方式是将子程序放在模块中,然后在调用程序中use该模块。例9-1使用不定结构的形参数组4精选课件ppt9.2SAVE属性和语句当离开过程后,过程中的所有局部变量和数组的值都成为未定义的值。Fortran提供了一种方式来保存在调用过程之间的局部变量和数组。例如定义局部变量:任意在类型声明语句中初始化的局部变量都会被自动保存,例如:5精选课件pptFortran也提供了SAVE语句,任何列在SAVE语句中的局部变量都会在调用过程中保存;如果SAVE语句中没有变量,那么所有的局部变量都会被被保存起来。任何共享数据的模块都应该使用SAVE语句保存数据,并通过USE语句使用该模块数据。例9-2计算均值注意,使用save仅在子程序中保留变量值,其值如果没有返回,则调用程序仍不可见该值。6精选课件ppt9.3过程中的动态数组如果用SAVE属性来声明可分配数组,或者数组出现在一个SAVE语句中,那么数组只会在该过程第一次被调用的时候利用ALLOCATE语句分配一次内存。如果没有用SAVE属性来声明可分配数组,那么在每次调用过程的时候都必须用ALLOCATE语句给数组分配空间,当返回到调用程序的时候,数组的内容会被自动地释放掉。7精选课件ppt9.4过程中的自动数组Fortran95/2003提供了另外一种简单的方式在过程执行的时候自动创建临时数组,在过程执行到返回之后自动释放掉数组。这种数组被称为自动数组(automaticarrays)。自动数组是局部的显式结构数组,它的下标由形式参数或者来自于模块的数据指定。8精选课件ppt回顾一下不同的数组类型:1.带有常数下标的显式结构数组2.形参数组(1)显式结构形参数组。9精选课件ppt(2)不定结构形参数组。(3)不定大小的形参数组。3.自动数组4.预定义结构数组10精选课件ppt9.5在Fortran2003过程中的可分配数组在Fortran2003的两点改变:(1)可以使用可分配形式参数(2)函数可以返回可分配的值9.5.1可分配形式参数如果Fortran2003子程序有显式接口,那么对于子程序来说,它的形式参数可以是可分配的。如果声明形式参数为可分配的,那么用于调用子程序的相应实际参数也必须是可分配的。11精选课件ppt形式参数可以有INTENT属性。INTENT属性可能影响到子程序的操作:(1)如果可分配参数具有INTENT(IN)属性,那么不允许在子程序中对这个数组分配或者释放空间,数组中的值也不能被修改。(2)如果可分配参数具有INTENT(INOUT)属性,那么当调用子程序的时候,将会传递给它相应的实际参数的状态(是否可分配)和数据。数组可以在子程序的任何位置被释放、重分配或者修改。形式参数的最终状态(是否可分配)和数据将会返回给实际参数所在的调用程序。12精选课件ppt(3)如果可分配参数具有INTENT(OUT)属性,那么调用程序中的实际参数将会在入口处被自动地释放掉,实际数组中的所有数据都会丢失。子程序可以以任何方式来使用没有分配的参数,形式参数的最终状态(是否可分配)和数据将会返回给实际参数所在的调用程序。例9-3:说明可分配数组形式参数用法的程序9.5.2可分配函数(AllocatableFunctions)Fortran2003函数的返回值允许有ALLOCATABLE属性。在函数的入口不会分配返回变量。在函数内部每当需要的时候,可以分配和释放变量。但是返回之前必须分配和赋值。13精选课件ppt例9-4:说明可分配函数用法的程序。9.6纯过程(pureprocedures)和逐元过程(elementalprocedures)9.6.1纯过程纯函数是没有任何副作用的函数。即,它们不会修改输入参数,不会修改任何在函数外部可见的其他数据(如模块中的数据),它的局部变量没有SAVE属性,不能在类型声明语句中初始化局部变量(因为这一初始化隐含有SAVE属性)。任何被纯函数调用的过程也必须是纯过程。在纯函数中每个参数都必须定义为INTENT(IN),不能有任何外部文件I/O操作,不能包含STOP语句。14精选课件ppt在函数语句中增加一个PURE前缀就可以定义纯函数。纯子程序(puresubroutine)是没有任何副作用的子程序。除了允许它们修改用INTENT(OUT)或者INTENT(INOUT)声明的参数外,它们的限制和纯函数是相同的。在SUBROUTINE语句中增加PURE前缀可以声明纯子程序。15精选课件ppt9.6.2逐元过程逐元函数(elementalfunctions)是为标量参数指定的函数。它也适用于数组参数。如果一个逐元函数的参数是标量,那么这个函数的返回值也是标量。如果函数的参数是数组,那么函数的返回值也是和输入参数相同结构的数组。用户自定义的逐元函数必须是PURE函数,且满足:16精选课件ppt1.所有的形式参数都必须是标量,不能带有POINTER属性。2.函数的返回值也必须是标量,不能带有POINTER属性。3.除了作为某种内置函数的参数,形式参数不能用在类型声明语句中。在函数语句中增加一个ELEMENTAL前缀可以声明用户自定义逐元函数。17精选课件ppt18精选课件ppt9.7内部过程除了外部过程(externalprocedures)和模块过程(moduleprocedures)。还有第三种过程--内部过程(intemalprocedures)。内部过程是完全包含在另一个被称为宿主程序单元(hostprogramunit,host)的过程中。内部过程和宿主一起编译,且只能从宿主程序单元中调用它。像模块过程一样,内部过程用CONTAINS语句来引入。内部过程必须跟在宿主过程的所有执行语句之后,而且必须用CONTAINS语句引入。19精选课件ppt为什么要使用内部过程呢?在某些问题中,作为解决方案的一部分,有一些低级操作可能要重复执行。经定义内部过程未完成这些操作,可以简化这些低级操作。例9-5:内部过程示例。20精选课件ppt内部过程函数和外部过程有以下三方面的区别:(1)内部过程只能被宿主过程调用,程序中的其他过程不能访问它。(2)内部过程的名字不能作为命令行参数传递给其他的过程。(3)内部过程通过宿主关联(hostassociat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗机器人研究报告
- 医疗保障学第11章
- 交通运输安全国家标准管理办法
- 公证处公证员招聘协议
- 设备租赁合同:体育设施
- 灯具安装杂工施工合同
- 军工企业合同印章管理准则
- 唐山市印刷服装租赁合同
- 食品包装班组施工协议
- 影视特效制作师聘用合同
- 2024年建筑电工复审考试题库附答案
- 红色知识竞赛题库小学生
- 病原微生物与免疫学考试模拟题(含参考答案)
- MOOC 微型计算机原理与接口技术-南京邮电大学 中国大学慕课答案
- 工贸企业治本攻坚三年行动方案
- 新时代大学生如何践行爱国主义精神
- 七年级期中考试考后分析主题班会课件
- IPQC工作内容培训教材课件
- 《济南的冬天-老舍作业设计方案-2023-2024学年初中语文统编版五四学制》
- 科学认识天气智慧树知到期末考试答案2024年
- 2024年苏州市轨道交通集团有限公司招聘笔试参考题库附带答案详解
评论
0/150
提交评论