【Fortran】过程设计之一(子例程SUBROUTINE)

本文详细介绍了Fortran中的子例程(SUBROUTINE),包括使用方式、子例程示意、INTENT属性、传递数组、可分配数组、字符变量给子例程以及子例程作为参数传递的注意事项,旨在帮助理解Fortran过程设计。
摘要由CSDN通过智能技术生成


前言

程序单元包括主程序、子例程、模块、函数子程序。

Fortran中,大型程序可以拆分成多个独立运行和调试的子任务,即程序单元(亦称为外部过程)。
Fortran中有两种外部过程:子例程和函数子程序。这种机制的优点是:

  • 子任务单独测试,相互之间不影响;
  • 避免重复造轮子,调用即可;
  • 将实现某一功能的代码封装起来,避免不经意修改导致代码错误而不自知。

Fortran子例程(SUBROUTINE)

1) 使用方式

子例程(亦可称为子程序)是一个Fortran过程,通过CALL语句进行调用,并通过参数表获取输入数值和返回结果。
定义语句格式

SUBROUTINE subroutine_name( argument_list_dum )   ! 定义子例程名和相关参数表
	(声明部分)
	...
	(执行部分)
	...
RETURN
END SUBROUTINE [ subroutine_name ]  ! []表示可选

注意事项

  • subroutine_name由字母、数字和下划线组成 ,最大长度可达63个字符,第一个字符为字母;
  • argument_list_dum形参,一系列变量和/或数组,从调用程序传递给子例程;
  • 子例程是一个独立的程序单元,开始于SUBROUTINE,结束于END SUBROUTINE,其中的局部变量名和语句标号(“行号”)可以在其它地方复用(不用担心重名);
  • 实际上没有给形参分配内存。

调用语句格式
CALL subroutine_name( argument_list_act )
注意事项

  • 任何可执行程序单元都可以调用子例程,但不能调用自身(除非定义为递归类型);
  • argument_list_act实参。实参的个数、顺序与类型必须和形参的个数、顺序与类型相匹配。
  • 主程序和子例程之间采用地址传递进行参数传递,具体过程是:由于主程序中的实参有具体的内存存储位置,当调用子例程时,主程序将生成多个指针来指向各个实参所对应的存储位置,并将指针传递给子例程,子例程调用的是参数的内存位置,而非实参数据本身。

2) 子例程示意

已知三角形的两条直边,计算斜边。要求计算过程用子例程,主程序直接输入相应数据后直接调用。

PROGRAM calc_hypotenuse_test   ! 主程序
IMPLICIT NONE
REAL :: s1
REAL :: s2
REAL :: hypot

WRITE(*,*) '测试计算斜边的子例程'
WRITE(*,*)'输入第一条直边的长度:'
READ(*,*) s1
WRITE(*,*)'输入第二条直边的长度:'
READ(*,*) s2

CALL calc_hypotenuse( s1, s2 , hypot )   ! 调用子例程

WRITE( *, 100 ) hypot
100 FORMAT('斜边长度为ÿ
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值