Fortran程序总结材料.docx

上传人:b****1 文档编号:2092971 上传时间:2023-05-02 格式:DOCX 页数:44 大小:59.89KB
下载 相关 举报
Fortran程序总结材料.docx_第1页
第1页 / 共44页
Fortran程序总结材料.docx_第2页
第2页 / 共44页
Fortran程序总结材料.docx_第3页
第3页 / 共44页
Fortran程序总结材料.docx_第4页
第4页 / 共44页
Fortran程序总结材料.docx_第5页
第5页 / 共44页
Fortran程序总结材料.docx_第6页
第6页 / 共44页
Fortran程序总结材料.docx_第7页
第7页 / 共44页
Fortran程序总结材料.docx_第8页
第8页 / 共44页
Fortran程序总结材料.docx_第9页
第9页 / 共44页
Fortran程序总结材料.docx_第10页
第10页 / 共44页
Fortran程序总结材料.docx_第11页
第11页 / 共44页
Fortran程序总结材料.docx_第12页
第12页 / 共44页
Fortran程序总结材料.docx_第13页
第13页 / 共44页
Fortran程序总结材料.docx_第14页
第14页 / 共44页
Fortran程序总结材料.docx_第15页
第15页 / 共44页
Fortran程序总结材料.docx_第16页
第16页 / 共44页
Fortran程序总结材料.docx_第17页
第17页 / 共44页
Fortran程序总结材料.docx_第18页
第18页 / 共44页
Fortran程序总结材料.docx_第19页
第19页 / 共44页
Fortran程序总结材料.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Fortran程序总结材料.docx

《Fortran程序总结材料.docx》由会员分享,可在线阅读,更多相关《Fortran程序总结材料.docx(44页珍藏版)》请在冰点文库上搜索。

Fortran程序总结材料.docx

Fortran程序总结材料

1.行的书写(行的长度、分行、续行)

一行可以是0~132个字符,空格有意义,

语句最长不超过2640个字符

一行可以有多个语句,用“;”分隔

一个语句可分行写,读行标记为&(放在尾部),但如为关键字,首尾均加&。

最多可有511个续行。

2.说明语句必须出现在可执行语句之前,格式说明语句(FORMAT语句)除外。

3.注释标志符:

自由格式:

固定格式:

C*

语句分隔符:

分号;(仅自由格式可以使用)

续行符:

自由格式:

&

申明标号:

1到5位无符号整数

空格:

关键字、变量、常量内部不能用空格,但相邻两者之间须用空格

4.信息处理的分类:

数值处理和信息处理

现代计算机工作原理:

程序存储和程序控制(冯·诺依曼)

1、运算器——算术运算、逻辑运算

2、控制器——根据指令控制计算机工作

运算器、控制器和寄存器称为中央处理器CPU

3、I/O设备——提供数据传输服务

4、总线——数据传输的公共通道

1.机器语言:

二进制代码形式,可以被计算机直接执行,不可移植

2.汇编语言:

用助记符来代替机器指令,容易记忆,不可移植

3.高级语言:

接近自然语言(英语)的程序设计语言,又称算法语言,易学、易用、易维护,可移植性好例:

FORTRAN、BASIC、PASCAL、C、LISP、PROLOG等

5.FORTRAN90程序是一种分块结构,由若干个程序单元块组成:

主程序、外部子程序、模块、块数据单元无论是主程序单元,还是子程序单元,都是独立的程序单位,应该独立编写,它们的形式相似。

非语句行:

注释语句:

后的所有字符都被编译器忽略。

可独占一行,也可在其它语句之后,空行为注释行(固定格式用C和*)

6.常量的定义:

常量是程序执行过程中不能变化的量。

基本数据类型有五种:

整型、实型、复型、字符型和逻辑型

前三种属于数值类型,后两种为非数值类型,主要用于文字处理和控制。

