当前位置:文档之家› 计算物理学--第一章FORTRAN语言简介与误差分析初步

计算物理学--第一章FORTRAN语言简介与误差分析初步

计算物理学--第一章FORTRAN语言简介与误差分析初步
计算物理学--第一章FORTRAN语言简介与误差分析初步

1

第一章FORTRAN 语言简介与误差分析初步

本章学习目标

1、掌握Fortran 语言的基本结构。

2、能够进行简单的程序编写。

3、掌握误差的基本分类和特点。

4、掌握绝对误差和相对误差的计算方法。

5、掌握数值计算中减小误差的原则。

本章教学内容

1、Fortran 语言简介。

2、质点运动学问题的计算。

3、误差及减小误差的原则。

本章教学重点

1、Fortran 语言主程序框架。

2、简单Fortran 程序的读写。

3、绝对误差和相对误差的计算方法。

4、数值计算中减小误差的原则。

本章教学难点 1、程序编写、调试。 2、数组和循环语句。

3、绝对误差和相对误差的计算方法。

2

1.1 FORTRAN 语言简介

1.1.1 FORTRAN 语言的常量与变量

1.常量及其类型

常量:是指在计算机程序中其值始终不变的量。

类型:整数型、实型、双精度实型、复型、双精度复型、逻辑性及字符型。

2.变量及其类型

变量:计算机程序中有一些量的值是可以变化的,系统程序为这样的量专门开辟了一个存储单元用来存放其值。

类型:整数型、实型、双精度实型、复型、双精度复型、逻辑性及字符型。

3.在FORTRAN 语言中,变量的命名规则 (1)变量名必须以字母开头; (2)变量名中字母不区分大、小写; (3)变量名有效长度为6个字符;

(4)变量名字符之间可以插入空格,但空格不起作用; (5)FORTRAN77没有规定保留字,但不建议使用有特定含义的字作变量名。

1.1.2 FORTRAN 基本语句

1.书写格式

FORTRAN 程序有两种书写格式,即固定格式和自由格式。扩展名

3

为*.f 或*.for 的文件,默认为固定格式;扩展名为*.f90的文件格式,默认为自由格式。

固定格式的FORTRAN 程序必须严格按照一定格式书写: (1)编译程序时,第一列如果有字符C 或*时,此行为注释行,不参加编译和运行;

(2)第1~5列为标号区,可以写1~5位无符号整数,标号大小没有顺序要求;

(3)程序语句在7~72列中,可以从第7列以后的任意位置书写,一行只能写一条语句,如果一行写不完可以续写,当第6列上有非零或非空格的字符时,表明此行为上行的继续行;

(4)第73~80列为注释区,注释区不参与程序的编译,只是在打印时照常打印,方便程序设计者调试程序与检查错误。

自由格式的FORTRAN 程序编写时,每行可写132个字符;在FORTRAN90格式中,也可使用!来标注注释,!后的语句也不参加编译和运行;续行标志是&,写在行末或要续行的行首;自由格式的行号放在每行程序的最前面即可。

2.可执行语句 (1)赋值语句

赋值语句的作用是将一个确定的值赋给一个变量。 例:V (变量)=e (表达式)

“=”是赋值的符号,它将“=”右边的表达式赋予左边的变量;“=”左边只能是变量名而不能是表达式;若“=”两边类型相同,则

4

直接赋值,若类型不同,则先进行右边表达式的求值,将所得结果转化为被赋值的类型再进行赋值。

(2)流程控制语句 ①无条件goto 语句。 goto k(k 为语句标号) 例:goto 100

该语句表示流程无条件地转去运行标号为100的语句,标号为100的语句在程序中的排列位置,可以在引导它的goto 语句之后,也可以在该goto 语句之前。无条件跳转语句常和其它控制语句结合起来使用。

②算术条件语句 if(e) k1,k2,k3

其中,k1,k2,k3为语句的标号,e 必须是算术表达式。当表达式的运算结果e<0时,程序转向标号为k1的语句,当e=0时,程序转向标号为k2的语句;当e>0时,程序转向标号为k3的语句。

例1.1编程Y=)

0(2

)

