欢迎来到天天文库
浏览记录
ID:36885805
大小:398.50 KB
页数:38页
时间:2019-05-10
《FORTRAN程序单元》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章Fortran程序单元一个Fortran程序中通常不是只由一个主程序组成,而是由几个按某种方式划分的不同程序单元来共同组成。尽管Fortran程序中允许只有主程序而没有子程序,但绝不允许只有子程序而没有主程序。在Fortran中,程序的执行总是从主程序开始的。Fortran中的程序单元可以大体划分为主程序、子程序两种,其中子程序又可以进一步划分为函数子程序、子例行子程序和数据块子程序。数据块子程序通常用于实现变量的初始化赋值,函数子程序和子例行子程序在用途上基本是一致的,但是也有许多不同之处。本章将详细介绍Fortran中的程序单元和它们的基本用法。10.1主程序顾名思义,主
2、程序是一个实际程序中的主体,其他类型的程序单元都是以某种方式来辅助主程序的执行。在Fortran语言中,一个程序的执行始终是从主程序的第一条可执行语句开始的,所以每个完整的Fortran程序都必须有且只允许有一个主程序。主程序定义的一般语法形式如下:[PROGRAM[程序名]][说明部分][可执行部分][CONTAINS内部过程]END[PROGRAM[程序名]]10.2语句函数语句函数通过一句代码定义来实现某种特定的处理功能,它是Fortran77时代的遗留产物。严格来说,语句函数不属于程序单元的范畴。但是在实际应用中,语句函数以其灵活的应用、小巧的结构在程序中发挥着重要的作用。在
3、实际的编程过程中,程序员往往会遇到这种情况:一些简单的函数会在一个程序单元中的不同地方重复用到,而Fortran系统并不提供这种内部函数;如果采用函数子程序的形式来描述这些简单的函数又会觉得没有这种必要。例如,要求解函数的值,将其编写成函数子程序可以顺利解决。但是,Fortran语言提供了一种更为简单的手段——语句函数。10.2.1语句函数的定义在Fortran中定义一个语句函数的形式如下:fun([d-arg[,d-arg]...])=expr1.Fun2.d-arg3.Expr4.语句函数示例5.需要注意的问题:在使用语句函数进行编程时,下面一些问题是需要引起注意的:语句函数通常
4、在函数比较简单,能够用一条语句(包括换行)就能进行定义时才使用;语句函数是一种非执行语句,需要放置在所有可执行语句之前和相关的类型说明语句之后;语句函数的作用范围仅限于定义它的程序单元之内,不允许跨程序单元进行语句函数的调用;语句函数不能作为子程序调用时的实参,也不允许在EXTERNAL语句中出现;语句函数中出现的虚参必须是变量名,不能是常量、表达式或是数组元素;语句函数通过表达式得到的函数值的类型必须与函数名的类型一致。10.2.2语句函数的引用语句函数在完成定义后,就可以在程序单元中进行引用了。实际上,在前一小节的例程中已经演示了语句函数引用的一般方式。本小节将对语句函数的引用方
5、式进行具体的说明。语句函数的引用方式与Fortran中内部函数的引用方式完全一致,就是用程序中定义的实参替换掉语句函数定义中的虚参。实参必须是与虚参类型相同的常量、变量或表达式。10.3函数子程序函数子程序和子例行子程序是子程序的两种常用基本形式。它们的共同特征就是作为数据处理过程的集合。但是这两种子程序也不完全相同,函数子程序会返回一个函数值,且通常不会改变哑元的数值。因此,函数子程序更像是数学上的一个函数。而子例行子程序通常用于完成一项更为复杂的任务,通过哑元或者其他手段返回几个结果,哑元的数值通常会在程序的执行过程中改变。10.3.1定义函数子程序下面给出函数子程序的一般形式为
6、:[prefix]FUNCTIONname([d-arg-list])[RESULT(r-name)]...END[FUNCTIONname]1.prefix说明项prefix说明项是一个可选参数,可以使用如下两种形式来书写:type[keyword]或keyword[type]2.d-arg-listd-arg-list表示函数的哑元列表。如果函数子程序不包含哑元,则哑元列表可以省略,但是函数名后的括号不能省略。3.RESULT关键字RESULT关键字用于声明将函数的返回值保存在其后的变量名中,称为函数结果名。10.3.2调用函数子程序函数子程序的调用与内在函数的调用形式一样。在主
7、调程序的任意位置,可以通过下面的语句形式将函数子程序的计算结果赋值给变量:V=函数名(实元表)其中,V表示用于接收函数计算结果的变量;实元表是程序中实际传入函数子程序的变量列表,除非有特殊说明,变量列表中的实元个数以及类型必须与函数子程序定义时的虚参在个数和类型上一致。如果函数不包含哑元,则调用形式是在表达式中直接写上函数名再跟空括号即可:V=函数名()10.3.3函数子程序示例——进制转换下面来看一段函数子程序的实例,代码将一个4字节的整数用16进制的形
此文档下载收益归作者所有