当前位置:文档之家› Fortran语言

Fortran语言

Fortran语言
Fortran语言

(Fortran77结构化程序设计)

谭浩强田淑清编著

普通高校计算机基础教学系列课程

说明

?第一章算法(略)

?第二章计算机和计算机程序(略)

第三章

Fortran语言程序设计初步

3.1 Fortran语言的发展概况

FORmula TRANslator 公式翻译器

Fortran语言是一种适合于科学和工程计算问题的程序设计语言;也是计算机高级语言发展史上使用最早的一种程序设计语言。

3.1 Fortran语言的发展概况

Fortran语言的发展过程:

?1951年由约翰·贝克斯等人开始研究Fortran语言;

?1957年第一个Fortran程序在IBM704机上运行;

?1958和1962年先后推出FortranⅡ和FortranⅣ;

?1966和1978年先后颁布Fortran66和Fortran77;

?1991年颁布了Fortran90。

?现在已经有了Fortran 95, Fortran 2003

Fortran语言的特征

?Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。?易学,语法严谨。

?可以直接对矩阵和复数进行运算。

?自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。

?很多专用的大型数值运算计算机针对Fortran做了优化。

?广泛地应用于并行计算和高性能计算领域。

?Fortran 90,Fortran 95,Fortran 2003的相继推出使Fortran语言具备了现代高级编程语言的一些特性。

3.2 简单的Fortran程序分析

例1:求一元二次方程x2+3x-5.6=0的根,并打印结果。

?利用公式:

?(这里,a=1,b=3,c=-5.6)

3.2 简单的Fortran程序分析

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

100 format(1x,'x1=',f6.2,'x2=',f6.2)

end

3.2 简单的Fortran程序分析

执行结果:

x1= 1.30 x2=-4.30

3.2 简单的Fortran程序分析

主程序:子程序:

c main program c subprogram

j=k(3) function k(n)

l=k(6) k=1

m=k(9) i=2

write(*,*)j,l,m 5 if (i.le.n) then

end k=k*i

i=i+1

执行结果:goto 5

6 720 362880 endif

return

end

3.2 简单的Fortran程序分析

Fortran程序的基本结构:

⑴一个Fortran源程序由一个或多个程序单位组成,每个程序单位以“end”语句结束。

⑵每个程序单位包括若干行

语句行(执行语句和非执行语句行)

非语句行(注释行)

⑶语句前可不设标号,也可根据需要设标号。

⑷各类语句在程序单位中的位置有一定规则。

⑸程序必须按规定格式书写。

3.3 Fortran源程序的书写格式

Fortran77源程序必须按以下格式书写:

⑴每行只能在80列内书写,并把80列分为4个区。

⑵1~5列:标号区

(1~5 位无符号整数;第1列为“*”或“c”时,为注释行)

⑶第6列:续行标志区

(非空格或非零字符;最多19个续行)

⑷7~72列:语句区

(书写语句;一行只能写一条语句)

⑸73~80列:语句注释区

(一般作编号注释)

3.4 Fortran程序的编辑与运行

Fortran PowerStation 4.0集成开发环境

简介

3.4 Fortran程序的编辑与运行

一、Fortran PowerStation 4.0的启动

选“开始”→“程序”→“Fortran PowerStation 4.0”→“Microsoft Developer Studio”。

二、创建项目工作间

选“File”→“New”→“Project Workspace”→“Console Application”,并输入项目工作间名称(如:aaa)和存放项目工作间的位置或路径(如:c:\for\)→Create。

3.4 Fortran程序的编辑与运行

三、给项目工作间添加和编辑文件

打开指定的项目工作间→选“Insert”→“File into Project”→输入要添加的文件名(如:st01.for)→“Add”。然后按Fortran程序的书写规则编辑程序。

四、编译项目工作间中的文件

打开指定的文件→选“Build”→“Compile st01.for”。

五、连编项目文件

选“Build”→“Build aaa.exe”。

六、运行项目文件

选“Build”→“Execute aaa.exe”。(显示程序执行结果)

3.4 Fortran程序的编辑与运行

注:若Fortran程序是由一个主程序文件和若干个子程序文件组成,则应将各文件添加到同一项目工作间,分别进行编译,然后连编和运行项目文件。

七、打开项目文件

选“File”→“Open”→在打开对话框文件类型下拉列表中选“Project Workspace(*.mdp)”→然后选项目工作间文件夹中的项目文件。

3.5 常量

常量——在程序执行期间其值固定不变的量。

Fortran处理六种类型的常量:

⑴整型常量(Integer)

⑵实型常量(Real)

⑶双精度常量(Double precision)

⑷复型常量(Complex)

⑸逻辑型常量(Logical)

⑹字符型常量(Character)

3.5 常量

3.5.1 整型常量

包括正、负整数和零。

例:5,-13,0,…

说明:

①在(16位)微机中,整数的取值范围为:

-215~215-1(-32768~32767)

②在(32位)微机中,整数的取值范围为:

-231~231-1(-2147483648~2147483647 )

3.5 常量

3.5.2 实型常量

(有二种表示形式)

?⒈小数形式

例:15.8,-21.05,14.0 ,14.,.17,0.0 ,…

?⒉指数形式(通常表示较大或较小的数)

例:100000000→1.0E+8

0.0000125→1.25E-05

数字部分指数部分

3.5 常量

说明:

⑴一个数值用指数形式表示时有两种表达方式:

①一个基本实数后面跟指数部分。

例:0.876→8.76E-1

-2589.4→-2.5894E+3