0(0)0(2

>=<-x x x π

π

的值,要求x 为键盘输入。

read( * ,40) x 40 format(F8.2) if(x)10,20,30 10

y=-1.57079

5

goto 100 20 y=0

goto 100

30 y=1.57079 goto 100 100 write( * ,50)x, y

50 format(1x,2Hx=, F10.6, 4H, y=F10.6) end

③逻辑条件语句 if(e) s

e 为逻辑表达式,s 为内嵌语句,内嵌语句是单独的一个可执行语句。逻辑i

f 语句执行时,首先计算逻辑表达式的值。若逻辑表达式的值为真,则执行内嵌语句;若内嵌语句是非转移语句,则执行语句后继续按顺序往下执行;若内嵌语句是转移语句,则转向指定的语句。若逻辑表达式的值为假,则不执行内嵌语句,直接执行后面的语句。

例1.2 编程求Y=﹛()

)1.2(53.07.01.295.05.0>+≤+x x x x 的值。

表示为: if(x.le.2.1) y=0.5 * x+0.95

if(x.gt.2.1) y=0.7 * x+0.53

6

write( * , * )x, y end

或写为:

read( * , * ) if(x.le.2.1) then y=0.5 * x+0.95 else

y=0.7 * x+0.53 end if

write( * , * )x, y

end

例1.3 有三个数想x 、y 、z,要求打印出其中最大的数。 程序如下:

read( * ,20)x,y,z 20 format(3F10.4) big=x

if(y.gt.big)big=y if(z.gt.big)big=z write( * , * )'big=', big

end ④循环do 语句

当循环的次数为已知时,可以用do 语句实现循环。 do n i=m 1,m 2,m 3或do n i=m 1,m 2

7

即do 标号 循环变量=表达式1,表达式2[,表达式3]。括号内为可选项。

使用do 语句实现循环时,还可以通过使用以下方式来省略标号: do i=m 1,m 2,m 3 循环程序 end do

例1.4 编程求解0.0、0.1、0.2、0.3的平方根。

说明:如果循环变量的类型和表达式的类型不一致,应先将表达式的类型转化为循环变量的类型,在进行循环。

x=0.0 do 10 i=1,4 y=sqrt(x)

write( * ,20)i,x,y 10

x=x+0.1

20 format(1X,I5,2F10.4)

end

format 语句中,第一个“1X ”称为纵向控制符,它表示前进一空格后再输出后面的数据,后面两项说明了一个整型数据和两个实型数据输出的格式,称为格式编辑符。FORTRAN77允许在write 语句中直接指定输出格式,从而省略格式语句format 。

⑤继续语句continue

continue 语句本身不进行任何操作,只是使得程序进行下一个

8

逻辑语句,所以又被称为“空语句”

(3)非执行语句 ⒈说明语句

①类型说明语句和隐含说明语句implicit.

即需要预先对变量类型进行说明,根据变量类型划分相应的存储空间。例如:integer n 这条语句说明了一个变量名为n 的整型变量。

②维数语句dimension

dimension 语句并没有说明数组的数据类型,而是用隐含类型说明规则即I ~N 法则来决定的。

③参数语句parameterv 1=c,v 2=c.

Parameter 语句为非执行语句,应写在所有执行语句之前,且程序定义一个符号常量后不允许在程序中再改变它的值。

④公用语句common w 1,w 2。

一个FORTRAN 程序往往是由一个主程序和若干个子程序组成的,而各个程序的变量名是各自独立的,有时候为了让主程序和子程序中某些变量具有同样的数值,常用common 语句在程序编译时开辟一个公用数据区,使得程序中的变量按照顺序一一对应,共用一个存储单元。

⒉format 语句

可以用来设置输入/输出格式。 ⒊data 语句

9 给变量或数值赋初值。 4.子程序语句

用来独立出某一段具有特定功能的程序代码,在其它程序需要该功能时可直接调用。

①子例程子程序:subroutine s(a 1,a 2,……,a n )。

以subroutine 开头,后面紧跟的是子例程子程序的名字,括号内为参数,编写完程序代码后要以end 或end subroutine 来结束。

②函数子程序:function f(a 1,a 2,……,a n )。

是一种自定义函数,在调用自定义函数前要先声明,函数子程序运行后会返回一个数值。

例1.5 编程求P=)!(!

r n n 的值。n 、r 为键盘输入。

采用函数子程序,计算程序如下: write( * , * )‘n=,r=?' read( * , * )n,r p=fac(n)/fac(n-r) write( * , * )n,r,p

end

也可采用子例程子程序,计算程序如下:

integer p,r

10

write(*,*)'n=,r=?' read(*,*)n,r call fac(n,m) m1=m

call fac(n-r,m) m2=m p=m1/m2 write(*,*)n,r,p end

subroutine fac(i,m) m=1

if(i.le.1) goto 77 do 10 k=2,i 10 m=m*k 77 return

end

1.1.3 源程序语句的排列顺序

在FORTRAN 程序中各类语句的排列顺序是有一定规定的,具体如下:

⑴说明语句(类型语句、维数语句等)。Implicit 语句应在除parameter 语句外的其他所有说明语句之前,parameter 可以与

11

implicit 语句和其他说明语句交替出现。

⑵数据语句(数据初值语句、定义函数语句).data 语句可以和可执行语句交替出现,即可以出现在说明语句之后,end 语句之前的任何位置。

⑶可执行语句。

⑷结束语句(format 格式语句可放在整个程序任意位置)。 ⑸子程序语句(函数子程序,子例程子程序)。第一个语句是function 、subroutine 语句;end 结束语句,放在子程序语句最后。 1.1.4 FORTRAN 常用内部函数和算术表达式 FORTRAN 常用内部函数

功能 通用名

含义

能 通用名 含义

转换

到整型 int(x)

弦 sin(x)、dsin(x)、

csin(x)

sin(x)

转换

到实型 float(x)

弦 cos(x)、dcos(x)、

ccos(x)

cos(x)

转换

到复型

cmplx(a,b)

a+b

i

正切 tan(x)、dtan(x)、

ctan(x)

tan(x)

12

平方

sqrt(x)、

dsqrt(x)、

cqrt(x)

√x 反

弦 asin(x)、

dasin(x) arc

sin(x) 取绝

对值 abs(x)、dabs(x)、cabs(x) ∣x

弦 acos(x)、dcos(x)

arcos(x

)

指数

exp(x)、dexp(x)、

cexp(x)

e x

切 atan(x)、dtan(x)

arc tan(x)

自然

对数 alog(x)、

dlog(x)、clog(x)

㏑x 求

aconjg(x)

常用

对数 alog10(x)、

dlog10(x) lgx

余 mod(a1,a2) a1/a2余数

选最

大值

max(a1,a2,a3)

最小

min(a1,a2,a3)

FORTRAN 规定可以使用五种算术运算符:+(加或正号)、-(减或负号)、*(乘)、/(除)、**(乘方)。在编程中还应注意:

13

(1)程序中“/、*”不能省略。

(2)FORTRAN 程序无大、中、小括号之分,括号一律用小括号。 (3)同类型算数量间才能运算。

(4)FORTRAN 算术表达式求值运算的先后次数为括号、函数,**、*、/、+、-。同一优先级的两个运算按照从左向右的顺序执行。 1.1.5 有关循环语句

循环结构的执行格式:一种是固定重复程序循环的次数;另一种是无限循环直到程序满足一定条件后执行跳出循环命令为止。

例1.6 编程给出t x ωsin =的数据文件。

程序如下:

implicit real * 8(a-h,o-z)

open(1,file='sin.dat') write(8,*)'input w,n' read(*,*)w,n pi=3.1415926 do 10 i=1,n t=2.*pi/w t=t*float(i)/n x=sin(w*t) 10 write(1,*)t,x

end

14

例1.7 编程计算1+2+22+……+263的值。

read(*,*)

a=1

do 10 i=1,63 10 a=a+2 * * i write(*,*) a end

使用循环语句时应注意:

(1)循环变量可以在循环体中被引用,但最好不要第二次赋值。 (2)可以再循环体内转向循环体外,但不允许从循环体外转向循环体外。

(3)当内循环完整的嵌套在外循环之内形成多重循环时,内外循环不能交叉。

例1.8 编程计算

!......!3!2!11

432N x x x x y N ++

+++=的值。 write(*,*)'input x,n'

read(*,*)x,n y=0

do 20 m=1,n

t=1 s=x

do 100 j=1,m

t=t*float(j)

15

100 s=s*x y=y+s/t 20 write(*,*) m,y

end

1.1.6 FORTRAN 语言的特点 FORTRAN 语言的主要特点:

(1)大量的FORTRAN 语言程序是经历长期实践检验证明是正确可靠的,FORTRAN 语言标准的历次修订都尽量保持向下兼容。 (2)FORTRAN 语言书写语法要求严格,更适合严谨的科学计算领域。

(3)FORTRAN 语言可以直接对数组和复数进行计算。 (4)在并行计算机方面,FORTRAN 语言是不可替代的。 (5)FORTRAN 语言是一种编译语言,运行速度快。

(6)FORTRAN 语言自身仍在不断完善和发展,功能不断增强。

16

1.2 质点运动学问题的计算

1.2.1瞬时性与极限

例1.9 某一直点一一直线运动,位移与时间满足方程y=4.5t 2-2t 3,求t=2时,△t=1,0.1,0.01,0.001,0.0001的平均速度v 、平均加速度及v 、a ∣t=2时的瞬时值。 解:已知公式 ,)()(t y t t y t t y v ??=?-?+=

, ,

)()(t v

t t v t t v a ??=?-?+=

由于有

3222)(2)(66)(5.49t t t t t t t t y ?-?-?-?+?=?

因此有

22)(2665.49t t t t t t v ?-?--?+=

从而有

t v

t t v t t v a ??=

?-?+=

)()(

因此瞬时值为

t a t t v 129,692-=-=。

计算程序:

read(*,*)t do 10 K=1.5 dt=10.* *(1-K)

v1=9.* t+4.5 * dt-6.* t * t-6.* t * dt-2.* dt * dt ! al=9.-12.* t-6. * dt 10 write(* , * )dt,vl,al

17

v=9. * t-6. * t * t a=9.-12. * t write( * , * )v,a end

1.2.2 运动方程问题

例1.10 已知沿某一直线运动的质点,其运动速度与时间满足方

程2

35t v -=。当00=t 时有,00=x 求t=1时x 1。

解:由

dt dx v =

可得 vdt

dx =

因此有

t

v vdt x x t

N

i i ?≈=-?∑=0

1

01

N t t s

=

?,积分如果近似于曲线下

阴影窄面积之和。 计算程序: read(*,*) ts,n

dt=ts/float(n)

t=0.0 xl=0.0 do 10 i=1,n

v=5.-3. * t * t

x1=x1+v * dt

10 t=t+dt

write( * , * )'n',n,'x1=',x1 end输入:1.0,500

运行结果:n=500,x1=4.003 006

18

19

1.3 误差及减小误差的原因

1.3.1 误差及其分类

误差是表示某个量值的精确数与近似数之间差异的量度。 实际研究中误差主要来源:

(1)模型误差:由实际问题抽象、简化为数学问题所引起的误差。 (2)观测误差:测量工具的限制或在数据的获取时随机因素引起的物理量的误差。

(3)截断误差:是用数值法求解数学模型时得到的正确解和模型准确解之间误差,通常是有限过程代替无限过程所引起的,该误差又称方法误差。

(4)舍入误差:由于计算机所标示的位数有限,通常用四舍五入的办法取值而引起的误差。 1.3.2 绝对误差和相对误差 (1)绝对误差

若x*准确值x 的一个近似值,则称x-x*为近似值x*的绝对误差,并用e(x)来表示。即:e(x)=x-x*

若对绝对误差的大小范围作出估计,即可指定一个正数∈,使

∣e (x )∣=∣x-x*∣≤∈

称∈为近似值x*的一个绝对误差限。 (2)相对误差

e r (x)=e(x)/x=x-x*/x 为近似值x*的相对误差。若能求出一个∈r,使得∣e r (x)∣<∈r,则称∈r 为近似值x*的一个相对误差限。

20

1.3.3 有效数字

定义1.1 若近似值x*的绝对误差限是某一位的半个单位,该位到x 的非零数字共有n 位,则称近似值x*具有n 位有效数字。

对于同一数的近似值有效数字位数越多,其绝对误差及相对误差就越小。

1.3.4 数值计算中应注意的几个减小误差的原则 1.选用数值稳定性较好的算法 例1.12 考虑循环公式

11--=n n A A

设A 0的误差为ε,求An 时的误差值。

解:)(101ε±-=A A

εε221)](1[21210012±+-=±--=-=A A A A

ε

ε2364)]221[31310023?±-=±+--=-=A A A A

ε

ε2342415)2364(41410034??±+-=?±--=-=A A A A . . .

ε!......n A n ±=

随着n 的增大,误差ε!n 迅速增加。

(完整)Fortran经典编程语言笔记(你值得拥有)

FORTRAN笔记 2014.10.07 目录 第七讲_FORTRAN的基本知识.ppt (2) FORTRAN语言程序设计初步 (2) FORTRAN源程序的书写格式(以77为例) (2) 变量 (2) 变量类型 (2) 算术运算符和运算优先级 (3) 赋值语句 (3) 参数语句(PARAMETER语句) (3) END语句 (3) PAUSE语句 (3) 逻辑运算和选择结构 (4) 关系表达式 (4) FORTRAN中数组的定义及使用 (4) 其他 (5) 1. fortran语言定义CHARACTER*6 TTL(14,3),CNAM(400)是什么意思? (5) 2. fortran里character*10 是什么意思 (5) 3. Fortran中kind是什么函数? (5)

第七讲_FORTRAN的基本知识.ppt FORTRAN语言程序设计初步 FORTRAN是Formula Translation的缩写,意为“公式翻译”,它是为科学、工程问题或企事业管理中的那些能够用 数学公式表达的问题而设计的,其数值计算的功能较强。 常用的是FORTRAN77和FORTRAN90两种标准。 1、一个程序由若干个程序单位组成。主程序和每一个子程序分别是一个独立的程序单位。 2、每一个程序单位都是以“END”结束的。 3、一个程序单位包括若干行。 1)语句行。由一个FORTRAN语句组成。 2)非语句行,即注释行。 4、FORTRAN程序中的语句可以没有标号,也可以有标号,根据需要而定。标号的作用是标志一个语句以便被其 他语句引用。 5、一个程序单位中各类语句的位置是有一定规定的。 6、FORTRAN源程序必须按一定的格式书写。 FORTRAN源程序的书写格式(以77为例) 每一行有80列,分别如下: 1、第1-5列为标号区。一行中第一列为“C”或“*”,该行即被认为是注释行。 2、第6列为“续行标志区”,如果在一行的第6列上写一个非空格和非零的字符,则该行作为其上一行的续行。 3、第7-72列为语句区。 4、第73-80列,注释区。 变量 变量名:一个变量需要用一个名字(变量名)来识别。在同一个程序单位中不能用同一个变量名代表两个不同的变 量。 FORTRAN的变量名按以下规则选定: 1)第一个字符必须是字母,即变量名必须以字母开头; 2)在一个字母后面可以跟1-5为数字或字母。 如果选定的变量名超过6个字符,则只有前面6个字符有效。 注:在变量名中大写与小写字母是等价的。 变量类型 整型变量Integer、实型变量Real、双精度变量Double Precision、复型变量Complex、逻辑型变量Logical和字符型变量Character。 1、隐含约定(I-N规则) FORTRAN规定:在程序中的变量名,凡以字母I,J,K,L,M,N六个字母开头的,即认为该变量为整型变量。 在程序中,凡是变量名以字母I,J,K,L,M,N,i,j,k,l,m,n开头的变量被默认为整型变量,以其他字母开头的变量被 默认为实型变量。 2、用类型说明语句确定变量类型 1)INTEGER语句(整型说明语句) 2)REAL语句(实型说明语句) 3)DOUBLE PRECISION语句(双精度说明语句) 4)COMPLEX语句(复型说明语句) 5)LOGICAL语句(逻辑型说明语句)

