Fortran程序总结.docx
- 文档编号:11770522
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:24
- 大小:51.20KB
Fortran程序总结.docx
《Fortran程序总结.docx》由会员分享,可在线阅读,更多相关《Fortran程序总结.docx(24页珍藏版)》请在冰豆网上搜索。
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次,运算符两侧都是表达式; 错例: 2 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(情况表达式) 情况表达式: ❑整型变量、逻辑变量、字符型变量或相应的表达式 ❑不能是实型或复型表达式 ⏹表达式列表(情况选择器): ❑只能是常量,不能为变量,可有多条语句; ❑类型与情况表达式类型应一致,尤其字符型时种别参数必须一致,但长度可以不同; ❑,(逗号)分隔符表示分隔单个值的列表。 例: case(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Fortran 程序 总结