②一个整数后面跟指数部分。

例:0.876→876E-3

-2589.4→-25894E-1

3.5 常量

⑵同一个数值可用不同的指数形式表示。

例:0.876→8.76E-1→87.6E-2→876E-3

⑶计算机在输出时,按标准化指数形式输出。

例:0.28→2.800000E-01

-59.58E+12→-5.958000E+13

即数字部分大于1,且小数点前只有一位非零数字的指数输出形式。

⑷在微机中,一般用四个字节存放一个实数,其取值范围为:10-75~1075。超出此范围时为“溢出”错误。

3.5 常量

⑸下列形式为不合法的指数形式:

①单独的小数点和单独的指数部分。

例:.E5,E10 ×

②指数部分只能是整数,不能带小数点。

例:8E0.5,12.3E1.5 ×

3.6 变量

变量——在程序执行期间其值可以改变的量。

3.6.1 变量的概念

Fortran为每一个变量分配一个相应的存储单元;每个变量在每个时刻只能有一个确定的值。

例:x=4.5 x

x=8.0 x

注:在程序中用到的变量都必须要有确定的值。

3.6 变量

3.6.2 变量名

变量名——标识一个变量所用的名字。

命名规则:

?变量名的第一个字符必须是字母;

?在第一个字符后可跟1~5个字母或数字。

例:

x,m1,total,k123,…

3.6 变量

注意几点:

⑴变量名不区分大小写字母。

例:TOTAL,Total,total 代表同一变量

⑵变量名中的空格不起作用。

例:abc,a bc,ab c,a b c 代表同一变量

⑶变量名尽量做到“见名知义” A VER、SUM、Imax

⑷允许变量名与语言中具有特定含义的字(“保留字”)同名。

例:sin,read,open,end,…

建议不要使用fortran中具有特定含义的字作变量名

3.6 变量

3.6.3 变量的类型

Fortran能处理各种类型的变量。不同类型的变量用来存放不同类型的数据。

变量类型的说明(三种方式)

⒈隐含说明

即以I、j、k、l、m、n开头的变量为整型变量,以其它字母开头的变量为实型变量。(“I~N规则”)

例:imax,m5,number,… 为整型变量

v,h2,aver,… 为实型变量

3.6 变量

⒉显式说明

即用类型说明语句指定变量的类型。

如:

Integer——说明变量为整型变量

Real——说明变量为实型变量

Double precision——说明变量为双精度变量

Complex——说明变量为复型变量

Logical——说明变量为逻辑型变量

Character——说明变量为字符型变量

3.6 变量

如:

Integer abc,xyz

real imax,k3

logical a1,kpz

⒊用implicit语句说明

即说明用某一字母开头的变量为指定的类型。

例:implicit integer(a,b),real(k)

implicit integer(x-z)

3.6 变量

三种类型说明的优先级:

高类型说明语句(显式说明)

implicit语句说明

低“I~N规则”

3.7 Fortran内部函数

在编制Fortran程序时,经常要用到一些基本的数学函数,如三角函数、指数函数、对数函数等。为方便用户,Fortran编译系统已提供了这些函数的计算程序,需要时即可调用。Fortran内部函数调用格式:

函数名(自变量)

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

?Fortran77全部内部函数见附录Ⅵ

3.7 Fortran内部函数

注意几点:

⑴函数自变量(参数)必须用括号括起来。

例:sinx+cosx →sin(x)+cos(x)

⑵函数自变量可以是常量、变量或表达式。

例:exp(3.0)

sin (x+cos(x))

⑶有些函数的类型是由自变量的类型确定的。

例:mod(8.0,3.0) →2.0

mod(8,3) →2

⑷三角函数的角度单位是“弧度”而不是“度”。

⑸函数名分为“通用名”和“专用名”

内部函数名一般用“通用名”。

3.8 Fortran算术表达式

Fortran77提供了四种表达式:

?算术表达式

?关系表达式

?逻辑表达式

?字符表达式

算术表达式——将各运算元素(常量、变量、函数和数组等)用算术运算符连接起来的一个有值的式子。

3.8 Fortran算术表达式

一、算术运算符及其优先级

⒈算术运算符(五种)

加(+)减(-)乘(*)

除(/)乘方(**)

⒉算术运算符的优先级

括号→函数→乘方→乘、除→加、减

注:同级运算“先左后右”,连续乘方时“先右后左”。

3.8 Fortran算术表达式

例:3+5-6.0*8.5/4**2+sin(x)

→3+5-6.0×8.5÷42+sinx

x**y**z、x**(y**z)

→x yz

(x**y)**z→(x y)z

有了算术表达式概念之后,我们就可以将:

数学运算式→Fortran算术表达式

3.8 Fortran算术表达式

二、算术表达式书写规则

⑴表达式中的各运算元素之间必须用运算符分隔。

例:xyz→x*y*z

2(x+y) →2*(x+y)

⑵作任何运算的表达式只能写在一行。

例:

→(a+b)/(c+d)

a+b/c+d ×

3.8 Fortran算术表达式

⑶两个运算符不能紧邻。

例:

→a/(-b)→-a/b →a/-b

⑷表达式一律用小括号。

例:

a[x+b(y+c)] →a*(x+b*(y+c))

3.8 Fortran算术表达式

三、表达式求值中的类型问题

⑴同类型量运算的结果,仍为原类型。

例:4*5=20,4.0*5.0=20.0

6.0/4.0=1.5,6/4=1(≠1.5)