FORTRAN90通过KIND值确定整数的存储开销、最大位数和取值范围,如表所示。

缺省KIND值则取默认值4。

KIND值字节数二进位数取值范围

118-128~127

2216-32768~32767

4432-2147483648~2147483647

格式:

SELECTEND_INT_KIND(N):

功能:

返回范围在-10N~10N的整数的kind-Value

在FORTRAN90中,也可以表示二进制、八进制、十六进制形式的无符号整数。

其形式如下:

二进制数:

B’101101’或B”101101”

八进制数:

O’76210’

十六进制数:

Z’1FA2’

实型常量

指数形式

⑴数字部分:

小数形式实数或整数

⑵指数部分:

只能为整数错例:

4E5.6

⑶数字部分不能丢;例:

10-4:

E-4(错)1E-4(正确)

⑷以标准化形式(规格化指数)输出(<1或>=1,此处分为两类)

1。

数字部分的值小于1,且小数点后的第一位数字非0

例:

0.743643E-12(正确)21.835E-12(错)

2。

数字部分有且仅有一位非零的整数。

例:

7.43643E-12(正确)0.21835E-12(错)

一般实数范围:

-1038~+1038,有效位7~8位也有的系统允许数的范围更大,可以超过10100。

上溢:

overflow下溢:

当0处理

为了能得到理想的范围和有效数字,要求说明种别类型参数值。

(书上有误)

例:

INTEGER,PARAMETER:

:

long=SELECTED_REAL_KIND(8,88)

则符号常数long提供了至少8位精度,以及-1088~+1088的值的范围。

以此说明的实型常量:

1、PRECISION(4.37_long)精度至少为8

2、RANGE(4.37_long)范围至少88次冪

常用实数一般分为两种:

real(4)单精度(默认)

real(8)双精度

实数种别为8时常量的表示(双精度数)

有效位:

15位;数字部分D±指数

例:

1.2D2

字符常量长度:

字符串内字符的个数空格算一个,起止界不算,长度可为0。

(空串’’或"")

用于标识一个程序成分,例如符号常量、变量、派生类型等。

对于名字有下列要求:

1.名字的长度不能超过31个字符

2.名字的组成成分可以是字母、数字和下划线

3.名字的第一个字符必须是字母

4.在名字中不能出现空格

提倡使用具有一定含义的名字,提高程序的清晰度和可读性。

变量字母、数字、下划线组成

字母开头

长度1-31个

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

REAL,DIMENSION(1:

10):

:

A

程序单元概念

程序单元是FORTRAN语言的基本成分。

程序单元可以是主程序、子程序、模块或块数据程序单元。

子程序可以是函数子程序或子例行子程序。

模块包含的说明是对其它的程序单元形成可访问性。

块数据单元用来对有名公用区中的数据对象赋初值。

(F90中不提倡使用)

•主程序是不包含SUBROUTINE、FUNCTION、MODULE或BLOCKDATA语句作为其第一条语句的程序单元。

主程序其他限制

•主程序的可执行部分不能包含有RETURN语句或者ENTRY语句。

•程序名对可执行程序是全局的,而且不得于该可执行程序中的任何其它程序单元名、外部过程名或公用块名相同,也不得于主程序内的任何局部名相同。

•在主程序的作用范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作用。

•主程序内的任何内部过程的定义必须跟在CONTAINS语句之后。

•子程序是可以完成某一独立算法或功能的程序单元,但它功能的具体体现要通过主程序(或子程序)的调用来实现。

•按子程序与主程序的位置关系分为内部过程和外部过程。

•内部过程可以出现在主程序、外部过程或模块内。

•模块也是一种在程序单元之外独立编写的程序单元。

它有独特的形式,即模块程序单元内没有可执行语句,除了说明语句外,最多包含内部过程。

模块的主要作用是供其它程序单元引用。

程序单元引用模块,实际是将模块内的全部语句复制到本程序单元。

因此模块起共享及复制的作用。

