FORTRAN90第十章 指针与递归

合集下载

FORTRAN知识点总结

FORTRAN知识点总结

F O R T R A N第2章FORTRAN90基础知识:程序单元的概念:fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。

每个程序只有一个主程序单元。

各单元体的程序体形式上相同。

程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。

语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。

字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。

数据结构:整型INTEGER (34-2下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回;实型REAL ,小数形式和指数形式;复型COMPLEX (种别类型参数值取实部与虚部中较大者);字符型CHARACTER,由一对单撇号或双撇号之间的字符序列组成;逻辑型LOGICAL。

派生数据类型TYPE;数组INTEGER,DIMENSION(1,50)::A,可直接对数组元素进行运算如3*A,SQRT(A);字符子串,在字符串CHARACTER(LEN=80)::ROW中,ROW(1:3)就表示字符串ROW中第1到第3个元素组成的子串。

变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。

第3章基本语句:类型说明语句:类型说明(种别说明),属性说明::变量名表尽量避免把两个实数作相等或不相等的比较。

淘汰隐式说明IMPLICIT NONE种别说明:种别参数即对可移植数据精度和范围进行选择的机制KIND(X) 返回变元X的种别参数值SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。

FORTRAN90指导

FORTRAN90指导

FORTRAN90指导辅导资料――*****90 楚红*****90学习指导一、*****90基础知识1.源程序及其构成书写格式:主程序定义语句、结束语句注意:在没有程序名称的时候,程序开头的*****也不要出现。

如果使用了程序名称且在END语句中出现,则END语句中的*****不能省略。

语句行可以是0~132个字符;除赋值语句外,每个语句都要使用关键字开头。

如果希望一行中出现多个语句,语句一定要用分号隔开。

空格不能随便使用,关键字、变量和常量名以及操作符中的空格会使字符失去其原有的含义。

但它们之间一定要加空格。

注释行:以感叹号为标记,或“C”、“*”(*****90中不提倡此用法)续行标记:在句末尾添加续行符,如果将关键字分成两行,则下一行开头也要加续行标记。

如果续行符出现在注释语句中,则失去了续行的功能。

2.*****90字符集1 26个英文字母(大小写字母等价)2 10个阿拉伯数字3 下划线4 21个特殊字符:空格= + - * / (),. ‘ : !“ % ;? $5 其他字符(只可以出现在字符常量、字符串编辑描述符、注释和输入输出记录中)3.基本数据类型1 整型KIND值可以为1、2、4 类型说明关键字:*****KIND值决定数据的范围。

对于整数没有误差。

I=3/2=1;I=1/2=0 *****(KIND=4)::A ******4::A *****(4)::A2 实型KIND值可以为4(单精度7位有效数字)、8(双精度15~17位有效数字)类型说明关键字:REAL小数表示形式、指数表示形式(规格化的指数形式)错误表示形式:E34、.E34、0.14E2.3 8开3次方:8.0**(1.0/3.0)3 复型KIND值为4、8是实数的有序对,将两个实数中间用逗号分隔,然后放在一对括号中类型说明关键字:***** 复数的运算:+、―、*、/4 字符型KIND值为国家语言种类由一对单撇号或一对双撇号之间的字符序列组成。

fortran教程[技巧]

fortran教程[技巧]

前言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_90_复习

FORTRAN_90_复习

FORTRAN 90 基础知识第三章基本知识,如:字符集、名称、关键字、程序单元、书写格式、数据类型。

名称:①名称只能由英文字母、数字、下划线符“_”和美元符号“$”组成。

②名称第一个字符必须是英文字母。

③名称不能超过31个字符。

合法名称: Number,Max, PrOgRaM, FIND_IT, read, x, a3b7, china, total, x$y$z 。

非法名称:X-Y-Z, 8q, a.5, _wrong,U.S.A., DR.WANG,$abcd,r a t e 。

书写格式:自由格式,固定格式3个通用标志符:注释标志符“!”、语句分隔标志符“;”和续行标志符“&”。

数据类型第四章 内部数据类型常量和变量:语法描述; 精度(kind 值)和取值范围 整型常量:整数(10进制)。

实型常量:实数。

复型常量:复数。

字符型常量:字符串。

逻辑型常量:逻辑值,布尔值。

.true. .false.变量的申明。

表达式算术表达式:算术运算符的优先级和结合规则;操作数的类型转换FORTRAN 90 数据类型内部数据类型派生类型(记录类型)数组类型指针类型 公用区类型类型整数类型 实数类型 复数类型字符类型 逻辑类型运算符 含义 结合顺序 优先级 运算速度 说明 ( ) 最高 ** 乘方 左←右 高 慢 两个**之间不能出现空格 * / 乘 除 左→右 ↑ ↑ 数学符号× ÷为非法字符,用*和/代替 + - 加(二元加) 减(二元减) 左→右 ↓ ↓ + - 正(一元加) 负(一元减) 低 快不同优先级运算符,“先高后低”结合先乘方、后乘除、再加减,括号最优先相同优先级运算符,“从左向右”结合,如9-4+12/3*2**3 = ?乘方算符,“从右向左”结合,如2**3**2 = ?尽量多地使用( ),以使意义明确,避免出现歧义和产生错误转换规则“由低级向高级转换”①数据类型和KIND相同的两个算术操作数,计算时不转换,运算结果的类型和KIND与原数据相同。

Fortran90学习指导

Fortran90学习指导

FORTRAN90学习指导一、FORTRAN90基础知识1.源程序及其构成书写格式:主程序定义语句、结束语句注意:在没有程序名称的时候,程序开头的PROGRAM也不要出现。

如果使用了程序名称且在END语句中出现,则END语句中的PROGRAM不能省略。

语句行可以是0~132个字符;除赋值语句外,每个语句都要使用关键字开头。

如果希望一行中出现多个语句,语句一定要用分号隔开。

空格不能随便使用,关键字、变量和常量名以及操作符中的空格会使字符失去其原有的含义。

但它们之间一定要加空格。

注释行:以感叹号为标记,或“C”、“*”(FORTRAN90中不提倡此用法)续行标记:在句末尾添加续行符&,如果将关键字分成两行,则下一行开头也要加续行标记。

如果续行符出现在注释语句中,则失去了续行的功能。

2.FORTRAN90字符集126个英文字母(大小写字母等价)210个阿拉伯数字3下划线421个特殊字符:空格= + - * / (),. ‘ :!“% & ;< > ? $5其他字符(只可以出现在字符常量、字符串编辑描述符、注释和输入输出记录中)3.基本数据类型1 整型KIND值可以为1、2、4类型说明关键字:INTEGERKIND值决定数据的范围。

对于整数没有误差。

I=3/2=1;I=1/2=0INTEGER(KIND=4)::AINTEGER*4::AINTEGER(4)::A2 实型KIND值可以为4(单精度7位有效数字)、8(双精度15~17位有效数字)类型说明关键字:REAL小数表示形式、指数表示形式(规格化的指数形式)错误表示形式:E34、.E34、0.14E2.38开3次方:8.0**(1.0/3.0)3 复型KIND值为4、8是实数的有序对,将两个实数中间用逗号分隔,然后放在一对括号中类型说明关键字:COMPLEX复数的运算:+、—、*、/4 字符型KIND值为国家语言种类由一对单撇号或一对双撇号之间的字符序列组成。

最新FORTRAN90第十章指针与递归

最新FORTRAN90第十章指针与递归
FORTRAN90第十章指针与递 归
§10.1 指针的概念
指针变量的定义格式:
类型,Pointer[::] 变量名列表
或者分两步定义:
类型 [::] 变量名列表
Pointer 变量名列表 指针变量所指向的变量称为目标变量,简 称为目标。对目标变量的定义必须用target 属性:类型, target[::] 变量名列表 指针变量的类型与它的目标变量的类型 必须一致。
§10.2 指针的使用
§10.2.5 悬空指针与无法访问的内存
没有指向任何对象的指针就是悬空指针。 刚刚定义的指针就是悬空的。用DeAllocate
语句间接释放的指针很可能是悬空的。
悬空指针有不定值,引用悬空指针的结果是随 机的,表现为程序运行不稳定或死机。
不经过内存释放的步骤而将动态变量的指针 直接置空或指向其它目标,就会使该变量所占 的内存不可访问。这会造成内存浪费。
例: Implicit none Type student
integer::num real::score type(student),pointer::next
Print*, p1%num,p1%score Print*, p2%num,p2%score Deallocate(p1) Deallocate(p2) end
§10.3 指针数组
real,pointer::p END type real_pointer Real,target::a,b,c,d,e,f,g,h,x,y TYPE(real_pointer) R(5) Data a,b,c,d,e,f,g,h,x,y/1,2,3,4,5,6,7,8,9,10/ R(1)%p=>b;r(2)%p=>d;r(3)%p=>f r(4)%p=>h;r(5)%p=>y Print *,(R(I)%p,I=1,5),a,c,e,g,x END

编译原理第十章目标程序运行时的存储组织

编译原理第十章目标程序运行时的存储组织

编译原理第十章目标程序运行时的存储组织课前索引【课前思考】◇回顾通常的编译过程,能否找到本章所讲内容在哪个过程?◇为什么编译程序要考虑目标程序运行时存储区的管理与组织?◇请归纳C语言与PASCAL语言的程序结构与数据类型的不一致点【学习目标】全面熟悉目标程序运行时存储区的整体布局;每种存储区的组织方式与管理方法;并通过实例着重掌握,对同意过程嵌套定义的情况,栈式动态存储分配的组织方式与运行时进栈退栈的活动实现方法。

【学习指南】在代码生成前,编译程序务必进行目标程序运行环境的配置与数据空间的分配。

通常来讲,假如编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码与目标代码运行时的数据空间。

我们这里所说的运行时的存储区组织,是指目标程序运行时的数据空间的管理与组织。

【难重点】◇目标程序运行时,存储区域的整体布局,与各区域的作用。

◇各类不一致类型的数据表示。

◇同意过程嵌套定义的情况,栈式动态分配的组织管理。

◇对过程的调用,进入与退出时,栈式动态分配的工作原理。

◇过程活动纪录的各项内容与它们的作用,与活动纪录的组织方式。

◇过程参数传递的不一致方式。

【知识结构】从逻辑上看,在代码生成前,编译程序务必进行目标程序运行环境的配置与数据空间的分配。

通常来讲,假如编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码与目标代码运行时的数据空间。

数据空间应包含:用户定义的各类类型的数据对象(变量与常数)所需的存储空间,作为保留中间结果与传递参数的临时工作单元,调用过程时所需的连接单元,与组织输入/输出所需的缓冲区。

目标代码所占用空间的大小在编译时能确定。

有些数据对象所占用的空间也能在编译时确定,其地址能够编译进目标代码中。

而有些数据对象具有可变体积与待分配性质,无法在编译时确定存储空间的位置。

因此运行时的存储区常常划分成:目标区、静态数据区、栈区与堆区,如图10.1就是一种典型划分,代码(code)区用以存放目标代码,这是固定长度的,即编译时能确定的;静态数据区(static data)用以存放编译时能确定所占用空间的数据;堆栈区(stack and heap)用于可变数据与管理过程活动的操纵信息。

FORTRAN90指导

FORTRAN90指导

FORTRAN90学习指导一、FORTRAN90基础知识1.源程序及其构成书写格式:主程序定义语句、结束语句注意:在没有程序名称的时候,程序开头的PROGRAM也不要出现。

如果使用了程序名称且在END语句中出现,则END语句中的PROGRAM不能省略。

语句行可以是0~132个字符;除赋值语句外,每个语句都要使用关键字开头。

如果希望一行中出现多个语句,语句一定要用分号隔开。

空格不能随便使用,关键字、变量和常量名以及操作符中的空格会使字符失去其原有的含义。

但它们之间一定要加空格。

注释行:以感叹号为标记,或“C”、“*”(FORTRAN90中不提倡此用法)续行标记:在句末尾添加续行符&,如果将关键字分成两行,则下一行开头也要加续行标记。

如果续行符出现在注释语句中,则失去了续行的功能。

2.FORTRAN90字符集126个英文字母(大小写字母等价)210个阿拉伯数字3下划线421个特殊字符:空格= + - * / (), . ‘: !“% & ;< > ? $5其他字符(只可以出现在字符常量、字符串编辑描述符、注释和输入输出记录中)3.基本数据类型1 整型KIND值可以为1、2、4类型说明关键字:INTEGERKIND值决定数据的范围。

对于整数没有误差。

I=3/2=1;I=1/2=0INTEGER(KIND=4)::AINTEGER*4::AINTEGER(4)::A2 实型KIND值可以为4(单精度7位有效数字)、8(双精度15~17位有效数字)类型说明关键字:REAL小数表示形式、指数表示形式(规格化的指数形式)错误表示形式:E34、.E34、0.14E2.38开3次方:8.0**(1.0/3.0)3 复型KIND值为4、8是实数的有序对,将两个实数中间用逗号分隔,然后放在一对括号中类型说明关键字:COMPLEX复数的运算:+、—、*、/4 字符型KIND值为国家语言种类由一对单撇号或一对双撇号之间的字符序列组成。

FORTRAN90复习

FORTRAN90复习

第三章 FORTRAN 90 基础知识基本知识,如:字符集、名称、关键字、程序单元、书写格式、数据类型。

名称:①名称只能由英文字母、数字、下划线符“_”和美元符号“$”组成。

②名称第一个字符必须是英文字母。

③名称不能超过31个字符。

合法名称: Number,Max, PrOgRaM, FIND_IT, read, x, a3b7, china, total, x$y$z 。

非法名称:X-Y-Z, 8q, a.5, _wrong,U.S.A., DR.WANG,$abcd,r a t e 。

书写格式:自由格式,固定格式3个通用标志符:注释标志符“!”、语句分隔标志符“;”和续行标志符“&”。

数据类型第四章 内部数据类型与表控输入输出常量和变量:语法描述; 精度(kind 值)和取值范围整型。

实型。

复型。

字符型。

CH(1:5)是什么?逻辑型。

变量的申明(几种声明方式,谁优先)。

表达式 (会写正确的表达式,表达式计算结果)如:e算术表达式:算术运算符的优先级和结合规则;操作数的类型转换不同优先级运算符,“先高后低”结合先乘方、后乘除、再加减,括号最优先相同优先级运算符,“从左向右”结合,如9-4+12/3*2**3 = ?乘方算符,“从右向左”结合,如2**3**2 = ?尽量多地使用( ),以使意义明确,避免出现歧义和产生错误转换规则“由低级向高级转换”①数据类型和KIND相同的两个算术操作数,计算时不转换,运算结果的类型和KIND与原数据相同。

②数据类型相同但KIND值不同的两个算术操作数,计算时,将KIND值低的操作数转换为高KIND值,运算结果为高KIND值的原类型。

③数据类型不同的两个算术操作数,将低级别类型的操作数高级别类型,运算结果的类型及KIND值与高级别类型操作数相同。

字符表达式字符串连接操作符//“I” // ‘ ‘ // “Love” // ‘ ‘ // “Fortran 90” I Love Fortran 90逻辑变量逻辑与逻辑或逻辑非逻辑等于逻辑不等逻辑异或X Y X.AND.Y X.OR.Y.NOT.X X.EQV.Y X.NEQV.Y X.XOR.Y T T T T F T F FT F F T F F T TF T F T T F T TF F F F T T F F逻辑运算的优先级:.NOT. →.AND.→.OR.→.EQV.、.NEQV.、.XOR、相同优先级时,运算按从左到右的顺序进行(“左结合”)(3>5).and.(4>1))的计算结果是什么?赋值语句 (能写出正确的赋值语句)第五章数据的有格式输入输出I编辑符F编辑符E编辑符D编辑符A编辑符READ(*,*)a,bWRITE(*,*)a,bWRITE(1,"(1X,I5)")WRITE(1,100)100 FORMAT(1X,I5)Open(10, FILE=“FILE1.txt” ,STATUS=“new”)WRITE( * , '(1X, A, "=", I2)') '2+3', 2+3第六章选择结构程序设计逻辑IF语句块IF语句多支块IF语句会写多支块IF程序,块CASE语句第七章循环结构程序设计EXIT语句的功能是:在循环体执行过程中强制性终止整个循环语句的执行,转循环语句后的第一条语句执行。

fortran90简易教学教程

fortran90简易教学教程

real(8):: x
double precision x
绝对值在 2.22e-308 和 1.79e+308 之间,还包括 0,有效位 15 位
complex :: x character(5) :: z=’abcde’
complex x chracter*5 z
logical :: x
logical x
(逻辑型,.true. 或 .false.)主要不要漏写.
注意以下几点 1.Integer(1)、integer(2)赋值溢出,编译器不报错 比如 Integer(1):: x
x=128 write (*,*)x 输出:-128
而 integer、real、double precision 都可以判断溢出
优化,一般来说,fortran 的程序比 c 程序的执行效率要高一些。当然目前的 fortran90 已 经提供了指针,我认为主要的作用是实现一些数据结构。 4. 变量采用的是静态存储变量,在调用子过程或函数时,参数传递通过引用方式传递,节 省了复制变量的时间
二、书写风格
fortran 的老版本是 fortran77,教材上面的程序就是 f77 格式,而新版本是 fortran90,是 f77 的一个超集,这两种标准我都讲一讲,主要是因为我们既要看得懂老程序,同时自己写 程序时最好还是按新标准去写。
end
2.数组作为形参可以进行局部传递 program main
implicit none integer,dimension(50) ::IA integer :: lbound=10 call input(IA(lbound)) end
subroutine(X) implict none integer,dimension(20) :: X X=1 Write (*,*) x

fortran知识点总结

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知识点总结

F O R T R A N第2章FORTRAN90基础知识:程序单元的概念:fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。

每个程序只有一个主程序单元。

各单元体的程序体形式上相同。

程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。

语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。

字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。

数据结构:整型INTEGER (34-2下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回;实型REAL ,小数形式和指数形式;复型COMPLEX (种别类型参数值取实部与虚部中较大者);字符型CHARACTER,由一对单撇号或双撇号之间的字符序列组成;逻辑型LOGICAL。

派生数据类型TYPE;数组INTEGER,DIMENSION(1,50)::A,可直接对数组元素进行运算如3*A,SQRT(A);字符子串,在字符串CHARACTER(LEN=80)::ROW中,ROW(1:3)就表示字符串ROW中第1到第3个元素组成的子串。

变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。

第3章基本语句:类型说明语句:类型说明(种别说明),属性说明::变量名表尽量避免把两个实数作相等或不相等的比较。

淘汰隐式说明IMPLICIT NONE种别说明:种别参数即对可移植数据精度和范围进行选择的机制KIND(X) 返回变元X的种别参数值SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。

Fortran90 第10章

Fortran90 第10章

2,file='my2.out'
(2,*),x
例:已知正切函数的一种展开式为
8x tg x 2 2 2 n 0 2n 1 4 x

将上式右端编写成外部过程。当级数通 项的绝对值小于eps=1E-10时停止计算。 在同一行上,x用F6.3,级数之和用 F10.5格式输出。用于计算的数据存放在 文件MYF2.DAT中,从该文件输入的x值 为: 0.358 0.593 -0.665 0.785 0.933 程序运行结果存于文件MYF2.OUT中。
写文件:从键盘输入5个数,写入文件



program main integer::x,i open(1,file='my1.dat') do i=1,5 read *,x write(1,*),x enddo end
读文件:将文件内容读出显示



program main integer::x,i open(1,file='my1.dat') do i=1,5 read (1,*),x print *,x enddo end
Visual Fortran 90 程序设计
第2 对文件的基本操作
10.4 直接文件的存取
10.5 INQURE语句
10.3 顺序文件的存取
10.6 无格式文件
一、引入文件的目的: 便于输入、输出数据的保存与维护
二、程序结构的变化:文件要先打开,再输入、输出
主程序:PROGRAM MAIN 说明部分
读写文件:从my1.dat中读出数据写入my2.out文件

program main integer::x open(1,file='my1.dat') open( ) do i=1,5 read (1,*),x print *,x write enddo end

FORTRAN90

FORTRAN90

FORTRAN90FORTRAN 90第一章绪论一、特点在FORTRAN 77的基础上增添了许多具有现代特性的功能、递归、数组直接运算、派生类型、指针和过程。

二、与FORTRAN 77的区别1、不区分书写格式2、不赞成语句标号3、不使用BLOCK DATA 数据块子程序、语句函数4、主程序以PROGRAM 开头,以END PROGRAM为结尾函数子程序:区分函数名与函数值5、不使用GOTO 10、STOP、PAUSE语句6、不使用DO 10 I=1,3,而以DO与END DO 匹配使用。

7、不使用:I-N规则、双精度、DATA语句、多条RETURN语句。

而使用REAL ::A=0,B=2.58、不使用COMMON语句,而用模块MODULE9、用假定形状数组取代假定大小数组10、DIMENSION A(10)在FORTRAN 90中不再定义数组11、FORMAT 语句不再使用第二章F ORTRAN 90 基础知识第2.1节语言元素一、字符集1、A-Z (26个)2、0-9 (10个)3、_(下划线)(1个)4、特殊符号(21个):空格、等号、加号、减号、*、/、(、)、,、.、’、:、!、”、%、&、;、<、>、?、$二、数据类型本身:INTEGER real complex character logical派生类型种别参数:对可移值数据精度和范围进行选择的机制,他提供了对每种内部数据类型的不同机器表示进行选择的参数化方式,种别参数均为整数。

用法:KIND=种别参数。

函数KIND(X)表示返回X的种别参数。

1、常量(字符型:双、单引号表示)常数的种别标示:例15_2 14.36_3 .false._4 5_’ang’带种别参数的常量的运算:15_2+14.36_3=29.36_3定义常量:REAL(KIND=2),PARAMETER::N=52、变量(1)变量名(程序名、常量、虚参、派生类型)命名规则:长度小于等于31个字符、须以字母开头、由字母、数字、下划线构成,其中不出现空格。

Fortran90-数据类型

Fortran90-数据类型

双(单)引号不属于字符串
2024/10/23
FORTRAN90
21
2.当字符中出现单(双)引号时,有两种表 示方法。
1)当字符为"时,用´将字符串括起; 当字符为´时,用"将字符串括起。
2)将单(双)引号重复一次。
例: fh"dl ´fh"dl´ "fh""dl"
I’m a teacher "I´m a teacher" ´I´´m a teacher´
2024/10/23
FORTRAN90
7
2024/10/23
FORTRAN90
8
5.4 复型数据
一、复型常量的形式:
(实型数1,实型数2)
低 级
表示:实型数1+实型数2*I
向 高