FORTRAN 90 程序编程规范

FORTRAN 90 程序编程规范 Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。使编出的程序更易懂、易于维护。 1 语言选择 数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。 Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。 2 Fortran 90 的新特性 2.1.1 建议使用的Fortran 90 新特性 建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。 尽量使用数组下标三元组,这样可优化并减少所需的代码行数。为提高可读性,要在括号内表明数组的维数,例如: 1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:) 2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。例如:2dArray(: , 2:len2) = scalar *( & Another2dArray(:, 1:len2 -1) & - Another2dArray(:, 2:len2) & ) 对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。 在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代 替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。新的表示方法更接近标准的数学符号 在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。

fortran语言语法

FORTRAN是世界上最早出现的高级编程语言,是工程界最常用的编程语言,它在科学计算中(如航空航天、地质勘探、天气预报和建筑工程等领域)发挥着极其重要的作用。经过40多年的发展,伴随着FORTRAN语言多次版本的更新及相应开发系统的出现,其功能不断完善,最新版本的开发系统几乎具备了VC、VB的所有特点,如图形界面编程、数据库等。目前,工科院校开设的计算机编程语言课首选仍然是FORTRAN :< 说实话,从科技发展的趋势来说这不是好事。您可以设想一下,如果需要用鹅毛笔抄写大量的古籍是什么感受! 强烈建议阅读《发掘C#特性赋予科学计算项目以威力》 1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 用类型说明语句确定变量类型:可以改变I-N规则

