10语句函数 FORTRAN语言程序设计 教学课件

合集下载

FORTRAN子程序ppt课件

FORTRAN子程序ppt课件

算法:弦截法的基本思路与“二分法” f(x) 相似,它是取f(x1)与f(x2)连线与x轴的
f(x2)
交点x,从(x1,x)与(x,x2)两个区间中舍
去一个,舍取的方法为: 1、如果f(x)与f(x1)异号,则用x作为新 的x2,这就舍去了原来的(x,x2)区间。 2、如果f(x)与f(x1)同号,则用x作为新
24
精选课件ppt
7.2 函数子程序(外部函数)
语句函数只能用一个语句定义,而且只 能在定义它的程序段中使用。
分析:函数f(X)是用两个表达式定义的,不 能用简单的语句函数来表示。怎么办? FORTRAN提供了一种方法,就是把函数的 计算部份从程序中独立出来,并按一定的格 式编成一个单独的子程序段,称为外部函数 或函数子程序。
(4) 编译独立。如果每个子程序是以一个 文件存贮的。则可以单独进行编译。 这样使得便于编写,便于维护,并能 实现软件共享。
函数值取x2的的 符号,取x1的绝 对值
X2=X
FX2=FX
END IF
IF((ABS(X1-X2).GT.1E-5).AND.(ABS(FX).GT.1E-6))
& GOTO 10
IF(FX.GT.1E-6)X=(X1+X2)/2.0
WRITE(*,*)X
15
END
精选课件ppt
例 2:用语句函数采用弦截法求X3-2X2-7X+4=0的根。
实元和对应的虚元进行结合,即实元的值传 给虚元(称为虚实结合过程);
求表达式e的值;
11
精选课件ppt
语句函数的引用过程
根据语句函数名的类型和表达式e求值结果,按 赋值规则得到函数引用的值由函数名带回,并 控制返回到原表达式函数引用处,继续计算表 达式值。

Fortran子程序.ppt

Fortran子程序.ppt
PROGRAM FLOWER DO I=100, 999 IF (NUM(I,100)**3+NUM(I,10)**3+NUM(I,1)**3==I) THEN
WRITE(*,*) I ENDIF ENDDO END
FUNCTION NUM(N, I)
SELECT CASE(I)
CASE(100)
第八章 子程序
语句函数 函数子程序 子例行程序 程序单元之间的数据传递 递归调用 数据共用存储单元与数据块子程序 内部子程序 模块
8.1 语句函数 语句函数——
PROGRAM EXAM1A X=1 FX=5*X**3-2*X**2+7*X+6
用一个语句定义的函数。WRITE(*,*) 'f(', X, ')=', FX
PARAMETER (N=20)
DIMENSION A(N)
INTEGER A
A(1)=17
!该语句及随后的三个语句生成数组A
DO I=2, 20
A(I)=MOD(19*A(I-1), 1024)
ENDDO
DO I=1, N-1 !二重循环完成对A的排序
DO J=I+1, N
CALL SWAP(A(I), A(J))
当未进行说明时,函数值的类型遵守I-N规则。 虚参的类型在函数体中说明,否则遵守I-N规则。
二、函数子程序的调用
P130 例8.4 用函数子程序的方法设计一个程序, 求50-100内的所有素数及其和。
分析:设计一个函数子程序 PRIME(N),函数 PRIME的值定义如下:
1 当n是素数时 prim e(n) 0 当n非素数时
注意:
函数用一条语句可以定义时,才用语句函数的 形式定义函数。

Fortran-第十讲

Fortran-第十讲