⑵不同类型量运算时,先将低级类型(整型)转换为高级类型(实型),然后再按同类型量进行运算。

例:2.5*4=10.0(≠10)

2.0**3=2.0*2.0*2.0=8.0(属同类量运算)

3.8 Fortran算术表达式

四、运算中的误差问题

⑴整数量运算没有误差

⑵实型量由于有效位数的限制,运算时会出现误差

例1:(1.0/3.0)*3.0=0.9999999 (≠1.0)

∵1.0/3.0=0.3333333

例2:X=1E30

Y=-1E30

Z=1.0

(X+Y)+Z=?

X+(Y+Z)=?

3.9 赋值语句

Fortran提供三类赋值语句:

算术赋值语句

逻辑赋值语句

字符赋值语句

一、算术赋值语句一般格式

V=e

功能:把赋值号右边表达式的值,赋给赋值号左边的变量或数组元素。

例:

S=3.14159*r**2

3.9 赋值语句

二、算术赋值语句中的类型转换问题

⑴赋值号两边类型一致时,直接赋值。

例:k=355

⑵赋值号两边类型不一致时,先计算,再转换,最后赋值。

例:y1=6*2 (y1的值为12.0)

Imax=3.6*2 (imax的值为7(7.2→7))

3.9 赋值语句

注意几点:

⑴赋值号左边只能是变量或数组元素,不能为带运算符的表达式。

例:3*a=6*x+sin(x)×

⑵一个赋值语句只能给一个变量或数组元素赋值。

例:a=b=c=d=3.5 ×

⑶一个赋值语句执行后,赋值号左边变量的原值被右边表达式的值取代。

例:x=1.0

x=x+1.0 (x的值为2.0)

3.10 简单的输出语句

?用户编制的程序必须要有输出语句,把结果显示或打印出来。

Fortran提供了三种输出方式:

①表控格式输出(标准或固定格式输出)

②指定格式输出

③无格式输出(二进制形式,适应磁盘文件)

一、表控格式输出

按Fortran编译系统隐含规定的格式输出。(即系统根据输出数据的不同类型,自动给出相应的输出格式。)

3.10 简单的输出语句

二、表控格式输出语句

一般格式:

print ﹡,〈输出表列〉

write (﹡,﹡)〈输出表列〉

例1:print ﹡,56.8,125

或write (﹡,﹡) 56.8,125

例2:print ﹡,a, b, c

或write (﹡,﹡) a, b, c

3.10 简单的输出语句

例3:x=12.5

y=90.5

z=x+y

print *, x, y

print *, 'z=', z

end

运行结果:

12.500000 90.500000

Z= 103.000000

3.10 简单的输出语句

⒈整数的表控格式输出

规定:每个整数占12列,数据打印在右端,左补空格。

例:print *,123,-1128

输出结果:

︺︺︺︺︺︺︺︺123︺︺︺︺︺︺︺-1128

3.10 简单的输出语句

⒉实数的表控格式输出

规定:每个实数占16列,数据打印在右端,左补空格。

例:print *,15.4,-321.45

输出结果:

︺︺︺︺︺︺15.400000︺︺︺︺︺-321.450000

3.10 简单的输出语句

?当实数值的绝对值≥107或<1时,按标准的指数形式输出。

例:print *,-10000000.,0.98

输出结果:

︺︺-1.000000E+07︺︺︺︺9.800000E-01

3.11 简单的输入语句

Fortran提供了三种输入方式:

①表控格式输入(自由格式输入)

②指定格式输入

③无格式输入

一、表控格式输入

表控格式输入——根据变量的数据类型输入相应的数据形式,数据间以逗号或空格分隔的输入方式。

3.11 简单的输入语句

二、表控格式输入语句

一般格式:

read ﹡,〈输入表列〉

read (﹡,﹡)〈输入表列〉

例1:read ﹡,a, b (若a=14.7, b=30.0)

键盘输入:14.7,30.0↙

3.11 简单的输入语句

例2:read ﹡,x,k (若x=4.5,k=200)

键盘输入:4.5,200↙

例3:read ﹡,x,y,z (若x=1.5,y=2.5,z=3.5)

read ﹡,i,j (若i=5,j=10)

键盘输入:1.5,2.5,3.5↙

5,10↙

3.11 简单的输入语句

注意几点:

⑴输入数据的个数不得少于read语句中变量的个数,但多余的数据也不起作用。

例:read ﹡,x,y,z (若x=1.5,y=2.5,z=3.5)

键盘输入:

①1.5,2.5,3.5↙

②1.5,2.5,3.5,5.2,6.0↙(最后两个数被忽略)

③1.5,2.5↙(计算机将等待用户继续输入数据)

3.11 简单的输入语句

注意几点:

⑵一个read语句可以分多行输入,但每一个read语句必须从新的一行输入。例:read ﹡,x,y,z (若x=1.5,y=2.5,z=3.5)

read ﹡,i,j (若i=5,j=10)

键盘输入:1.5↙

2.5↙

3.5↙

5,10↙

若键盘输入:1.5,2.5,3.5,5,10↙(错)

3.11 简单的输入语句

⑶在输入数据时若出现“/”,则终止对此read语句的输入。

例:read ﹡,x,y,z

键盘输入:1.5,2.5/↙

(变量z的值为原值或为零。)

3.12 参数语句(parameter语句)

一、parameter语句的功能

为常量命名,即用一个符号代表一个常量。

二、parameter语句一般形式

Parameter(p1=c1[,p2=c2,…,p n=c n])

其中:p n——符号常量;c n——常量。