复型数据的类别类型


1.默认复型:当省略类别类型参数时, 的
则称此复型数据为默认复型。
原 则
2.实部及虚部类型不同时,复型数据的
FORTRAN90
33
比较字符串大小
• ‘that’ ‘this’ • ‘FORTRAN’ ‘FORTRAN90’ • ‘FORTRAN’ ‘FORTRAN ’ • ‘FORTRAN 90’ ‘FORTRAN90’ • ‘FORTRAN90’ ‘fortran90’
先化为双精度型, 化为双精度型,
再赋值
赋值
直接赋值
将实部扩展为 双精度型,赋

复型
化为实型,加虚 部0,变成复型,
再赋值
舍去多余有效数字,
实部赋值,虚部 化为实型,再赋值,
赋0
虚部赋0

(完整版)FORTRAN90用法总结,推荐文档

(完整版)FORTRAN90用法总结,推荐文档

(完整版)FORTRAN90用法总结,推荐文档FORTRAN90用法总结1、数据类型整型 INTEGER实型 REAL复型 COMPLEX字符型 CHARACTER逻辑型 LOGICAL2、特殊函数1>定值函数PARAMETER(变量列表) 或类型说明符,PARAMETER::变量列表2>IMPLICIT 类型说明符(字母表)类型定义函数(默认I-N规则,取消IMPLICIT NONE)3>** 乘方4>STOP[标号]终止执行5>PAUSE[标号]暂停程序6>字符串长度函数 LEN(String)、 LEN_TRIM(String)7>除去字符串尾部空格 TRIM(String)8>字符串位置函数 INDEX(String1,String2)9>字符串比较函数LGE(String1,String2)LGT(String1,String2)LLE(String1,String2)LLT(String1,String2)10>字符串空格首位调整ADJUSTL(String)、ADJUSTR(String)11>字符串、ASSII码互相转化函数①化为ASSII码 ICHAR(String)、IACHAR(String)②化为字符串CHAR(I)、ACHAR(I)12>.LT.(<) .LE.(<=) .EQ.(=) .NE.(/=) .GT.(>) .GE.(>=)13>.AND.与 .OR.或 .NOT.非 .EQV.等于 .NEQV.不等 .XOR.异或3、IF函数1> 单支IFIF(逻辑表达式) THEN块语句END IF2> 双支IFIF(逻辑表达式) THEN块语句1ELSE块语句2END IF3>多支IFIF(逻辑表达式1) THEN块语句1ELSE IF(逻辑表达式2) THEN块语句1...ELSE IF(逻辑表达式N) THEN块语句NELSE块语句N+1END IF4>逻辑IFIF(条件表达式)可执行语句5>算术IFIF(算术表达式)标号1,标号2,标号3 标号1 可执行语句1 标号2 可执行语句2标号3 可执行语句3 4、CASE块SELECT CASE(表达式) CASE(表达式1)块语句1...CASE(表达式N)块语句NCASE DEFAULT默认块语句END SELSCT5、循环函数1>循环控制语句IF(e) EXIT 终止循环2>CYCLE跳出此次循环3>DO循环DO i=e1,e2[,e3]循环体END DO4>DO WHILE循环DO WHILE(逻辑表达式) 循环体END DO6、输入输出1>表控输入输出READ *,变量表PRINT *,输出表WRITE(*,*)输出表2>自定义输入输出标号 FORMAT(格式说明)3>其他编辑符①nX 向右跳过n个字符②nH 输出字符串③/ 换行④\ 连接7、数组1>说明数组DIMENSION 数组名类型说明,DIMENSION(维说明)::数组名2>数组赋初值DA TA 数组名/....../,数组名/....../,...3>动态数组①声明[类型],DIMENSION(:[,:]...),ALLOCA TABLE::数组名[类型],ALLOCATABLE::数组名(:[,:]...)...②申请ALLOCATE(数组名(维说明))③释放DEALLOCATE(数组名)8、子程序1>子程序CONTAINS(内部子程序的标志(外部EXTERNAL))[类型说明] FUNCTION 函数名(虚参表)函数体END2>子例行程序SUBROUTINE 子例行程序名(虚参表)函数体END调用CALL 子例行程序名(实参表)3>递归调用RECURSIVE FUNCTION(SUBROUTINE)函数名(虚参表) RESULT(返回值) 函数体END9、结构体1>定义TYPE [,ACCESS[::]] 派生类名称(ACCESS=PRIV ATE(私有),PUBLIC(公有)) 分量表END TYPE 派生类名称2>类型定义TYPE(派生类名称)::结构体变量名3>结构体成员引用①结构体名%成员名②结构体名.成员名4>定义的同时赋值TYPE(派生数据类型名)::结构体变量名=派生数据类型名(成员初值表)5>结构体数组TYPE(派生数据类型名),DIMENSION(维说明符)::结构体数组名10、指针1>定义指针类型说明,POINTER::指针变量名...类型说明,TARGET::目标变量名...P=>A2>动态变量例:INTEGER,POINTER::PINTEGER SALLOCA TE(P)P=4S=PDEALLOCA TE(P)PRINT *,SEND3>指针数组变量定义类型说明,DIMENSION(:...:),POINTER::指针变量名ALLOCATE(X(20))DEALLOCA TE(X)4>定义结点TYPE NODEINTEGER V ALUETYPE(NOPE),POINTER::NEXTEND TYPE NODE5>定义头指针TYPE LISTPRIV ATETYPE(NODE),POINTER::ENDEND TYPE LIST6>对指针初始化(对头指针清空)SUBROUTINE SETUP(L) TYPE(LIST)LNULLIFY(L%END)END SUBROUTINE SETUP。