块数据程序单元对有名公用块内的数据对象提供初值。

•支持程序的最基本的语句主要有四种:

类型说明语句、赋值语句、输入语句、输出语句。

•整型数据运算速度快,在机内存储没有误差,但能表达的值的范围较小;

实型数据能表示小数、分数及不同的精度,表达的值的范围大,但数的外部表示和机器存储会有误差。

例,10.2,在机内表示可能为10.999998。

使用实数时,尽量避免作相等或不相等的比较例:

A是实型变量,对其与10.2作相等与否比较,不能写成:

IF(A==10.2)PRINT*,A应改写为:

IF(ABS(A-10.2)<1.0E-6)PRINT*,A

•有关种别的函数

•KIND(X)

•SELECTED_INT_KIND(N)

•SELECTED_REAL_KIND(N,M)

•测试标准种别:

•KIND(0)4(整型)

•KIND(0.0)4(实型)

•KIND(.FALSE.)4(逻辑类型)

•KIND(‘A’)1(字符类型)

•各种基本类型种别可取值

•INTEGER:

1,2,4(默认)

•REAL:

4(单精度,默认),8(双精度)

•LOGICAL:

1,2,4(默认)

•COMPLEX:

4(单精度,默认),8(双精度)

•CHARACTER:

1

•PARAMETER属性

(1)功能:

用一个符号代表一个常量,称为符号常量(常数)

(2)写法:

Real,Parameter:

G=9.8&&说明类型时赋值

•(3)位置:

位于可执行语句之前

•使用规则

•①程序中不得改变其值

•②与普通常量的区别:

不作语句标号和FORMAT中重复系数

•③类型:

一般采用I-N规则,否则,需先定义其类型

•例:

parameter(n=5)

**

*/

+-(正,负,加,减)

3.5+2*A/B+V**2

④②③⑤①

FORTRAN90配置的函数称为内在函数。

内在函数分为三种:

•基本函数

•转换函数

•查询函数

•⑴三角函数单位为弧度sinDcosDTAND可以为度(F90)

(2)某些函数参数只能为实型如:

log(2.0)(loG

(2)错)

•(4)自变量可以是有值的常量、变量、表达式例:

ABS(B**2+SIN(A+B))

•INT(X,KIND):

将X值转换为整型,以KIND的值作为种别参数

•REAL(X,KIND):

将X值转换为实型,以KIND的值作为种别参数

•CMPLX(X,Y,KIND):

将X,Y转换为复型,以KIND的值作为种别参数

•对于连续的乘方运算,采用先右后左的方式

•例:

3**2**3,先计算2**3=8,再进行3**8=6561

•运算对象类型相同时,运算结果的类型为同一类型注意有效位数的限制引起的误差

注意:

5/2=21/2=0!

•计算机存储数据的有效位数是有限的

•一般为十进制数的6至7位

•例:

1.0/3.0的结果在内存中不是0.3333333333333…,而是0.3333333

•注意溢出

•计算结果超出了存储单元所允许的数的范围

•程序中的表达式,要避免两个很大的数相乘、或一个很大的数除以一个很小的数

赋值号左边只能是变量名(或数组元素名、数组名),不能是表达式类型要求

■逻辑型、字符型的赋值语句要求“=”两边类型相同

■数值型赋值,不区别整型、实型和复型,允许两边的数值类型不同

™执行赋值语句后,把e的值转化为V的类型后再赋值给V

™V是整型、e是实型,把尾数丢掉化为整型后赋值

4、种别方面

■字符型要求种别相同

■其余类型的e、V种别允许不同

执行赋值语句后,e的值的种别转化为V的种别后再赋值

READ中的输入表的内容可以是:

变量名,数组名,数组片段名,结构成员名,隐循环表(隐DO表),不能是表达式

变量名,数组名,数组片段名,结构成员名,隐循环表(隐DO表),常数,函数和表达式。