关于递归
一般来说,递归程序的效率总是比非递归的要差
递归的好处在于可以大幅度精简代码,并且让程序 更容易阅读和理解 递归在解决某些问题时,会在算法设计上更方便
递归举例EX105
RECURSIVE SUBROUTINE hanoi(n,x,y,z) IMPLICIT NONE INTEGER :: n,step=1 CHARACTER(len=1) :: x,y,z IF (n==1) THEN WRITE (*,*) 'step',step,'Move',n,' from ',x,' to ',z step=step+1 ELSE CALL hanoi(n-1,x,z,y) WRITE (*,*) 'step',step,'Move',n,' from ',x,' to ',z step=step+1 CALL hanoi(n-1,y,x,z) END IF END SUBROUTINE hanoi
INTEGER,SAVE :: n !数据个数 REAL,SAVE :: sum_x !当前数据的和 REAL,SAVE :: sum_x2 !当前数据的平方和
calc_sums: IF (reset) THEN n=0. sum_x=0. sum_x2=0. ave=0. std_dev=0. nvals=0. ELSE n=n+1 sum_x=sum_x+x sum_x2=sum_x2+x**2 ave=sum_x/REAL(n) IF(n>=2)THEN std_dev=SQRT((REAL(n)*sum_x2-sum_x**2)/(REAL(n)*REAL(n-1))) ELSE std_dev=0. END IF nvals=n END IF calc_sums END SUBROUTINE running_average

Fortran语言教程

Fortran语言教程

b b2 4ac
编程如下: x1,2
2a
c the roots of the quadratic equation
a=1.0
b=3.0
c=-5.6
x1=(-b+sqrt(b*b-4.0*a*c))/(2.0*a)
x2=(-b-sqrt(b*b-4.0*a*c))/(2.0*a)
write(*,100)x1,x2
2022/1/5
18
第18页,共387页。
3.5 常 量
3.5.2 实型常量
(有二种表示形式)
⒈小数形式
例:15.8,-21.05,14.0 ,14.,.17, 0.0 ,…
⒉指数形式(通常表示较大或较小的数)
例:100000000→1.0E+8
0.0000125→1.25E-05
2022/1/5
2022/1/5
22
第22页,共387页。
3.6 变 量
变量——在程序执行期间其值可以改变的量。
3.6.1 变量的概念
Fortran为每一个变量分配一个相应的 存储单元;每个变量在每个时刻只能有一 个确定的值。
例:x=4.5 x=8.0
x 4.5 x 8.0
2022/1/5 注:在程序中用到的变量都必须要有确定的值23 。
Fortran内部函数调用格式:
函数名(自变量)
2022/1/5
30
第30页,共387页。
3.7 Fortran内部函数
如:
sin(90*3.14159/180) →1.0 sqrt(9.0) →3.0 abs(-5.6) →5.6
int(6.75) →6
exp(3.0) →20.085540

第2章Fortran程序设计基础.ppt

第2章Fortran程序设计基础.ppt
第6章 子程序
• 子程序是构造大型程序的有效工具,一个实用程序(不 管是系统程序还是应用程序),一般都含有多个子程序。
• FORTRAN 90 中的子程序按子程序完成的功能划分有子 例行程序、函数子程序、数据块子程序等,按是否定义 在某个特定的程序单元内部来划分有程序单元子程序、 模块子程序以及内部(INTERNAL)子程序等,这些通称为 子程序。
FUNCTION SM(M,N,L) SM=0 DO I=M,N
IF (L>0) THEN SM=SM+I**L
ELSE
PROGRAM EXAM2
!开始主程序单元定义
WRITE(*,*)'S1=',SM(1,100,2) !调用函数子程序SM完成S1的计算
WRITE(*,*)'S2=',SM(100,140,3)
PROGRAM EXAM1B
INTEGER X
6.2 函数子程序
语句函数由于要求在一个语句中完成函数的定义,因而它只能解决一些较 简单的问题,当函数关系比较复杂,用一个语句无法定义时,语句函数就 无能为力了,这时需要用到函数子程序。
6.2.1 函数子程序的定义
函数子程序是以保留字 FUNCTION 开头,并以保留字 END结束的 一个程序段,该程序段可以独立存储为一个文件,也可以和调用 它的程序单元合并存储为一个程序文件。函数子程序的定义格式 是:
INTEGER F(X,Y)=X**2+Y**2 ! 定义了一个整型函数F
NF(X,Y)=X**2+Y**2 F
! 也同样定义了一个整型函数
2.语句函数的虚参
在语句函数定义语句中的函数参数称为虚参,他们本身是没有值的,只有在 函数调用时才用实际参数(称为实参)代替。实参或是常数、或是一个有确定 值的变量、或是一个可以计算值的表达式。虚参在形式上与普通变量相同, 一个语句函数中的虚参不能同名。不同语句函数中的虚参可以同名,虚参也 可以和程序中的变量同名。

