FORTRAN 90 程序编程规范
笫十五章 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程序设计1[1]
程序设计举例
算法
算法是计算机软件中的一个基本概念,它是对解决实际问题的方法和步
骤的描述。设计算法是程序设计的核心,也是编写程序的基础。
正确的算法有以下几个显著特点:
(1)有穷性(flniteness)。 (2)确定性(certainty)。 (3)有效性(effcctivencss)。 (4)有零个或多个输入(input)。 (5)有一个或多个输出(output)。
简单的FORTRAN90程序分析
(6)空格并不是随处都可以使用的,一个像关键字、变量和常量名以 及操作符等的字符,其内部是不能使用空格的,空格会使字符失去其原 有的含义。 (7)FORTRAN90的注释语句是以感叹号为标志的,一行中感叹号后的 所有字符都被编译器作为注释语句而忽略。注释语句可以单独占一行, 也可在程序的其他语句后面出现。在FORTRAN90中,空行被作为注释 语句。 (8)如果遇到一条语句的长度超过了FORTRAN90所允许的行最大长度, 需要写成几行,FORTRAN90提供了一个续行符 ( & ) ,通过在语句末尾 添加续行符,编译器就会把下一行作为续行来处理。如果是把一个如关 键字这样的字符分成两行,那么需要在下行语句的开头再加一个续行符。
CHARACTER ( LEN = 10 ) :: STRING 子字符串是字符串中的若干个连续字符的集合。子字符
CHARACTER (LEN = 5 ) :: SUBSTRING 串的表示方法如下: CHARACTER (LEN = 1 ) :: CHAR STRING=’JANEJORDE’ 字符串变量名([FIRST-POSITION] : [END-POSITION]) ! SUBSTRING的值为“JANE” SUBSTRING=STRING ( :5 ) 缺省的开始位置是1,缺省的结束位置是字符串的长度。 SUBSTRING=STRING ( 5:6 ) ! SUBSTRING的值为“J” 如果开始位置大于结束位置则子字符串为空,即它的长 SUBSTRING=STRING ( 3:7 ) ! SUBSTRING的值为“NEJO” N=7 度为0。 CHAR=’ABCDEFGHIJK’ ( N:N ) ! CHAR的值为“G”
fortran90整理
fortran90整理1语句编译1.Build—Compile:编译;Build—Build:连接;Build—Exetuce:运⾏;或单击⼯具栏相应按钮。
注意:a、保存⽂件时将⾃动创建同名的project⽂件,形成*.dsp⽂件;b、同时还将⾃动创建同名的workspace,形成*.opt和*.dsw⽂件;c、编译连接后⾃动形成Debug⽬录,该⽬录中存放编译连接后⽂件。
如:*.obj,*.lnk,*.exe等2.Free Format(⾃由格式)1.!感叹号后⾯的⽂本都是注释。
2.每⾏可以编写132个字符。
3.⾏号放在每⾏程序的最前⾯。
4.⼀⾏程序代码的最后如果是符号&,代表下⼀⾏程序会和这⼀⾏连接。
如果⼀⾏程序代码的开头是符号&,代表它会和上⼀⾏程序连接。
3.书写格式⾏的书写(⾏的长度、分⾏、续⾏)1⼀⾏可以是0~132个字符,空格有意义,2语句最长不超过2640个字符3⼀⾏可以有多个语句,⽤“;”分隔4⼀个语句可分⾏写,读⾏标记为&(放在尾部),但如为关键字,⾸尾均加&。
5最多可有511个续⾏。
4.语句的分类注释语句:!后的所有字符都被编译器忽略1.可独占⼀⾏,可在其它语句之后,a)空⾏为注释⾏(固定格式⽤C和*)2.说明语句:⽤于说明变量的类型、属性等3.可执⾏语句:输⼊、赋值、输出……5.语句有位置规定:说明语句必须出现在可执⾏语句之前,格式说明语句(FORMAT语句)除外。
6.标志符⼩结注释标志符:1⾃由格式:!固定格式:C *2语句分隔符:分号;(仅⾃由格式可以使⽤)3续⾏符:⾃由格式:&4申明标号:1到5位⽆符号整数5空格:关键字、变量、常量内部不能⽤空格,但相邻两者之间须⽤空格6.FORTRA90源程序基本结构1、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值为国家语言种类由一对单撇号或一对双撇号之间的字符序列组成。
总结
(八)字符处理 1.字符串、字符型变量和字符型数组。 2.字符型数据的赋值和运算。
3.字符型数据的输入与输出。
(九)文件
1.文件与记录的概念。 2.文件的打开与关闭。
3.顺序文件的存取方法。
4.直接文件的存取方法。
练习题:
一、填空题: 1.表达式1 / 2 * 3.6 + 1.3的值是 。
2.若A=2,B=7.5,C=-3.6,L1 = .TRUE.,L2 = .FALSE.。
Fortran90 程序设计
课程总结
(一)FORTRAN程序的结构、书写规则 1.FORTRAN程序的构成(主程序和子 程序)。 2.FORTRAN源程序的书写格式。
(二)、数据类型及其运算 1.常量和变量的类型(整型、实型、双精度型、 复型、逻辑型、字符型) 2.定义变量类型的方法(用I——N规则隐式说明 和显示说明)。
则表达式 .NOT. L2 .OR. B – A <= C /2 .AND. C>= -3.6的值 是 。
3.若DO I=1.5, 3.6 , 1.2,计算循环次数是
4.若I=10,J=20,A=12.3,B=156.0,C=846.0, 执行语句PRINT ‘(1X, I3, I4/1X, 3F6.1)’, I, J, A, B, C
3.符号常量及其定义方法(PARAMETER语句)。
4.运算符及运算优先级。 5.表达式(算术表达式、关系表达式、逻辑表 达式和字符表达式)及其求值规则。不同类型 数据的混合运算。
(三)最基本的语句
1.赋值语句(算术、逻辑和字符型赋值语句)。 2.表控格式的输入和输出。 3.格式输入与输出。 (1)格式编辑符(X、H、I、F、E、D、A、L、/ ),Байду номын сангаас式的重复作用。 (2)格式语句与输入输出语句(包括READ, WRITE语句)的相互作用。 (3)在输入输出语句中包括含格式说明的方法。
fortran99
9.1 派生类型的定义
说明 – 访问说明形式有PRIVATE、PUBLIC等, 访问说明形式有PRIVATE、PUBLIC等, 类型名为所定义派生类型的名称,它应符合 FORTRAN90标识符定义的规则。 FORTRAN90标识符定义的规则。 – 类型名禁止与任何固有类型的名字相同,也 不能与任何其它可访问的派生类型名相同。 – 派生类型定义中的成员类型,可以是前面介 绍过的固有类型、数组类型,也可以是一个 已定义的派生类型,还可以是指针类型。 – 成员列表可以包含一个或多个成员标识符, 各成员标识符之间用逗号隔开。
9.3.2 派生类型变量的赋值与运算
派生类型变量初始化
TYPE (STUDENT)::ZHANG=S_T(25, ‘YANG', ADD_T(856,‘HEFEI‘ ADD_T(856,‘HEFEI‘),(/87,93,82/) )
9.3.2 派生类型变量的赋值与运算
⒊ 同类型变量之间相互赋初值 – 对于同一派生类型的两个变量,可以进 行相互赋值 举例
FORTRAN90 语言程序设计
第9章 派生类型
06:16:22
主要内容
派生类型的概念与定义 派生类型变量的成员引用 派生类型的输入输出 派生类型数组及其应用
9.1 派生类型的概念和定义
概念:由用户根据实际的需要,将不同类型的 概念:由用户根据实际的需要, 数据组合成一个有机的整体的数据结构称为派 生类型。 生类型。 定义的一般形式 [,访问说明 访问说明[ ]]类型名 TYPE [,访问说明[ :: ]]类型名 类型::类型:: 成员列表 …… 类型:: 类型:: 成员列表 TYPE[类型名 类型名] END TYPE[类型名]
TYPE(STUDENT)::ZHANG, WANG
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程序设计9
几点应该注意
(8) 一个辅程序中的接口块不允许含有一个被该辅程序定义的过程的接 口体。一个接口块中可以有多个接口体。
(9) 接口块还可用来说明一个外部过程或虚过程,并为之提供显式的调 用接口,这比EXTERNAL语句提供了更多的信息,因而也提高了程序 的可读性。例如:下面是没有类属说明的接口块:
接口块能将子程序中所需的信息精确的拷贝过来,通过它可 以为主调程序和被调用子程序指明一个显式接口。
几点应该注意
(1) 接口块以INTERFACE语句开始,以END INTERFACE 语句结束,块内只能取被调用过程中的说名部分,不允许出 现任何可执行语句。
(2) 类属说明的形式为:
类属名 或OPERATOR(定义的运算符) 或ASSIGNMENT(=) 其中,类属名用于定义类属过程、OPERATOR用于定义运算
USE语句
USE语句的最简单形式为: USE 模块名1,模块名2,……,模块名N
这条语句提供了对模块的所有公共的有名数据对象、派生类型、接口块、 过程等的访问。
在作用域单位内,USE语句必须出现在其他说明语句之前。 如果需要对两个或两个以上的模块进行访问,可能会在不同的模块中用
到了相同的名字,因此允许USE语句对被访问的对象重新命名,以解决 局部对象和模块中访问对象之间的名字的冲突问题。要重新命名时, USE语句应具有下列形式: USE 模块名,更名表 其中,更名表的形式为: 局部名=>使用名,局部名=>使用名,…… 例如:
END FUNCTION LOG_PLUS_LOG
括号时必须的,因为运算符“+”
END MODULE LOGICAL_PLUS PROGRAM TEST_LOGICAL_PLUS
Visual Fortran 90 编译器及代码书写格式
error FOR3592:missing END IF Statement :
结果有错
2,处理方法: ,处理方法: 1* 编译连接错误:output窗口中双击错误 编译连接错误: 窗口中双击错误 窗口中 信息(高亮度显示) 信息(高亮度显示)指针指向编辑窗口源程 序中包含错误的相应的行. 序中包含错误的相应的行. 2*光标放在 光标放在output窗口内,按F4切换到下 窗口内, 光标放在 窗口内 切换到下 一个错误shift+F4切换到上一个错误 一个错误 切换到上一个错误 注意: 注意: 连接错误不是出现在具体的某一行上. 连接错误不是出现在具体的某一行上.
四,程序运行环境
操作系统( 以上) 操作系统(windows95以上) 以上 Visual Fortran 5.0/6.0(Fortran PowerStation 4.0) ( ) 要了解:编辑程序, 要了解:编辑程序,编译程序和连接装配程序的功能
五,基本编译和输入(同word) 基本编译和输入( )
Format(自由格式) Free Format(自由格式)
返回目录
基本上允许非常自由的编写格式,但要注意: 基本上允许非常自由的编写格式,但要注意:
1.!感叹号后面的文本都是注释. 感叹号后面的文本都是注释. 上一页 2.每行可以编写 每行可以编写132个字符. 个字符. 每行可以编写 个字符 下一页 3.行号放在每行程序的最前面. 行号放在每行程序的最前面. 行号放在每行程序的最前面 结束 4.一行程序代码的最后如果是符号 ,代表下一行程序会 一行程序代码的最后如果是符号&, 一行程序代码的最后如果是符号 和这一行连接.如果一行程序代码的开头是符号&, 和这一行连接.如果一行程序代码的开头是符号 ,代 表它会和上一行程序连接. 表它会和上一行程序连接. 5.程序命令之间的空格,无意义. 程序命令之间的空格,无意义. 程序命令之间的空格
FORTRAN90程序设计实验指导
FORTRAN90程序设计实验指导FORTRAN90程序设计实验指导第一节 FORTRAN PowerStation 4.0快速入门1.1 安装FORTRAN PowerStation 4.01.1.1 系统要求安装Microsoft FORTRAN PowerStation 4.0需要具备以下软硬件条件:●80486或以上处理器,运行Windows 95/Windows NT 3.51或以上操作系统。
●如果安装标准版,需要3.5英寸软盘驱动器或光盘驱动器,如安装专业版,则必须具有光盘驱动器。
●16MB或以上内存。
●足够的硬盘空间。
安装程序根据安装选项提示所需的硬盘空间。
标准版和专业版的典型安装分别需要约45MB和70MB硬盘空间。
●VGA显示器(推荐使用SVGA显示器)。
●鼠标。
1.1.2 安装步骤下面以Windows 95操作系统为例,对于Windows NT操作系统,安装过程与此类似。
首先,将含FORTRAN PowerStation 4.0的光盘插入光盘驱动器,在资源管理器中运行Setup程序,屏幕显示MicrosoftFORTRAN PowerStation Setup窗口;安装程序自动搜索已有组件,单击【Continue】(继续)按钮,并按提示输入CD-Key后,安装程序会显示安装选项对话框(图 1.1);如果要改变安装FORTRAN PowerStation 4.0的文件夹,单击【Change Folder...】(改变文件夹)按钮,选择或输入所需的文件夹名;如果输入的文件夹不存在,安装程序会自动生成该文件夹,并生成几个下级文件夹以存放相应的各类文件。
图1.1还显示了各安装选项的简短说明和安装时所需的硬盘空间。
选择下列四个安装选项之一继续安装:Typical(典型)Custom/Complete(定制/完全)Compact(紧凑)图1.1 Setup程序的安装选项对话框Run from CD-ROM(从光盘运行) Typical(典型)安装选项将安装最常用的部分,约需70MB硬盘空间。
Fortran90选择结构程序编程作业
选择结构程序设计作业前面学习了比较简单的顺序结构程序设计,在顺序结构程序中每条语句都是按书写顺序依次顺序执行。
使用顺序结构编写程序,只能求解逻辑关系非常简单的问题,可是许多实际问题,往往具有复杂的逻辑关系,仅使用顺序结构难以编写程序,需要使用更复杂的程序结构,如选择结构(分支结构)。
选择结构是求解复杂问题和体现程序智能化的重要程序结构。
FORTRAN90提供了多种用于实现选择结构的语句,如:逻辑IF语句、块IF语句、多支块IF语句和SELECT语句,其中SELECT语句是FORTRAN90新引入的用于实现块CASE结构的语句,它与多支块IF语句在功能上非常相似,但在某些情况下,使用SELECT语句比使用多支块IF语句更简洁和高效。
本实验是学习和掌握关系表达式、逻辑表达式、选择结构语句、选择结构程序设计方法的一次系统实验活动。
通过本次实验,能设计和编写简单的具有选择结构的程序,为学习和掌握更复杂的程序结构和程序设计方法奠定基础。
一.实验内容11.问题描述某高校实行学分制,学分制规定:成绩大于等于60分可获得3个学分和3个绩点,否则不能获得学分和绩点,同时成绩大于等于80分可增加2个绩点。
输入学生成绩,计算并输出学生获得的学分和绩点。
编写程序实现之。
2.问题分析已知:成绩cj,且要求从键盘输入。
成绩数据类型为整型。
求:学分xf和绩点jd。
xf和jd数据类型为整型。
是否获得学分,需通过关系表达式cj≥60判定。
是否获得基础绩点,需通过关系表达式cj≥60判定。
是否增加绩点,需通过关系表达式cj≥80判定。
不同的成绩,需要进行不同的计算,得出不同结果。
求解该问题显然需要使用选择结构。
求解思想和方法可多种多样。
可将学分和绩点分别独立计算,也可先按关系表达式cj ≥60计算学分和基础绩点,然后再通过关系表达式cj≥80增加绩点。
我们采用后者。
通过分析,设计算法,绘制框图,如图5-1所示。
选择结构为单边选择结构。
(完整版)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实验
2.1 FORTRAN90的编程环境一、实验目的1. 掌握FORTRAN90的集成开发环境——Fortran PowerStation 4.0。
2.熟悉Fortran PowerStation 4.0的安装、启动和退出。
3.熟悉Fortran PowerStation4.0的各工具图标和菜单的作用。
4. 熟练掌握FORTRAN90程序上机实验过程。
二、实验要求1. 掌握进入Fortran PowerStation 4.0集成开发环境的方法。
2. 分别掌握用菜单、快捷键和工具栏图标进行编译和连接的方法。
3. 理解程序设计的概念,掌握FORTRAN90程序结构与书写规范。
4. 熟悉FORTRAN 90程序从输入到运行的全部操作。
5. 按照题目的要求,认真实验上机实验,并对结果进行分析。
三、实验内容1.进入Fortran PowerStation 4.0集成开发环境:开始→程序→Fortran PowerStation 4.0→Microsoft Developer Studio,单击后,进入如图2-1-1所示的FORTRAN90集成开发环境。
2. 熟悉Fortran PowerStation 4.0集成开发环境及菜单的使用: ⑴ 建立项目工作间:选择File →New →Project Workspace ,点击OK ,出现如图2-1-2所示的界面。
在Name 栏目中输入工程名SX ,点击Create ,出现如图2-1-3所示的界面。
图2-1-1 进入Fortran PowerStation 4.0图2-1-2 建立项目工作间的界面⑵ 编辑源程序:①选择菜单Insert →Files into Project ,出现如图2-1-4所示的界面。
②在File Name 栏目里键入源程序文件名EX.F90,点击OK 按钮,出现如图2-1-5所示的界面。
图2-1-3 建立项目名为SX 的工作间界面图2-1-4 插入文件的界面③单击“是”按钮,出现如图2-1-6所示的界面。
FORTRAN90
SUBROUTINE Ext_2(...) ! etc END SUBROUTINE Ext_2
A(1,1) 1 2 3 4 5 1 2 3 4 5 A(6,1)
1
2
3
4
5
6
7 1 2 3 4 5 1 2 3 4 5
1
2
3
4
5
6
7 A(6,10)
Array item
Template item
! etc
END FUNCTION Funky END MODULE Nodule
Target Pointer Target Target Disassociated Associated
Pointer Target
Null
Undefined
???????
3.14159 Ptor 3.14159
1
Processor 1
A(1,1)
1
2
3
4
5
6
7
A(6,1)
1
2
3
4
5
6
7
A(6,10)
Array item
Template item
1
Processor 1
1 A(1,1)
2
3
4
5
6
7
1 A(6,1)
2
3
4
5
6
7 A(6,10)
Array item
Template item
1
Processor 1
Null
k temp
Null
curr
0 head
k
Null
curr
0 head
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FORTRAN 90 程序编程规范Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。
使编出的程序更易懂、易于维护。
1 语言选择数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。
选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。
Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。
2 Fortran 90 的新特性2.1.1 建议使用的Fortran 90 新特性建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。
尽量使用数组下标三元组,这样可优化并减少所需的代码行数。
为提高可读性,要在括号内表明数组的维数,例如:1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:)2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。
例如:2dArray(: , 2:len2) = scalar *( &Another2dArray(:, 1:len2 -1) &- Another2dArray(:, 2:len2) &)对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。
在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。
新的表示方法更接近标准的数学符号在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。
从效率的角度考虑,除递归定义的数据结构外,应尽量避免使用递归程序(它在使用内存和cpu 上会降低效率)。
建议定义新的操作符,而不要重载已有的操作符,这样可以清晰地表明功能,避免降低代码的可读性和可维护性。
2.1.2 关于Interface使用Interface 接口块。
在FORTRAN 语言中,主调程序与被调程序是分别编译的。
由于Fortran 90 对过程的许多功能做了扩充,有些功能单靠简单的调用语句已无法反映,因而系统也就无法进行正确的编译。
这时需要在主调程序中加入interface 接口块,通过它为主调程序与被调程序指明一个显式的接口。
如果被调用程序中哑元含有假定形状(assumed-shape )数组,或含可选变元,或含键盘输入的参数,就需要interface 接口块说明。
一般来讲,在Fortran 90 程序之间需要提供的interface 块,建议将interface 接口块明确写入调用程序,并复制被调用程序的参数列表。
这种方法简单易用,但也相应增加了维护代码的工作量,因为只要被调用程序的参数列表发生变化就必须相应改变interface 接口块和调用(call )语句。
2.1.3 关于动态内存的使用并行程序中存在着动态内存使用不充分的情况,合理使用动态内存可提高效率。
在Fortran90 中常采用下列方法获取动态内存。
自动数组(automatic arrays):这种数组的大小在子程序中指定,其大小取决于运行时的变量,例如,可通过参数列表向子程序传递实元变量。
使用自动数组优先于其它形式的动态内存分配方法。
可分配数组(allocatable arrays):声明为ALLOCATABLE 属性的数组变量可在运行时通过ALLOCATE 命令分配空间。
与指针不同的是ALLOCATABLE 属性不能用于派生数据类型中。
这种方法申请的空间要使用DEALLOCATE 命令释放。
在一个程序中,不要重复进行“ALLOCATE—DEALLOCATE-然后再ALLOCATE 一个更大的空间”这样的操作,这样会导致大量不可利用的碎片空间产生。
应在程序中对要开辟的动态数组空间进行连续分配,或连续释放。
在使用ALLOCATE 和DEALLOCATE 命令之后,要利用ALLOCATE 和DEALLOCATE 命令参数中的返回值来判断操作是否成功;不建议使用指针数组。
2.2 Fortran 90 中不建议使用的过时的特性不要使用固定书写格式,采用Fortran 90 的自由书写格式。
不要使用旧式的DO 循环和CONTINUE 语句。
在以前的DO 循环中,关键字之后大多有一个标号,循环在该标号处结束,如:DO 10 I = 1, 10DO 20 j= 1, 20A(i,j)=0.20 CONTINUE˜10 CONTINUE˜建议采用统一的DO 结构,如:DO i = 1, 10DO j = 1, 20A(i, j) = 0.END DOEND DO不能使用实循环变量˜在DO 循环中若用实数作循环变量,由于截断误差的存在,会导致得不到预期的循环次数,如应将下面的DO 循环DO r = 0.1 ,0.9 ,0.1...END DO改写为:DO i = 1 , 9r = i * 0.1...END DO不要使用DO WHILE 语句,可用不带循环变量的DO 语句配合exit 替代,如:不要使用选择性返回。
例如:CALL Foo( x, y, *100, *200, *300 )在执行完该子程序后程序根据Foo 的返回语句后的表达式值选择从标号为100 、200 、300 处继续执行。
可将上述子程改写为结构化CASE 语句:CALL Foo(x, y, return_code)SELECT CASE(return_code)...不要使用算法IF 语句:使用块IF 结构来代替;不要使用计算GO TO 语句,如GO TO (10,20,30) i ;不要使用标号赋值语句,如ASSIGN 300 iGO TO i不要使用除IMPLICIT NONE 之外的任何implicit 语句,如IMPLICIT REAL(a-z)不要使用DATA 语句,对变量赋初值可在声明时进行,或在程序中进行。
DATA 语句是唯一可用于对变量赋二进制、八进制、十六进制初值的语句,但它很可能造成程序的不可移植,因此除非必须这样做,一般建议不要采用。
不要使用COMMON 公共块:使用Modules 参数列表代替公共块向子程序传递数据;不要使用EQUIVALENCE 等价语句:Fortran90 中,由于模块、动态存储、指针、数据结构以及固有函数transfer 的引用,没有必要继续使用EQUIVALENCE 语句;不要使用数据块程序单元DATABLOCK ,在FORTRAN 77 中它用于给公用块内数据赋初值。
不要使用FORMAT 语句。
不要使用err= ,end= 及eor= 等描述符。
在输入输出语句中,这些描述符后面跟语句标号,指示如果出现错误则程序转向执行标号所标识的语句。
我们可用检查iostat 来替代,如:READ ( * , ”(A)” , iostat=status ) line不要使用语句函数,如f(x) = x**2 - 1可用contain 内部函数子程序来代替。
不要使用假定大小数组它是作为哑元使用的,它的最后一维无上界,而用*代替,如DIMENSION a(100,*)。
在Fortran 90 中可用假定形状数组代替,它的每一维都是可调的,并用(:)来声明,如:REAL , DIMENSION( 100 , : ) :: a不要使用FORTRAN 的INCLUDE 行。
在多数情况下可用USE 来代替,有些则采用预处理#include 来代替。
不能使用双精度类型,采用Fortran 90 的种别参数。
不要使用PAUSE 语句;不要使用ENTRY 语句:一个子程序只能有一个入口点;Fortran90 中避免数组在子程序之间传递时维数的隐式改变。
尽量不要采用经销商扩充的功能。
2.3 在FORTRAN 90 中限制使用的功能GO TO 语句和语句标号只能在程序出现异常情况需要立即退出时才能使用,即允许使用GO TO 语句的唯一例外,是在出现错误时跳到程序的末尾处,这时用9999 作为Labels(这样可使所有人都知道GO TO 9999 的意思)。
2.4 关于预编译器(Precompilers )的使用建议在数值预报创新系统中使用预编译器,因为它提供了一种可有选择的对程序系统的某一部分程序进行编译的方法(条件编译);另外,为了提高程序的可移植性,同样也需要使用预编译器。
由于超级计算机都是用UNIX 操作系统,C 预编译器(cpp, C language pre-processor)可能是最好的选择。
2.4.1 文件的包含Fortran 90 提供了利用“INCLUDE ”语句引入文件的功能,但有时需要加入文件的目录结构信息,因此可以改用cpp 中的#include 功能,是程序更加清晰。
“include ”后的文件可以是用于变量定义、子程序注释或interface 接口块等的一段程序。
如,SUBROUTINE FooIMPLICIT NONE...INTERFACE#include <type_package1.int>#include <type_package2.int>#include <type_package3.int>...CALL TypePackageIni#endif...END SUBROUTINE Foo将视type_package_init 的定义调用子程序TypePackageIni 。
3可读性与可维护性本节将主要介绍如何使Fortran 90 程序更易读、更易维护。
3.1 空白的使用空白的使用可以使程序更易读、易维护。
加入空白的方法主要有空行、空格。
3.1.1 空行在程序“段落”之间加入空行,可以使程序的逻辑结构更加清楚,程序段落更加明白。
如PROGRAM FooUSE module_aUSE module_bIMPLICITE NONEREAL :: timeREAl :: valueINTEGER loopvalue = 3.1415926WRITE(*,*) valueEND PROGRAM Foo3.1.2 空格在一行中加入一些空格,可以使程序更易读,如在赋值号左右至少加一个空格,在逗号后加一个空格。