输入的数据必须是常数,不能是变量和表达式

如输入2+1,则出错。

出错信息:

run-timeerrorF6601:

Read(con)-InvalidInteger

含义:

输入了无效的整数

4.输入数据个数:

1)不得少于变量的个数;

2)可分行输入;

3)多余的数据不起作用

空格可以多个,/表示输入数据结束,后面的数据被取消,没有输入数据的变量值为原值;

Read*,A,B,C

输入:

2,1/3

结果:

A=2B=1C=0

6、如果几个连续变量需要赋同一个值,可以使用重复因子r,即r*[c]:

r为重复数

4*0.5,2*3,2*’AB’,3*(1.0,-1.0)

表控输出的格式

类型:

复型:

带()输出

逻辑型:

T,F输出一个字符

字符型:

‘’丢失,采用左对齐输出

一行显示不下,数据自动换行输出

多个PRINT语句:

每个开始输出一个新的记录

riw输出

1.数字在指定的区域内右端对齐,不足w则左边补空格。

2.负数的符号也包含在字段宽度内

3.如果应输出的列数超过了规定的字段宽度,则不输出有效数据,以w个*填充。

Riw输入

543□5430

□210

210

23456

2345

1)实数的输入(三种方式)

READ(*,’(F4.1,2F10.6)’)A,B,C

输入:

□□12□□4567□□□□□□-83527□□

则a=1.2;b=45.67;c=-8.3527

不带小数点

输入不带小数点,由则编辑符指定位置自动加上小数点。

按w截取数据,由d决定小数点的位置,按右对齐,空格当0

READ(*,’(F4.1,2F10.6)’)A,B,C

□1.2□□□□□45.67□□□-8.3527

带小数点。

输入的数据本身带小数点,如果编辑符中规定的小数点位置和数据本身的小数点位置有矛盾,按“自带小数点优先”原则,d不起作用,小数点记入w中

(3)READ(*,’(F4.1,2F10.6)’)A,B,C

1.2,45.67,-8.3527(表控格式)

用自由格式,逗号分隔,但每个数连同后随逗号必须<=w,否则出错。

d可以为零但不能省略

X=25.6Y=-378.456Z=873.2

PRINT’(F5.1,2F8.2)’,X,Y,Z

□25.6□-378.46□□873.20

 w包括数符和小数点两位

若数据小于w位,则左边补空格

输出值时舍入,而不是截断

如果是科学计数法则转换小数形式

REAL*4:

:

G,H,E,R

G=12345.678;H=12345678.;E=-4.56E+1;R=-365.

WRITE(*,'(F8.2)')G,H,E,R

WRITE(*,'(4F10.1)')G,H,E,R

END

结果:

12345.68!

舍入,取2位小数

********!

所给描述符整数位不够

-45.60!

输出时转换为定点数形式

-365.00!

输出时小数点占宽度

□□123456.712345678.0□□□□□-45.6□□□□-365.0

说明:

优点,输入时准备数据方便,和数学中实数的写法相同,输出时,数据便于阅读。

缺点,必须预先知道输出数据的范围。

另容易产生“大数印错”、“小数印丢”。

大数印错”、“小数印丢”

X=123567890.876543

Y=0.000001245

WRITE(*,’(1X,F15.6,F15.2)’)X,Y

输出结果:

***************□□□□□□□□□□□0.00

15列15列

XY

E编辑符

Ew.d[Ee]

格式:

数符+0+小数点+小数部分+E+符号+指数部分2位

3d4

指数部分宽度固定4列,w>=d+3+4

优点:

不必事先估计数的大小,能容纳任意大小的数据。

Ew.dEee—指定指数的宽度

例:

用E格式输出数据

X=-84.31Y=3.141592Z=0.0187

WRITE(*,‘(E10.3,E13.6,E15.6)’)X,Y,Z

结果-0.843E+02□0.314159E+01□□□0.187000E-01