fortran90知识点整理

fortran90知识点整理

fortran90知识点整理Fortran90关于变量说明的新功能:1.在变量说明的同时,可以给变量赋初值。

INTEGER::I=5,J=126REAL::X=7.2,Z,W=774.22.在说明变量的同时也可说明其种别REAL(KIND=4)::X,Y 或REAL(4)::X,Y3.在说明变量的同时,还可说明变量的属性INTEGER,PARAMETER::I=5,J=123Ps :PARAMETER 属性(1)功能:⽤⼀个符号代表⼀个常量,称为符号常量(常数)(2)写法:Real,Parameter ::G=9.8 &&说明类型时赋值(3)位置:位于可执⾏语句之前REAL,DIMENSION(1:10)::A2.3.6 派⽣数据类型根据需要⽽由基本数据类型定义新的数据类型。

在⼀个派⽣类型中可包含多个基本类型。

如:TYPE STUDENT (定义开始)CHARACTER(LEN=20)::DEPARTMENTCHARACTER(LEN=10)::CLASSCHARACTER(LEN=15)::NAMEINTEGER::NUMBER (成员定义)END TYPE STUDENT (定义结束)派⽣类型变量的定义:TYPE(STUDENT)::PERSON变量的赋值:PERSON=(”COMPUTER”,”92_2”,”LI LIN”,21)成员的表⽰:PERSON%CLASS=“92_2”PERSON%NAME=“LI LIN”主程序其他限制主程序的可执⾏部分不能包含有RETURN语句或者ENTRY语句。

