Fortran讲义 第四章
fortran第4章(条件).ppt

T
条件
F
语句块1
语句块2
例: 有一折线其关系为: Y= 2X+3 (X≤2) X+5 (X>2) 见图,要求输入一个X值,打印一个相应的Y值.
READ *,X IF (X.LE.2.0) THEN Y=2*X+3 ELSE Y=X+5 ENDIF PRINT *,’X=‘,X,’Y=‘,Y END
3.5.LE.10.0.AND.20.0.LT.15.1
• 逻辑或.OR.
其值为假
例:3.5.LE.10.0.OR.20.0.LT.15.1
3.5.GE.10.0.OR.20.0.LT.15.1
其值为真
其值为假
逻辑同.EQV.(逻辑等值) 例:3.5.LE.10.0.EQV.20.0.LT.15.0 3.5.LE.10.0.EQV.20.0.GE.15.0 其值为假 其值为真
具体操作是: 将e1 RELOP e2 写成 ((e1)-(e2)) RELOP 0 即对两个算术表达式求差,然后与零进行比较,其中 零的类型与表达式((e1)-(e2))的类型相同. 如: 可写作: X*X.LT.2*J X*X-2*J.LT.0.0
4.当算术表达式是非整型时尽量不用关系运算符.EQ.
b b2 4 ac x 1 2 a
b b2 4 ac x 2 2 a
READ *,GRADE
IF(GRADE.GE.8O) PRlNT *,”A” IF(GRADE.GE.6O .AND. GRADE.LT.80) PRlNT *,”B” IF(GRADE.LT.6O) PRlNT *,”C” 逻辑IF语句当条件为“真”时只能执行一个执行语句而不能 执行若干个语句。与块IF相比,逻辑IF语句是在一行中完成 的一个选择操作,因此它又称“行IF语句”以与块IF区别。
Fortran科学计算编程课件

Fortran科学计算编程课件Fortran(即Formula Translation的缩写)是一种用于科学计算和数值分析的编程语言。
由于其高效性和可靠性,Fortran在科学计算领域广泛应用。
本课件将为您介绍Fortran编程语言,并提供相关的科学计算示例和实践。
第一部分:Fortran简介Fortran是一种面向过程的编程语言,由IBM在1950年代开发,旨在为科学计算提供高性能和可移植性。
Fortran以其强大的数学计算和数组处理能力闻名,是科学家和工程师们首选的编程语言之一。
第二部分:Fortran基本语法2.1 变量和数据类型在Fortran中,变量的类型必须在声明时指定,并且不同类型的变量可以存储不同类型的数据,如整数、实数和字符等。
这一部分将详细介绍Fortran的常用数据类型和变量声明方法。
2.2 控制结构Fortran支持常见的控制结构,例如条件控制语句(if-else语句)、循环语句(do循环)和跳转语句(goto语句)。
我们将逐一介绍这些结构的语法和使用方法,并给出实例演示。
第三部分:科学计算实例为了帮助您更好地理解Fortran的应用,本课件将提供一些科学计算的实例,包括线性代数运算、梯度下降算法等。
通过这些实例,您将学会如何用Fortran编写科学计算程序,并了解其在实践中的应用。
第四部分:Fortran编程工具和资源4.1 编译器Fortran编程需要一个符合语言标准的编译器来将代码转化为可执行文件。
我们将向您介绍几个常用的Fortran编译器,并给出安装和配置的指南。
4.2 开发环境为了提高编程效率,许多IDE(集成开发环境)和编辑器提供了对Fortran的支持。
我们将为您介绍几个常用的Fortran开发环境,并给出使用方法和建议。
4.3 学习资源如果您想深入学习Fortran,我们还准备了一些在线教程和学习资源的链接,方便您进一步扩展知识和技能。
结语通过本课件的学习,您将对Fortran科学计算编程有更深入的了解,并掌握基本的语法和应用技巧。
fortran语言教程第4章