3.12 参数语句(parameter语句)

例:求半径为0.5m的圆面积和圆周长。

编程如下:

parameter (r=0.5,pi=3.14159)

s=pi*r**2

h=2.0*pi*r

print*,s,h

end

3.12 参数语句(parameter语句)

注意几点:

⑴参数语句必须写在所有可执行语句之前;

⑵符号常量的命名规则及类型与变量相同,并遵循“I~N规则”;

⑶程序中不能给符号常量再赋值。

3.13 pause语句, stop语句, end语句

一、pause语句

⒈一般形式

Pause [n]

注:n为1~5位正整数或字符常量。

⒉功能

暂停程序的执行。

(一个程序单位可以有多个pause语句)

3.13 pause语句, stop语句, end语句

例:

parameter (r=0.5,pi=3.14159)

s=pi*r**2

h=2.0*pi*r

pause '打印面积和周长'

print*,s,h

end

3.13 pause语句, stop语句, end语句

二、stop语句

⒈一般形式

stop [n]

注:n为1~5位正整数或字符常量。

⒉功能

终止程序的执行。

(一个程序单位可以有多个stop语句)

3.13 pause语句, stop语句, end语句

三、end语句

⒈一般形式

end

⒉功能

对主程序:终止程序的执行和作为程序单位的结束标志;

对子程序:返回调用程序和作为程序单位的结束标志。

(一个程序单位只能有一个end语句)

课后练习题

P75~76:第五、八、十一题

第四章

逻辑运算和选择结构

程序设计的基本方法

?计算机程序

程序设计的基本方法

?所谓面向过程的程序设计,是指利用面向过程的语言工具(如Basic、Pascal、Fortran和C等)进行程序开发的各项活动。

程序设计的基本方法

程序设计的基本方法

?面向对象的程序设计是一种新的程序设计范型。它将一些新的理念和结构化程序设计中好的思想相融合,提供了一种全新的程序设计方法。

4.1 算法及其表示方法

一、算法的概念

算法——解决某一问题所采取的方法和步骤。

计算机算法——计算机能够执行的算法。

计算机算法的特征:

⑴有穷性——操作步骤是有限的。

⑵确定性——方法步骤是明确的。

⑶有效性——方法是正确的,步骤是完整的。

⑷必须有输入和输出。(取得必要的信息,给出正确的结果。)

4.1 算法及其表示方法

Fortran是结构化程序设计语言,每个程序单位可由三种基本结构组成:

⑴顺序结构

⑵分支选择结构

⑶循环结构

实践证明,任何复杂的问题都可以用这三种基本结构来描述。

4.1 算法及其表示方法

二、算法的表示

用N~S流程图表示。(由几种功能框组合而成)

⑴矩形框——用于表示顺序结构。

如:若先执行语句A,再执行语句B。

4.1 算法及其表示方法

例:若a=1.5,b=4.5,求a+b的平方。

①画N~S图:②编程:

A=1.5

B=4.5

C=(a+b)**2

Print *, c

end

4.1 算法及其表示方法

⑵三角框——用于表示分支选择结构。

如:若P为条件,当P成立执行语句A,否则执行语句B。

4.1 算法及其表示方法

⑶L形框——用于表示循环结构。

①当型循环(P为条件,A循环体)

如:若条件P成立,则执行循环体A,否则跳出循环体。

4.1 算法及其表示方法

②直到型循环(P为条件,A循环体)

如:首先执行循环体A,若条件P不成立继续执行循环体A,直到条件P成立为止。

4.2 关系表达式

关系表达式是构成选择结构判断条件的基本式子。它也是一种最简单的逻辑表达式。

一、关系运算符(P80 表4-1)

.gt. (大于)

.ge. (大于等于)

.eq. (等于)

.lt. (小于)

.le. (小于等于)

.ne. (不等于)

4.2 关系表达式

二、关系表达式的一般形式

〈算术量〉〈关系运算符〉〈算术量〉

即:

⑴关系表达式是由关系运算符将两个算术量连接起来的式子。

⑵关系表达式的运算元素是算术量,结果是逻辑量:真(.True.)或假(.False.)。

4.2 关系表达式

有了关系表达式,我们就可以将:

数学关系式─→Fortran关系表达式

例:

x+y>15.4 ─→x+y.gt.15.4

a+b≠a-b ─→a+b.ne.a-b

e x≥2.17 ─→exp(x).ge.2.17

4.2 关系表达式

注意:

⑴算术运算优先于关系运算。

如:a+b.ne.a-b等同于(a+b).ne.(a-b)

⑵实数运算误差对关系表达式的影响

如:1.0/3.0*3.0.EQ.1.0 值为.false.

1.0/3.0*3.0=0.9999999

∴对于a.eq.b →abs(a-b).lt.1E-6

c.ne.d →abs(c-d).gt.1E-6

4.3 逻辑表达式

关系表达式只能表达简单的关系,如:

5≤x≤10

就不能用关系表达式表达,此时要用逻辑表达式。

4.3 逻辑表达式

一、逻辑表达式的一般形式

〈逻辑量〉〈逻辑运算符〉〈逻辑量〉

即:

⑴逻辑表达式是由逻辑运算符将两个逻辑量连接起来的式子。

⑵逻辑表达式的运算元素是逻辑量,结果也是逻辑量:真(.True.)或假(.False.)。?逻辑量包括逻辑常量、逻辑变量和关系表达式。

4.3 逻辑表达式

二、逻辑常量

两个:①.true.(真)②.false.(假)