程序名对可执⾏程序是全局的,⽽且不得于该可执⾏程序中的任何其它程序单元名、外部过程名或公⽤块名相同,也不得于主程序内的任何局部名相同。

在主程序的作⽤范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作⽤。

主程序内的任何内部过程的定义必须跟在CONTAINS语句之后。

Fortran指针

Fortran指针

10.3 指针与数组
利用指针来指向一个数组,能动态地分配数组 空间,给编程带来极大的方便。通过动态定义,可 以根据当时使用空间的大小来生成空间,使数组大 小满足要求。
一、指针数组的定义
格式: 类型说明,DIMENSION(: … :),POINTER::指针名 DIMENSION(: … :): 数组的动态说明标识,不指定数组下标界限 “:” 个数=数组维数 POINTER:指针说明标识。
REAL, DIMENSION(:), POINTER::X READ*, A, B C=A+B; D=A-B; E=A*B IF(B .NE. 0)THEN 输入3 6,输出: F=A/B 3.00 6.00 9.00 ELSE -3.00 18.00 0.50 F=0 ENDIF ALLOCATE(X(6)) X(1)=A; X(2)=B; X(3)=C X(4)=D; X(5)=E; X(6)=F WRITE(*, 100)X 100 FORMAT(1X, 3F8.2) DEALLOCATE(X) END
10.4
指针与链表
在链式存储中,每一个结点除了存储自己的信息以外,还 保留下一个值,用来访问下一个变量,这个值称为指针,下面 介绍如何使用链表。
一、结点的定义
最简单的结点是普通数组的元素,如有以下定义: INTEGER A(10) 则A(1)、A(2)、A(3)、A(4)…等,可以看作结点。 复杂的结点包含多种类型的数据,一般定义为一 个结构体。
名。
注意:链表有一个表头和一个表尾,由于FORTRAN语言中 指针实际上就是一个别名,不同于C语言中的指针(C中的 指针代表内存地址),因此没有明确的空指针的概念,链 表的访问方式只能从最后一个结点开始,到第一个结点, 通过检查链表是否再被连接作为结束标识,例10.6所建链 表过程如下图所示。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