第4章 选择结构在第三章介绍了最简单的FORTRAN 程序,在程序中语句执行的顺序是按照语句书写的顺序决定的,写在前面的语句就先执行,写在后面的语句就后执行,这种执行语句的过程叫顺序执行。
导致顺序执行的语句结构叫顺序结构。
只包含顺序结构的程序像流水账一样,只能解决简单的、顺序性的问题。
有些问题仅用顺序结构是不能解决的,例如,计算税款问题。
【例4.1】 当月收入超过800元时,超过部分按5%纳税,要求写程序完成输入月收入INCOME ,计算应交税款TAX 。
分析:根据题意,得到税款计算公式:⎩⎨⎧>-≤=8008008000INCOME INCOME INCOME TAX 根据上述计算公式画出计算税款的流程图如图4.1:图4.1 计算税款的算法流程图从流程图中可以看见,问题求解的过程不再是顺序性的了,需要对输入的月收入INCOME 进行判断再决定计算其应该交纳的税款,即问题求解需要根据输入数据进行选择、判断,出现了选择(分支)结构,为了描述选择结构,FORTRAN 语言也提供了对应的能描述选择结构的语句。
4.1 逻辑IF 语句逻辑IF 语句格式:IF (逻辑表达式) 语句逻辑IF 语句功能:求出逻辑表达式的值,如果为“真”,则执行<语句>后再执行后续语句,否则直接执行后续语句。
其功能也可以用图4.2所示的流程图描述。
逻辑IF 语句说明:(1)逻辑IF 语句描述了最简单的选择结构,只提供<逻辑表达式>为真时的操作,并且只能有一个动作,<逻辑表达式>为假时未提供操作。
(2)逻辑IF语句又称“行IF语句”。
图4.2 逻辑IF结构示意图利用逻辑IF语句可以将图4.1翻译成程序:REAL INCOME,TAXREAD *,INCOMETAX=0IF(INCOME.GT.800)TAX=(INCOME-800)*0.05PRINT *,‘月收入=’,INCOME,‘应交税款为=’,TAXEND由于只有月收入超过了800元才会有税款的计算问题,程序中用逻辑IF语句对应地描述了此分支关系,为了保证低于800元时TAX也有相应的值,所以在判断月收入情况之前TAX被初始化为0。
fortran教程[技巧]
![fortran教程[技巧]](https://img.taocdn.com/s3/m/31be265dce84b9d528ea81c758f5f61fb73628ec.png)
前言FORTRAN90的新特性1、淘汰了所有转移语句,增加了新的控制结构,使程序结构化。
增加了结构块,模块及过程的调用灵活形式。
2、加强数组的算法功能。
提出超载概念与实现方法。
提高了文字处理功能。
3、更接近自然语言与公式演算。
允许在字符数据用选取不同种别。
特别:语句书写对列的要求放宽:一般一行写一条语句(也可也多个语句,用“;”分隔),没有标号区、续行区、正文区的区别。
一行最多为132列,可以在任何列处中断语句,中断处写一个“&”,随后在下一行任意列处继续。
一个语句最长不能超过2640个字符。
语句结尾不可有标号、符号。
注释以“!”开始,可以位于任何位置。
***以下只讨论与FORTRAN77不相同处。
第一章FORTRAN90的基本语句第一节类型说明语句1、变量名全长不得超过31个字符。
2、变量类型定义:INTEGER::X,YREAL::ACOMPLEX::B,C,D3、建议淘汰隐式说明,在程序说明部分一开始就写:IMPLICIT NONE向系统声明不使用隐式说明。
4、可以在变量说明时就置初值。
如:REAL::X=1.1,Y,Z=2.25、种别——决定变量的精度和所占内存单元数。
a.如:REAL(KIND=2)::X 说明变量X为REAL型,种别为2。
KIND是种别说明关键字。
如没有种别说明,则采用系统省缺值。
b.有关函数:KIND(X) 返回X的种别参数。
当X取常数0时,返回省缺种别参数。
如KI ND(0)、KIND(0.0)、KIND(.FALSE.)、KIND('A')分别返回整型、实型、逻辑型、字符型的省缺种别参数。
SELECTED_REAL_KIND(N,M) 返回种别参数,使之满足十进制有效位为N, 值范围在10**(-M)和10**M之间的实数。
SELECTED_INT_KIND(N,M) 与上类似,选择整型类别。
c.常数类别表示对数值型常数、逻辑型常数用后缀法,即在常数后加一下划线,再跟种别参数。
fortran程序设计第4章xhb

END IF ELSE
PRINT *, ‘D’ END IF
[例4.4] 三个数A、B、C,按升序排序。
READ (*, *) A, B, C IF (A .LE. B) THEN ELSE
T=A A=B B=T END IF IF (B .LE. C) THEN ELSE T=B B=C C=T IF (A .LE. B) THEN ELSE
用块IF结构实现选择 结构,其形式为:
IF (条件) THEN then块
ELSE else块
END IF
不成立
成立
条件
else块
then块
[例4.1]计算职工工资。工人每小时计时工资为 RATE,如果一周工作时间超过40小时,加班部分 的工资按正常时间工资的1.5倍计算。
读入RATE, HOURS
Less Than Less than or Equal to
EQual to Not Equal to
数学符号 > ≥ < ≤ = ≠
关系表达式示例:
关系表达式 A .GT. 3.5 A+B .LE. 0.0 SIN(X) .GE. 0.5 A-B .NE. C+D
I .LT. J/2
数学式子 A>3.5
[例4.3]如果在上例的基础上将80分以上定为A等,70~79 分定为B等,60~69分定为C等,小于60分的为D等。
READ (*, *) GRADE IF (GRADE .GE. 60.0) THEN
IF (GRADE .GE. 70) THEN IF (GRADE .GE. 80.0) THEN PRINT *, ‘A’ ELSE PRINT *, ‘B’ END IF
fortran语言编程第四章

15
应用举例
例5 从键盘任意输入三个数,计算并输出它们的最大数。 思路分析: 假设用a,b,c分别表示输入的三个数,则三个数中的最 大值必然是两个数中的较大值。因此可以先在a和b中找 出一个较大值出来;然后再用这个较大值与剩下的那个 数c进行比较,其中的较大者即为三个数中的最大者。 在本算法中,首先要判断a和b谁大:在a大的情况下,又 要判断a和c谁大;在a小的情况下,又要判断b和c谁大。 因此在实现“判断a和b谁大”的两路分支选择结构的执 行部分将包含另外一个选择结构。
逻辑表达式(用逻辑运算符连接而成的有意义式子):
其中逻辑运算符有 : .and. 逻辑与 .or. 逻辑或 .not. 逻辑非 .eqv. 逻辑等 .neqv. 逻辑等
前一页
休息
6
简单的逻辑条件转移语句
简单的逻辑条件转移语句的一般格式: XXXXX if(逻辑表达式(e))可执行语句(s) 当逻辑表达式的值为真时,则执行s; 否则执行该语句 的下一语句。 例:求三个数中的最大数。
前一页 休息 20
前一页 休息 3
算术条件转移语句
求一元二次方程的根。
read(*,*)a,b,c d=b*b-4.0*a*c if(d)15,25,35 pr=-b/(2.0*a) pi=sqrt(-d)/(2.0*a) write(5,20)pr,pi format(1x,5hreal=,f10.4,5x,5himag=,f10.4) goto 80
FORTRAN程序设计
第4章 控制转移语句
无条件转移语句
无条件转移语句的一般格式: xxxxx goto n
其中:n为可执行语句的语句标号。
作用:执行语句标号为n的语句。
前一页
Fortran90_4

子程序
• 固有子程序(编译器自带) 固有子程序(编译器自带)
日期与时间
‘ccyymmdd’
字符型
date_and_time( date, time, … ) ‘hhmmss.sss’ system_clock( count, count_rate ) cpu_time( time )
随机数生成器 random_number( a ) random_seed(size, put, get)
• 外部子程序(我们自己动手设计与编写) 外部子程序(我们自己动手设计与编写)
使用date_and_time 使用
PROGRAM test ! implicit none ! character(len=8) :: today character(len=10) :: time ! CALL date_and_time( today, time ) ! write(*, ‘(a, a)’) ‘ Today is ’, today write(*,’(a)’) ‘ Now it is ‘//time(1:6) ! ! END PROGRAM test
子程序
SUBROUTINE example( x1, x2, x3, x4, y1, y2, y3 ) ! implicit none 哑元, 哑元, 实元 ! 哑实结合 real, intent(in) :: x1, x2, x3, x4 real, intent(out) :: y1, y2, y3 ! PROGRAM test y1 = x1 ….. y2 = x2 real :: xx1, xx2, xx3, xx4 y3 = x3 + x4 real :: yy1, yy2, yy3 ! CALL example(xx1, xx2, & ! xx3, xx4, yy1, yy2, yy3) END SUBROUTINE example END PROGRAM test
Fortran 程序设计基础 第四章

关于WRITE还有两点要注意: 还有两点要注意: 关于 还有两点要注意 命令后, (1)每一次执行 )每一次执行WRITE命令后,会自动换到下一行来准备下一次的输出。 命令后 会自动换到下一行来准备下一次的输出。 (2)因为双引号是用来“输出”字符串的,所以想要输入双引号时,要连 )因为双引号是用来“输出”字符串的,所以想要输入双引号时, 用两个双引号。 用两个双引号。 Fortran 90 可以使用双引号或单引号来封装字符串,Fortran77标准中只能使 可以使用双引号或单引号来封装字符串, 标准中只能使 用单引号,不过大部分的Fortran77编译器还是可以接受双引号。 编译器还是可以接受双引号。 用单引号,不过大部分的 编译器还是可以接受双引号 想要在字符串中输入双引号时,要连续使用两个双引号。例如要印出My name 想要在字符串中输入双引号时,要连续使用两个双引号。例如要印出 is “peter”.时,则对 的描述还要编写如下: 时 则对WRITE的描述还要编写如下: 的描述还要编写如下 write(*,*) ”my name is ””peter”” .” STOP是终止程序的意思,它可以出现在程序的任何地方,程序执行 是终止程序的意思, 是终止程序的意思 它可以出现在程序的任何地方, 到这个命令就会终止。除非必要,不要把STOP命令使用在主程序结束 到这个命令就会终止。除非必要,不要把 命令使用在主程序结束 之外的其他地方。因为一个程序如果有太多的终止点会容易出错。 之外的其他地方。因为一个程序如果有太多的终止点会容易出错。每有 STOP命令,程序的程序代码执行完毕后,程序会自动终止。 命令, 命令 程序的程序代码执行完毕后,程序会自动终止。 END是用来封装程序代码使用的,说明程序代码已经编写完毕。 是用来封装程序代码使用的, 是用来封装程序代码使用的 说明程序代码已经编写完毕。 Fortran 90标准中,可以使用下列的 种方法来表示程序代码编写结束; 标准中, 种方法来表示程序代码编写结束; 标准中 可以使用下列的3种方法来表示程序代码编写结束 Fortran 77只使用第一种方法: 只使用第一种方法: 只使用第一种方法 1) end 2) end program 3) end program main ! main 指的是 指的是program所取的名字。 所取的名字。 所取的名字
F90第四章2