用IMPLICIT语句将某一字母开头的全部变量指定为所需类型 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)

FORTRAN 95 语法速查

FORTRAN 95 语法速查 ----------白云、李学哲、陈国新、贾波编著《FORTRAN95程序设计》读书笔记 目录:一、应用程序的创建与运行/FORTRAN 95所用的字符/ 变量类型及其声明,常量声明/表达式与运算符 二、输入与输出:表控、有格式 三、选择语句与结构:IF语句、CASE结构 四、DO循环结构 五、数组:数组的声明,数组的引用,数组的算术运算,数组的输入、输出,给数组赋初值, 动态数组,WHERE、FORALL语句 六、子程序:语句函数,内部子程序,调用子程序时的虚实结合:形参为数组、非定界数组、子 程序名、星号,递归子程序,外部子程序,纯子程序,逐元子程序 七、派生数据类型与结构体 八、指针与动态链表 九、文件:存取方式,基本操作语句,各类文件的读写操作 十、接口、模块 十一、公用区、存储关联、数据块子程序 十二、绘图:坐标系、设置图形颜色、创建图形程序/ 常用过程:设置线型、绘一像素点、设置当前位置、绘直线、绘弧线、绘矩形、绘多边形、绘制扇形(圆、椭圆)/ 文字信息的显示 附/录:标准函数与标准子例行程序 一、基础部份 1-1 FORTRAN 95 应用程序的创建与运行 创建或运行FORTRAN 95程序必须在Microsoft Developer Studio平台上进行。尽管程序文本及相关文件的编辑可以在任一文本编辑器上进行,然后再拷到Studio的文档窗口中。但最好还是一开始就进入Studio环境。创建FORTRAN 95 程序的步骤大致如下: 1)启动Microsoft Developer Studio 可以通过不同方式运行dfdev.exe程序以启动Microsoft Developer Studio [开始] \ Compaq Visual Fortran 6 \ Developer Studio \ dfdev.exe:或 ……\CVF66 \https://www.doczj.com/doc/dd8135854.html,\MSDEV98\dfdev.exe Microsoft Developer Studio的界面如下图所示: 文档窗口 工作空间窗口 输出窗口

fortran语言内部函数