§10.3 指针数组
指针数组是由指针组成的数组。容易与之混 淆的概念是数组指针:指向数组的一个指针。 Real,Dimension(:),Pointer::A !A是数组指针 Dimension B(10),C(8,5) A=>B !A指向一维数组B A=>C(:,4) !A指向二维数组C的第4列
Real,pointer ::p1,p2 Real,target::r1=13 Real,target::r2=15 Print*,r1,r2 P1=>r1;p2=>r2 Print*,p1,p2 P1=p2 Print*,p1,p2,r1,r2 r2=2*r2 P2=>p1 Print*,p1,p2,r1,r2 end
数组指针也可以是动态变量 Real,Dimension(:),Pointer::A !A是数组指针 Allocate(A(50)) !给指针A分配内存
A=10;print *,A DeAllocate(A) !释放指针A的内存
End
§10.3 指针数组
当数组指针是动态变量时,它所分配到的内 存区被当作一个数组使用,但是,该数组是没有 名字的,数组指针的名字就作为它的别名。
称为目标。对目标变量的定义必须用target 属性:类型, target[::] 变量名列表
指针变量的类型与它的目标变量的类型 必须一致。
§10.1 指针的 指针赋值语句: 概念
指针变量=>目标变量 赋值号=>读作“指向”,注意它的写法。 同类型的指针变量可相互赋值 指针变量=>指针变量
指针变量通过指针赋值语句指向目标变量 之后, 使用目标变量和使用它的指针是等同 的。这两者之间的暂时等同关系直到用指 针赋值语句使指针变量指向另外的目标变 量为止。
§10.1 指针的概念
例:Real,pointer ::p1,p2 !p1,p2可指向实 型目标变量。
Real,target::x,y !实型目标变量 P1=>x;p2=>y !指针赋值语句
X=-0.618 ! P1=-0.618
P2=1.414 ! Y=1.414 例:Real,Dimension(:),pointer ::p !p可
说明:
(1)指针变量通过指针赋值语句指向目标变 量之后,便成为所指向目标的别名。
(2)对于一个指针变量的访问,实际上就是 对其目标变量的访问。
(3)可以有多个指针同时指向同一个目标变 量,如:P1=>R,P2=>R 。但不可能一个指 针同时指向多个目标变量。
(4)指针赋值可以改变当前的别名。例如:
例: Implicit none Type student
integer::num real::score type(student),pointer::next
Print*, p1%num,p1%score Print*, p2%num,p2%score Deallocate(p1) Deallocate(p2) end
p2=>p1使p2指向p1所指向的目标。
§10.2 指针的使用
§10.2.1 指针的状态 指针处于三种状态之一:
未定义:程序刚开始时所有指针都未定义 空指针:已定义但没有指向任何目标 关联:指针已定义并指向某一目标
§10.2.2 NULLIFY语句 NULLIFY语句的作用是使指针变量处于
空状态。其格式为: NULLIFY(p) P是指针变量
End Type student
Type(student),pointer::p1,p1
Read*,p1%num,p1%score
Read*,p2%num,p2%score
Nullify(p1%next); Nullify(p2%next)
§10.2 指针的使用
例:Real,Poi§nte1r:0:p.12,p指2 针的使用
Real,Target::a P1=>a;p2=>a !p1,p2都指向a
NULLIFY(p1) !p1为空, p2指向a
P2=>p1 !p1与p2都为空指针
§10.2.3 动态变量 用Allocate分配一块内存,并使指针变量指向它, 指针变量就成了这块内存的别名。这就是动态 变量。 Allocate语句的格式: Allocate(p[,Stat=整型变量名]) P必须已定义,整型变量表明分配是否成功,分配 成功,整型变量被赋值0,否则赋非0值。
§10.2 指针的使用
例:Real,Pointer::p Allocate(p) !给指针p分配内存
用DeAllocate语句可以释放已分配给某指针 变量的内存,并使该指针变量置空。其格式 为:DeAllocate(p[,Stat=整型变量名])
例:Real,Pointer::p Allocate(p) !给指针p分配内存 P=13;print *,p DeAllocate(p) !释放指针p的内存 End
§10.2.4 ASSOCIATED固有函数 逻辑型固有函数ASSOCIATED检查一指针是
否指向一个目标或是否为另一个对象的别名。其 格式为:
ASSOCIATED(p1[,p2])
待检查的指针p1必须已定义;可选参数p2如果 是目标变量,则检查p1是否指向它,p2若是指针, 则检查p1与p2是否指向同一目标或同时为空指 针。 例:Real,Pointer::p,q
INTEGER,PARAMETER::N=6
End do
TYPE(ROW),DIMENSION(N)::S,T
end
DO I=1,N
ALLOCATE(T(I)%R(1:I))
T(I)%R(1:I)=I END DO S=T !相当于 s(I)%r=>t(I)%r Do I=1,n Print*,s(I)%r(1:I) End do
下面的例子说明A不是一个指针数组: Dimension(:),Pointer::A !A是数组指针 Real,target::b=2 Allocate(A(50)) !给指针A分配内存 A(1)=>B !错误,A(1)不是指针
A(2)=64; print *,A(2) DeAllocate(A) !释放指针A的内存
§10.4 链表
链表概念 链表的创建 链表的插入 链表的删除 链表的输出 链表举例
§10.4.1 链表概念
链表是一个节点的序列,其中每个节点被连接 到它前面的节点上。
head
13
27
39
从上面链表可知,每个节点有二个域,第一个是数 据域,第二个是指针域。链表的第一个节点称为表 头,最后一个节点称为表尾。指向表头的指针称为 头指针,最后一个节点的指针域为空指针。没有任 何节点的链表称为空链表。空链表的头指针为空。
指向有target属性的一维实型数组(包括二 维数组的一行或一列)。
Real,target::a(5,6) !实型目标数组 P=>A(2,:) !指针赋值语句 p=1 ! 赋值语句,使A数组第2行元素全为1
例: Real,pointer ::p1,p2 Real,target::r=13 P1=>r P2=>p1 Prinr*,p1,p2,r end
为了表示链表,必须先定义一个派生类型来表 表示节点的结构。例如整型数值链表中节点的 类型定义为:
Type node
integer ::value
type(node),pointer::next
End Type node 表头节点的指针可用下述方法建立:
Type list
type(node),pointer::head
End
§10.3 指针数组
指针数组只能用间接方法实现。 例:定义一个具有5个元素的指针数组。 TYPE real_pointer real,pointer::p END type real_pointer Real,target::a,b,c,d,e,f,g,h,x,y TYPE(real_pointer) R(5) Data a,b,c,d,e,f,g,h,x,y/1,2,3,4,5,6,7,8,9,10/ R(1)%p=>b;r(2)%p=>d;r(3)%p=>f r(4)%p=>h;r(5)%p=>y Print *,(R(I)%p,I=1,5),a,c,e,g,x END
在FORTRAN 90中,严格地由指针组成的指 针数组是不能实现的。
IMPLICIT NONE
Do I=1,n
INTEGER::I
s(I)%r(1:I)=2*i
TYPE ROW
End do
REAL ,DIMENSION(:),POINTER::R
Do I=1,n
END TYPE ROW
Print*,t(I)%r(1:I)
§10 指针与递归
§10.1 指针的概念 §10.2 指针的使用 §10.3 指针数组 §10.4 链表 §10.5 递归及其应用
§10.1 指针的概念
指针变量的定义格式:
类型,Pointer[::] 变量名列表
或者分两步定义:
类型 [::] 变量名列表
Pointer 变量名列表 指针变量所指向的变量称为目标变量,简
…; NULLify(q); !Q是空指针
End if
If(ASSOCIATED(p,q)) then
end
Print*,”p是空指针”
Else
Print*,”p不是空指针”
如果p1,p2指向同一数组的不同部分,它们 被认为是未结合的。 Implicit none Real,target,dimension(4)::a=(/1,2,3,4/) Real,pointer,dimension(:)::p,q P=>a(1:3) Q=>a(2:4) Print*,associated(p,q) end
相关文档
最新文档