资源描述:
《Fortran第6章.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、VisualFortran90程序设计第6章子程序VisualFortran90程序设计§6.1概述§6.5标识符的作用域§6.2函数子程序§6.6虚参数与实参数之间的数据传递§6.3子例行子程序§6.4虚参数的INTENT属性§6.1概述主程序的结构:单位定义说明部分输入计算或处理输出END用子程序完成用子程序完成用子程序完成子程序子程序子程序:功能独立的程序段——实现一定功能的程序单位目的:模块化设计;便于重用所有功能都在主程序单位内完成1、主程序(个数:1)2、外部子程序(个数:0-n)3、模块(个数
2、:0-n)4、块数据单元(个数:0-n)程序在运行时,总是从主程序开始的;子程序(过程)被主程序或被其它子程序调用,甚至可以递归调用(调用本身)源程序的结构源程序由若干个程序单位组成主程序:单位定义说明部分输入调用子程序输出END计算或处理子程序:简单的源程序的结构子程序分类1、函数子程序包含内部函数子程序外部函数子程序2、子例行子程序包含内部子例行子程序外部子例行子程序用于完成复杂的计算返回一个或多个值用于完成复杂计算,返回一个或多个值,或用于其它数据处理§6.2.1外部函数子程序单位定义语句说明部分程序
3、体:具体计算END语句外部函数子程序的常见结构FUNCTIONF(M,N,L)RESULT(F_RESULT)IMPLICITNONEREAL::M,N,L,F_RESULTF_RESULT=M+NL=M-NENDPROGRAMMAIN……READ*,A,BD=F(A,B,c)PRINT*,C,DEND均是独立的程序单位:分开编译,必须考虑数据的传递虚元表实元表结果名ENDENDFUNCTIONENDFUNCTION函数名子程序END语句写法1、函数单位的结束标志2、将控制返回到主调程序。子程序END语句功
4、能函数单位定义语句的写法[RECURSIVE]FUNCTION函数名(虚参数表)RESULT(结果变量名)1、函数子程序的第一行(注释行除外)。2、如果函数是递归的,则应以RECURSIVE开头。3、函数名为全局标识符(见119页6.5节):全局标识符:作用域为整个源程序全局名命名规则:不与已有的全局名同名。各独立程序单位的名字为全局名(主程序、外部子程序、模块、块数据单位),其它为局部标识符。局部标识符:作用域为本程序单位4、主调程序与被调程序之间的数据传递①结果变量名:子程序的一个传出一般写法:函数名_
5、RESULT,用于保存一个计算结果,称为函数值。结果变量名有类型,必须在子程序说明部分说明类型。②虚参数(元)表:子程序的所有传入,及除函数值之外的其他计算结果的传出。函数值返回给主调程序的调用式由主调程序的实元传递给对应的虚元虚元数据返回给对应的实元FUNCTIONF(M,N,L)RESULT(F_RESULT)IMPLICITNONEREAL::M,N,L,F_RESULTF_RESULT=M+NL=M-NENDPROGRAMMAIN……READ*,A,BC=F(A,B,D)PRINT*,C,DEND例
6、1:编写子程序求K=M+N,L=M-N,主程序输入2,3,调用子程序,计算2+3及2-3。重点:子程序的传入、传出5、虚元的含义:编写子程序时没有具体值,因此只是一个符号,表示传入、传出,名字可随便用户取。(用于传入数据的虚元调用时获得数值;用于传出数据的虚元调用结束后可获得数值)6、虚元可以是变量名、数组名、子程序名、指针等。7、虚元的可选属性INTENT(119页6.4节)INTENT(IN):作为子程序的传入(不得再改变其值)INTENT(OUT):子程序的传出(对应的实元如是常量、表达式,数据未能传
7、出)INTENT(INOUT):子程序的传入传出例:REAL,INTENT(IN)::M,NREAL,INTENT(OUT)::LREAL::F_RESULT结果名不是虚元子程序程序体的写法分为说明部分和执行部分。1、说明部分应对程序体内一切变量、数组等实体(包括虚元)作出说明,同时还要说明函数结果变量名,但不可说明函数名。2、执行部分中必须对函数结果名至少赋值一次。FUNCTIONF(M,N,L)RESULT(F_RESULT)IMPLICITNONEREAL::M,N,L,F_RESULTF_RESUL
8、T=M+NL=M-NEND两单位独立编译有值的意义要说明,无值的意义不说明1、调用式是表达式2、常见形式:①Y=函数名(实元表)②PRINT*,函数名(实元表)③IF(函数名(实元表))……调用原则:1、实元与虚元一般必须在个数、次序、类型上保持一致,但实元与虚元名字可以不同。函数子程序的调用写法及功能功能:向被调程序传入数据,接受被调程序的传出数据2、调用结束后调用式得到函数值,主调单位中函数名必须说明类型。例