_fortran-第五章 基本IO
Fortran 程序基础
2021/7/1
26
数组操作
PROGRAM TEST IMPLICIT NONE ! 变量定义 REAL :: A1, A2,A3,A4,A5,B(5,5) READ(*, *)A1,A2,A3,A4,A5 ! 数组片断的引用 B(1,1:5) = A1 B(2,1:5) = A2 B(3,1:5) = A3 B(4,1:5) = A4 B(5,1:5) = A5
数组可用DIMENSION语句定义 DIMENSION runoff(365) Real runoff ※使用数组必须先定义
2021/7/1
25
数组操作
数组引用
(1)引用数组元素 数组名(下标),如 runoff(15),rain(3,5)
(2)引用全部数组 数组名,如: real B(10),A(10) B=A
2021/7/1
8
数据类型及I/0格式
变量的定义及类型说明:
(1)类型说明语句
integer year, month, day
real runoff
character*10 station
(2)隐含约定
I~N 规则
2021/7/1
9
数据类型及I/0格式
输入、输出语句
READ(设备号, 格式说明或格式说明语句标号) [变量列表] WRITE (设备号, 格式说明或格式说明语句标号) [变量列表]
其他程序控制语句 End Pause stop
2021/7/1
22
Fortran程序流程控制
实例分析
(1)1~100求和 (2)输入5个数,按大小排序
2021/7/1
23
数组操作
Fortran语言基础PPT学习教案
1.数值型常量及其类型 (1)整型常量
整型常量又称为整型常数或整数,包括正数、负 数和0。 例如:+5 -367 0 98
第9页/共65页
(2)实型常量
实型常量即实型常数或简称为实数。它有两种形式: ①小数形式:12.3 -3.5 100. .56 ② 指 数 形 式 : 5.35E5 表 示 5.35×105 , 2.66E-3 表 示 2.66×10-3
第10页/共65页
当单精度实数不足以表示一个数的大小或 精度时,可以用双精度实数表示,只是将 实数指数部分中的字母E改成字母D即可。 例如,6.85746304857D5, .3875479654765D+3等都是双精度实数。
第11页/共65页
(3)复型常量 复型常量即复型常数或简称为复数。 如:(1.0,1.0)表示复数1.0+1.0i,(2.1,-4.5) 表示复数2.1-4.5i,(-6.0,0) 表示复数-6.0。
字符串
.EQ.,.NE., ==,/=
两个操作数或者同时是任意数值 类型与任意种别参数的数值,或 者同时是具有相同种别参数的任 意长度的字符串
.GT.,.GE.,.LT.,.LE., >,>=,<,<=
两个操作数或者同时是除了复型 之外的任意数值类型与任意种别 参数的数值,或者同时是具有相 同种别参数的任意长度的字符串
end
第1页/共65页
2.1 字符集与保留字
1.字符集
FORTRAN规定允许使用的字符为:
英文字母
A-Z及a-z(大小写不区分)
阿拉伯数字
0-9
特殊符号 空格 = + - * ( ) ,. ’ : “ ! & ; < > $ ? _
2FORTRAN基本语句
第一节
类型说明语句
I-N规则
(3)隐含说明变量的类型
根据变量名称的第一个字母自动决定变量的类型, 根据变量名称的第一个字母自动决定变量的类型, 变量名称的第一个字母自动决定变量的类型 且仅适用于整型和实型变量。 且仅适用于整型和实型变量。 IMax,Number,JOB,COUNT,TOTAL, 例 J,IMax,Number,JOB,COUNT,TOTAL,BOOK 最好不用这种不经说明就使用变量的方法。 最好不用这种不经说明就使用变量的方法。好的 程序员在编写程序时都会先对变量进行说明才使用变 这样能清楚了解程序执行时的内存使用情况, 量,这样能清楚了解程序执行时的内存使用情况,同 时也可避免很多“人为错误” 时也可避免很多“人为错误”。
第三节
赋值语句
三、赋值过程的类型转换作用 在一个算术赋值语句V=e V=e中 赋值变量( 在一个算术赋值语句V=e中,赋值变量(V)和表达式 的类型既可以相同,也可以不相同。Fortran中对于赋 (e)的类型既可以相同,也可以不相同。Fortran中对于赋 值时的类型转换问题作了如下规定。 值时的类型转换问题作了如下规定。 如果变量V与表达式e的类型相同,则直接进行赋值, □如果变量V与表达式e的类型相同,则直接进行赋值, 不需进行类型转换。 不需进行类型转换。 如果变量V与表达式e的类型不同, □如果变量V与表达式e的类型不同,则首先进行表达式 的求值,然后求值的结果转换为赋值变量的类型。 的求值,然后求值的结果转换为赋值变量的类型。 例1、交换A,B值; 交换A 例2、 计算
答案: 、 答案:1、2.0*SIN(3.14/4)/3.0 ( ) 2、(Sin(4.0)+cos(10*3.14/180))*exp(2.5)/ 、 (Sqrt(2.0)+abs(a*x)+log(3.0*5))
fortran循环结构及基本语句
fortran循环结构及基本语句Fortran中的循环结构包括DO循环和DO WHILE循环。
基本语句包括赋值语句、条件语句和IO语句。
1.DO循环结构:DO循环结构用于重复执行一段代码块,语法如下:DO variable = start, end, step!代码块ENDDO在循环开始前,将变量初始化为start的值,然后执行代码块。
然后将变量增加step的值,并检查是否达到end的值,如果没有达到则继续执行代码块,直到达到end的值为止。
2.DOWHILE循环结构:DOWHILE循环结构用于在满足条件时重复执行一段代码块,语法如下:DO WHILE (condition)!代码块ENDDO在每次循环开始前,检查condition是否为真,如果为真则执行代码块,然后再次检查condition。
只有当condition为假时,循环才会结束。
3.赋值语句:赋值语句用于将一个值赋给一个变量,语法如下:variable = expression可以使用算术运算符和函数来计算expression的值,并将结果赋给变量。
4.条件语句:条件语句用于根据条件选择执行不同的代码块,常用的条件语句有IF语句和SELECTCASE语句。
-IF语句的语法如下:IF (condition) THEN!代码块1ELSE IF (condition) THEN!代码块2ELSE!代码块3ENDIF根据condition的值选择执行代码块1、代码块2或代码块3-SELECTCASE语句的语法如下:SELECT CASE (expression)CASE (value1)!代码块1CASE (value2)!代码块2CASEDEFAULT!代码块3ENDSELECT根据expression的值选择执行相应的代码块,如果没有匹配的值,则执行默认的代码块。
5.IO语句:IO语句用于输入和输出数据,常用的IO语句有WRITE和READ语句。
fortran 第5章
!变量<=5时,会执行这个case中的程序模块
!变量=1或3或5时,会执行这个case中的程序模块
§ 5-3 SELECT CASE 语句
例:
A=65 Read(*, *) key Select case(key) Case(a) !这一行程序错,A为变量 …… Case(c) ! 如果c声明成parameter 的常量,才可 ……
§5-2-2 字符的逻辑判断
根据保存它们的字符码,比较字符的大小 (个人计算机都是用ASCII码)
注意字符要以引号封装
§ 5-3 SELECT CASE 语句
SELECT CASE 语句可以取代某些使 用IF-ELSE IF的语句 使程序更加简洁
结构如下:
放入所要判 断的变量
不一定出现
§ 5-3 SELECT CASE 语句
§5-1-2 逻辑运算
【.NEQV.】
逻辑A TRUE TRUE FALSEUE FALSE
A .NEQV. B FALSE TRUE TRUE FALSE
(1>3 .NEQV. 2>3) !两边都不成立,表达式为假 (1>3 .NEQV. 2<3) !两边结果不同,表达式为真
$ 5-1-3 多重判断 IF
• 执行效率较高
ELSE IF
$ 5-1-4 嵌套IF语句
只有第一层的IF成立, 才可能执行第二层的IF的 判断,及第二层中的命令。 层层推进及退出
例:
§5-2 浮点数及字符的逻辑运算
§ 5-2-1 浮点数 浮点数要避免使用“==“的判断 例:
浮点数的计算误差经常存在,要预留空间 改为:
A>=0.0 .AND. A+C> B+D .OR. .NOT. .TRUE.
Fortran的讲义第五章共21页文档
ASSEM_FORCE.f90
<where语句>→wt;
<where语句>→[<标签>:]where(<屏蔽表达式>) {<赋值语句>}
else where(<屏蔽表达式>)[<标签>] {<赋值语句>}
{else where(<屏蔽表达式>)[<标签>] {<赋值语句>}}
给单个数组元素赋值
用数组构造器赋值(Fortran90)
两种格式:(/…/) 或 […] 只能给一维数组(或数组片段)赋值 可以是常量、表达式、三元组、隐式do循环或数组片段
用reshape语句给多维数组(或数组片段)赋值
数组元素赋值
exam_5_2
条件赋值(where)- Fortran90
第m次消元
m1,2,...n,
A (m ) AA mj
(m 1 ) mj
(m 1 ) mm
jm ,m 1 ,.n ..b ,m (m )b A m ( m (m m 1 1 )m )
pure函数(Fortran95): 确保函数不影响程序其它部分的状态
数组元素赋值
条件赋值(forall)- Fortran95
exam_5_2
<forall语句> → forall(<三元组>{, <三元组>}[,<屏蔽表达式>]) <赋值语句
>
<forall语句>→ [<标签>:]forall(<三元组>{, <三元组>} [,<屏蔽表达式>]) <赋值语句> {<赋值语句>} end forall[<标签>]
fortran语法手册
1 FORTRAN77四则运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→()2 FORTRAN77变量类型2.1 隐含约定:I-N规则凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。
2.2 用类型说明语句确定变量类型:可以改变I-N规则2.3 用IMPLICIT语句将某一字母开头的全部变量指定为所需类型如 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字符位以后不能有内容。
Fortran基础
简单的Fortran程序 程序 简单的
program ex0413 character (len=20) string string = "Good morning." write(*,*) string string(6) = “evening.” ! 重新设置从第 个字符之后的字符串 重新设置从第6个字符之后的字符串 write(*,*) string end 执行结果为: 执行结果为: Good morning Good evening
简单的Fortran程序 程序 简单的
二、声明语句
1、变量 、 变量 — 程序运行期间其值可以改变的量 例如: 例如:x=1.0 x=2.0 2、变量名 、 规则:以英文字母开头,英文字母和数字0-9以及 规则:以英文字母开头,英文字母和数字 以及 下划线的组合。 下划线的组合。 变量的名字最好是取成一个有意义的英文单词, 变量的名字最好是取成一个有意义的英文单词,这样 可以减少程序编写时出错的机会。 可以减少程序编写时出错的机会。
简单的Fortran程序 程序 简单的
② 改变隐含约定 可以经过IMPLICE描述来决定哪些字母开头的变量会自动 描述来决定哪些字母开头的变量会自动 可以经过 使用某种类型。 使用某种类型。 implicit integer(A,B,C) !A、B、C开头的变量都视为整型数。 开头的变量都视为整型数。 、 、 开头的变量都视为整型数 implicit integer(A-F,I,K)!A到F及I、K开头的变量都视为整型 ! 到 及 、 开头的变量都视为整型 数。 implicit real(M-P) !M到P开头的变量都视为浮点数 到 开头的变量都视为浮点数 implicit none !关闭默认类型功能,所有变量都要事先声明。 关闭默认类型功能,所有变量都要事先声明。
Fortran讲义 第五章
数组指针
动态数组
数组的声 明
exam_5_1
用类型声明语句
<类型声明符>[::]<数组声明表> <数组声明表>→<数组名>(<维说明表>)[=<数组初值>] {,<数组名>(<维说明表>)[=<数组初值>]} <维说明表>→<维说明符>{,<维说明符>} <维说明符>→[<下界>:]<上界> 下界缺省为1 <数组初值>→(/<初值1>,…,<初值n>/)| [<初值1>,…,<初值n>] n为数组的大小
数组元素的存储顺序
按列存储(Column major)
的描 述
数组的引用
数组名 数组元素 数组片段
三元下标:a(1:2, -1:3:2) 向量下标:a(2, b) b=(/-1, 1, 3/)
a(1:3, -1:4)
a a(1,3)
数组越界:debug状态检查,release状态不检查
Fortran数 组的种类
显式形状数组(explicit-shape)
静态显式 自动数组(automatic array) 可调数组(adjustable array) 静态数组
假定形状数组(assumed-shape)
假定大小数组(assumed-size)
延迟形状数组(deferred-shape)
用dimension语句:dimension <数组声明表> 用代dimension属性的类型声明语句
FORTRAN95第05章-文件解读
3.文件的存取方式 文件的存取方式也称文件的输入输出方式或读写方式。FORTRAN文件有 两种存取方式,即顺序存取方式和直接存取方式。 (1)顺序存取方式 所谓顺序存取,指从第1个记录开始, 将各记录按先后顺序逐个写入文件, 读出时也必须从第1个记录开始按记录的先后顺序逐个读出,即要读或写第I 个记录,必须先读或写前面的i-1个记录。按顺序存取方式进行存取操作的文 件也称顺序文件。在FORTRAN中,这种顺序文件又分为有格式和无格式文 件。 1)有格式顺序文件 这种文件指文件中的各记录按某种格式, 顺序写入文 件或从文件读出,各记录的长度可以不同。 2)无格式顺序文化 这种文件指文件中各记录写入与读出的都是按各数据 项在计算机内的二进制表示的形式,各记录的长度也可以不同。
(2)直接存取文件 所谓直接存取,指通过指定记录号对文件中的记录进行 读写操作,而不必按顺序依次存取各记录。可直接存取的文 件也称直接文件。在FORTRAN中,这种直接文件也分有格 式和无格式两种。 1)有格式直接文件 对这种文件,所有记录具有相同的长 度和相同的组成,记录可以按任意顺序读写。对这种文件,每 个记录的长度在打开文件时指定,如果写入的数据未达到指 定长度,则以空格补齐,以保证记录长度相等。 2)无格式直接文件 这种文件内容是以二进制形式写入和 读出的,除了写入数据未达到指定长度,要用丛“0”补齐外, 其他规定同有格式直接文件。
“无格式”的文件实际是“二进制文件”,使用二进制文件存取速度快, 节省 存储空间且具有一定保密性,但不直观。有格式文件是“文本文件”,也就 是 以ASCII码形式保存文件中的数据,可以用各种文本编辑工作观看其内容, 如 2018/10/6 3 利用 windows的“记事本”。在Visual Fortran中可以直接查看这两种文件。
Fortran基本用法小结
2、Fortran的主要版本及差别
按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran77和Fortr
an90。 Fortran90在Fortran77基础上添加了不少使用的功能,并且改良了77编程的版面格式,
所以编程 时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保
program main
!程序开始,main是program的名字,完全自定义
write(*,*)"Hello" !主程序
stop
!终止程序
end[program[main]] !end用于封装代码,表示代码编写完毕。
[]中的内容可省略,下同。
再看一段实用一些的程序,好有点感性认识。程序用于计算圆柱的表面积,要求输入底面
一、说明
本文多数内容是我读彭国伦《Fortran95程序设计》的笔记。只读到第九章,主要是3~9
章,都是 些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不
/?uid-1039-action-viewspace-itemid-16895
/?uid-1039-action-viewspace-itemid-16895
4/9
13-4-13
[转载] Fortran基本用法小结 - 朱文举的给排水专业博客 - 国科社区-国家科技成果网 - Powered by X-Space
interactive_loop: do
/?uid-1039-action-viewspace-itemid-16895
6/9
13-4-13
[转载] Fortran基本用法小结 - 朱文举的给排水专业博客 - 国科社区-国家科技成果网 - Powered by X-Space
FORTRAN语言自学基础
《FORTRAN语言》自学提纲第一章1 FORTRAN基础1. 一个FORTRAN程序由一个主程序或一个主程序与若干个子程序组成。
但一个完整的FORTRAN程序只能有一个主程序,主程序的第一个语句是PROGRAM语句,用以说明主程序的名称。
这个语句也可以省略,省略时默认为主程序的名称为MAIN。
2.FORTRAN的子程序主要有三种:⑴函数子程序,其第一个语句为FUNCTION;⑵子例行子程序,其第一个语句为SUBROUTINE;⑶数据块子程序,其第一个语句为BLOCK DATA。
主程序与各个子程序可以独立编译,最后再链接成一个可执行程序。
在编写并输入一个FORTRAN程序时,既可以将主程序与各个子程序存放在一个文件中,也可以将它们分别存放在不同的文件中。
但必须注意,主程序与各个子程序都是独立的程序单位,每个程序单位的最后一行必须用END语句作为结束。
在主程序中,虽然END语句还具有使程序停止运行的作用,但由于一个程序单位只能在最后一行有END语句,因此,在程序的其它位置处需要停止运行时,只能用STOP 语句,不能用END语句。
同样的道理,在子程序中,虽然END语句还具有使程序流程返回到调用程序的作用,但在子程序的其它位置(不是最后一行)需要返回到调用程序时,只能用RETURN语句,不能用END语句。
3.FOPTRAN源程序的书写格式有严格的规定。
⑴一行中第一列为“C”或“*”时,该行被认为是注释行。
注释行可以写在四个区中的一个区,且注释行可以出现在程序单位的任何位置。
但注释行不能有续行,需要时可以将连续若干行都定义为注释行。
⑵FORTRAN语句部分不能占用标号区及续行标志区,只能从第七列开始。
当语句太长时,可以使用续行。
在继续行的标号区内必须为空白(即继续行不允许有标号),标号只能出现在起始行上。
⑶起始行与继续行或各继续行之间的空格不起作用,因此,对于一般的语句,可以不必到72列才转为继续行,继续行也不必一定要从第7列接着写,但是,包括在引号内的字符串中的空格是有效的,因此,对于字符串要使用继续行时应特别注意,最好写到一行的72列时再转为继续行,且要从继续行的第7列接着写。
Part_I_Fortran语言基础
Part_I_Fortran语言基础数值分析程序设计Part I F ortran语言基础COMPAQ VISUAL FORTRAN 6.50编译器的使用0.1 编译器简介高级语言以及汇编语言的程序代码在没有转换成机器代码前,计算机是无法执行的。
编译器的功能是将高级语言的程序代码翻译成计算机可执行的机器码,也就是生成扩展名为EXE, COM的文件。
0.2 Visual Fortran的使用Visual Fortran起源于Microsoft的Fortran PowerStation 4.0,这套工具后来卖给Digital公司继续开发,第二个版本称为Digital Visual Fortran 5.0,Digital 被Compaq并购之后,接下来的版本6.0和6.5称为Compaq Visual Fortran。
下面的介绍以Compaq Visual Fortran 6.5作范例。
Visual Fortran被组合在一个叫做Microsoft Visual Studio的图形接口开发环境中。
Visual Studio提供一个统一的使用接口,这个接口包括文字编辑功能、Project管理功能、调试工具等。
而编译器则被组合到Visual Studio中,VF和VC++使用相同的使用接口。
Visual Fortran 6.5除了完全支持Fortran 95的语法外,扩展功能方面提供了完整的Windows程序开发工具,专业版还含有IMSL数值计算连接库。
另外还可以和VC++直接互相连接使用,也就是把Fortran和C语言的程序代码混合编译成一个执行文件。
安装好Compaq Visual Fortran后,运行Developer Studio就可以开始编译Fortran程序了。
数值分析程序设计——Fortran基础运行Developer Studio启动Visual Fortran,默认程序名称为Compaq Visual Fortran 6.5选择File菜单中的New选项在弹出的对话框中,选择Project标签。
fortran教程
1、赋值时,自动进行类型、种别转换。对逻辑型、字符型要求类型 一致。字符型要求种别一致。
2、复型常数形式:(a,b)。 3、类型转换函数:
INT(X), INT(X,KIND), REAL(X), REAL(X,KIND), CMPLX(X,Y), CMPLX(X,Y,KIND)。 4、对数组所作的基本函数操作相当于对数组内每个元素施加该操作。 5、不同种别参数的数据运算时,结果取决精度或允许值范围较大的 那个种别参数。
对字符型常数,用前缀法,即把种别参数放在前,再加下划线,再跟字符常数。如 5_'a bc'。
6、属性 a.常数名属性。如:INTEGER,PARAMETER::Y=12 说明 Y 为常数,在 程序中不能改变其值。 b.数组属性。如:INTEGER(KIND=2),DIMENSION(-3:10)::X 说明 X 是数组(-3:10)。 c.意图属性。只用于子程序中。如: INTEGER.INTENT(IN)::X 说明 X 用来传入。 INTEGER.INTENT(OUT)::X 说明 X 用来传出。 INTEGER.INTENT(INOUT)::X 说明 X 先传入值,再传出。 d.没有属性的只是基本变量。
2、写语句 WRITE (部件号,格式说明)输出表 PRINT 格式说明,输出表 PRINT *,输出表 WRITE (说明符 1,说明符 2,...,说明符 n)输出表
3、表控格式 a.输入复数时要加括号。 b.当需要输入几个连续无效值时,可输入 r*,r 是重复系数。若某 个数以后的所有数都无效,可用/表示。如: 2.1,2*,5.1 2.1,3.1/ c.输出时一般每个数占 16 列,靠右对齐,左补空格。
在形状描述中要指明上下界,可以有变量。如分配成功,STAT 赋零,出错则大于零。 c. 释放语句 DEALLOCATE(数组名,数组名,...[,STAT=变量名]) 第五章 过程
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全部内部函数见附录Ⅵ
2016/6/1 31
3.7 Fortran内部函数
2016/6/1 5
Fortran语言的特征
Fortran语言的最大特性是接近数学公式的自然描 述,在计算机里具有很高的执行效率。 易学,语法严谨。 可以直接对矩阵和复数进行运算。 自诞生以来广泛地应用于数值计算领域,积累了大 量高效而可靠的源程序。 很多专用的大型数值运算计算机针对Fortran做了 优化。 广泛地应用于并行计算和高性能计算领域。 Fortran 90,Fortran 95,Fortran 2003的相继推 出使Fortran语言具备了现代高级编程语言的一些 特性。
注:在程序中用到的变量都必须要有确定的值。
2016/6/1 23
3.6 变
量
3.6.2 变量名 变量名——标识一个变量所用的名字。 命名规则: • 变量名的第一个字符必须是字母; • 在第一个字符后可跟1~5个字母或数字。 例: x,m1,total,k123,…
2016/6/1 24
3.6 变
注意几点: ⑴函数自变量(参数)必须用括号括起来。 例:sinx+cosx → sin(x)+cos(x) ⑵函数自变量可以是常量、变量或表达式。 例: exp(3.0) sin (x+cos(x)) ⑶有些函数的类型是由自变量的类型确定的。 例:mod(8.0,3.0) →2.0 mod(8,3) →2 ⑷三角函数的角度单位是“弧度”而不是“度”。 ⑸函数名分为“通用名”和“专用名” 内部函数名一般用“通用名”。
Fortran第5章
注意:不能出现大数, Do n=1,100 否则将超出范围 如 A=A*N A=A*x/n s=s+x**n/A S=s+A 分母为大数,有时会死循环、 输出NaN等等难以预测情况。 enddo 第84页例5-6:N=30时结果为 Print*, s, exp(x) 负数 end
练习:求
s cos x 1 (1)
3
10 6 …… 错误的输入格式: 2,8,3,10,6,……
S=S+X
ENDDO PRINT'("S=",I6)',S END PROGRAM EXAM4
2.A=A*表达式
例:求
s e 1 x
x
重复:
x2 2!
x3 3!
x1 0 0 100!
s s
xn n!
分析通项A的求法:an=an-1*x/n 即A=A*X/n, n=1,2,……100
同构数
例5-26 (102页)编程,输出1000以内的所有同构数。 所谓同构数是指一个数位于它的平方数的最右端。如5的平 方数是25,25的平方数是625,,所以5,25都是同构数。 Do I=1,1000 判定I是否为同构数 enddo 同构数分析: (1)1000以内的所有同构数,分三类:可能 是一位数、两位数、三位数(三分支结构)。 (2)先求平方数,再取最右端的一位数、两位数、三 位数,后判断
有循环变量DO结构的一般形式 表示:do n=1,100,1 nn: Do n=1,100,1 a= 2*n s=s+a
a= 2*n
s=s+a enddo
enddo nn
有循环变量DO结构的一般形式 [DO结构名]: DO, 循环变量I=初值e1,终值e2,步长值e3 循环体 END DO [DO结构名]
(最新整理)FORTRAN90第五章过程
2021/7/26
26
例:编写程序计算一个角度的正切和余切值. Function triangle(x,f1,f2)result(tria_result) real x, tria_result tria_result=f1(x)/f2(x) End Function triangle
Program main
End function F
End 2021/7/26
15
§5.3 子例行程序
§5.3.1 外部子例行程序
子例行程序的定义: Subrotine 子例行程序名([虚参表]) …过程体… END [Subrotine [子例行程序名]]
如果没有参数,则定义格式中()可有可无。
子例行程序调用方法:
CALL 子例行程序名(实参表)
i1 k
在x=5.0,5.2,…k61.8处,计算对应的一次至五
次多项式
function Fn(n,x) real x;integer n fn = 0;Xi=1.0 Do I = 1,n S = sum(I) Xi = Xi*X Fn = fn+XI/s enddo end 2021/7/26
Function sum(k) Sum=0.0 Do j=1,k Sum=sum+j End do end
宿主程序的说明语句与数据定义,是全局数 据,内部过程中都可以使用,并且内部过程对 这些数据的赋值对宿主程序也有效。
当局部数据与全局数据同名时,局部数据屏 蔽全局数据。在内部过程中对变量的使用与 赋值都只与局部变量有关。
内部过程必须放在宿主程序的最后。宿主
程序只有一条END语句在内部过程的后
面。 2021/7/26
…函数体… END [Function [fun]]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.5.1 OPEN 语句
其中open-list 包含指定的I/O 单元代号、文 件名和关于如何存取文件的信息:
(I) UNIT= 指明与文件关联的I/O单元代号。
UNIT=int_expr (非负整数) (2) FILE= 指定要打开的文件名。
FILE=char_expr (文件名)
(3) STATUS= 指定要打开文件的状态。
(5) IOSTAT= 指定一个整数变量名,打开操作 的状态可以返回到这个变量中。 IOSTAT= int_var 如果OPEN 语句成功执行,返回给这个整数 变量的值为0 。如果OPEN 语句未执行成功, 与系统错误信息相关的正整数。 (6) (FRTRAN 2003 新特性) IOMSG=指定一 个字符变量名,如果发生错误,它就包含错误 信息。 IOMSG=chart_var char var 为字符变量。如果成功,其值不变,如 果失败,返回描述错误的信息。
5.4.7 在READ 语句中如何使用格式 1.如果READ 语句在格式结束前用完了所有变 量,则格式在读取的最后一个变量后就停止。 下一个READ 语句将从一个新的输入行开始。
输入
结果:i=1, j=2, k=6, l=7, m=8
2. 如果扫描在READ 语句用完变量之前到达了 格式的尾部,那么程序就将丢弃当前的输入缓 冲区。它重新获取一个新的输入缓冲区,并在 格式中没有以重复次数开头的括号的最左边重 新开始。
5.4 格式化READ 语写
输入缓冲区的前6列被跳过,然后第7 列到第 12 列的内容视为整数,结果数值保存在变量 increment 中。 READ语句相关的格式所使用的大多数格式 描述符与WRITE 语句相同。
5.4.1 整数输入-----I 描述符
r Iw
5.4.2 实数输入-----F 描述符
5.1 格式和格式化 WRITE 语句
格式可用来指定程序输出打印变量的确切方 式。通常格式可以指定变量在纸上的水平和 垂直位置,也可指定要输出打印的有效位数。
WRITE (*, 100 ) i, resu1t 100 FORMAT (' The resu1t for iteration ', I3, 'is' , F7.3)
1X 描述符通常用在每个FORMAT 语句的开头, 确保控制字符包含一个空格。这种方式保证每 行的输出正好打印从该行的最左端开始。
5.3.8 格式描述符组的重复执行
5.3.9 改变输出行----斜线(/) 描述符 换行,在超过一个输出行上显示输出值。
5.3.10 如何在WRITE 语句中使用格式 (1)以从左至右的顺序扫描格式
E 格式描述符域的宽度必须满足
wd 7 0.ddddE ee
一个字符用于表示尾数的符号,两个字符用于表示 零和小数点,一个字符用于表示E ,一个字符用于 表示指数的符号,两个字符用于表示指数。
在E 格式描述符中,小数点前面的零是可选的。它是 否存在,不同的编译器厂商有不同的处理。一些编译 器显示前面的零,而另一些可能不显示。
(5) 如果在WRITE 语句用完数值之前,扫描到 了格式的结尾处,程序就在格式中没有以重复 次数开头的括号的最左边重新开始。
例题5-1 生成一个表格。
例题5-2 电容器的电荷
每库仑的电荷有 6.241461xl0 18 个电子。 (1)对于己知的电容和电压,计算金属板上的电荷量,金属板上电 子的个数,以及存储在电场中的能量。 (2) 对于己知的电荷和电压,计算电容器的电容,金属板上电子个 数和存储在电场中的能量。
(2) 如果一个格式描述符带有一个与之相关的重 复次数,那么在使用下一个描述符之前,该描 述符将按在重复次数中指定的次数使用。
(3)如果包含在括号内的一组格式描述符带有与 之相关的重复次数,那么在使用下一个描述符 之前,整个组将按重复次数中指定的次数使用。
(4)如果WRITE 语句在格式结束前用完了所有变 量,输出停在第一个没有对应变量的格式描述符 处。
Fortran95/2003程序设计
第五章 基本IO
本章学习目标:
•了解如何使用格式化的WRITE 语句建立整齐的格式化 程序输出结果
• 学习如何使用I, F, E, ES, L, A, X, T 和/格式描述符 • 了解如何使用格式化READ语句将数据读入到程序中 • 了解如何打开、读取、写、浏览和关闭文件
5.3.6 字符输出-----A 描述符
rA 或 rAw
如果域宽w比字符变量的长度长,变量就在域内右对 齐打印输出。如果域宽比字符变量的长度短,那么在 该域内就只有变量的前w 个字符能打印输出。
5.3.7 水平定位----X 和T 描述符
nX
插入n个空格
跳到第c列
Tc
在使用T 描述符时,要注意确保打印域不会交叠.
变量i 的格 式描述符
result 的格 式描述符
与用自由格式在同一行打印输出结果相比, 结果输出如下 The result for iteration 21 is 3.142 (格式化)
The result for iteration 21 is 3.141593 (自由格式) 除了FORMAT 语句,还可以在字符常量或变 量中指定格式,例如:
STATUS= char_expr
('OLD' , 'NEW' , ‘REPLACE' , 'SCRATCH' , 'UNKNOWN' ) (4) ACTION=指定一个文件是否以只读、只 写或读写方式打开。 ACTION= char_expr (‘READ’ , ‘WRITE’ , ‘READWRITE’, 缺省为读 写方式)
IOSTAT= int_var
如果成功,就返回0 。如果由于文件或格式错 误, READ 语句执行失败,就给该变量返回一 个与系统错误信息对应的正数。如果由于已经 到达输入数据文件的尾部而使语句执行失败, 就给该变量返回一个负数。 如果Fortran 2003 READ 语句包含IOMSG=子 句,而且返回的I/O 收态为非零值,那么 IOMSG=子句返回的字符串就可以用语句解释 发生的错误。
5.3 格式描述符 有许多不同的格式描述符。它们分为四个基本 的类别: 1. 描述文本行垂直位置的格式描述符。 2. 描述行中数据水平位置的格式描述符。 3. 描述数值输出格式的格式描述符。 4. 控制格式中一部分的重复的格式描述符。
5.3.1 整数输出-----I 描述符
rIw 或rIw.m
整数数值在其域内为右对齐,整数的打印会 使整数的最后一位占据域的最右边的一列。 如果整数过大,不能放入到它要打印的域, 那么该域就用星号填充。例如:
临时文件是由程序建立的临时文件,当文件被关闭 或当程序终止运行时,它将被自动删除。
5.5.2 CLOSE语句
CLOSE 语句关闭一个文件并释放与之关联的 I/O单元代号。
CLOSE (close list)
5.5.3 磁盘文件的READ (读)和WRITE (写)
自由格式读取
特定格式读取
5.5.4 READ 语句中的IOSTAT=和IOMSG=
输入 结果:i=1, j=2, k=3, l=7, m=8
5.5 文件及文件处理初步
一般I/O单元5 预定为程序的标准输入设备(即, 如果在终端上运行就是键盘,如果以批处理方式 运行就为输入批处理文件)。与此相似, I/O单元 6 通常预定为程序的标准输出设备(如果在终端 上运行就为显示器,如果以批处理方式运行就为 行式打印机)。更通用的是用*表示。
5.3.4 真正的科学记数-----ES 描述符 E 格式描述符的输出与常规的科学记数不能正 确匹配。常规的科学表示法将一个数表示为一 个1.0~ 10.0 之间的数乘以10 的幂。
rESw.d
wd 7 a.ddddE ee
5.3.5 逻辑输出------L 描述符
rLw
输出为T 或F ,在输出域内在右对齐。
5.4.5 水平定位------X 和T 描述符
读取输入缓冲区的第1 个~第6 个字符,一次 读为整数,一次读为字符串。 5.4.6 垂直定位---斜线(/)描述符 使READ 语句放弃当前输入缓冲区中的内容, 然后从新的输入缓冲区的头部开始处理
输入
结果:a=1.0, b=2.0, c=7.0, b=8.0
5.3.2 实数输出-----F 描述符
rFw.d
实数数值在其域内以右对齐方式打印输出。
pl =3.141593
F7.3格式描述: bb3.142
F10.8 格式描述:3.14159300
F4.3格式描述: ****
5.3.3 实数输出-----E 描述符
rEw.d
0.4096x104 0.4096E+04
rFw.d
输入
结果: a=b=c=1.5
输入
结果: a=0.0015, b=0.0150, c=1.5000
在实数输入域中使用不带小数点的数值非常混乱。它是从 Fortran 早先的版本遗留下来的产物,永远不要使用它。
5.4.4 字符输入-----A 描述符
输入
结果:string_1=ABCDEFGHIJ=string_2 String_3=FGHIJ, string_4=ABCDEFGHIJbbbbb StrБайду номын сангаасng_5=ABCDEFGHIJKLMNO
例题5-3 从文件中读取数据 5.5.5 文件定位
BACKSPACE 语句,每次调用它都可以回 退一个记录;REWIND语句可以在文件头 重新开始文件。
BACKSPACE (UNIT=unit)
REWIND (UNIT=unit)
例题5-4 使用文件定位命令