规则:

1.w>d+7数据右对齐,左边用空格填满w位

若w

2.尾数部分正号省,负号则打印,记入w内

3.尾数位数>d四舍五入取d位

尾数位数

注意:

一般格式E16.77+7+2(2个空格,以便阅读)

改写该格式为:

X=-84.31Y=3.141592Z=0.0187

WRITE(*,200)X,Y,Z

200FORMAT(E10.3,E13.6,E15.6)

CHARACTER(30):

:

MYLIST

字符型的赋值

MYLIST=‘(E10.3,E13.6,E15.6)’

WRITE(*,MYLIST)X,Y,Z

G编辑符

功能:

根据输出实数大小决定用F或E格式输出。

较大或较小,自动按E格式

Gw.d

条件:

1.abs(A)<0.12.abs(A)>10d

使用E格式输入输出

条件:

10d>abs(A)>=0.1

使用F格式输入输出

A=758321.6G14.7ABS(A)<107用F格式

□□758321.6□□□□

A=75.83216E+06ABS(A)>107用E格式

□0.7583216E+08

注意:

采用F格式,d为全部数字的位数

优先满足整数位

双精度数的输入输出

格式:

Dw.d

数符+0+小数点+小数部分+D+符号+指数部分2位

3d4

方法同E格式

复型数据是用两个实型编辑符(例如,用2Fw.d或‘(Fw.d,Fw.d)’或2Ew.d[Ee]来分别描述该复型的实数部分与虚数部分的。

如:

COMPLEX:

:

X

X=(2.8,4.6)

PRINT'(2F4.1)',X

输出结果为:

□2.8□4.6复型的输出没有括号

复型编辑

rLw

功能:

逻辑值的输入输出

规则:

输出一个字母,在字段最右段,前面补空格

输入时按宽度读取,以第一个字母作为逻辑值

A用来编辑字符型变量,它不关心该字符串的长短如何。

例:

CHARATER*5A,B,C

READ(*,’(A,A,A)’)A,B,C

WRITE(*,’(A,2X,A,2X,A)’)A,B,C

END

输入:

ABC□DBASICFORMAT

对于字符型数据的输入:

1、在表控格式输入的时候,输入的字符串可以加上撇号,也可省略,撇号不起作用

2、在有格式输入的时候,输入的字符串的时候不需要加上撇号,如果输入带撇号,则撇号算入W宽度,

 

H编辑符:

描述字符串

nH<字符串>

注意:

1.N必定等于字符串长度,否则编译出错

2.字符串中空格有意义

X=45.7

Y=289.7

WRITE(*,100)X,Y

100FORMAT(2HX=,F5.1,4H□□Y=,F6.2)

END

结果:

X=□45.7□□Y=289.70

也可FORMAT(‘X=’,F5.1,‘□□Y=’,F6.2)

斜杠编辑描述符

作用:

结束本记录的输出并开始下一个记录的输出

WRITE(*,’(5HABCDE,/,5HBCDEF,/,1X,5HCDEFG)’)

结果如下所示:

ABCDE

BCDEF

□CDEFG

注意:

1.如两个连续斜杠,在输完前面记录后,空一行(或者用print*代替)再输出

2.如在编辑符的最后出现一个斜杠在输出完记录后,再输出一个空行

 相同的编辑符串连续出现时,可简化为一串,用括号括起,前置重复系数。

例:

PRINT‘(1X,F6.1,2I4,F6.1,2I4,E10.3)’,A,B,C,D,E,F,G

可写为:

PRINT‘(1X,2(F6.1,2I4),E10.3)’,A,B,C,D,E,F,G

编辑符个数和变量个数应相等,如编辑符个数多余变量个数,则多余编辑符不起作用;如编辑符个数少于变量个数,则重复使用格式说明,每重复一次产生一个新纪录。

例:

PRINT‘(1X,I4,F5.1,E10.3)’,A,B,C,D,E,F,G,H

则按如下顺序打印各项数据:

ABC

DEF

GH

例:

WRITE(*,100)I

100FORMAT(‘I=‘)输出I=,永不停止,原因是漏写了I4编辑符

带控制信息的输出语句(P51)

WRITE(UNIT=6,FMT=‘(1X,2F8.2)’,IOS4TAT=M[这里就是一个指代没有特别的意义])X,Y

各部分与输入语句中基本相同。

输入输出语句

●表控格式

●自定格式(编辑符的使用:

I、F、E、G、A、L、X、H等)

●带控制信息表

每个关系表达式中的关系运算符只准出现1次,运算符两侧都是表达式;

错例:

2b)

