Fortran90
1.4 数字处理........................................................................................................................................ 1 1.5 数组处理........................................................................................................................................ 1 1.6 指针................................................................................................................................................ 1 1.7 数据结构........................................................................................................................................ 2 1.8 用户定义的类型和操作符 ............................................................................................................ 2 1.9 过程................................................................................................................................................ 3 1.10 模块(modules).............................................................................................................................. 3 1.11 输入和输出.................................................................................................................................. 3 1.12 荒废的特性.................................................................................................................................. 4 2. Fortran 77, C, C++ 和 Fortran 90 的比较............................................................................................. 5 2.1 数值健壮性................................................................................................................................... 5 2.2 数据并行化部分........................................................................................................................... 7 2.3 数据抽象..................................................................................................................................... 12 2.4 面向对象编程............................................................................................................................. 12 2.5 函数型程序设计......................................................................................................................... 12 3. 数值健壮性........................................................................................................................................... 13 3.1 数值种类(Kind)参数化 .............................................................................................................. 13 3.2 精度选择...................................................................................................................................... 14 3.3 数值多态性................................................................................................................................. 14 3.4 数值近似模型............................................................................................................................. 15 3.5 环境查询..................................................................................................................................... 15 4. 数据并行性........................................................................................................................................... 17 4.1 数组操作...................................................................................................................................... 17 4.2 数组片段..................................................................................................................................... 21 4.3 动态数组...................................................................................................................................... 22 4.4 返回赋值数组的函数(array-valued functions) .......................................................................... 24 4.5 例子:高斯消元法 ..................................................................................................................... 26 参考文献.................................................................................................................................................... 28
与Fortran77固定的源格式相比,Fortran90增加了另一种没有列依赖的源格式,叫作‘自由’源格式。在 自由源格式中注释不必从第一列开始且不必保留第六列作为继续的标志,而是在第一行由一个trailing ampersand作为标志。在这两种源格式中,都可以用‘!’表示行末注释的开始(例如,在行末加上说明),用 分号来分开同一行的两个说明。和Fortran77一样,Fortran90对变量,过程等的命名规则是以字母开头,包 括字母和数字;另外名字最多可以有31个字符,可以包括下划线‘_’,字符以及大小写字母。
笫十五章 FORTRAN 90
笫十五章 FORTRAN 90
FORTRAN 90 与FORTRAN 77 不同之处
一、说明语句
(一)固有数据类型 整型、实型、复型,其后都可以接一个下划线_和另一个 整型常量或有名整型常量用来指明种别参数。如 42_2 42_long 0.3_double (3.14_double,_7) ascii_’john Q.public’ 种别参数(kind parameter):当它是一个整数1,2,3…时, 可能表示单精度双精度和四精度,在不同的系统中可能是 4,8,16。 (二)变量 integer (kind=2):: x,y character (len=20,kind=kanji) ::name kinji为一整型常量 real ::a=1.2,b=2.3, 初始化变量的值在执行过程中可变
六、数组
(六) 列表检索 1. 对无序列表的顺序检索 subroutine search_1(lost_card,card_number,found) integer,dimension(:),intent(in) :: lost_card integer,intent(in) ::card_number logcal,intent(out) ::found integer ::I found=.false. do I=1,size(lost_card) if(card_number==lost_card(I)) then found=.trun. exit end if end do end
FORTRAN90用法总结
FORTRAN90用法总结
Fortran90是Fortran的最新标准程序设计语言,它是在Fortran77
基础上的新增功能,支持面向对象的功能,同时也支持可变参数,数据语
句和开发语句,使其具有更高的强大功能。
它也支持宏的使用,以帮助程
序编写者更好的实现一些高级程序功能,以提高程序性能,提高程序易用性。
下面将重点介绍Fortran90的五大用法。
第一,利用Fortran90进行函数的编写。
Fortran90的函数可实现参
数的多次组合,通过对用户函数的调用,就可达到想要的结果,而不用写
复杂的循环程序,这有助于提高程序的可管理性,降低程序的出错率。
第二,通过宏的使用来完成Fortran90的程序编写。
宏语言有助于程
序的复杂编写和优化,通过它可以大大提高程序的性能,节约程序的开发
时间,从而提高程序的可用性。
第三,Fortran90的数组操作功能。
Fortran90支持数组的多维操作,能够进行大数组操作,从而编写出简洁的程序,节约存储空间,提高程序
的执行效率。
第四,Fortran90的指针操作功能。
它可以完成复杂数据的指针操作,以实现数据的重排、排序、和传输,可以让程序编写者有效地运用指针操作,提高程序性能和稳定性。
最后,Fortran90的结构化编程功能。
FORTRAN90 数据类型
说明:大于最大值,产生上溢错,小于最小值,按0处理
5.2
实型数据
Kind=4,单精度实数; kind=8,双精度实数. 指数形式表示的单、双精度实数: 1.2e-5, .5e3, -12.345e2 1.d-5, 1.3d-6 , -0.63d4 2.实型变量(real) real I,total real (4)::k,limit Real(8)::min,max Real :: x=5.0 ; y=24.1 单精度实数 双精度实数 real, parameter::x=5.,r_j=10.e3 Real*4,dimension (1:10):: a real *4 t,e real*8 kig,dog Real(kind=4):: n,count Double precision::x_1,y2
5.4
均为字符型。
字符型数据
z字符赋值语句:左边变量和右边表达式类型
字符赋值语句在执行中会发生强制长度转换,转 换后值赋予左边变量。 右边长度小于左边,将表达式值赋予变量左侧,不足 补空格。 右边长度大于左边,将表达式值左侧部分赋予变量, 多余截去。
5.4
字符型数据
示例: character*4 str1*8,str2*17,str3,str4 ! students str1='students‘ str2=‘Are you '//str1//’?’ !Are you students? !are str3=‘are’ !stud str4=‘students’ str2(9:16)=‘teachers’ ! Print*,str2 ! Are you teachers end
谢 谢
5.3
COMPLEX(8)e,d,f COMPLEX f
Fortran90编程
字。以关键词end type结束。
派生类型的声明和使用
n 声明: n 赋值: n 引用结构成员:
例一:派生数据类型
模块(Module)
n 是一种不能直接执行的程序单元,但可以包含
数据声明和过程
n
使不同的过程实现过程和数据的共享 n 可以实现对自定义数据类型的封装
n 相对于program,function,subroutine,是一种特
例三:数据类型的范围
定义符号常量
n 符号常量在程序中不可以改变其值 n 定义符号常量可以增强程序的可读性和可维护
性 n 定义方法:加上parameter属性
real (8) ,parameter :: pi=3.1415926535_8
例四:定义符号常量
三、控制结构
n if语句:if then elseif else endif
n
在Compaq Visual Fortran中调用 CXML
n 第一种方法:在工程中加入cxml.lib
n 第二种方法:使用include
PROGRAM example INCLUDE 'CXML_INCLUDE.F90’
在Compaq Visual Fortran中调用 Intel MKL
n 添加库函数路径 n 在工程中加入mkl_s.lib
总结:Fortran90的新特性
n n n n n n n n
高级的表达能力:数组运算 (例如, X(1:N)=R(1:N)*COS(A(1:N))) 动态存储分配 (ALLOCATE, DEALLOCATE, ...) 导出类型(derived types)与操作符重载(operator overloading) 更好的变量声明方式(parameterized types),提高移植性 模块 更多的现代控制结构 (SELECT CASE,END SELECT,DO, END DO,EXIT...) 更多的内部函数 (date, precision, arrays, ...) 新的源程序书写格式-自由格式(free format) 指针
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概述
Y=2000
Y不能被 4整除
Y
N
Y不能被100 整除
N
N
打印Y “不是闰年” Y能被 400整除
Y
打印Y “是闰年”
Y
打印Y “是闰年” 打印Y “不是闰年”
Y=Y+1
Y
Y≤2500
N 结束
3.2 用N-S图表示算法
成立
P
不成立
A B 顺序结构
A
B
选择结构
当P1 A A 直到P2
当型循环
直到型循环
变量
•变量:在程序运行过程中其值可以发生变化。 每个变量都会分配到一个相应的存储空间,这个 空间就是该变量的存储地址,是相对固定的。
变量必须有名字和类型,它的值可以变化,与其类 型密切相关 变量名是变量的标志。 命名规则:以字母开头,由字母、数字、下划线组 成的字符串,允许长度为31个字符,并且不区分大小 写字母:Ab和 aB 是同一变量。 同一个程序模块中不能有相同名字的两个变量。 最好不要用FORTRAN中用到的名字作变量名。 FORTRAN中所有名字都遵守命名规则
例:求三个数(5,10,23)的平均值。
PROGRAM TEST ! 计算三个数的平均值 A=5;B=10;C=23 ave=(A+B+C)/3 write(*,*) 'AVE=',ave
END PROGRA&
&M TEST !注意续行方法
§1.5 FORTRAN 90字符集 FORTRAN90字符集包括:
§1.3 FORTRAN
90语言的特点
对FORTRAN77的扩充主要有:
引入数组运算
提高数值计算功能 内在数据类型参数化 用户定义的数据类型、运算和赋值 引入模块数据及过程定义的功能 引入指针概念
FORTRAN90 标准函数
函数名
说明
EXPONENT(x)*
求实数x机内编码表示的指数值。x:R,结果:I
FRACTION(x)*
求实数x机内编码表示的小数值。x:R,结果类型同x
NEAREST(x,s)
根据s的正负号求最接近x的值。x:R,结果:R,且不为0
RRSPACING(x)
求x与系统最大数之间的差值。x:R,结果类型同x
ALOG10(x)
求x以10为底一般对数log10(x)。x:R(4),结果:R(4)
EXP(x)*
求指数,即ex。x:R、C,结果类型同x
LOG(x)*
求自然对数,即ex。x:R、C,结果类型同x
LOG10(x)*
求以10为底对数,即。x:R,结果类型同x
SQRT(x)*
求x的平方根。x:R、C,结果类型同x
将整数n二进制表示右起第p位置1。n:I,p:+I,p值域:0~64结果类型同n
IEOR(m,n)*
对m和n进行按位逻辑“异或”运算。m:I,n:I,结果类型同m
IOR(m,n)*
对m和n进行按位逻辑“或”运算。m:I,n:I,结果类型同m
ISHA(n,s)*
对n向左(s为正)或向右(s为负)移动s位(算术移位)。n:I,s:I,结果类型同n
ATAN2(y,x)
求x的反正切arctg(y/x)。y:R,x和结果类型同x,结果值域:-π~π
ATAN2D(y,x)
求x的反正切arctg(y/x)。y:R,x和结果类型同x,结果值域:-180~180°
COS(x)*
求x的余弦cos(x)。x:R、C,x取值弧度,结果类型同x
COSD(x)*
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知识点整理Fortran90关于变量说明的新功能:1.在变量说明的同时,可以给变量赋初值。
INTEGER::I=5,J=126 REAL::某=7.2,Z,W=774.22.在说明变量的同时也可说明其种别REAL(KIND=4)::某,Y或REAL(4)::某,Y3.在说明变量的同时,还可说明变量的属性INTEGER,PARAMETER::I=5,J=123P:PARAMETER属性(1)功能:用一个符号代表一个常量,称为符号常量(常数)(2)写法:Real,Parameter::G=9.8&&说明类型时赋值(3)位置:位于可执行语句之前REAL,DIMENSION(1:10)::A2.3.6派生数据类型根据需要而由基本数据类型定义新的数据类型。
在一个派生类型中可包含多个基本类型。
如:TYPESTUDENT(定义开始)CHARACTER(LEN=20)::DEPARTMENTCHARACTER(LEN=10)::CLASSCHARACT ER(LEN=15)::NAMEINTEGER::NUMBER(成员定义)ENDTYPESTUDENT(定义结束)派生类型变量的定义:TYPE(STUDENT)::PERSON变量的赋值:PERSON=(”COMPUTER”,”92_2”,”LILIN”,21)成员的表示:PERSON%CLASS=“92_2”PERSON%NAME=“LILIN”主程序其他限制主程序的可执行部分不能包含有RETURN语句或者ENTRY语句。
程序名对可执行程序是全局的,而且不得于该可执行程序中的任何其它程序单元名、外部过程名或公用块名相同,也不得于主程序内的任何局部名相同。
在主程序的作用范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作用。
主程序内的任何内部过程的定义必须跟在CONTAINS语句之后。
F90第三章
第三章 FORTRAN 90基础知识
3.4 程序单元
概述 分类 描述 示例
一个F90程序可由多个程序单元组成(至少 有一个主程序单元),程序单元由数据声明和 相关数据操作语句构成,必须用END语句结束。
PROGRAM main INTEGER length,width,area,price
3.1 字符集
FORTRAN 90字符集由四部分字符组成: 1.英文字母:A~Z和a~z 除字符型常量外,源程序中不区分字母 大小写。
2.阿拉伯数字:0~9
3.1 字符集/字符集
3.下划线:_
4.特殊字符:空格 + - * / ( ) , . ‘:!“%&;<>?$=
第三章 FORTRAN 90基础知识
3.7 数据类型
概述 数据 数据表示 数据类型
数据类型是数据取值范围和在其上定义 的一组操作的总称。数据类型有四个性质:
每个数据类型有一个唯一的名称。
每个数据类型规定了一个取值范围。
每个数据类型规定了其常量数据的表示方法。
3.7 数据每类型/数个据类型数据类型规定了一组操作。
F90具有丰富的数据类型,有内部数据类型、派 生数据类型、数组和指针类型等。
3.8 兼容性问题
3.2 名称
概述 语法描述 作用域
名称(标识符)在程序中用来标识有关实 体(如:变量、命名常量、函数、过程、程序 单元、公用块、和哑元等)。
PROGRAM main INTEGER length,width,area,price READ*,length,width area=mul(length,width)
<主程序单元>→ [ <PROGRAM语句> ] [ <说明部分> ]