附录 FORTRAN 90标准函数 符号约定: ●I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型。 ●s:P表示s类型为P类型(任意kind值)。s:P(k)表示s类型为P类型(kind值=k)。 ●[…]表示可选参数。 ●*表示常用函数。 表1 数值和类型转换函数 函数名说明 ABS(x)*求x的绝对值∣x∣。x:I、R,结果类型同x; x:C,结果:R AIMAG(x)求x的实部。x:C,结果:R AINT(x[,kind])*对x取整,并转换为实数(kind)。x:R, kind:I,结果:R(kind) AMAX0(x1,x2,x3,…)*求x1,x2,x3,…中最大值。x I:I,结果:R AMIN0(x1,x2,x3,…)*求x1,x2,x3,…中最小值。x I:I,结果:R ANINT(x[,kind])*对x四舍五入取整,并转换为实数(kind)。x:R, kind:I,结果:R(kind) CEILING(x)*求大于等于x的最小整数。x:R,结果:I CMPLX(x[,y][,kind]))将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,kind:I,结果:C(kind) CONJG(x)求x的共轭复数。x:C,结果:C DBLE(x)*将x转换为双精度实数。x:I、R、C,结果:R(8) DCMPLX(x[,y])将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,结果:C(8) DFLOAT(x)将x转换为双精度实数。x:I,结果:R(8) DIM(x,y)*求x-y和0中最大值,即MAX(x-y,0)。x:I、R, y的类型同x,结果类型同x DPROD(x,y)求x和y的乘积,并转换为双精度实数。x:R, y:R,结果:R(8)

计算机程序设计语言(FORTRAN语言)

计算机程序设计语言(FORTRAN语言) (总分:36.00,做题时间:90分钟) 一、 (总题数:36,分数:36.00) 1.编译程序能将高级语言编写的源程序转换成( )。 A.解释程序 B.汇编程序 C.映象程序 D.目标程序 (分数:1.00) A. B. C. D. √ 解析: 2.一个完整的FORTRAN源程序( )。 A.至少包括一个主程序 B.至少包括一个主程序和一个子程序 C.由一个主程序与一个以上的子程序组成 D.由一个主程序与一个子程序组成 (分数:1.00) A. √ B. C. D. 解析: 3.语句函数定义语句在程序内合法的位置是( )。 A.在程序块开头语句之后,END语句之前 B.在程序块开头语句之后,可执行语句之前 C.在说明语句之后,END语句之前 D.在说明语句之后,可执行语句之前 (分数:1.00) A. B. C. D. √ 解析: 4.下列关于函数子程序虚实参数的错误说法是( )。 A.可以没有形参数 B.虚实结合的数组长度可以不同 C.实参表与虚参表类型可以不同 D.函数名可以作为虚参

(分数:1.00) A. B. C. √ D. 解析: 5.下列叙述中正确的是( )。 A.FORTRAN程序块中,无名公用语句只能有一个B.FORTRAN子程序中,至少应有一个RETURN语句C.FORTRAN程序块中,最后一行必须是END语句D.FORTRAN程序块中,必须有变量说明语句 (分数:1.00) A. B. C. √ D. 解析: 6.运行下面的程序时得不到所需的结果,其主要原因是( )。INTEGER X(11) DATA X/9,8,7,6,5,4,3,2,1,0,-1/ DO 10 1=1,X(1) ,-1 WRITE(*,*)1.0/SQRT(25.0-REAL(X(1) )* * 2) 10 CONTINUE END A.没有给X(11) 赋初值 B.发生除以零的情况 C.发生负数开平方的情况 D.循环参数设置错误 (分数:1.00) A. B. C. D. √ 解析: 7.下列数据中,不符合FORTRAN常量表示法的是( )。 A.-25.6 B.2.758D3 C.'FOOT"=' D.TRUE (分数:1.00) A. B. C. D. √ 解析:

fortran语法手册

1F O R T R A N77四则运算符+ - */ ** (其中**表示乘方) 在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如 WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/,, DATA A/,B/,C/ DATA A,B,C/3*CHARACTER*6 CHN(10) DATA CHN/10*''/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则

fortran语法手册

1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→() 2 FORTRAN77变量类型 2.1 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如 IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 2.4 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例: DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如 WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 2.5 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/-1.0,-1.0,-1.0/ DATA A/-1.0/,B/-1.0/,C/-1.0/ DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)

DATA CHN/10*' '/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则 程序中的变量名,不分大小写; 变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效; 一行只能写一个语句; 程序的第一个语句固定为PROGRAM 程序名称字符串 某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容; 某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容; 某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行; 某行的第7至72字符位为语句区,语句区内可以任加空格以求美观; 某行的第73至80字符位为注释区,80字符位以后不能有内容。 4 FORTRAN77关系运算符 .GT. 大于 .GE. 天于或等于 .LT. 小于 .LE. 小于或等于 .EQ. 等于 .NE. 不等于 .AND. 逻辑与 .OR. 逻辑或 .NOT. 逻辑非 .EQV. 逻辑等 .NEQV. 逻辑不等 运算符优先级由高到低顺序为:()→**→*或/→+或-→.GT.或.GE.或.LT.或.LE.或.EQ.或.NE.→.NOT.→.AND.→.OR.→.EQV.或.NEQV 5 FORTRAN77语句

Fortran90第六章、第七章习题答案

