第6章fortran的数据结构
fortran教程
fortran教程Fortran是一种编程语言,用于科学和工程计算。
它具有高性能和可靠性,适用于大规模的数值计算和数据处理。
Fortran的基本语法是由一系列语句组成的程序。
每个语句都以一个数字标签开头,可用于控制程序的执行顺序。
以下是Fortran的一些基本语法和常用功能。
1. 变量和数据类型Fortran支持多种数据类型,包括整数(Integer)、实数(Real)和字符(Character)。
变量声明可以在程序的开头部分完成,例如:```fortranINTEGER :: iREAL :: xCHARACTER(len=10) :: name```注意,每个变量声明必须以两个冒号(::)开头。
2. 数学运算Fortran提供了一系列的数学运算符,用于执行基本的算术和逻辑运算,例如加法(+)、减法(-)、乘法(*)、除法(/)和求余(MOD)。
运算符的使用与其他编程语言相似。
3. 控制结构Fortran支持常用的控制结构,例如条件语句(IF-ELSE)和循环语句(DO LOOP)。
条件语句可以根据条件来执行不同的代码块,例如:```fortranIF (i > 0) THENPRINT*, 'i is positive'ELSEPRINT*, 'i is non-positive'END IF```循环语句可以根据条件重复执行一部分代码,例如:```fortranDO i = 1, 10PRINT*, iEND DO```上述代码将打印出1到10的数字。
4. 数组和矩阵运算Fortran支持多维数组和矩阵运算。
声明数组时可以指定维度和元素类型,例如:```fortranREAL, DIMENSION(3,3) :: matrix```然后,可以使用多个索引访问数组元素,例如:```fortranmatrix(1,2) = 3.14```这将给数组中的第1行第2列的元素赋值为3.14。
第六讲 Fortran数据结构及输入、输出
将参数转换为复数型。 将参数转换为复数型。
将参数转换为复数型。结
REAL(x) REAL(x) IMAG(x) IMAG(x) CONJG(x) CONJG(x)
求x的实部。 的实部。 同AIMAG(x)。 AIMAG(x)。 (x) 求x的共轭复数。 的共轭复数。
AIMAG(x) 的虚部。 AIMAG(x) 求x的虚部。
字符按先后排列成某种次序, 字符按先后排列成某种次序,每个字符在排序中有确定的位 character(len= 6) first 称为排序号 有了排序号, 排序号。 置,称为排序号。有了排序号,字符之间就可以比较大小及 character(len=10) second 相等与否,组成关系表达式。 相等与否,组成关系表达式。
6.1 字符型数据/ A(11:) 11: A(字符型数据/子字符串 -> 11
Fortran数据结构及输入 数据结构及输入、 第六讲 Fortran数据结构及输入、输出
字符型数据
字符运算符: 字符运算符:// 子字符串 运算符 内部函数 例子
program ex060202 ,系统都把本机上可以使用的各种 关系表达式:对每种机器, 关系表达式:对每种机器
end
Fortran数据结构及输入 数据结构及输入、 第六讲 Fortran数据结构及输入、输出
字符型数据
函数名 子字符串 运算符 内部函数 说明
LGE(s1,s 按 ASCII码值判定字符串 。 LGE(s1,s2 * ASCII码 码值判定字符串s ASCII 码值判定字符串 转换为对应字符。 ACHAR(n)2)将ASCII码n转换为对应字符s1 大于等于 字符串s 字符串s2。 ADJUSTL(string)* 将字符串string 左对齐, string左对齐 ADJUSTL(string)* 将字符串 string 左对齐 , 即去 掉左端空格* 按 ASCII 码值判定字符串 s1 大于字符 LGT(s1,s2 ASCII码值判定字符串 码值判定字符串s LGT(s1,s2) 串s2。 ADJUSTR(string)* 将字符串string 右对齐, string右对齐 ADJUSTR(string)* 将字符串 string 右对齐 , 即去 掉右端空格。string:CH(*),结果类型同string 结果类型同string 掉右端空格。string:CH(*),结果类型同1 小于等于 LLE(s1,s2 ASCII码值判定字符串 码值判定字符串s LLE(s1,s2)* 按 ASCII 码值判定字符串 s 字符串s ASCII码 转换为对应字符。 字符串 CHAR(n)* s2。 CHAR(n)* 将ASCII码n转换为对应字符。 IACHAR(c)* 将字符c转换为对应的ASCII码。 ASCII码 IACHAR(c)** 将字符c转换为对应的ASCII小于字符 LLT(s1,s2 ASCII码值判定字符串 码值判定字符串s LLT(s1,s2) 按 ASCII 码值判定字符串 s1 串s2。 ICHAR(c)* 将字符c转换为对应的ASCII ASCII码 ICHAR(c)* 将字符c转换为对应的ASCII码。
fortran常用算法的程序设计举例
4
2. 梯形法
$ 10
第i个小梯形面积 :
100 f (a ih ) f (a (i 1)h) $ si h 2 200
1 read(*,*) a,b,n 求 : sin xdx 0 x=a h=(b-a)/n s=0.0 do 10 i=1,n si=(sin(x+(i-1)*h)+ sin(x+i*h))*h/2.0 s=s+si continue write(*,100) a,b,n write(*,200) s format(1x,'a=',f10.3,3x, 'b=',f10.3,3x,'n=',i4) format(1x,'s=',f15.8) end
ca 其中h a 2 h { f (a) f (b) 4[ f (a h) f (a 3h)] 2 f (a 2h)} 3
b
f ( x)dx s1 s2
7
如果将(a,b)分成四个小区间:
h a f ( x)dx 3 { f (a) f (b) 4[ f (a h) f (a 3h) f (a 5h) f (a 7h)] 2[ f (a 2h) f (a 4h) f (a 6h)} ba 其中h 2 4
17
五、计算机模拟
计算机模拟(Computer Simulation),又称 “仿真”:用计算机模仿实物系统进行测试,从 测试的结果获得期望的资料。
根据模拟对象的不同特点,可分为: 确定性模拟(Deterministic Mode); 随机性模拟(Stochastic Mode) 。
18
FORTRAN简明教程
《FORTRAN》程序设计原理1、程序结构及书写规则一个程序由不同的程序单元组成,每一程序单元均以end结束,一般情况下,主程序的结构为:Program程序单元名说明语句可执行语句……STOPEND子程序的结构为:SUBROUTINE 程序单元名(哑元名表)说明语句可执行语句………RETURNEND以及FUNCTION 程序单元名(哑元名表)说明语句可执行语句………RETURNEND程序单元名由字母和数字组成,各程序单元中的变量独立编译,同名变量相互不影响。
1-5列为行号,可以是1-99999之间的任意数,6列为续行号,可以是任何字符,正文从第8列写到72列。
当第1列为字符C时,此行为注释行。
2、说明语句说明语句分为二类,一类必须放在程序单元的开头,另一类可以放在任何地方。
2.1 变量说明语句这一类说明语句,必须放在程序单元的开头,以表明变量的性质。
若不加以说明,以I-N开头的变量均为整型,其余变量均为实型,称之为I-N规则。
同一变量经下列显式说明语句说明后,I-N规则失效,没有经显式说明的变量,I-N规则仍然有效。
PARAMETER(变量名=const,……)REAL 变量名表INTEGER变量名表CHARACTER变量名表LOGICAL变量名表COMPLEX 变量名表IMPLICIT 变量基本类型(字符名表)DOUBLE PRECISION变量名表DIMENSION变量名表COMMON 变量名表COMMON /公共区名/ 变量名表DATA 变量名表/数值名表/一个变量可由多个语句说明,其中类型说明语句的级别最高,例如:Implicit real (a-c,e) 由a,b,c,e开头的变量均为实型Dimension ax(100) 定义一个100个元系的实型数组Integer bx, ax 重新定义bx, ax为整型变量2.2 格式说明语句这一类语句可以放在程序单元内的任何地方,常用的有:FORMAT(nFw.d, nX, nAw, nIw, ‘…….’, \ ,nEw.d)这里,n是重复使用该格式码的次数,F表示实型,X表示空格,A表示字符,I表示整型,E科学记数法,w是输入/出的宽度,d是小数位数,引号‘’内的内容原样输出,斜线‘\’表示输入/出时换行。
6 Fortran 程序设计6-文件
6 Fortran 程序设计6-文件6 Fortran 程序设计 6 文件在 Fortran 程序设计中,文件的处理是一个重要且实用的部分。
文件可以帮助我们存储和读取大量的数据,使得程序能够处理复杂和大规模的信息。
首先,让我们来理解一下什么是文件。
简单来说,文件就是在计算机存储设备上存储的数据集合。
在 Fortran 中,文件可以是文本文件,也可以是二进制文件。
文本文件中的数据是以人类可读的字符形式存储的,比如数字、字母和符号。
二进制文件则是以计算机内部的二进制形式存储数据,通常更节省空间并且读取和写入速度更快,但对于人类来说不太直观。
那么,如何在 Fortran 中打开和关闭文件呢?这就需要用到一些特定的语句。
我们使用 OPEN 语句来打开一个文件,并指定一些相关的参数,比如文件的名称、访问模式(读、写、读写等)、文件的格式等。
而当我们完成对文件的操作后,使用 CLOSE 语句来关闭文件,以释放相关的资源并确保数据的正确保存。
接下来,谈谈文件的读取操作。
对于文本文件,我们可以使用READ 语句逐行或者按照特定的格式读取数据。
在读取数据时,需要注意数据的类型和格式与我们程序中的变量相匹配,否则可能会导致读取错误。
而对于二进制文件的读取,通常需要使用专门的二进制读取函数,并要准确地了解文件中数据的存储结构。
写入文件也是常见的操作。
同样,对于文本文件,可以使用WRITE 语句将数据以文本形式写入。
在写入时,可以控制数据的格式和输出的位置。
二进制文件的写入则需要使用相应的二进制写入函数,并且要确保数据的正确转换和存储。
在处理文件时,还需要注意一些错误情况。
比如,文件可能不存在、无法打开、读写权限不足等。
Fortran 提供了一些机制来检测和处理这些错误,通过检查相关的状态变量或者使用特定的错误处理语句,我们可以让程序在遇到问题时能够做出适当的反应,而不是直接崩溃。
另外,文件的访问模式也有多种选择。
只读模式(READONLY)允许我们只能从文件中读取数据;只写模式(WRITEONLY)则只能向文件中写入数据;读写模式(READWRITE)则既可以读也可以写。
6 Fortran 程序设计6-文件
6 Fortran 程序设计6-文件1. 文件及其作用在Fortran程序设计中,文件是用于存储和读取数据的一种重要途径。
文件可以是文本文件或二进制文件,可以包含各种类型的数据,如数字、字符或其他格式的数据。
文件的作用主要有以下几个方面:1. 存储数据:文件可以将数据永久地保存在磁盘上,便于以后的使用。
2. 读取数据:文件可以从磁盘上读取数据,供程序使用。
3. 数据传输:文件可以用于将数据从一个程序传输到另一个程序。
2. 文件的创建和打开在Fortran中,可以使用open语句来创建和打开文件。
open语句的语法如下:fortranopen(unit=unit_number, , status=status, action=action, iostat=iostat)其中,unit_number表示文件的逻辑单元号,表示文件的名称,status表示文件的状态(可选参数,默认为'unknown'),action表示文件的操作(可选参数,默认为'read'),iostat表示打开文件的状态码(可选参数,默认为0)。
举个例子,要创建一个名为data.txt的文本文件,并将其打开,可以使用以下代码:fortranopen(unit=10, file='data.txt', status='unknown',action='read', iostat=iostat)3. 文件的读取和写入通过已经打开的文件,我们可以对其进行读取或写入操作。
Fortran中常用的文件读取和写入语句有:read语句:用于从文件中读取数据fortranread(unit=unit_number, format=format) variable1,variable2,其中,unit_number表示文件的逻辑单元号,format表示读取数据的格式,variable1、variable2等表示要读取到的变量。
Fortran 第六讲
SUM (ARRAY,MASK) 计算ARRAY中MASK为真的元素的和。MASK为 可选的,如果不提供,计算数组中所有元素的和
TRANSPOSE(MATRIX) 将MATRIX转置后返回
更多的变换函数可以参考教材的附录A的数组函数 部分
这些函数都很有用,我们在以后的例程或习题会涉 及到一部分,请诸位养成查阅这一附录的习惯
说明: WHERE结构中的每个mask_expr是一个逻辑数组, 它应该确保和数组执行语句中处理的数组具有同 样的结构。 WHERE结构使得语句体1中的操作或操作集用于 mask_expr1为TRUE的所有数组元素上,语句体2 中则作用于mask_expr1为FALSE而mask_expr2为 TRUE的所有数组元素上,最后,语句体3作用于 mask_expr1和mask_expr2均为FALSE的所有数组 元素上
6.3 WHERE结构
6.1中,我们学习了如何操作部分数组 INTEGER :: a(10) a(3:5)=3 将a(3),a(4),a(5)赋值为3
如果我们要对满足某个条件的所有元素进行操作 WHERE (a<0) a=ABS(a) END WHERE 将a中所有小于0的元素取绝对值
一般形式 [name:] WHERE (mask_expr1) 数组操作语句体1 ELSEWHERE (mask_expr2) [name] 数组操作语句体2 ELSEWHERE [name] 数组操作语句体3 END WHERE [name]
动态分配一个二维数组 通过status返回分配状态 如果分配成功,status为0,否则不为0
总是使用STAT=status监视分配状态,以便准确知道 程序异常终止的原因
ALLOCATED()函数 ALLOCATED(array) 如果已经用ALLOCATE()给ARRAY分配了空间 那么函数返回值是.TRUE. 否则为.FALSE. 例: IF (ALLOCATED(array)) THEN array=1 ELSE WRITE(*,*) ‘Warning : Array not allocated!’ END IF
fortran程序设计.第6章
第六章 FORTRAN的数据结构 6.1 程序中的数据结构
程序处理的对象是数据。前几章用到的数据类型是 最简单的,称为基本类型数据。有时所处理的数据对象 比较复杂,数据之间存在某种内在联系,例如一个职工 的人事数据包括:职工名、职工号、性别、年龄、住址、 职务等。这些数据都属于同一个职工的数据。
6.2 双精度类型数据
实型提供7位有效数字,双精度型提供15~17位有 效数字。 双精度常数要用指数形式表示,将实数中表示指 数的字母E改成字母D即可。 例如:1.23456789表示为1.23456789D+0 0.123 表示为1.23D-01
[例6.1] 分数序列2/1,3/2,5/3,8/5,13/8,21/13…, 求出这个序列的前20项之和。Fibonacci数列:1、1、2、 3、5、8、13、21...。
6.5.3 字符型变量的赋值
用赋值语句对字符型变量赋值,例如: CHARACTER*5 NAME1, NAME2, NAME3 NAME1=’CHINA’ NAME2=’BEIJING’ NAME3=’NEW’ 也可以通过READ语句从键盘读入字符常量给字符变量, 注意用表控格式输入字符串时要用撇号将字符串括起来,例如: READ *, NAME1, NAME2, NAME3
在程序中要对复型变量作出说明。但只在本程序单位中有效。说明语 句可用COMPLEX语句或IMPLICIT语句。例如: COMPLEX C, D IMPLICIT COMPLEX (X-Z) 复型常数是用两个实数表示,第一个实数表示实部,第二个实数表示 虚部。例如: 以(1.0, 2.5)表示复数1+2.5i,以(0.0, -5.4)表示复数-5.4i。 (1.0, 2.5) 1+2.5i (0.0, -5.4) -5.4i 已定义为复型变量后可以用赋值语句将复型常数赋给复型变量。 C=(3.0, 6.3) D=(8.76E+5, -67.8E-3) 如果实部和虚部都不是常数,而是表达式,则应用CMPLX函数将实部 和虚部组成复型数据再赋给复型变量,例如: C=CMPLX(3.0*A, 6.0+B) 如果CMPLX函数只有一个自变量,则它代表实部,如CMPLX(3.0)的 作用是将实数3.0转成复数(3.0, 0.0)。
Fortran数据结构及输入输出
CMPLX(x[,y][,kind]) 将参数转换为复数型。 结果:C(kind)。
DCMPLX(x[,y]) 果:C(8)。 6.1 复数型数据运算及内部函数
将参数转换为复数型。结
REAL(x) 求x的实部。
AIMAG(x) 求x的虚部。
IMAG(x) 同AIMAG(x)。
CONJG(x) 求x的共轭复数。
定义 声明1 声明2 声明3 说明
6.2 数组
数组是类型相同的组变量的有序集合。 任何一组类型相同且有序的数据都可使用数组存储。 如:保存30名学生成绩数据的一组变量:s1,s2,s3,…,s30
REAL s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15 这组变量可用数组s取代,数组元素s(1),s(2),…,s(15),分别取代 s1,s2,…,s15。
REAL s(15) 数组分静态数组和动态数组
静6.2 数态组/定数义 组:在编译时分配存储单元,运行时数组大小不能改变。 INTEGER num(5) !在编译时分配5个数组元素存储单元(20字节) 动态数组:在程序运行时分配存储单元,运行时数组大小可改变。 INTEGER,ALLOCATABLE :: num(:) !在编译时不分配存储单元 ALLOCATE(num(5)) !在运行时分配5个数组元素存储单元(20字节) 数组大小为数组元素个数。 数组声明有3种方式:类型声明语句、DIMENSION语句、DIMENSION属性
第六讲 Fortran数据结构及输入、输出
1. Fortran 数据结构 2. 数组 3. 数据有格式输入输出概述 4. 格式说明与格式编辑符 5. 整数有格式输入输出 6. 实数有格式输入输出 7. 复数有格式输入输出 8. 字符串有格式输入输出 9. 逻辑值有格式输入输出 10.二、八、十六进制数据有格式输入输出 11.任意类型数据有格式输入输出 12.不可重复编辑符 13.纵向走纸控制 14.有格式输入输出应用举例 15.作业
fortran知识点总结
fortran知识点总结一、语法结构Fortran语言的语法结构遵循一套严格的规则。
下面是一些常见的语法结构:1. 程序单元:Fortran程序由一个或多个程序单元组成。
每个程序单元由一个或多个声明和执行语句组成。
2. 注释:在Fortran中,注释可以用来提高代码的可读性。
注释以感叹号(!)开头,直到行末为止。
3. 标识符:Fortran中的标识符由字母、数字和下划线组成,且区分大小写。
标识符用于表示变量、函数、子程序等。
4. 变量声明:在Fortran中,变量声明使用关键字“REAL”、“INTEGER”、“LOGICAL”等来指定变量的数据类型。
例如,REAL :: x 表示声明了一个实数类型的变量x。
5. 程序控制结构:Fortran提供了多种控制结构,包括顺序结构、条件结构和循环结构。
这些结构提供了程序的流程控制和逻辑控制。
6. 函数和子程序:Fortran支持函数和子程序的定义和调用。
函数和子程序可以帮助程序员组织和重用代码。
7. 模块和接口:Fortran中的模块和接口提供了一种组织代码的方式。
模块可以包含多个子程序和全局变量,接口可以用来定义子程序的接口。
二、数据类型在Fortran中,数据类型用于表示数据的类型和大小。
Fortran提供了多种数据类型,包括整数、实数、逻辑值、字符、复数等。
下面是一些常见的数据类型:1. 整数:整数类型用于表示整数值。
在Fortran中,整数类型包括“INTEGER”、“LOGICAL” 和“CHARACTER”类型。
2. 实数:实数类型用于表示实数值。
在Fortran中,实数类型包括“REAL”和“COMPLEX”类型。
REAL类型用于表示实数,COMPLEX类型用于表示复数。
3. 字符:字符类型用于表示字符值。
在Fortran中,字符类型使用CHARACTER关键字进行声明。
字符类型可以表示单个字符或者字符数组。
4. 数组:数组类型用于表示多个相同类型的数据。
fortran结构体用法
fortran结构体用法在Fortran中,结构体是一种用户自定义的数据类型,它可以包含多个不同的数据类型。
以下是Fortran结构体的基本用法:1. 结构体的定义:使用type关键字定义一个结构体,其语法如下:```Fortran`type type_name [attributes] :: var1 [attributes] :: var2 … [attributes] :: varnend type type_name````其中,type_name表示结构体名称,var1、var2…varn表示结构体中包含的变量名称,attributes表示可选的属性参数。
2. 结构体的声明:声明一个结构体变量时,需要使用type关键字和结构体名称,语法如下:```type(type_name) :: var_name```````fortrantype(Book) :: mybook```3. 结构体成员的访问:在定义一个结构体后,其中的字段(如title、author、id等)被称为该结构体的成员。
在Fortran中,通过%符号来访问一个结构体的成员。
例如,访问mybook的title成员可以使用以下语法:```fortranmybook%title```4. 结构体的使用:使用结构体的关键是它可以组合多个不同的变量类型,形成一个新的复合类型,以方便在程序中进行操作。
由于Fortran的强类型特性,结构体定义的变量和函数必须使用结构体的名称进行访问。
5. 结构体的初始化:可以使用赋值语句或构造语句对结构体进行初始化。
例如:mybook = Book("title", "author", "id")```6. 结构体的输入输出:可以使用输入输出语句对结构体进行输入和输出操作。
例如:```fortranread(,) mybook%title, mybook%author, mybook%idwrite(,) "Title:", mybook%title, "Author:", mybook%author, "ID:", mybook%id```以上是Fortran中结构体的基本用法,可以通过具体的示例代码进行进一步的学习和掌握。
第五讲Fortran中的数据6(4 2)资料
§2
一、字符型数据
(1)字符型常量
非数值型数据
Fortran的非数值型数据类型主要是字符型和逻辑型2种。
1、又叫字符串常量,是用单引或双引号括起来的、计算机 系统允许使用的任何字符串,比如 : “zhang” 、 ´ZHang´ 、 “北京”、´How□are□you’、’a+b´等。注意: ※字母区分大小写; ※空格是一个字符; ※用于括字符串的双(单)引号不是字符。
类别参数 1 2 4
2018/10/26
字节数 1 2 4
取值范围 -128~127 -32,768~32,767 -2,147,483,648~2,147,483,647
3
注:FORTRAN也可以使用二进制(binary)、八进制(octal)和 十六进制(hex)整型常量,但它只能用于DATA语句中。而且: 1、二进制常量的形式是以字母B开头,后跟用一对单引或双引 号括起来的数字串,例如,B‘10101101’、B“1011101等。 2 、八进制常量的形式是以字母 O 开头,后跟用一对撇号或双 引号括起来的数字串,例如,O‘453’、O“376”等。 3 、十六进制常量的形式是以字母 Z 开头,后跟用一对撇号或 双引号括起来的数字串,例如,Z'FFA9'、 Z"9B45" 。
②用字符变量作虚参时:在子程序中,用字符型变量作虚参 时可不指明其具体长度,即用 * 定义长度。这时它可以与任 意长度的字符型实参相结合,便于提高子程序的通用性。 2、子字符串: 指字符变量的一部分,记为:字符变量(m :n )表示字符变 量中从第m个字符到第n个字符的部分,比如: com(3:7)—— 字符变量com中从第3个字符到第7个字符的子字符串。 注意:
Fortran数组详细介绍
Fortran数组详细介绍Fortran是一种编程语言,用于科学计算和数值计算。
它是一种古老的语言,最初于1950年代开发,但到现在仍然广泛使用。
Fortran最初是为处理数值计算而设计的,因此它具有许多特性和功能,使其成为处理大规模数值计算的理想选择。
在Fortran中,数组是一种重要的数据结构。
它们允许存储和处理大量相同类型的数据。
数组在Fortran中的声明方式非常简单,如下所示:```real :: myArray(10)```上面的代码声明了一个名为myArray的实数数组,它可以存储10个元素。
在Fortran中,数组的下标从1开始,因此myArray(1)到myArray(10)表示数组的不同元素。
数组在Fortran中的使用非常灵活。
可以对整个数组执行操作,也可以对数组的部分元素执行操作。
例如,可以使用循环结构来遍历数组的所有元素,并对它们进行计算或处理。
此外,Fortran还具有一些特殊的数组功能,例如数组切片和数组广播。
数组切片允许从一个数组中选择一部分元素,而不需要复制整个数组。
数组广播允许在不同形状的数组之间执行操作,Fortran会自动扩展较小的数组,使其与较大的数组具有相同的形状。
总之,Fortran数组是一种强大的数据结构,用于存储和处理大规模数值计算。
它们具有灵活的使用方式,高性能和许多内置功能。
Fortran数组的使用可以简化复杂的计算任务,并提高计算效率。
因此,对于进行科学计算和数值计算的应用程序,使用Fortran数组是一个明智的选择。
fortran 简明教程
fortran 简明教程Fortran是世界上最早的高级程序设计语言之一,广泛应用于科学计算、工程和数值分析等领域。
以下是Fortran的简明教程:1. 程序结构:一个Fortran程序由不同的程序单元组成,包括主程序、子程序和模块等。
每个程序单元都以END结束。
主程序是程序的入口点,可以包含变量声明、执行语句和控制语句等。
子程序可以包含函数和子例程,用于执行特定的任务。
模块用于提供程序中的公共代码和数据。
2. 变量声明:在Fortran中,变量必须先声明后使用。
变量类型包括整数型、实数型、字符型等。
例如,声明一个整数型变量可以这样写:INTEGER :: x3. 执行语句:执行语句用于控制程序的流程和执行顺序。
Fortran提供了多种控制语句,如IF语句、DO循环、WHILE循环等。
例如,使用IF语句进行条件判断:IF (x > 0) THEN y = x x ELSE y = -x x END IF4. 输入输出:Fortran提供了基本的输入输出功能。
可以使用READ语句从标准输入读取数据,使用WRITE语句将数据输出到标准输出。
例如,读取一个实数并输出到屏幕:READ(,) x WRITE(,) x5. 数组和矩阵:Fortran支持一维和多维数组,以及矩阵运算。
例如,声明一个二维实数数组并赋值:REAL :: A(3,3) A =RESHAPE((/1,2,3,4,5,6,7,8,9/), (/3,3/))6. 子程序和模块:子程序可以用于封装特定的功能或算法,并在主程序中调用。
模块可以包含公共的函数、子例程和变量等,用于提供可重用的代码和数据。
7. 调试和优化:Fortran提供了多种调试工具和技术,如断点、单步执行、变量监视等。
还可以使用性能分析工具来检查程序的性能瓶颈并进行优化。
以上是Fortran的简明教程,希望能帮助您快速入门Fortran编程。
fortran 顺序结构及基本语句
REAL ----- 一般默认取k=4
REAL(k)或REAL(KIND=k)或REAL*k DOUBLE PRECISION
---- k:4,8
----- 双精度,等价于REAL(8) !声明KIND值为8的3个双精度实型变量 !声明KIND值为4(缺省)的1个实型变量 !a初值为125.5,b初值为0.0
形式
CHARACTER ----- 一般默认取k=1 CHARACTER(k)或CHARACTER(LEN=k)或CHARACTER*k -- k:正整数
示例
CHARACTER(4)e,d,t CHARACTER f,g*5
!声明长度为4的3个字符型变量 !声明长度为1(缺省)和为5的2个字符型变量
操作数类型转换:允许混合运算,按最高级进行转换。
12+13+14.5(12+13)+14.525+14.525.0+14.539.5
长安大学地学信息技术研究所
09/10第一学期 16
字符表达式
字符表达式:字符操作数、字符操作符和圆括号组成。 字符操作数:字符、字符串、字符型变量或字符型函数 字符操作符:求子串(i:j),连接符// 圆括号: 示例
( ),用以改变操作数的操作顺序。
不同类型的操作数和操作符组成的表达式其操作方式、操
作规则及操作结果亦不相同。
四种类型表达式: 算术表达式: 字符表达式: 关系表达式: 逻辑表达式:
(number+12)*count
str1(i:j)//str2 (x+y)<1.25E-25
.NOT.(L1 .AND. L2 .OR. L3)
3.1 常量/实数/范围
Fortran基础教程
量
注意几点: ⑴变量名不区分大小写字母。 例:TOTAL,Total,total 代表同一变量 ⑵变量名中的空格不起作用。 例:abc,a bc,ab c,a b c 代表同一变量 ⑶变量名尽量做到“见名知义” AVER、SUM、Imax ⑷允许变量名与语言中具有特定含义的字(“保留字”) 同名。 例:sin,read,open,end,… 建议不要使用fortran中具有特定含义的字作变量名
2016/6/1 27
3.6 变
量
如: Integer abc,xyz real imax,k3 logical a1,kpz ⒊用implicit语句说明 即说明用某一字母开头的变量为指定的类型。 例: implicit integer(a,b),real(k) implicit integer(x-z)
2016/6/1 17
3.5 常 量
3.5.1 整型常量 包括正、负整数和零。 例:5,-13,0,… 说明: ①在(16位)微机中,整数的取值范围为: -215~215-1(-32768~32767) ②在(32位)微机中,整数的取值范围为: -231~231-1(-2147483648~2147483647 )
2016/6/1 6
3.2 简单的Fortran程序分析
例1:求一元二次方程x2+3x-5.6=0的根, 并打印结果。 • 利用公式:
x1, 2 b b 4ac 2a
2
• (这里,a=1,b=3,c=-5.6)
2016/6/1 7
3.2 简单的Fortran程序分析
编程如下:
x1, 2
注:在程序中用到的变量都必须要有确定的值。
2016/6/1 23
3.6 变
Fortran结构体课件
结构体类型可以嵌套定义,即结构体类型的成员也可 以是另一个结构体类型的变量。P177 例: TYPE STUDENTRECORD CHARACTER (15) NAME INTEGER NUM LOGICAL SEX CHARACTER (30) ADDRESS END TYPE
TYPE STUDENTTOGETHER TYPE (STUDENTRECORD):: STUDENT REAL MATH REAL ENGLISH REAL CHINESE END TYPE
program clerkrecord implicit none integer :: k, i type clerk ! 定义结构体类型 integer num character(15) name real sal end type clerk type (clerk), dimension(150):: cl ! 定义结构体数组 k=0 Print *, "输入职工号num: " do i=1, 150 read *, cl(i).num end do
P177 例: TYPE STUDENT CHARACTER (15) NAME INTEGER NUM LOGICAL SEX CHARACTER (30) ADDRESS END TYPE
9.2 结构体变量的定义与引用 一、结构体类型变量的定义
格式: TYPE(派生类型名):: 结构体变量名 例:TYPE (STUDENT):: S1,S2
fortran结构体结构体fortran结构体定义fortran95程序设计c结构体结构体初始化结构体指针结构体数组c语言结构体结构体赋值
第九章
9.1 派生类数据类型
结构体
格式:TYPE[,ACCESS[::] ]派生类型名字 分量表 END TYPE [派生类名] ACCESS:访问方式,PRIVATE(私有的) PUBLIC(公共的) 默认方式为 PUBLIC 。 分量表:该类型中的成员项,每项要有类型说明。
FORTRAN语言第6章(共8章)
F编辑符应用实例 A=2.0 B=3.14 S=A*B WRITE(*,10)A,B,S 10 FORMAT(1x,F6.2,F6.2,F6.2) Δ Δ 2.00 Δ Δ 3.14 Δ Δ 6.28 END
d大于实际需要输出的实数小数部分的位数
F编辑符应用实例 A=2.0 B=3.145 S=A*B WRITE(*,10)A,B,S 10 FORMAT(1x,F6.2,F6.2,F6.2) Δ Δ 2.00 Δ Δ 3.15 Δ Δ 6.29 END
第六讲
格式输入输出
输入输出的三种不同的格式: 1.表控格式的输入输出 按照系统隐含的标准格式在默认的I/O设备上进行I/O操作。
按照用户要求的格式在指定的I/O设备上进行数据I/O操作。 2.有格式的输入输出
3. 不管数据的具体类型,一律以二进制的形式进行I/O操作 。 无格式的输入输出
要素:
1.在什么外部设备上输入或输出
A=Δ Δ 2.00 B= Δ Δ3.14 S= Δ Δ 6.28
记录1
记录2 记录3
一个WRITE语句输出打印了三行信 息,这是由于FORMAT语句中有两 处斜杠,使之产生三个输出记录 (注意,斜杠之后也有一个“1X”, 使第二个记录的第一个字符为“空 格”,作为纵向走纸符)。
3、斜杆描述符(/)
第二节
格式说明语句
格式说明语句(FORMAT语句)是非执行语句,它只是
给输入输出语句提供数据的格式描述。在程序运行
过程中,由输入输出语句根据格式说明语句提供的 数据格式描述,实现数据的格式控制。单独的格式 说明语句在程序中不起任何作用。
格式说明语句可以放在程序单位语句(PROGRAM语句 或子程序FUNCTION或SUBROUTINE语句)之后,END语 句之前的任何位置。
6Fortran的数据结构
6Fortran的数据结构第一章算法第二章计算机和计算机程序第三章Fortran语言程序设计初步第四章逻辑运算和选择结构第五章循环结构的实现第六章Fortran的数据结构第七章数据的输入、输出第八章常用算法的程序设计举例一、程序中的数据结构程序处理的对象是数据某班学生…学生1学生2学生30职工记录职工名职工号家庭住址性别年龄在计算机语言中,用数据类型来表示不同的数据结构。
高级语言一般有以下三类数据结构:基本类型、构造类型和指针类型。
基本类型(简单类型):整型、实型、双精度型、复型、逻辑型、字符型等。
构造类型:数组、记录、文件、集合等。
指针类型:链表、队、栈、树、图等。
FORTRAN77提供基本类型、构造类型。
算法+数据结构=程序二、双精度类型数据双精度数在计算机系统中以两倍于实型的字节数来存储,它提供的有效数字比实型数据多一倍以上。
双精度数也是近似的表示一个数,只是它的精度更高。
在同一个系统中,它与实型数据的表数范围相同。
双精度常数要以指数形式表示,并以d代替e。
1.1e2 1.1d20.00.0d01.0 1.0d0双精度型数据,要先定义后使用。
double precision amount, incomeimplicit double precision(r, x-z)real*8imax, voltreal(8)imax, voltreal (kind=8)imax, volt !Fortan 90 添加三、复型数据复型数据分实部虚部,使用8个字节来存放,必须先定义后使用。
complex pose, fluximplicit complex(r, x-z)复数的实部和虚部两部分也是用实数来保存,所以复数也可以分为单精度和双精度两种类型。
complex *8pose, flux !Fortran77 传统complex (8)pose, flux !Fortran77 传统complex (kind=8)pose, flux !Fortran90添加复型常数表示为:1+2.5i(1.0, 2.5)-5.4i(0.0, -5.4)7.8(7.8, 0.0)如果实部或虚部是表达式,则需通过cmplx函数转换成复型数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Z0 Z1 Z2
C:电容量 L: 电感量
I1
I2
电感感抗 jl0 1 电容容抗 jc0
电压频率(50) 2
j 1
32
33
c 求黄金分割(复型数据)
Complex a, b, c Real L Read(*,*) a, b c=a+0.618*(b-a) L=Abs(a-b) Write(*,*) 'l=', L Write(*,*) 'c=', c End
5
6.1 程序中的数据结构
3)指针类型:
用于构造各种形式的动态数据结构; 例如:链表、队列、堆栈、树结构等。 说明: FORTRAN 77提供了基本类型和构造类型 数据结构(但无指针类型)。对于动态 数据的处理是利用数组通过一定算法来 进行的。
6
6.1 程序中的数据结构
对不同的数据结构,在程序中要用
举例
Exa6_2.for Exa6_3.for Exa6_4.for
28
Complex x1, x2 2 Read(*,*) a, b, c ax bx c 0 d=b*b-4.0*a*c part1=-b/(2.0*a) 当D=0两 part2=sqrt(abs(d))/(2.0*a) 个相等 实根 IF(d.GE.0) then x1=Cmplx(part1+part2, 0.0) x2=Cmplx(part1-part2, 0.0) 当D>0 两个实 Else 根 x1=Cmplx(part1, part2) x2=Cmplx(part1, -part2) 当D<0 End if 两个复 根 Write(*,*) 'x1=', x1 Write(*,*) 'x2=', x2 End
41
6.4 四种数值型数据之间的转换和运算
6.4.2不同类型数据的赋值规则
不同类型数据的赋值规则(A= E)
E A
整型
直接赋值
先化成实型再赋 值 化成双精度型再 赋值
化成实数,加上虚 部0,成为复数再 赋值
实型
取整,舍去小 数再赋值
双精度型
去掉小数部分取 整,再赋值 舍掉多余的有效数 字,变成实型赋值
第 六 章
FORTRAN的数据结构
1
本章要点
6.1 6.2 6.3 6.4 程序中的数据结构 双精度类型数据 复型类型数据 四种数值型数据之间 的转换和运算 6.5 字符型数据
2
6.1 程序中的数据结构
“程序就是在数据的某些特定的表示方式和 结构的基础上,对抽象算法的具体描述”
程序处理的对象是数据,数据是有类型 的.数据类型可分为: 1) 基本类型; 2) 构造类型; 3) 指针类型.
14
6.2 双精度类型数据
双精度变量的类型说明:
Exa6_1.For
15
10
Double Precision a, b, c, s s=0.0 D0 a=1.0 D0 2 3 5 8 13 21 也可以 b=1.0 D0 , ,,, , , ... S=0;a=1 1 2 3 5 8 13 b=1 c=a + b C表示前 Do 10,I=1,20 分子和分母都是 分子和分母都是 两项之和 Fibonacci数列, s=s + c/b Fibonacci数列, 试求前20项之和 试求前20项之和 a=b b=c c=a + b Continue NEXT复数 Print *,'S=',s End 16
将a1为实部, a2为虚部
还是a
舍掉多余的有效数字 作为实数,虚部为0 将a1 a2舍掉多余的有 效数字,再分别作为 实部和虚部
还是a
实部是real(a1) 虚部是real(a2) 44
45
6.4 四种数值型数据之间的转换和运算
6.4.4不同类型数据的比较规则
在关系表达式中可以将两个不同类型 的数据进行比较: (2.0 , 3.0).EQ. N 这是一个复数和一个整型变量进行比 较是可以的,系统先要进行转换。
29
30
31
c
求等效电阻(复型数据) implicit real(L) I implicit complex(u,i,z) parameter (omega=3.141592) u=(220.0,0.0) write(*,*) 'enter r0,l0,r1,c1,r2,l2,c2' read(*,*) r0,l0,r1,c1,r2,l2,c2 z0=cmplx(r0,omega*l0) z1=cmplx(r1,-1.0/(omega*c1)) z2=cmplx(r2,omega*l2-1.0/(omega*c2)) z12=(z1*z2)/(z1+z2) z=z0+z12 I=U/Z 1)求总等效电阻; I1=I*Z12/Z1 2)求总电流; I2=I*Z12/Z2 3)求各分支电流 write(*,*) 'Z=',Z write(*,*) 'I=',I write(*,*) 'I1=',I1 write(*,*) 'I2=',I2 end
8
6.2 双精度类型数据
real a, c double precision b, d a=1E38 在VF4系统中:F.for和F.f90 c=1E-45 一样,这是它们的最大数。 b=1D300 d=1D-307 print *, a, c print *, b, d end
9
10
6.2 双精度类型数据
加 减 乘 除 运 算 的 规 则(C=A+B或C=A*B)
B A C
整型 整 实
实型 实 实
双精度型 双 双
复型 复 复
整型 实型
双精度型
双
复
双
复
双
复*
复*
复
37
复型
38
39
6.4 四种数值型数据之间的转换和运算
6.4.1不同类型数据之间运算的规则
乘 方 运 算 的 规 则(C=A * * B)
在科学计算中常常会遇到复数运算问题:
*数学中求解方程的根; *电工学中交流电路的计算; *自控系统中传递函数的计算; 在数学中的复数: 2+3.5i 或 15-5.6i 复型数据表示: (2.0, 3.5) (15.0, -5.6)
19
6.3 复型类型数据
Fortran77提供了复型数据结构,就
17
6.3 复型类型数据
复型常数又叫复数。具有数学复数的近
似值。在科学和工程计算中被广泛用到。 复数是实数的有序对,将两个实数中间 用逗号分隔,然后再放在一对括号中就 构成了一个复数。 复数以a±bi的形式来表示数值,复数中 的a、b称为实部和虚部。可为实数,也 可为整数。
18
6.3 复型类型数据
B A C
整型 整 实
实型 实 实
双精度型 双 双
复型 复 复
整型 实型
双精度型
双
复
双
复
双
复*
复*
复
40
复型
6.4 四种数值型数据之间的转换和运算
6.4.1不同类型数据之间运算的规则
说明: 上表中带星号表示Fortran77标准是 不允许的,但有的Fortran编译系统 作了放宽处理,允许双精度型与复型 数据之间进行运算,结果为复型。
字符型数据主要应用于非数 值领域,就是有效地对文字 信息进行处理。我们已经学 习了数值型数据类型、逻辑 型数据、下面学习Fortran77 提供的字符型数据结构。
46
6.4 四种数值型数据之间的转换和运算
6.4.4不同类型数据的比较规则 (A.关系.B)
比较规则(★表示只能用于.EQ.或.NE.)
B A 是否
整型 允许 允许
实型 允许 允许
双精度型 允许 允许
复型 ★ ★
整型 实型
双精度型
允许
★
允许
★
允许
不允许
不允许
★
47
复型
48
49
50
51
6.5 字符型数据
a1,a2化实,分别 成为实部和虚 部
实型
舍去a的 小 数,取整
双精度型
去掉a的小数部分取 整 舍掉多余的有效数字
复型
实部的小数部分 舍去,取整 取a的实部 取a的实部并转 换成双精度型
INT(a)
REAL(a) DBLE(a)
CMPLX(a)
Cmplx(a1,a2)
还是a
a化成双精度 型 将a为实部, 虚部为0
25
6.3 复型类型数据
如果CMPLX()函数中只有一个自变量, 那么它的结果是代表实部: CMPLX(3.0)转换成复数为: (3.0 , 0.0) 复型类型数据在内存的存储单元是: 根据计算机系统的不同而不同,如当4 个字节存储一个实数,则是用8个字节 存储一个复数.
26
27
6.3 复型类型数据
12
6.2 双精度类型数据
双精度数的表示:
在输出中的位数: 实数:1.000000E38 对于双精度数的输出: 1.000000000000000E300
保留小数点后15位 保留小数点后6位
13
6.2 双精度类型数据
双精度变量的类型说明:
DOUBLE PRECISION A, B, C 或 IMPLICIT DOUBLE PRECISION (A-C) 有的系统还可以使用: REAL * 8, A, B, C 在VF4中不可用 来代替DOUBLE PRECISION 的说明.其中 ‚REAL * 8‛表示‚8个字节的实数‛.