三、逻辑变量

——用于存放逻辑常量的变量。

逻辑变量可以通过赋值语句来接受逻辑常量的值,但在使用前,要进行类型说明。例:logical a, b

a=.true.

b=.false.

4.3 逻辑表达式

四、逻辑运算符

.and. (逻辑与)

.or. (逻辑或)

.not. (逻辑非)

.eqv. (逻辑等(同或))

.neqv.(逻辑不等(异或))

4.3 逻辑表达式

五、逻辑运算符的运算规则(P83 表4.3)

若a,b为两个逻辑量,则:

a.and.b——(当a、b同时为真时,为真。)

a.or.b ——(当a、b中任意一个为真或同时为真时,为真。)

.not.a ——(当a为真,其值为假;当a为假,其值真。)

a.eqv.b——(当a、b为同一逻辑常量时,为真。)

a.neqv.b——(当a、b不为同一逻辑常量时,为真。)

4.3 逻辑表达式

六、逻辑表达式的运算次序(P84 表4.5)

运算次序为:

括号→算术运算→关系运算→逻辑运算

而逻辑运算:

.not.→.and.→.or.→.eqv.,.neqv.

4.3 逻辑表达式

例1:写出下列条件的逻辑表达式。

⑴5≤k≤10

k.ge.5.and.k.le.10

⑵│f│≤3g或│f│=5t

abs(f).le.3*g.or.abs(f).eq.5*t

⑶1≤a≤8并且1≤b≤8

(a.ge.1.and.a.le.8).and.(b.ge.1.and.b.le.8)

4.3 逻辑表达式

例2:若a=2.5,b=7.5,c=5.0,d=6.0,求下列逻辑表达式的值。

⑴(a.lt.b).and.(b.lt.c)

①t ②f

③f

4.3 逻辑表达式

例2:若a=2.5,b=7.5,c=5.0,d=6.0,求下列逻辑表达式的值。

⑵c/2.0+d.lt.a.and..not..true..or.c.le.d

①8.5 ④F ③T

②F .

⑤F .

⑥T

4.4 用块if 实现选择结构

有以下三种典型的块if选择结构:

⑴if (条件) then (块if语句)

块(then块)

endif (endif语句)

4.4 用块if 实现选择结构

⑵if (条件) then

块1 (then块)

else

块2 (else块)

endif

4.4 用块if 实现选择结构

例:2X+3 (X≤2)

Y=

X+5 (X>2)

编程如下:

read(*,*) x

if (x.le.2) then

y=2*x+3

else

y=x+5

endif

wri te(*,*)?x=?,x,?y=?,y

end

4.4 用块if 实现选择结构

⑶if (条件1) then

块1

else if (条件2) then

块2 (else if块)

else if (条件n) then

块n

[else

块(n+1)]

endif

4.4 用块if 实现选择结构

说明:

⑴每个块if中可以完整地包含一个(或多个)块if结构,即构成块if 的嵌套结构。如:if (条件1) then if (条件1) then

块1 if (条件2) then

else 块2

if (条件2) then endif

块2 else

endif 块1

endif endif

4.4 用块if 实现选择结构

⑵一个块if 语句必须和一个endif语句相对应。

⑶块if 中的“then块”、“else块”和“else if块”可为空块。

4.4 用块if 实现选择结构

例1:求一元二次方程ax2+bx+c=0的根。

(当b2-4ac≥0时有两个实根,b2-4ac<0时有两个复根。)

4.4 用块if 实现选择结构

print*,?input a,b,c:?

read*,a,b,c f=-b/(2.0*a)

d=b**2-4.0*a*c g=sqrt(-d)/(2.0*a)

if (d.ge.0.0) then print*,'x1=',f,'+i',g

e=sqrt(d) print*,'x2=',f,'-i',g

x1=(-b+e)/(2.0*a) endif

x2=(-b-e)/(2.0*a) end

print*,'x1=',x1

print*,'x2=',x2

else

4.4 用块if 实现选择结构

例2:求下列函数值。

0 (x<-10)

2x+20 (-10≤x<0)

y= 20 (0≤x<20)

30-0.5x (20≤x<40)

50-x (40≤x<50)

0 (x≥50)

4.4 用块if 实现选择结构

4.4 用块if 实现选择结构

源程序一:

read*,x if (x.lt.50.0) then if (x.lt.-10.0) then y=50.0-x

y=0.0 else else y=0.0 if (x.lt.0.0) then endif

y=2.0*x+20.0 endif

else endif

if (x.lt.20.0) then endif

y=20.0 endif

else print*,?y=…,y

if (x.lt.40.0) then end

y=30.0-0.5*x

else

4.4 用块if 实现选择结构

源程序二:

read*,x print*,?y=…,y

if (x.lt.-10.0) then end

y=0.0

else if (x.lt.0.0) then

y=2.0*x+20.0

else if (x.lt.20.0) then

y=20.0

else if (x.lt.40.0) then

y=30.0-0.5*x

else if (x.lt.50.0) then

y=50.0-x

else

y=0.0

endif

4.5 逻辑if 语句

逻辑if语句也是一种选择结构,但与块if 不同,主要表现在:

①只用一行表示一个选择结构;

②仅当条件成立时执行,并且只执行一条语句。

逻辑if语句的一般形式:

If〈条件〉语句

例:if (n.le.100) n=n+1

4.5 逻辑if 语句

例:2X+3 (X≤2)

Y=

X+5 (X>2)

编程如下:

read(*,*) x read(*,*)x