1.输入整数,判断能否被3或5整除,如能整除,则打印,否则不打印。编写程序实现之。解答: !判断可以被3或5整除的整数 PROGRAM exam61 INTEGER :: n PRINT*, '请输入一个整数:' READ*, n IF(mod(n,15)==0) THEN WRITE(*, "(1X,I5,'是一个可以被3和5整除的整数')") n ELSE IF(mod(n,3)==0) THEN WRITE(*, "(1X,I5,'是一个可以被3整除的整数')") n ELSE IF(mod(n,5)==0) THEN WRITE(*, "(1X,I5,'是一个可以被5整除的整数')") n ENDIF END 2.计算职工工资,工人每周工作40小时,超过40小时的部分应该按加班工资计算(为正常工资的2倍。输入工作时间和单位报酬,计算出该职工应得的工资,并打印输出。编写程序实现之。 解答: !计算职工工资 PROGRAM exam62 INTEGER t,p,pt PRINT*, '请输入工人工作的时间t和单位报酬pt' READ*, t,pt IF(t>40)then p=40*pt+(t-40)*2*pt ELSE p=t*pt ENDIF PRINT*, '该工人本周的应得工资为:',p,'元' END

1.已知:x=0?、10?、20?、…、180?,输出x、sin(x)、cos(x)、tg(x)的值。编写程序实现之。 解答: ! 输出x、xin(x)、cos(x)、tan(x)的值 PROGRAM exam71 PARAMETER(pi=3.1415926) INTEGER i REAL :: x,sinx,cosx,tanx PRINT *,' x sin(x) cos(x) tg(x)' DO i=0,180,10 x=i/180.0*pi sinx=sin(x) cosx=cos(x) tanx=tan(x) PRINT '(I3,3(2X,F10.7))',i,sinx,cosx,tanx END DO END 2.已知:x=1.0、1.1、1.2、…、2.9,输出x、x2、ex、ln(x)的值。编写程序实现之。解答: ! 计算x、x平方、e的x次方、ln(x)的值 PROGRAM exam72 INTEGER i REAL :: x,x2,ex,lnx PRINT*,' x x**2 exp(x) ln(x) ' DO i=10,29 x=i/10.0 x2=x*x expx=exp(x) lnx=log(x) PRINT '(F3.1,2X,F4.2,2X,F10.5,2X,F10.5)',x,x2,expx,lnx END DO END 3.输入10个整数,计算它们的和、积、平方和、和的平方。编写程序实现之。 解答: ! 计算和,积,平方和,和的平方 PROGRAM exam73 INTEGER i REAL :: s1=0.0,s2=1.0,s3=0.0,s4=0.0 PRINT*,'请输入十个实数(每行一个)' DO i=1,10 READ*,a s1=s1+a s2=s2*a s3=s3+a**2 END DO s4=s1**2 PRINT*,'10个数之和',s1 PRINT*,'10个数之积',s2

Simple算法_fortran语言编写

Cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc Cccc This computer program was copied from the graduate student course program Cccc of the University of Minnesota. Part of it was re-formulated to meet the Cccc personal computer environment. Some inappropriate expressions were also Cccc corrected. The program is used only for teaching purpose. No part of it Cccc may be published. You may use it as a frame to re-develop your own code Cccc for research purpose. XJTU Instructor, 1995.11 **************************************************************************** *----------------------------MAIN PROGRAM----------------------------------- **************************************************************************** LOGICAL LSTOP COMMON/CNTL/LSTOP **************************************************************************** OPEN(08,FILE='teresul') CALL SETUP0 CALL GRID CALL SETUP1 CALL START 10 CALL DENSE CALL BOUND CALL OUTPUT IF(.NOT.LSTOP) GO TO 15 CLOSE(08) STOP 15 CALL SETUP2 GO TO 10 END *--------------------------------------------------------------------------- SUBROUTINE DIFLOW **************************************************************************** COMMON/COEF/FLOW,DIFF,ACOF **************************************************************************** ACOF=DIFF IF(FLOW .EQ.0.0)RETURN TEMP=DIFF-ABS(FLOW)*0.1 ACOF=0. IF(TEMP .LE. 0. ) RETURN TEMP=TEMP/DIFF ACOF=DIFF*TEMP**5 RETURN END *-------------------------------------------------------------------------- SUBROUTINE SOLVE ****************************************************************************

Fortran95程序设计课后习题答案(word版方便)

第四章 1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program 2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program 3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为'f8.3)") SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去write(*,*) rb/ra ! 输出1.5 5.p rogram main implicit none type distance real meter, inch, cm end type type(distance) :: d write(*,*) "请输入长度:" read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/2.54 write(*,"(f8.3'米='f8.3'厘米='f8.3'英寸')") d%meter, d%cm, d%inch end program 第五章 1.program main implicit none integer money real tax write(*,*) "请输入月收入" read(*,*) money if ( money<1000 ) then tax = 0.03 else if ( money<5000) then tax = 0.1 else tax = 0.15 end if write(*,"(' 税金为'I8)") nint(money*tax) end program 2.program main implicit none integer day character(len=20) :: tv write(*,*) "请输入星期几" read(*,*) day select case(day) case(1,4) tv = "新闻" case(2,5) tv = "电视剧" case(3,6) tv = "卡通" case(7) tv = "电影" case default write(*,*) "错误的输入" stop end select write(*,*) tv end program 3.program main implicit none integer age, money real tax write(*,*) "请输入年龄" read(*,*) age write(*,*) "请输入月收入" read(*,*) money if ( age<50 ) then if ( money<1000 ) then tax = 0.03 else if ( money<5000 )then tax = 0.10 else tax = 0.15 end if else if ( money<1000 ) then tax = 0.5 else if ( money<5000 )then tax = 0.7 else tax = 0.10 end if end if write(*,"(' 税金为'I8)") nint(money*tax) end program 4.program main implicit none integer year, days logical mod_4, mod_100, mod_400 write(*,*) "请输入年份" read(*,*) year mod_4 = ( MOD(year,4) == 0 ) mod_100 = ( MOD(year,100) == 0 ) mod_400 = ( MOD(year,400) == 0 ) if ( (mod_4 .NEQV. mod_100) .or. mod_400 ) then days = 366 else days = 365 end if write(*,"('这一年有'I3'天')") days stop end program 第六章 1.program main implicit none integer i do i=1,5 write(*,*) "Fortran" end do stop end program 2.program main implicit none integer i,sum sum = 0 do i=1,99,2 sum = sum+i end do write(*,*) sum stop end program 3.program main implicit none integer, parameter :: answer = 45 integer, parameter :: max = 5 integer weight, i do i=1,max write(*,*) "请输入体重" read(*,*) weight if ( weight==answer ) exit end do if ( i<=max ) then write(*,*) "猜对了" else write(*,*) "猜错了" end if stop end program 4.program main implicit none integer, parameter :: max=10 integer i real item real ans ans = 1.0 item = 1.0 do i=2,max item = item/real(i) ans = ans+item

FORTRAN语言自学基础

《FORTRAN语言》自学提纲 第一章1 FORTRAN基础 1. 一个FORTRAN程序由一个主程序或一个主程序与若干个子程序组成。但一个完整的FORTRAN程序只能有一个主程序,主程序的第一个语句是PROGRAM语句,用以说明主程序的名称。这个语句也可以省略,省略时默认为主程序的名称为MAIN。2.FORTRAN的子程序主要有三种: ⑴函数子程序,其第一个语句为FUNCTION; ⑵子例行子程序,其第一个语句为SUBROUTINE; ⑶数据块子程序,其第一个语句为BLOCK DA TA。 主程序与各个子程序可以独立编译,最后再链接成一个可执行程序。在编写并输入一个FORTRAN程序时,既可以将主程序与各个子程序存放在一个文件中,也可以将它们分别存放在不同的文件中。但必须注意,主程序与各个子程序都是独立的程序单位,每个程序单位的最后一行必须用END语句作为结束。 在主程序中,虽然END语句还具有使程序停止运行的作用,但由于一个程序单位只能在最后一行有END语句,因此,在程序的其它位置处需要停止运行时,只能用STOP语句,不能用END语句。 同样的道理,在子程序中,虽然END语句还具有使程序流程返回到调用程序的作用,但在子程序的其它位置(不是最后一行)需要返回到调用程序时,只能用RETURN语句,不能用END语句。 3.FOPTRAN源程序的书写格式有严格的规定。 ⑴一行中第一列为“C”或“*”时,该行被认为是注释行。注释行可以写在四个区中的一个区,且注释行可以出现在程序单位的任何位置。但注释行不能有续行,需要时可以将连续若干行都定义为注释行。 ⑵FORTRAN语句部分不能占用标号区及续行标志区,只能从第七列开始。当语句太长时,可以使用续行。在继续行的标号区内必须为空白(即继续行不允许有标号),标号只能出现在起始行上。 ⑶起始行与继续行或各继续行之间的空格不起作用,因此,对于一般的语句,可以不必到72列才转为继续行,继续行也不必一定要从第7列接着写,但是,包括在引号内的字符串中的空格是有效的,因此,对于字符串要使用继续行时应特别注意,最好写到一行的72列时再转为继续行,且要从继续行的第7列接着写。 ⑷标号为无符号整数,不能出现正负号。 4.变量定义的I-N规则 与别的程序设计语言不同,FORTRAN语言中的实型变量和整型变量可以按隐含规则确定。这个隐含规则就是I-N规则。 I-N规则在一定程度上为用户提供了方便,对于常用的一些变量(如循环控制变量等)就不需要专门的类型语句进行说明,只要用合适的变量名就可以满足对变量类型的需要。但这也容易使用户疏忽了对变量类型的说明,以I-N开头的变量名实际是实型变量,但忘了用REAL 语句说明,或者以非I-N开头的变量名实际是整型变量,也忘了用INTEGER语句说明。 另外,还要提醒大家注意:由于FORTRAN语言中实型与整型变量遵循I-N规则,因此,在有关FORTRAN的练习或考核中,有时会省略对变量类型的说明,在这种情况下,应根据I-N规则来判断变量的类型。 总之,FORTRAN中的所有变量都是需要说明其类型的,而不能理解为整型与实型变量不需要进行说明。

Fortran语言基础

数值分析程序设计 Part I F ortran语言基础 COMPAQ VISUAL FORTRAN 6.5 0编译器的使用 0.1 编译器简介 高级语言以及汇编语言的程序代码在没有转换成机器代码前,计算机是无法执行的。编译器的功能是将高级语言的程序代码翻译成计算机可执行的机器码,也就是生成扩展名为EXE, COM的文件。 0.2 V isual Fortran的使用 Visual Fortran起源于Microsoft的Fortran PowerStation 4.0,这套工具后来卖给Digital公司继续开发,第二个版本称为Digital Visual Fortran 5.0,Digital被Compaq并购之后,接下来的版本6.0

和6.5称为Compaq Visual Fortran。下面的介绍以Compaq Visual Fortran 6.5作范例。 Visual Fortran被组合在一个叫做Microsoft Visual Studio的图形接口开发环境中。Visual Studio提供一个统一的使用接口,这个接口包括文字编辑功能、Project管理功能、调试工具等。而编译器则被组合到Visual Studio中,VF和VC++使用相同的使用接口。 Visual Fortran 6.5除了完全支持Fortran 95的语法外,扩展功能方面提供了完整的Windows程序开发工具,专业版还含有IMSL数值计算连接库。另外还可以和VC++直接互相连接使用,也就是把Fortran和C语言的程序代码混合编译成一个执行文件。 安装好Compaq Visual Fortran后,运行

Fortran语言基础资料讲解

F o r t r a n语言基础

数值分析程序设计 Part I Fortran语言基础 COMPAQ VISUAL FORTRAN 6.5 0编译器的使用 0.1 编译器简介 高级语言以及汇编语言的程序代码在没有转换成机器代码前,计算机是无法执行的。编译器的功能是将高级语言的程序代码翻译成计算机可执行的机器码,也就是生成扩展名为EXE, COM的文件。 0.2 Visual Fortran的使用 Visual Fortran起源于Microsoft的Fortran PowerStation 4.0,这套工具后来卖给Digital公司继续开发,第二个版本称为Digital Visual Fortran 5.0,Digital 被Compaq并购之后,接下来的版本6.0和6.5称为Compaq Visual Fortran。下面的介绍以Compaq Visual Fortran 6.5作范例。 Visual Fortran被组合在一个叫做Microsoft Visual Studio的图形接口开发环境中。Visual Studio提供一个统一的使用接口,这个接口包括文字编辑功能、Project管理功能、调试工具等。而编译器则被组合到Visual Studio中,VF和VC++使用相同的使用接口。 Visual Fortran 6.5除了完全支持Fortran 95的语法外,扩展功能方面提供了完整的Windows程序开发工具,专业版还含有IMSL数值计算连接库。另外还可以和VC++直接互相连接使用,也就是把Fortran和C语言的程序代码混合编译成一个执行文件。 安装好Compaq Visual Fortran后,运行Developer Studio就可以开始编译Fortran程序了。

Fortran用法小结

目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9 章,都是最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不 同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮 助。要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础, 看完前九应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起 来了。外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过

之后都没得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果 有不妥的方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=For mula Tran slator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始 ,IBM设计的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一 目标。ortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortr an90。ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式, 所以编程时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保 证能够看77程序。以下是77和90的一些格式上的区别。

fortran语言教程第8章

第8章 FORTRAN语言的文件操作 在前面介绍的程序中,结果都是输出在屏幕上,数据都是通过键盘送入内存单元,实际上数据的输入/输出也可在磁盘上。如图所示: FORTRAN中对文件的存取以记录为单位,即: 输出时:一个输出语句的数据就是一个记录,叫写入文件。 输入时:一个输入语句需要的数据就是一个记录,叫读出文件。 本章讨论FORTRAN程序的文件操作,也就是FORTRAN程序对磁盘数据文件的操作——读/写方式,并描述数据文件的记录结构,以及在程序设计中怎样建立,使用这些数据的记录结构。 8.1文件的概念 8.1.1 文件的分类 1)按记录存储结构分: 顺序文件:文件记录存储按照时间顺序依次存放,记录的逻辑次序与物理顺序是一致的,不能随意读或取某个记录,必须从首记录开始访问。 直接文件:又叫随机文件,记录存放按记录号完成。 2)按记录数据存放格式分: 有格式文件:记录以字符形式(或称ASCII码形式)存储,文件的数据流由一个个的字符组成,每个字符占据一个字节,每条记录用回车和换行符作为结束符,可以用文本编辑器(如记事本)直接打开查看。 无格式文件:数据以计算机内部的二进制代码形式存放。如果用文本编辑器直接打开查看,只能看到乱码符号。 二进制文件:这是Microsoft的一种扩充模式,数据按其在内存中的存储形式存储在文件中,其数据流由二进制代码形式的一个个字节组成,结构最紧凑,适合保存大容量的数据。用文本编辑器直接打开查看也只能看到乱码。 归纳起来,FORTRAN语言的文件可以分为: 有格式(顺序文件、直接文件、二进制文件); 无格式(顺序文件、直接文件、二进制文件); 8.1.2 文件的操作 1)文件记录定位 文件在存取过程中,有一个文件指针控制着读写的位置,它总是指向当前进行输入或输出的那个记录,也可以通过语句拨动指针的位置。 2)文件操作的过程 打开文件:要求机器分配一个供该文件使用的I/O缓冲区。

