fortran语言复习总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EXIT:终止整个循环语句的执行
类似 break
CYCLE:终止本次循环体的执行,开始新循环
类似 continue
3 特殊 DO 循环语句(死循环+强制退出)
DO
<语句体>
EXIT 语句
ENDDO
必须与 EXIT 语句配合使用,满足循环结束条件,则执行 EXIT 语句退出循环。
第八章 数组
1 数组分类:静态数组,动态数组
2 表控输入 READ 语句:
类似 cin>>
READ * ,变量 1,变量 2,„
表控输出 PRINT 语句: 类似 cout<<
PRINT * ,表达式 1,表达式 2,„
3 PARAMETER 语句:给常数命名 位于类型声明后,可执行语句前
PARAMETER(名称 1=表达式 1,名称 2=表达式 2,„)
[r]Fw.d
r 重复次数,w 域宽(含符号和小数点),d 小数位数。
程序示例:
REAL a,b,c
READ 10,a, b, c
10 FORMAT(2F5.2,F8.3)
PRINT"(1X,'a+b+c=',F8.3)",a+b+c
END
输入:
不带小数点时,按域宽读取,根据 d 值自动加小数点。
带小数点,按域宽读取,自带小数点优先
END
7 X 编辑符:用于设置输入输出数据的起始位置。
nX
输入:从当前位置右移 n 个字符。
输出:从当前位置插入 n 空格。
例: READ 11,i,j,k
11 FORMAT(2X,I3,3X,I3,3X,I3)
PRINT 21,i,j,k
21 FORMAT(1X,'i=',I3,4X,'j=',I3,4X,'k=',I3)
输出:
w 用法同整数
d>实际长度,左对齐输出,后补 0。
d<实际长度,左对齐输出,小数部分四舍五入保留 d 位
4 指数型实数有格式输入输出,E 编辑符:
[r]Ew.d[Ee]
r 重复次数,w 域宽(含符号小数点和 E),d 小数位数,e 指数位数,缺省为 2(不含 E
和符号),缺省指数域宽为 e+2
数组构造器也可用于给数组片段赋初值
输入:
↙。
输出:
。
第六章 选择结构 同 C++,只是除逻辑 IF 语句,其他都需要有 END IF 对应
1 逻辑 IF 语句
IF(<逻辑表达式 e>) <语句 S>
e 为逻辑表达式或关系表达式,S 为可执行语句。
2 基本块 IF 语句
(1)IF(<逻辑表达式 e>)THEN
[<THEN 语句体>]
END IF
100 FORMAT(I3,I3)
4)直接数据源
例:READ (*,”(I3,I3)”)M,N
2 整数有格式输入输出, I 编辑符:
[r]Iw[.m]
r 重复次数,w 域宽(含符号),m 最少输出位数
输入:例: READ 10,i,j,k
10
FORMAT(I4,2I5)
输入可用逗号间隔,但不能用空格,在域宽范围内数字前后可空,全□时输入为 0,格
检测所有维(不指定维数,缺第二参数),结果为一维整型数组
4 数组Biblioteka Baidu构
注:多维时从 a(1,1)→a(2,1) 先列后行
区别于 C++的先行后列
5 数组输入输出 1)根据数组逻辑结构下标,使用 DO 循环输入输出全部或部分数组元素。 一维、二维数组输入输出。 使用 DO 循环,输入时每行只能输入一个数据(与逻辑结构不一致); 输出时只要输出格式控制得当(使用\编辑符),能够按照逻辑结构输出。 2)数组隐含 DO 循环 一维数组隐含 DO 循环语句 (<循环项>,<循环变量>= <初值>, <终值>[, <步长>]) READ *,(arr1(I),I=1,8,2) READ *,(arr1(I),I=1,8) 二维数组隐含 DO 循环子句 READ *,((arr2(I,J),J=1,4),I=1,3) READ *,((arr2(I,J),J=1,4,2),I=1,3,2) (1)允许一行输入多个数据。 (2)输入时,循环项不能是常数和表达式,但输出时可以 例:根据存储结构,使用数组名在同一行输入输出全部元素。 READ *,arr1; READ *,arr2 PRINT *,arr1;PRINT *,arr2 根据存储结构,使用数组片段在同一行输入输出部分元素。 READ *,arr1(1:5) PRINT *,arr2(1:2,1:2) 结合隐含 DO 循环,按逻辑结构输入输出。 READ *,(arr1(I),I=1,8) READ *,((arr2(I,J),J=1,3),I=1,3)
1 计数型 DO 循环
类似 for(v=e1;v<=e2;v+=e3)
DO <v>=<e1>,<e2>[,<e3>]
<语句 1>
<语句 2>
„„
<语句 n>
ENDDO
v 为循环变量(一般为整型),e1 初值,e2 终值,e3 步长,缺省为 1
循环次数:[(e2-e1)/e3 ]+ 1
循环中可引用 v,但不能修改 v, 只可修改 e1,e2,e3,但不影响结果
例:Real pi; Parameter(pi=3.14)
第五章 有格式输入输出
1 输入输出形式
类似#define
1)语句标号指定 例:READ 100,M,N
100 FORMAT(I3,I3)
2)直接书写
例:READ “(I3,I3)”,M,N
3)数据源+标号 例:READ (*,100)M,N
6 数组赋初值 1)数组构造器: <数组构造器>→(/<数组初值表>/) <数组初值表>→<初值项>{,<初值项>} <初值项>→<初值>∣<隐含 DO 循环> 括号和斜杠之间不能有空格。 隐含 DO 循环用于给出一组相邻的初值。 例:(/2,4,6,8,10/) (/(I,I=2,10,2)/) (/2,4, (I,I=6,10,2)/) 用数组构造器给数组赋值 一维数组:直接使用数组构造器。 INTEGER,DIMENSION(5) ::num1,num2 I=4;J=8 num1=(/2,ABS(-4),I+2,J,10/) num2=(/(I,I=2,10,2)/) 多维数组:需使用函数 RESHAPE 将数组构造器转换形式。 INTEGER B(2,3),C(8) B=RESHAPE((/1,2,3,4,5,6/),(/2,3/)) B 为 2 行 3 列 C=(/0, RESHAPE(B,(/6/)),7/) <数组名>=<表达式>:给所有元素赋相同初值。
可以给数组赋初值。
例:INTEGER,DIMENSION(5):: S=(/45,78,85,55,95/)
3 数组引用
格式:<数组名>[(<数组下标>{,<数组下标>})]
<数组下标>→[<算术表达式>]:[<算术表达式>]
引用一个元素:下标为一个算术表达式。
引用部分元素(数组片断引用):下标为:号间隔的两个算术表达式。
5 两种书写格式:固定格式和自由格式
6 数据类型:有内部数据类型、派生数据类型、数组和指针类型等
预定义内部数据类型
INTEGER→int、
REAL→float/double、
COMPLEX、
CHARACTER→char、
LOGICAL→bool
第四章 表控输入输出
1 三种类型输入输出:表控格式、二进制形式(无格式)、有格式
2 数组声明:类型声明语句、DIMENSION 语句、DIMENSION 属性
1)类型声明语句
<类型> [::] <数组声明表>
<数组声明表>→<数组名>(<维说明表>)[=<数组初值>]
{,<数组名>(<维说明表>)[=<数组初值>]}
<维说明表>→<维说明符>{,<维说明符>}
<维说明符>→[<下界>:]<上界>
引用全部元素:只给出数组名,不指定下标
引用时要保证数组下标在域内,否则会产生运行错误。
维边界检测函数(UBOUND、LBOUND):
UBOUND(<数组名>[ , [DIM=]<整型表达式>])
LBOUND(<数组名>[ , [DIM=]<整型表达式>])
检测某一维(指定维数,有第二参数),结果为整数。
式不正确会致错
输出:例: PRINT 10,i,j,k
10 FORMAT(1X,'i=',I4,3x,'j=',I4,3x,'k=',I4)
w>实际长度,前补空格。
w<实际长度,输出 w 个“*”。
m>实际长度,补前导 0 至 m 位,否则按照实际位数输出
3 小数型实数的有格式输入输出,F 编辑符:
允许从循环体内转移到循环体外,反之编译警告。
循环结束后,v 为最后一次循环增加步长后得到的值。
2 条件型 DO WHILE 循环
DO WHILE (<循环条件>)
<语句 1>
<语句 2>
„„
<语句 n>
ENDDO [<名字>]
强制终止循环:EXIT、CYCLE (但只能在 DO 和 DO WHILE 循环语句内使用)
第三章 基础知识 1 字符集 由四部分字符组成:
英文字母(不区分大小写)、阿拉伯数字、下划线、特殊字符(各种符号) 2 标识符 <字母>{<字母>∣<数字>∣“_”}(不区分大小写) 3 对关键字不予保留,但应避免使用关键字作为实体名称 4 语句:说明语句必须放在可执行语句之前
任何语句前可设置语句标号 3 个通用标志符:注释标志符“!” 语句分隔标志符“;” 续行标志符“&”
<数组初值>→(/<初值 1>,<初值 2>,„,<初值 n>/)
数组元素个数:从 1 开始到 n
区别于 C++的从 0 开始到 n-1
要求:上界≥下界,否则数组大小为 0。
数组和变量可同一语句混合声明. 例:INTEGER max,count(10)
数组声明语句必须出现在所有可执行语句之前
2)DIMENSION 语句
[<语句体 3>]
„„
ELSE IF(<逻辑表达式 en>)THEN
[<语句体 n>]
[ELSE
[<语句体 n+1>]]
END IF
内外转移的情况:
不允许从块 IF 语句外控制转移到块 IF 语句体内,
但允许通过 GOTO 语句从块 IF 语句内转移到块 IF 语句体外
第七章 循环结构
循环结构分类:计数型、条件型
CHARACTER*20 num
3)DIMENSION 属性:
<类型>,DIMENSION(<维说明表>)::<数组声明表>
::必须出现。
例:INTEGER,DIMENSION(-5:-1,5:9)::num,total
允许在数组声明表中对数组进行特定维说明。
例:INTEGER,DIMENSION(2)::t1,t2(10:15),t3(2,2)
输入:类似 F 编辑符,在规定域宽内,可按小数型输入,也可按指数型输入
例:
READ 11,a, b, c
11 FORMAT(E5.2,E8.3,E8.3E3)
输出: w、d 同 F
若指数有 3 位,指数部分的 E 字母省略,保持 3 位指数及其符号(+也应给出)
5 双精度浮型 D 编辑符
[r]Dw.d
(2)IF(<逻辑表达式 e>)THEN
[<THEN 语句体>]
[ELSE
[<ELSE 语句体>]]
END IF
3 多支块 IF 语句语法
IF(<逻辑表达式 e1>)THEN
[<语句体 1>]
ELSE IF(<逻辑表达式 e2>)THEN
[<语句体 2>]
ELSE IF(<逻辑表达式 e3>)THEN
DIMENSION <数组声明表>
DIMENSION num1(3),count1(-3:6,0:6)
数组类型由 I-N 规则确定。
类型可以通过类型声明语句改变,且声明语句可位于 DIMENSION 的前面或后面。
例: INTEGER day
DIMENSION num(3),day(12),count(-3:3)
第一章 概述 FORTRAN:FORmula TRANslator 算法有五个基本特征:有穷性、确定性、必要的输入输出、可行性 评价算法质量的四个基本标准:正确性、可读性、通用性、高效率 程序设计方法:面向过程(模块化、结构化)、面向对象。 面向过程两大特征:使用三种基本控制结构;采用自顶向下和逐步求精方法 F90 采用模块化和结构化相结合的程序组织结构
同 F,只是有效位数增加到 15 位
6 字符型 A 编辑符
[r]A[w]
缺省域宽 w 取对应字符型变量声明长度。
输入:输入中的引号、逗号和空格按一般字符对待
输出:
W<实际长度, 左截取
W>实际长度,左补空
可在输出数据中插入提示信息。
例: READ*, I,J
PRINT 25,I,J
25 FORMAT(1X,’I=‘,I3,’J=‘,I3)