2、运算对象:

关系运算符两边的运算对象类型应相容:

错例:

A==.TRUE.2<‘A’

❑复型:

只能进行==、/=。

不能比较大小

❑字符型:

可以进行各种关系运算

❑实型量==或/=要小心使用

一般要改写:

A==B改写为ABS(A-B)<1E-6

A/=B改写为ABS(A-B)>=1E-6

❑.NOT.a:

求反运算,

❑a.AND.b:

a与b同时为真,表达式值才为真

❑a.OR.b:

a与b有一个为真,表达式值就为真

❑a.EQV.b:

a与b值相等,表达式值为真

❑a.NEQV.b:

a与b值不相等,表达式值为真

❑.NOT.、.AND.、.OR.、.EQV.、.NEQV.

高低

❑两个逻辑运算符不能直接相邻,但.NOT.除外:

.AND..NOT.B

混合表达式中运算符优先顺序:

(1)圆括号;

(2)算术运算符;

(3)关系运算符;

(4)逻辑运算符。

括号()1

算术运算**2

*,/3

+,-4

关系运算>,>=,<,<=,==,/=5

逻辑运算.NOT.6

.AND.7

.OR.8

.EQV.,.NEQV.9

注意顺序(优先级)

1、表控格式I/O

须先定义数据类型,再I/O

例:

LOGICAL:

:

L1,L2

READ(*,*)L1,L2

WRITE(*,*)L1,L2

输入时:

.TRUE.,.FALSE.

或:

T,F表控格式并不需要

输出:

?

?

?

T?

?

?

F

!

!

仅输出一个字符,T或F,左右没有点“.”,字段宽度由具体的计算机系统规定

格式I/O

例:

LOGICAL:

:

L1,L2

READ‘(2L2)’,L1,L2

PRINT’(1X,L4,2X,L4)’,L1,L2

运行时输入:

?

T?

F

输出:

?

?

?

T?

?

?

F

L2表示逻辑I/O,

字段宽度为2

右边通常为一条且只一条可执行语句。

错例:

IF(A

2.不能为以下语句:

END、另一个逻辑IF、块IF、ELSIF、ENDIF、DO

错例:

IF(X<2)END

3.常应用于简单的条件赋值或条件转移(在循环结构中)

4、不论条件真假都执行IF的下一个语句

⏹假设IF结构名为FIRST,则入口语句为:

FIRST:

IF(e1)THEN

⏹出口语句为:

ENDIFFIRST

注意:

⏹入口、出口写结构名时,其结构名应该一致。

⏹IF结构名与入口语句间要用冒号分隔,出口语句(ENDIF语句)与结构名之间要空1格,不能有冒号。

⏹ELSEIF语句与ELSE语句后可以写结构名,也可以不写,如果写,其结构名一定要与入口语句处的结构名一致。

⏹SELECTCASE(情况表达式)

情况表达式:

❑整型变量、逻辑变量、字符型变量或相应的表达式

❑不能是实型或复型表达式

⏹表达式列表(情况选择器):

❑只能是常量,不能为变量,可有多条语句;

❑类型与情况表达式类型应一致,尤其字符型时种别参数必须一致,但长度可以不同;

❑,(逗

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2