if (x.le.2) then if(x.le.2) y=2*x+3

y=2*x+3 if(x.gt.2) y=x+5

else write(*,*)?y=?,y

y=x+5 end

endif

write(*,*)?y=?,y

end

课后练习题

P96:

第一~三题;第四、五、七题

第五章循环结构的实现

第五章循环结构的实现

所谓循环,是指在程序执行过程中需要重复执行的程序段。

在实际问题中,我们经常遇到循环,如:

求∑n,n!,…

无条件循环GOTO

循环结构直到型循环

条件循环当型循环

计数型循环

5.1 用goto语句实现循环

goto语句的一般形式:

goto

其中:s1——语句标号。

功能:程序执行到此语句时,无条件的转向标号为s1的语句去执行。

5.1 用goto语句实现循环

如果我们把以上goto语句作为逻辑if语句中的执行语句,则就可以实现有条件的循环。即:

integer x,sum 求1~10的累加和

x=0.0

sum=0.0

10 x=x+1

sum=sum+x

if(x.lt.10)goto 10

print*,sum

end

5.2 当型循环的实现

一、用块if和goto语句实现循环

一般形式:

s1 if (条件) then

标号块

goto s1

endif

5.2 当型循环的实现

编程如下:

read*,n

m=1

i=1

10 if (i.le.n) then

m=m*i

i=i+1

goto 10

endif

print*,m

end

5.2 当型循环的实现

二、用do while语句实现当型循环

一般形式

do s1[,] while (条件)

┆循环体

s1 <终端语句>

5.2 当型循环的实现

例:求n!。

编程如下:

read*,n

m=1

i=1

do 10 while (i.le.n)

m=m*i

i=i+1

10 continue

print*,m

end

5.3 直到型循环的实现

一、用逻辑if语句实现直到型循环

一般形式

s1 循环体

if (条件) goto s1

5.3 直到型循环的实现

例1:求n!。

编程如下:

read*,n

m=1

i=1

10 continue

m=m*i

i=i+1

if (i.le.n) goto 10

print*,m

end

5.3 直到型循环的实现

编程如下:

integer sign

s=1.0

d=2.0

sign=1

10 sign=(-1)*sign

t=sign/d

s=s+t

d=d+1

if (d.le.100.0) goto 10

print*, s

end

当型与直到型循环的比较

当型循环直到型循环

不同:先判断条件先执行循环体

再执行循环体再判断条件(循环体至少被

执行一次)

5.4 用do语句实现循环

当循环的初值、终值和循环次数都已知时,可用do语句实现循环。

用do语句实现的循环称为“d o循环”。do循环是由一个do语句和循环体组成。

5.4 用do语句实现循环

一、一般形式

do s[,] v=e1, e2 [,e3]

┆循环体

s <终端语句>

说明:

①s——循环体终端语句的标号

②v——循环控制变量(do变量),可为整型、实型或双精度

5.4 用do语句实现循环

一、一般形式

do s[,] v=e1, e2 [,e3]

┆循环体

s <终端语句>

说明:

③e1,e2,e3是整型、实型或双精度表达式

e1——循环变量初值

e2——循环变量终值

e3——循环变量增量(步长,默认值:1)

当v为整型变量,e3=1时,e3可忽略

5.4 用do语句实现循环

例如:求1~10的累加和。

integer x,sum

sum=0

DO 10,x=1,10

sum=sum+x

x=x+1

10 continue

print*,sum

end

5.4 用do语句实现循环

二、执行过程(分四种情形)

⑴当e2>e1且e3>0 :

⑵当e2>e1且e3<0 :

5.4 用do语句实现循环

⑶当e20 :

⑷当e2

5.4 用do语句实现循环

编程如下:

do 10 i=1, 30

read*, x

10 if (x.ge.60) print*, i, x

end

5.4 用do语句实现循环

例2:打印正弦sinx的值。(间隔0.1o,从0o~360o)

编程如下:

do 100 i=0, 3600

x=i/10.0

y=sin(x*3.14159/180)

100 print*, ?x=?,x, ?y=?, y

end

5.4 用do语句实现循环

说明:

⑴DO循环是当型循环

⑵可用e1, e2, e3的值求出循环次数。

计算公式:r=max(int((e2-e1+e3)/e3),0)

①e3=0 则运行时出错(被零除)

例:do 10,i=1.2,6.6,0.2

r=max(int(6-1+0/0),0)(因为循环变量I是整型)

②e1e2且e3>0,则循环次数为0

⑶由于实数在内存中存储的误差,v, e1, e2, e3尽可能用整型量。

5.4 用do语句实现循环

说明:

⑷e1,e2,e3的值在do循环体内不会改变,即使给表达式e1,e2,e3中的变量赋值也不影响循环次数

例:m=10

do 10,i=1,m,3

m=100+m

print*,i,m

10 continue

end

r=(10-1+3)/3=4

5.4 用do语句实现循环

说明:

⑸循环终端语句必须是可执行语句(但除goto, 块if,else,elseif,endif,end,stop和return 语句外)。

⑹继续语句(continue语句)

–循环终端语句必须是可执行语句。那么,这种作为循环终端语句的语句具有双重作用:一是

(完整)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语法手册

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用法总结,推荐文档

