二、函数子程序的调用 11 与调用 Fortran系统内部函数的形式相同,即在需要调 用函数子程序的地方直接写上函数名(实参或者函数名() 在调用时,实参的数据将传送给虚参。 在 Fortran语言中,在调用子程序(包括函数和子例 程)时,实参向虚参的数据传递仅采用地址传递的形式, 从而使虚参和实参指向同一个存储单元。 ◆在子程序中对虚参值进行改变,将导致相应的实参 值也发生变化。 51子程序 2021/2/24
11 2021/2/24 二、函数子程序的调用 与调用Fortran系统内部函数的形式相同,即在需要调 用函数子程序的地方直接写上函数名(实参)或者函数名( )。 在调用时,实参的数据将传送给虚参。 ❖ 在Fortran语言中,在调用子程序(包括函数和子例 程)时,实参向虚参的数据传递仅采用地址传递的形式, 从而使虚参和实参指向同一个存储单元。 ❖ 在子程序中对虚参值进行改变,将导致相应的实参 值也发生变化。 §1 子程序
function y(x) write(*, *)input a 12 if(x gt. 0.o)then read (, )a y=1.0 write(, )y=, y(a) else if(xeq. 0.0)then write( 大大 as a y=0.0 end else y=-1.0 end旰 X=0 end ◆进一步,子程序中需要返回的计算结果不仅可以通 过函数名返回,也可以通过与虚参相对应的实参返回。 51子程序 2021/2/24
12 2021/2/24 function y(x) if(x.gt.0.0) then y=1.0 else if(x.eq.0.0) then y=0.0 else y=-1.0 end if x=0 end write(* , *)'input a' read(* , *)a write(* , *)'y=', y(a) write(* , *)'a=', a end ❖ 进一步,子程序中需要返回的计算结果不仅可以通 过函数名返回,也可以通过与虚参相对应的实参返回。 §1 子程序
function y(x, z) write(*, *)input a 13 if(x gt.0.0)then read(, )a y=1.0 write" )y=, ya, b) z=1.0 write", )b=, b else if(x eq. 0.0)then end y=0.0 z=0.0 地址传递的详细情况将在 else 本章第3节中进行介绍。 y=-1.0 z=1.0 end if end 51子程序 2021/2/24
13 2021/2/24 function y(x, z) if(x.gt.0.0) then y=1.0 z=1.0 else if(x.eq.0.0) then y=0.0 z=0.0 else y=-1.0 z=-1.0 end if end write(* , *)'input a' read(* , *)a write(* , *)'y=', y(a, b) write(* , *)‘b=', b end 地址传递的详细情况将在 本章第3节中进行介绍。 §1 子程序
§2子例程子程序(p239242)1 一、子例程子程序的定义 定义飛式: subroutine子例程程序名虚参) 子程序体 end 二、子例程子程序的调用 必须用一条独立的ca语句调用子例程子程序。 形式:call子例程程序名实参) 或call子例程程序名() §2子例程子程序 2021/2/24
14 2021/2/24 §2 子例程子程序(p239-242) §2 子例程子程序 一、子例程子程序的定义 定义形式: 二、子例程子程序的调用 必须用一条独立的call语句调用子例程子程序。 形式: 或 subroutine 子例程程序名(虚参) end 子程序体 call 子例程程序名(实参) call 子例程程序名( )
15 子例程子程序与函数子程序的区别: ◆函数子程序的名字可以返回子程序中的一个 计算结果,因此函数名是有类型的。 ◆子例程子程序的名字只是一个子程序的名字 不代表任何值,它没有类型,因此不能通过子例程 程序名向调用程序返回一个计算结果。 若子例程子程序中需要向调用函数返回结果, 可通过与虚参相对应的实参返回。 §2子例程子程序 2021/2/24
15 2021/2/24 子例程子程序与函数子程序的区别: ❖ 函数子程序的名字可以返回子程序中的一个 计算结果,因此函数名是有类型的。 ❖ 子例程子程序的名字只是一个子程序的名字, 不代表任何值,它没有类型,因此不能通过子例程 程序名向调用程序返回一个计算结果。 若子例程子程序中需要向调用函数返回结果, 可通过与虚参相对应的实参返回。 §2 子例程子程序