第10章 Fortran程序单元

第10章  Fortran程序单元
第10章 Fortran程序单元
• 一个Fortran程序中通常不是只由一个主程序组成, 而是由几个按某种方式划分的不同程序单元来共 同组成。尽管Fortran程序中允许只有主程序而没 有子程序,但绝不允许只有子程序而没有主程序。 在Fortran中,程序的执行总是从主程序开始的。 • Fortran中的程序单元可以大体划分为主程序、子 程序两种,其中子程序又可以进一步划分为函数 子程序、子例行子程序和数据块子程序。数据块 子程序通常用于实现变量的初始化赋值,函数子 程序和子例行子程序在用途上基本是一致的,但 是也有许多不同之处。本章将详细介绍Fortran中 的程序单元和它们的基本用法。
10.4 子例行子程序
• 同函数子程序相比,子例行子程序通常用于完成 更为复杂的任务。子例行子程序接受外界传入的 参数并对其进行处理,子例行程序名不会用来返 回处理结果。形象一点来说,函数子程序像检验 机,它不改变参数的值但会告诉外界一个检测结 果;而子例行子程序更像一个加工机器,外界来 的参数经过它的加工会以新的形象出现。本节主 要介绍子例行子程序的相关知识。
10.5 子程序的多入口点和多折返点
• 尽管子程序中不允许直接定义其他的子程序,但 是在Fortran 77时代,可以通过特殊的方式在同 一个子程序中定义多个不同的过程入口。通过调 用不同的过程定义来实现调用同一个子程序中的 不同执行段。除了提供多入口点外,Fortran 77 时代也提供特殊的多折返点来实现特定条件的子 程序调用返回方式。
10.6 Fortran 90/95中的特殊子程序类型
• 在Fortran 90/95标准中,除了继续对前述的一般 子程序类型提供支持外,还新增了三种特殊的子 程序类型。这三种子程序类型就是前述章节中曾 经提到过的RECURSIVE、PURE和ELEMENTAL三种属 性。RECURSIVE属性允许过程进行自身调用,也就 是常说的递归调用;PURE和ELEMENTAL属性都用于 数组的并行处理。

Fortran讲义第二章汇总课件


优先级(最好加括号) : ①括号 ②函数 ③** ④*、/ ⑤单目+、- 双目+、-
类型转换(向高看齐),int, nint, real, dble, cmplx
复数运算
exam_2_5
表达式和赋值语句
❖ 字符表达式 ①
子字符串 字符串的连接 相关内部函数
exam_2_6

❖ 关系表达式: ②
内部过程或模块过程
END
Fortran源程序的书写格式
❖ 固定格式(*.for或*.f)
Fortran源程序的书写格式
Fortran源程序的书写格式
lists.for
Fortran源程序的书写格式
❖ 自由格式(*.f90)和固定格式的比较
exam_2_1
固定格式
自由格式
每行字符数 80
132(VF 中几乎不限制)
Fortran的名称
❖ 用来标识程序中的实体(变量、子程序、函数…)
❖ <名称>→<英文字母>{<英文字母>|<数字>|_|$}
❖ 名称长度不能超过6(FORTRAN77) 31(Fortran90) 63(Visual Fortran)
Fortran的名称
program X-Y-Z Find_it 1A _program $total
注释
第一列: c *
任意位置: !
73-80列
任意位置:!(第六列除外)
每行语句数 多条,用;隔开
多条,用;隔开
(FORTRAN77只能有1条)
续行
第六列,非0非空格 最多续19行
& 最多续39行
Visual Fortran允许续511行
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档