FORTRAN90用法总结 1、数据类型 整型 INTEGER 实型 REAL 复型 COMPLEX 字符型 CHARACTER 逻辑型 LOGICAL 2、特殊函数 1>定值函数 PARAMETER(变量列表) 或类型说明符,PARAMETER::变量列表 2>IMPLICIT 类型说明符(字母表)类型定义函数(默认I-N规则,取消IMPLICIT NONE) 3>** 乘方 4>STOP[标号]终止执行 5>PAUSE[标号]暂停程序 6>字符串长度函数 LEN(String)、 LEN_TRIM(String) 7>除去字符串尾部空格 TRIM(String) 8>字符串位置函数 INDEX(String1,String2) 9>字符串比较函数 LGE(String1,String2) LGT(String1,String2) LLE(String1,String2) LLT(String1,String2) 10>字符串空格首位调整 ADJUSTL(String)、ADJUSTR(String) 11>字符串、ASSII码互相转化函数 ①化为ASSII码 ICHAR(String)、IACHAR(String) ②化为字符串CHAR(I)、ACHAR(I) 12>.LT.(<) .LE.(<=) .EQ.(=) .NE.(/=) .GT.(>) .GE.(>=) 13>.AND.与 .OR.或 .NOT.非 .EQV.等于 .NEQV.不等 .XOR.异或 3、IF函数 1> 单支IF IF(逻辑表达式) THEN 块语句 END IF 2> 双支IF IF(逻辑表达式) THEN 块语句1 ELSE 块语句2 END IF 3>多支IF IF(逻辑表达式1) THEN 块语句1 ELSE IF(逻辑表达式2) THEN

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/be912741.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之COMMON语句

Fortran之COMMON语句 FORTRAN程序中各程序单位之间的数据交换可以通过虚实结合来实现,还可以通过建立公用区的方式来完成。公用区有两种,一种是无名公用区,任何一个程序中只可能有一个无名公用区;一种是有名公用区,一个程序中可以根据需要由程序员开辟任意多个有名公用区。建立无名和有名公用区都通过COMMON语句来进行。 按照结构化程序设计的指导思想,通常主张通过虚实结合的途径来传送数据而不主张使用公用区。因为前者使程序有较好的可读性,而且容易跟踪数据的流向,便于对程序进行调试和维护。但是虚实结合的传送方式速度较慢,特别是在各程序单位之间有大量的数据需要传送时速度问题就更为突出。不同程序单位利用公用区交换数据的速度却比虚实结合的方式传送速度快得多。所以在很多应用程序中如果各程序单位之间有大量数据需要传送时,程序员一般仍然采用开辟公用区的方式。 11.2.1 无名公用区 开辟无名公用区COMMON语句的一般形式如下: COMMON a1,a2,… 其中a1,a2,…允许是普通变量名、数组名和数组说明符(注意:不是数组元素),它们之间用逗号隔开。例如: 在主程序中写:COMMON X,Y,I,Z(3) 在子程序中写:COMMON A,B,J,T(3) 于是,在无名公用区中变量X和A,Y和B,I和J分别分配在同一个存储单元中,数组Z和T同占三个存储单元。占同一个存储单元的那些变量在不同的程序单位中,它们的名字不需要相同。

FORTRAN编译程序在编译时为COMMON语句开辟一个无名公用区,当把不同的程序单位连接在一起的时候,不同程序单位在COMMON语句中的变量按其在语句中出现的先后顺序占用无名公用区连续的存储单元,也就是说每个程序单位中的COMMON语句总是给出现在语句中的第一个变量分配在无名公用区的第一个存储区单元。 COMMON语句开辟公用区的主要用途就是使不同程序单位的变量之间 进行数据传送,另一种用途是用来节省存储空间。下面的例子通过公用区进行交换数据: PROGRAM MAIN COMMON Z1,Z2 READ(*,*)A1,A2,A3 CALL QUAD(A1,A2,A3) WRITE(*,*)Z1,Z2 END SUBROUTINE QUAD(A,B,C) COMMON X1,X2 . . . END 或者: PROGRAM MAIN COMMON Z1,Z2,A1,A2,A3 READ(*,*)A1,A2,A3 CALL QUAD() WRITE(*,*)Z1,Z2 END

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 ****************************************************************************

fortran90-知识点整理

Fortran90关于变量说明的新功能: 1.在变量说明的同时,可以给变量赋初值。 INTEGER::I=5,J=126 REAL::X=7.2,Z,W=774.2 2.在说明变量的同时也可说明其种别 REAL(KIND=4)::X,Y 或REAL(4)::X,Y 3.在说明变量的同时,还可说明变量的属性 INTEGER,PARAMETER::I=5,J=123 Ps :PARAMETER 属性 (1)功能:用一个符号代表一个常量,称为符号常量(常数) (2)写法: Real,Parameter ::G=9.8 &&说明类型时赋值 (3)位置:位于可执行语句之前 REAL,DIMENSION(1:10)::A 2.3.6 派生数据类型 根据需要而由基本数据类型定义新的数据类型。在一个派生类型中可包含多个基本类型。 如:TYPE STUDENT (定义开始) CHARACTER(LEN=20)::DEPARTMENT CHARACTER(LEN=10)::CLASS CHARACTER(LEN=15)::NAME INTEGER::NUMBER (成员定义) END TYPE STUDENT (定义结束)

