资源描述:
《fortran90第6章子程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、FORTRAN90程序设计计算机中心2006.3VisualFortran90程序设计§6.1概述§6.5子程序的嵌套调用§6.2函数子程序§6.6模块§6.3子例子程序§6.7递归过程§6.4虚实结合§6.8其他部分§6.9程序举例§6.1概述主程序的结构:单位定义说明部分输入计算或处理输出END用子程序完成用子程序完成用子程序完成子程序子程序引入子程序的目的:模块化设计所有功能都在主程序单位内完成1、一个Fortran90程序主程序单元个数:1个2、子程序单元:0-n个子程序单元被主程序单元或被其它子程序单元调用,甚至可以递归调用(调用
2、本身)源程序的结构主程序:单位定义说明部分输入调用子程序输出END计算或处理子程序:最简单的源程序的结构子程序分类1、函数子程序分为内部函数子程序外部函数子程序2、子例行子程序分为内部子例行子程序外部子例行子程序用于完成复杂的计算返回一个或多个值用于完成复杂计算,返回一个或多个值,或用于其它数据处理§6.2外部函数子程序单位定义语句说明部分程序体:具体计算END语句外部函数子程序的结构FUNCTIONF(X,Y,Z)RESULT(F_RESULT)IMPLICITNONEREAL::X,Y,z,F_RESULTF_RESULT=X+YZ=X
3、-YENDPROGRAMNAIN……READ*,A,BD=F(A,B,c)PRINT*,C,DEND两单位相互独立编译必须进行数据的传递END[FUNCTION[函数名]]子程序END语句写法1、函数单位的结束标志2、将控制返回到主调程序。子程序END语句功能函数单位定义语句的写法[RECURSIVE]FUNCTION函数名(虚元表)RESULT(结果名)1、函数子程序的第一行(注释行除外)。2、如果函数是递归的,则应以RECURSIVE开头。3、函数名为全局名:作用域为整个程序,不与已有的全局名同名。各独立程序单位的名字为全局名4、主调程
4、序与被调程序两个单位之间的数据传递①结果名:子程序的一个输出一般写法:函数名_RESULT,用于保存一个计算结果,称为函数值。且结果名有类型,必须在子程序说明部分说明类型。②虚元表:子程序的所有输入,及除函数值之外的其他计算结果的输出。函数值返回给调用式由实元传递给对应的虚元虚元数据返回给对应的实元FUNCTIONF(X,Y,Z)RESULT(F_RESULT)IMPLICITNONEREAL::X,Y,z,F_RESULTF_RESULT=X+YZ=X-YENDPROGRAMNAIN……READ*,A,BD=F(A,B,c)PRINT*,
5、C,DEND主子5、虚元的含义:编写子程序时没有具体值(调用时或调用结束后才获得数值),因此只是一个符号,表示输入、输出,名字可随便用户取。6、虚元可以是变量名、数组名、过程名、指针等。7、虚元的可选属性INTENT:INTENT(IN):作为子程序的输入(不得再改变其值)INTENT(OUT):子程序的输出(对应的实元不能是表达式)INTENT(INOUT):子程序的输入输出例:REAL,INTENT(IN)::X,Y子程序程序体的写法分为说明部分和执行部分。1、说明部分应对程序体内一切变量、数组等实体(包括虚元)作出说明,同时还要说明函
6、数结果变量名,但不可说明函数名。2、执行部分中必须对函数结果名至少赋值一次。FUNCTIONF(X,Y,Z)RESULT(F_RESULT)IMPLICITNONEREAL::X,Y,z,F_RESULTF_RESULT=X+YZ=X-YEND两单位独立编译1、调用式是表达式,调用结束后调用式得到函数值。2、常见形式:①Y=函数名(实元表)②PRINT*,函数名(实元表)③IF(函数名(实元表))……注意:实元与虚元一般必须在个数、次序、类型上保持一致;但实元与虚元名字可以不同。函数子程序的调用例1:编写子程序求K=M*N,L=M-N,主程
7、序输入2,3,调用子程序,计算2*3及2-3。ProgrammainImplicitnoneInteger::M,N,K,L,FRead*,M,NK=F(M,N,L)PRINT*,K,LENDFUNCTIONF(M,N,L)RESULT(F_RESULT)IMPLICITNONEINTEGER::M,N,L,F_RESULTF_RESULT=M*NL=M-NEND注意:虚元名任意,但一般与实元一致。检查调用原则,程序体编写规则。不能省略说明两单位独立编译例2.计算y=f(x)+g(x)值。其中f(x)=x+sin30°x+1,f(x)>0g
8、(x)=0,f(x)=0x-1,f(x)<0要求用外部函数求g(x)的值。PROGRAMMAINIMPLICITNONEREAL::X,Y,F,G,GFREAD*,XF=X+SI