C语言和Fortran语言的比较

C语言和Fortran语言的差异 本文详细介绍C语言和Fortran语言的差异 1. C++语言和Fortran语言的发展背景 在程序设计语言的发展过程中,FORTRAN 语言被认为是科学计算的专用语言。后来推出的FORTRAN90 和FORTRAN 95 版本也不例外,它们虽然可以完全实现C++语言同样的功能,然而其软件开发环境和软件的集成性等方面都远不如C++ 语言。近年来,随着计算机软硬件技术的发展,数据结构、数据库管理技术、可视化与计算机图形学、用户接口系统集成以及人工智能等领域的成果被逐渐应用到结构分析软件中,结构分析软件的设计并不仅仅局限于单一的科学计算需要涉及众多的软件开发领域。C++ 语言可以提供这类软件开发所需的功能,而用FORTRAN 90 却很难实现,另一方面从软件的编程环境来看,目前FORTRAN 90 的编译器极少,而C++ 语言的编译系统相当普及,可以运行在各种机型上,便于实现跨平台的软件系统集成。 2. C语言和Fortran语言的差异 由于两者产生的背景不同,它们是存在差异的,在比较了几组源代码之后,主要有以下体会: C 最大的优点在于灵活,不但可以藉由struct 来定义新的数据结构,同时C的pointer 更可以让我们自由而且有效率地处理大数据。而在UNIX 系统中,由于整个操作系统绝大部分就是 C 写出来的,故我们也有方便的C 函数库,直接使用系统资源与享受系统带来的服务,以做到一些低阶、快速的动作。而FORTRAN从一开始就用于科学计算,它与C的差异主要表现为: * 复数运算的速度 * 程序参数与字串 * 内存的动态管理 * 多维阵列的处理 * 函数调用与参数传递 2.1. 复数运算的速度 在进行复数运算的时候,C++ 可以定义复数的class,还可以重新定义所有的四则运算式,复杂的算式也可以做到由一个表达式来解决。但它的重新定义复数四则运算是用函数来做的,使用函数来调用其速度很慢,除非采用inline function 的方式,但会遇到以下的问题:要先将这个算式拆解,分别算过后再重组结果,故表面上程序代码很简洁,但实际上是compiler做了很多工作,还是要付出相当的计算时间代价的。 至于Fortran,最大的优点在于复数(complex number) 的运算,复数是Fortran 的基本数据类型之一,这正是C 所缺乏的(C 基本上只有实型与整型类型而已)。虽然C 也可以由struct 的定义,达到复数四则运算的目的,但却很可能牺牲了程序效能,或者是程序写起来相当繁杂降低可读性。因此,在大量而且要求高速的复数运算场合,Fortran 实际上比C 还要适合。 然而既然复数已是Fortran 基本数据类型之一,则Fortran compiler在设计上可以做到对复数特别的optimization,例如如果遇到较短的复数运算式,它可以用“心算”直接得出real_part 与imag_part 的expression,像这样: real(a) =……;imag(a) = ……. 如此只需两步就得到结果。直到遇到太长太复杂的算式,才去做拆解的动作。 这样使用 C 来做复数运算可能需要绕圈圈,而且绕出来的圈圈可能还不小。不过如果程序中需要复合的数据结构,如一个自定义的数据结构中既有浮点数、整数、还有字符串时,Fortran 只有举白旗投降了。当然,Fortran 如果要做还是可以做,只是不太方便,而且可能也需要绕圈圈。但如果使用Fortran 90 则不成问题了,因为Fortran 90 也有类似C 的struct 结构以定义复合的数据类型。 2.2. 程序参数与字串

相关主题
文本预览
相关文档 最新文档