派生类型变量的定义: TYPE(STUDENT)::PERSON 变量的赋值: PERSON=(”COMPUTER”,”92_2”,”LI LIN”,21) 成员的表示: PERSON%CLASS=“92_2” PERSON%NAME=“LI LIN” 主程序其他限制 主程序的可执行部分不能包含有RETURN语句或者ENTRY语句。 程序名对可执行程序是全局的,而且不得于该可执行程序中的任何其它程序单元名、外部过程名或公用块名相同,也不得于主程序内的任何局部名相同。 在主程序的作用范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作用。 主程序内的任何内部过程的定义必须跟在CONTAINS语句之后。 2.3.2 子程序 子程序是可以完成某一独立算法或功能的程序单元,但它功能的具体体现要通过主程序(或子程序)的调用来实现。 按子程序与主程序的位置关系分为内部过程和外部过程。 2.4.3 模块 模块也是一种在程序单元之外独立编写的程序单元。它有独特的形式,即模块程序单元内没有可执行语句,除了说明语句外,最多包含内部过程。模块的主要作用是供其它程序单元引用。 程序单元引用模块,实际是将模块内的全部语句复制到本程序单元。因此模块起共享及复制的作用。 模块的引用采用语句: USE 模块1,模块2,…

Fortran基本用法小结档

Fortran基本用法小结 目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。 另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的地方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=Formula Translator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortran90。Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看懂77程序。以下是77和90的一些格式上的区别。

Fortran语言

#LOCAL REAL Uds,Uqs,angles,vs,w,o,ang,ta,tb,t0,Ud1,Uq1,E #LOCAL REAL tc,t,mt,pi #LOCAL INTEGER sign,M,nl,n t=TIME tc=$TC nl=DNINT(tc/delt) pi=3.1415926 E=$Udc w=2*pi*50 if(t.lt.delt) then sign=0 M=0 Uds=0 Uqs=0 angles=0 vs=0 o=0 ang=0 ta=0 tb=0 t0=0 Ud1=0 Uq1=0 n=1 end if if(mod(n,nl).lt.1E-7) then !初始化变量 M=M+1 Uds=$Ud Uqs=$Uq angles=$angle !变换到alphabeta坐标直角坐标

Ud1=cos(angles)*Uds+sin(angles)*Uqs Uq1=sin(angles)*Uds-cos(angles)*Uqs ! Ud1=$Ud ! Uq1=$Uq !生成矢量的模和角度 vs=sqrt(Ud1**2+Uq1**2) if(Ud1.gt.0.and.Uq1.ge.0) then ang=atan(Uq1/Ud1) else ang=atan(Uq1/Ud1)+2*pi end if if(Ud1.lt.0) then ang=atan(Uq1/Ud1)+pi end if if(Ud1.eq.0) then if(Uq1.ge.0) then ang=pi/2 else ang=3*pi/2 end if end if !判断矢量的所属,计算角度 if(ang.ge.0.and.ang.lt.pi/3) then sign=1 o=ang ! o=w*t end if if(ang.ge.pi/3.and.ang.lt.2*pi/3) then sign=2 o=ang-pi/3 ! o=w*t-pi/3 end if if(ang.ge.2*pi/3.and.ang.lt.3*pi/3) then sign=3 o=ang-2*pi/3 ! o=w*t-2*pi/3

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

fortran初步学习资料

第一章: Fortran语言程序设计初步 Fortran语言的发展概况 本节介绍Fortran的起源与发展历史,讲述Fortran由产生到形成标准FortranIV、Fortran77,并进一步形成新标准Fortran90/95的发展历程。 1.1.1 Fortran的历史 a)a)FortranI FortranIV Fortran是目前国际上广泛流行的一种高级语言,适用于科学计算。Fortran 是英文FORmula TRANslatio n的缩写,意为“公式翻译”。它是为科学、工程问题中的那些能够用数学公式表达的问题而设计的语言,主要用于数值计算。这种语言简单易学,因为可以像抄写数学教科书里的公式一样书写数学公式,它比英文书写的自然语言更接近数学语言。Fortran语言是第一个真正推广的高级语言。至今它已有四十多年历史,但仍历久不衰,始终是数值计算领域所使用的主要语言。Fortran语言问世以来,根据需要几经发展,先后推出形成了很多版本。 第一代Fortran语言是在1954年提出来的,称为FortranI。它于1956年在IBM 704计算机上得以实现。在此之前编写计算机程序是极为繁琐的,程序员需要详细了解为之编写代码的计算机的指令、寄存器和中央处理器(CPU)等方面的知识。源程序本身是用数学符号(八进制码)编写的,后来采用了助记符,即所谓机器码或汇编码,这些编码由汇编程序转换为指令字。在50年代书写和调试一个程序要很长时间,因为用这种方式编写程序显然是很不方便的,尽管它能使CPU高效地工作。正是这些原因,促使由John Backus率领的IBM公司的一个小组研究开发最早的高级程序设计语言Fortran。其目的是开发一种容易理解、简单易学又能几乎像汇编一样高效运行的语言,他们取得了极大的成功。Fortran 语言作为第一种高级语言不仅是一次创新,也是一次革命。它使程序员摆脱了使用汇编语言的冗长乏味的负担,而且它使得不再只是计算机专家才能编写计算机程序,任何一名科学家或工程技术人员,只要稍加努力学习和使用Fortran,就能按自己的意图编写出用于科学计算的程序。 经过不断发展,FortranI形成了很多不同版本,其中最为流行的是1958年出现的FortranII,它对FortranI进行了很多扩充(如引进了子程序),FortranII 在很多机器上得以实现。其后出现的FortranIII未在任何计算机上实现。1962年出现的FortranIV对原来的Fortran作了一些改变,使得FortranII源程序在FortranIV编译程序下不能全部直接使用,导致了语言不兼容的问题。这样就形成了当时同时使用FortranII和FortranIV两种程序设计语言的局面。

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

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