- 4
- 0
- 约1.62万字
- 约 41页
- 2018-02-16 发布于天津
- 举报
模块化程序设计——例程和模块
第3章 模块化程序设计—例程和模块 “模块”直接映射为例程:子程序和函数 内部例程和外部例程 程序构造单元:主程序(包含有内部例程)、模块(包含有内部例程)、外部例程(单独的,包含有内部例程) 例 3-1 牛顿法解方程 PROGRAM Newton IMPLICIT NONE INTEGER :: Its =0 !叠代数 INTEGER :: MaxIts =20 !最大叠代数 LOGICAL :: Converged =.false. !是否收敛 REAL :: Eps = 1e -6 !叠代精度 REAL :: X =2 !根的初值 DO WHILE (.NOT. Converged .AND. ItsMaxIts) X = X-F(X)/DF(X) PRINT*,X,F(X) Its = Its +1 Converged = ABS(F(X))=Eps END DO IF (Converged) THEN PRINT*, `Newton converged` ELSE PRINT*, `Newton diverged` END IF CONTAINS FUNCTION F(X) REAL F, X F = X ** 3 + X – 3 END FUNCTION F FUNCTION DF(X) REAL DF, X DF = 3 * X ** 2 + 1 END FUNCTION DF END PROGRAM Newton 内部函数位于主程序的 CONTAINS 关键字和END 语句之间, 构造形式如下: FUNCTION 函数名( [参数列表] ) [ 声明语句 ] [ 执行语句 ] END FUNCTION [ 函数名 ] 其中,[ ]为可选部分。 IMPLICIT NONE,强制类型声明,其作用域为整个程序单元,所以无需在内部函数中再重写此语句。 尽管可以在程序单元头部声明内部函数的函数名,参数及其有关变量,但从数据安全性考虑,还是应该在内部函数中予以声明。 若在内部函数中声明了和全局变量同名的局部变量,全局变量被屏蔽,内部函数引用的是局部变量,这种现象称为同名覆盖。 这是一个求N的阶乘的实例,程序输出结果: 1 1 3 6 5 120 7 5040 9 362880 11 13
原创力文档

文档评论(0)