例三
例四 例五
REAL a,b,c,s,area
READ*,a,b,c s=(a+b+c)/2 area=SQRT(s*(s-a)*(s-b)*(s-c)) PRINT*,'area=',area END 运行程序输入数据: 2.5 3.5 4.5↙ 输出面积area 结束
4.9 简单顺序程序设计/例一
第四章
内部数据类型与表控I/O
4.7 函数
概述 示例
[例4.11]使用标准函数,给出下列数学表达式的F90表达式:
s(s a)(s b)(s c)
①
② ④
1 a 2
10 5 5
tgA函数/示例 tgB 4.7 1 tgAtgB
⑤4sin3A-3sinA+sin3A
⑥
1 (e e 2
第四章
内部数据类型与表控I/O
4.5 表控输入输出
概述 输入
系统隐含规定的输入设备:
输出
键盘
系统隐含规定的标准输入格式:
4.5 表控输入输出/输入
(1)数据间用逗号或空格间隔。 (2)输入数据的次序与输入表变量次序一致,类型 要赋值兼容。 (3)输入数据可分多行输入。 (4)输入数据少于(多余)变量个数的情况。
4.5 表控输入输出
概述 输入
表控输入READ语句: READ * ,变量1,变量2,…
输出
(1)*号的含义(输入设备、输入格式)。 (2) *号前后空格可有可无,*号后可以为空。 (3)如果有输入变量,*后必须有逗号。
4.5 表控输入输出/输入
(4)输入表中可以有多个不同类型变量。 (5)每个READ语句都从新的一行开始读数据。
fortran第四章

d 2x dx m 2 kx K dt dt
2
问题:若已知 v(0), x(0),求 v(t ) ? x(t ) ? 对比阻尼振动的标准形式:
二阶常微分方程
d2x dx 2 0 x 0 2 dt dt
( 0 )
:阻尼因子
受迫振动:
0:振子固有频率
§4.1 物理学中的常微分方程 §4.2 常微分方程初值问题的一级、二级欧拉近似法 §4.3 龙格-库塔法
1
§4.1 物理学中的常微分方程
一、力学中的例子
落体运动:作用力—重力、阻力
dv 牛顿方程: m mg Kv dt
一阶常微分方程
二阶常微分方程 阻尼振动:作用力—弹性力、阻尼力
dv m kx Kv dt 振动方程: dx v dt
11
t 取 1, q(0) 1, R 10, C 1, 0 t 30 , 例 1:
q ~ t 并与精确解 q(t ) q0 et RC比较。 求:
qi t qi 1 qi t qi (1 ) RC RC
t 1 W 1 1 0.9 笔算此题: RC 10
I i 1 I i f i t
qi R 而 f i ( I i ) L LC
13
若 I (0) 0 ,在R 2 L / C 的条件下,有:
R t 0 2L q ( t ) q e cos( t ) 解析解: 0
其中 cos
, 0 1 / LC , 02 ( R / 2 L) 2 0
递推关系: y y y
i i 1 i 1
(6)
(6)可进一步写为:(由(6)式中的第一式解出 f (ti , yi ) 并代入(6)式中的第二式)
FORTRAN90第4章PPT课件

4.2 IF语句
例4-2:阅读程序,写出结果 x=5 IF(x>2) y=1.0 IF(x>6) y=3.0 IF (x>3) y= -1.0 PRINT*,Y END.
注意:语句顺序的改变对结果的影响
4.3 IF结构
使用范围:二分支结构 书写格式:
条件 语句体1 语句体2
= =或பைடு நூலகம்=要小心使用
实型量一般要改写:A= =B改写为ABS(A-B)<1E-6
A/=B 改写为ABS(A-B)>=1E-6
关系表达式的值为逻辑型
不允许算术表达式与字符表达式比较 错例:2<‘A’,
4.1 关系表达式与逻辑表达式
运算规则:
先计算e1、e2 再比较: 成立:.TRUE.; 不成立:.FALSE.
4.2 IF语句
使用范围:特殊单分支
语句写法: IF(条件) 一条语句
注:
条件 一个语句
1.右边为一条可执行语句
2.不能为以下语句:
END、另一个逻辑IF、 块IF、ELSIF、ENDIF、DO 错例:IF(X<2)END
4.2 IF语句
执行过程:
计算条件表达式的值 真 右边语句 IF的下一个语句 假 IF的下一个语句
e1
F
block1 T
e1
F
block1
4.3 IF结构
执行过程
计算e值是否成立: 真 相应的block ENDIF下一个语句 假 下一个elseif条件语句 所有条件均不成立 else后的Block ENDIF下一个语句
4.3 IF结构
例:计算y=f(x)+g(x)
fortran语言第四章

例如, 设LA,LB,LC为逻辑变量, 如下赋值语句均是合法的。
LA=•TRUE• LB=((X-2.0)∗ ∗2+Y ∗Y)•LE•9.0 LC=(A•NE•0.0) •AND•((B ∗B-4.0 ∗A∗C) •GT •0.0)
例
试编一个打靶程序。设靶板上有三
个同心圆,半径分别为1、2、3,环数规定 如图a所示(打在圆上按圆内计算),问任意给 定一点P是几环?
例1 计算
sin x y= x 1
x≠0 x=0
解
算法1,如下图—a所示,可编程序如下: 1: 2: 3: 4: 5: 6: PROGRAM C4P7A READ (∗, ∗) X IF(X.NE.0) Y=SIN(X)/X IF (X. EQ.0) Y=1 WRITE (∗, ∗) X, Y END
((C - B)•LT•A)•AND•(•TRUE•)OR•NOT•((8.0∗(B - A))•GT•(C/2.0))
3. 逻辑赋值语句 逻辑赋值语句的一般形式 逻辑变量= 逻辑变量=逻辑表达式 和算术赋值语句相似,它是一个可执 行语句。先计算右边逻辑表达式的值, 然后将这个值赋给左边的逻辑变量。
<二> 逻辑表达式
1. 逻辑表达式的形式 逻辑表达式是用来表示逻辑运算的式 子。它是由一个或多个逻辑量(操作数)及 逻辑运算符和括号形成的式子,它的值是 •TRUE•(真)或•FALSE(假)。 逻辑表达式的基本形式是: 逻辑量 逻辑运算符 逻辑量
FORTRAN77的逻辑量可以是: 逻辑常数(或逻辑符号常数);逻辑型变 量;关系表达式或逻辑表达式的基本形式。 如果逻辑量是逻辑表达式的基本形式,那么 即可构成一个复杂的逻辑表达式。
MAIN C4P7b 输入:X Y=1 T Y⇐sinX/X 输出:X,Y X≠0 F 空
F90第四章1

4.1 常量
逻辑值
复型常量:复数。 字符型常量:字符串。 逻辑型常量:逻辑值,布尔值。
第四章
内部数据类型与表控I/O
4.1 常量
整数语法
概述 整数
整数表示
实数
复数 字符串
FORTRAN 90允许在程序中表示2至36进位制整数。如十进 制整数3994575可在程序中按下面形式描述(输出结果相同):
实数
复数 字符串
逻辑值
<十进制数字>→0∣1∣2∣3∣4∣5∣6∣7∣8∣9
<实型KIND值>→4∣8
4.1 常量/实数/语法
PRINT*,125.0, 125.
!实数125.0
PRINT*,1.25E1, 0.125E2, .125E2 !实数12.5
实数范围 实数示例
<指数形式实数>→<数值部分><指数部分> [ _ <实型KIND值>] <数值部分>→<十进制整数>∣<小数形式实数>
实数性质
标准形式
<十进制整数>→[<符号>]<整数部分> <指数部分>→(E∣e∣D∣d) <十进制整数> 说明:若KIND值为4,则为单精度,KIND值为8,则为双精度。 第四章 内部数据类型与表控I/O
4.1 常量
概述 整数
FORTRAN 实数语法
90通过KIND值确定实数存储开销(即字节数)、 精度和取值范围,如表4-6所示。缺省KIND值则取默认值4。 实数表示 FORTRAN 90只允许十进制实数,有小数形式和指数形式。 KIND值 字节 二进位 精度 取值范围(绝对值) PRINT*,-12.5 !实数-12.5 4 4 32 7位 0,[10-38,10+38] PRINT*,0.125, .125 !实数0.125 8 8 64 15位 0,[10-308,10+308] PRINT*,125.0, 125. !实数125.0 说明:大于最大值,产生上溢错,小于最小值,按 0处理。 PRINT*,1.25E1, 0.125E2, .125E2 !实数12.5
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入输 出的格 式
隐式格式(implicit 隐式格式(implicit format)
表控格式(list 表控格式(list directed) 名称列表(namelist 名称列表(namelist directed) * 不能用于内部记录
显式格式(explicit 显式格式(explicit format) 无格式(unformatted) 无格式(unformatted)
输入输出项的个数等于 输入输出项的个数等于格式编辑符个数 等于格式编辑符个数
输入输出项的个数大于 输入输出项的个数大于格式编辑符个数 大于格式编辑符个数
<输出语句>→ 输出语句>
[{<表达式 [{<表达式>}]| 表达式>}]| print <格式> [,{<表达式>}] 格式> [,{<表达式 表达式>}]
标准输入输出设备
write“ write“(”<设备>[, <格式>][, <状态和控制符>]“)” 设备>[, 格式>][, 状态和控制符>] >]“
exam_4_6
显式格式 输入输出
纵向走纸控制
格式说明的首字符 (空格) 空格) 0(数字 0(数字0) 数字0) 1(数字 1(数字1) 数字1) +(加号 +(加号) 加号) 其它字符 纵向间隔控制功能 移到下一行开头 移到下面第二行开头 移到下一页第一行开头 移到当前行开头 移到下一行开头
exam_4_7
无格式( 无格式(unformatted 二进制) 二进制)
输入输 出语句
<输入语句>→ 输入语句>
read “(”<设备>[, <格式>][, <状态和控制符>]“)” 设备>[, 格式>][, 状态和控制符>] >]“ [{<变量 [{<变量>}] | 变量>}] read <格式> [,{<变量>}] 格式> [,{<变量 变量>}]
显式格式 输入输出
字符串编辑符
H (Fortran90废除,Fortran95取消) Fortran90废除 Fortran95取消 废除, 取消)
outde1.for lst.out
‘string’或 ‘string’或“string”
exam_4_5
控制编辑符
T TL TR X S SP SS BN BZ P : / $ \ Q ,
常用形式 1X, ’ ’,1H ’, ’0’,1H0 ’0’, ’1’,1H1 ’1’, ’+’,1H+ ’+’, (非标准规定) 非标准规定)
显式格式 输入输出
输入输出表和格式说明表的关系
输入输出项的类型要和格式编辑符一致
exam_4_8
输入输出项的个数少于 输入输出项的个数少于格式编辑符个数 少于格式编辑符个数
r:重复次数(运行时可变) 重复次数(运行时可变) w:域宽(运行时可变) 域宽(运行时可变)
exam_4_4
I B O Z LA I B O Z F E EN ES D G F E EN ES D G
c:编辑符 m:整数最少位数(运行时可变) 整数最少位数(运行时可变)
d:实数的小数位数(运行时可变) E,e:实数的指数位数 实数的小数位数(运行时可变) E,e:
输入输 出的格 式
exam_4_3
显式格式( format) 显式格式(explicit format)尽量避免用显式格式输入
用format语句说明 format语句说明 <format语句>→<语句标号> format “(”<格式说明表>“)” format语句 →<语句标号> 语句> 语句标号 格式说明表> 例如: 例如:read 10, a, b, c print 10, a, b, c 10 format(…) 不用format语句 不用format语句 例如: 例如:read ‘(…)’, a, b, c print “(…)”, a, b, c read(*,‘(…)’) a, b, c write(*,“(…)”) a, b, c read(*,10) a, b, c write(*,10) a, b, c
exam_4_2
namelist /<组名称>/<变量列表>{[,]/<组名称>/<变量列表>} /<组名称>/<变量列表>{[,]/<组名称>/<变量列表 组名称>/<变量列表>{[,]/<组名称>/<变量列表>} 作用:是一种格式,在输入输出时代表一组变量 作用:是一种格式, 特点: 特点: 同一个名称列表中的变量可以是不同的类型 同一个变量可以出现在不同的名称列表中 同一个变量可以在同一个名称列表中出现多次 名称列表中的变量必须有确定的内存分配空间
输入输出 的基本要 素
输入输出格式
隐式格式( 隐式格式(implicit format): format) 表控格式( 表控格式(list directed) directed) 名称列表( 名称列表(namelist directed) directed)
显式格式( 显式格式(explicit format) format)
输入输 出的格 式
表控格式( 表控格式(list directed) directed)
系统内部规定的固定格式 (参见附件“表控格式的定义” ) 参见附件“表控格式的定义”
exam_4_1
输入大量数据时使用文件
DoubleLayer.dat radiation.dat
输入输 出的格 式
名称列表( 名称列表(namelist directed) )
显式格式 输入输出
格式说明表里的元素
数据编辑符 I F E EN ES D G B O Z L A 字符串编辑符 H ‘string’ “string” 控制编辑符 T TL TR X S SP SS BN BZ P : / $ \ Q ,
显式格式 输入输出
数据编辑符
[r]|[<r>]c ]|[<r>]c I B O Z LA F E EN ES D G [r]|[<r>] cw|<w> ]|[<r |<w [r]|[<r>] cw |<w>.m|<m> ]|[<r |<w |<m [r]|[<r>] cw |<w>.d|<d> ]|[<r |<w |<d [r]|[<r>] cw |<w>.d|<d> [E,e] ]|[<r |<w |<d
第四章 数据的输入输出(I) 数据的输入输出(I) —标准设备
输入输出 的基本要 素
输入来源(或输出去向) 输入来源(或输出去向)
外部设备 内部记录
输入输出方式
顺序方式(sequential) 顺序方式(sequential) 直接记录方式( 直接记录方式(direct access) 一般针对文件 access)
设 备
外部设备 逻辑设备(unit=) 逻辑设备(unit=)
* 0 5 6 其它 (0~65535) (0~65535)
连接的物理设备
总是键盘和显示器 缺省为键盘和显示器 缺省为键盘 缺省为显示器 键盘、显示器、硬盘、磁 键盘、显示器、硬盘、 带机、打印机、串口、 带机、打印机、串口、并 口…
内部记录— 内部记录—字符串