fortran90程序设计chapter3.docx
- 文档编号:3373219
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:17
- 大小:64.59KB
fortran90程序设计chapter3.docx
《fortran90程序设计chapter3.docx》由会员分享,可在线阅读,更多相关《fortran90程序设计chapter3.docx(17页珍藏版)》请在冰豆网上搜索。
fortran90程序设计chapter3
第三章FORTRAN90基础知识
FORTRAN90是一种内容丰富、功能强大、特色鲜明的高级程序设计语言。
本章将介绍FORTRAN90的一些基本知识,如:
字符集、名称、关键字、程序单元、书写格式、数据类型和兼容性等,为进一步学习其它内容奠定基础。
3.1字符集
FORTRAN90源程序是一个符合FORTRAN90词法、语法和语义规定的特殊文本,它由FORTRAN90字符集规定的字符按照词法、语法和语义规定进行描述。
FORTRAN90字符集由下面四部分字符组成:
1.英文字母
大写字母:
ABCDEFGHIJKLMNOPQRSTUVWXYZ。
小写字母:
abcdefghIjklmnopqrstuvwxyz。
2.阿拉伯数字
数字字符:
0123456789。
3.下划线
下划线字符:
_。
4.特殊字符
特殊字符:
空格
!
"%&;<>?
$。
DigitalVisualFORTRAN5.0字符集增加了一些可打印字符,包括十六进制ASCII码为09h(Tab符)、20h至7Eh之间的字符和某些特殊字符集(如:
IBM字符集)中字符。
说明:
①除字符型常量和Hollerith常量外,源程序中词法和语法描述不区分字母的大小写,如语句“INTEGERI”和语句“integeri”是等价的。
②FORTRAN90字符集以外的可打印字符,只能出现在注释、字符常量、Hollerith常量、字符串编辑符和输入输出记录中。
③字符:
_!
"%&;>
为FORTRAN90新增字符。
3.2名称
名称在FORTRAN77中称“符号名”,在其它语言中称“标识符”。
名称在程序中用来标识有关实体(如:
变量、命名常量、函数、过程、程序单元、公用块、名称表组和哑元等)。
1.名称的语法描述
<名称>→<英文字母>{<英文字母>∣<数字>∣“_”∣“$”}
说明:
①名称只能由英文字母、数字、下划线符“_”和美元符号“$”组成。
②名称第一个字符必须是英文字母。
③名称不能超过31个字符。
④在OpenVMS系统上习惯使用“$”符命名,在DigitalUNIX、WindowsNT和Windows9x系统中,一般用“$”符作为外壳命令的命令符号或替代符号。
2.名称的作用域
作用域指使用范围,每个名称都规定了作用域。
名称的作用域为该名称声明所在的程序单元、函数或过程。
作用域为整个程序的名称称为全局名称,否则称为局部名称。
程序单元名、外部过程名、命令块名和模块名为全局名称,且在整个程序中必须唯一。
[例3.1]判定下列名称,哪些是合法名称?
哪些是非法名称?
解释非法名称错误原因。
Number,Max,X-Y-Z,PrOgRaM,FIND_IT,read,x,8q,a.5,_wrong,a3b7,U.S.A.,DR.WANG,china,total,x$y$z,$abcd,rate。
解:
合法名称有:
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,rate。
表3-1给出非法名称错误原因。
表3-1非法名称错误原因
非法名称
错误原因
非法名称
错误原因
X-Y-Z
名称中含减号“-”
U.S.A.
名称中含小数点“.”
8q
数字“8”作为第一字符
DR.WANG
名称中含小数点“.”
a.5
名称中含小数点“.”
$abcd
美元符号“$”作为第一字符
_wrong
下划线符“_”作为第一字符
rate
名称中含空格
下面是几个使用合法名称的语句例子。
INTEGERtotal!
total命名了一个整型变量
SUBROUTINEexample!
example命名了一个过程
PROGRAMarea!
area命名了一个程序单元
Lable:
DOI=1,N!
Lable命名了一个DO循环
3.3关键字
关键字是FORTRAN90中用于描述语句语法成分或命名哑元名称的特定字符串。
FORTRAN90关键字分为语句关键字和变元关键字。
语句关键字是用于描述语句语法成分的固定的合法单词。
如语句“IF(A
PROGRAM、INTEGER、REAL、READ、PRINT、WRITE、DO、END、SUBROUTINE、FUNCTION等。
变元关键字是命名特定哑元名称的合法单词。
如内部函数“unpack(VECTER,MASK,
FIELD)”的“VECTER”、“MASK”和“FIELD”是变元关键字。
变元关键字是FORTRAN90特有的性质,FORTRAN90对所有的内部函数和过程都规定了变元关键字,它们在有关接口块中做出了具体规定,允许在调用时使用变元关键字。
关键字都有特定的含义,在描述中有具体的位置要求,不能改变或移位,否则将产生语法错误。
如语句“PROGRAMmain”中的关键字“PROGRAM”的含义是说明源程序是一个主程序单元,位于语句首部,如果写成“PROGRAMMINGmain”或“mainPROGRAM”将产生语法错误。
FORTRAN90对关键字不予保留,即允许其关键字作为其它实体的名称(变量名、数组名、函数名、程序名等),可将PROGRAM、INTEGER、REAL、READ、PRINT、WRITE、DO、END、SUBROUTINE、FUNCTION等作为变量名、数组名、函数名或程序名。
编译程序根据上下文来识别一个字符串是关键字,还是实体名称。
如语句“PROGRAMPROGRAM”中第一个“PROGRAM”将被编译程序识别为关键字,第二个“PROGRAM”将被识别为实体名称(主程序单元名)。
一个应避免使用关键字作为实体名称,因为使用关键字作为实体名称会导致程序难以理解和阅读,降低程序的可读性。
使用变元关键字可提高程序的可读性,如内部函数CMPLX(X[,Y][,KIND])的X、Y和KIND为变元关键字,可使用下面语句调用CMPLX函数:
CMPLX(10,20,4)!
按序指定参数。
CMPLX(y=20,kind=4,x=10)!
按变元关键字指定参数。
CMPLX(10,kind=4)!
跳过Y参数。
3.4程序单元
一个FORTRAN90程序可由多个程序单元组成(至少一个主程序单元)。
程序单元由若干数据和对数据实施相关操作的一系列语句构成,程序单元必须用END语句结束。
FORTRAN90规定有四种程序单元:
主程序单元、外部子程序单元、模块单元和块数据单元。
每个程序单元可分别编译,一起构建(连编)产生可执行程序。
外部子程序单元是由不包含在主程序单元、模块单元和其它外部子程序单元中的函数或例行子程序所构成的程序单元,外部子程序单元中的函数和例行子程序能被FORTRAN90程序中其它程序单元调用执行。
由FUNCTION或SUBROUTINE语句开始。
模块单元是由能被其它程序单元访问的一组定义(数据实体定义、数据类型定义、过程定义(称为模块子程序)、过程接口定义)所构成的程序单元。
模块子程序允许被模块单元中其它模块子程序或允许访问该模块单元的其它程序单元调用执行。
由MODULE语句开始。
块数据单元是为命名公用块中变量指定初始值的程序单元。
块数据单元是不可执行的,在FORTRAN90中,一个块数据单元可被一个模块单元所替代。
由BLOCKDATA语句开始。
主程序单元是FORTRAN90程序中被首次执行的程序单元,也是程序运行的入口点,被看成是其它程序单元执行的启动器。
由PROGRAM语句开始,可缺省。
主程序单元、外部子程序单元和模块单元可以包含内部子程序,包含内部子程序的程序单元称为宿主(Host),内部子程序能被其宿主或宿主内的其它子程序调用执行。
1.程序语法描述
<程序>→<主程序单元>{<外部子程序单元>∣<模块单元>∣<块数据单元>}
说明:
每个程序单元需要单独创建一个源程序文件。
2.主程序单元语法描述
<程序>→[
[<说明部分>]
[<操作部分>]
[<内部子程序部分>]
<说明部分>→{<内部数据类型说明语句>∣
<派生数据类型说明语句>∣
<数组类型说明语句>∣
<指针类型说明语句>}
<操作部分>→{<非说明语句>}
<内部子程序部分>→CONTAINS
说明:
①END语句是程序中唯一必须出现的语法成分,这意味着一个主程序单元可以只含一个END语句,但是这样的主程序单元是没有意义的。
②一般语句部分不能为空,且至少包含一个能产生输出结果的可执行语句(如:
PRINT语句),其它部分可视具体情况可有可无。
③如果END语句包含主程序单元的程序名称,则必须在主程序单元首部给出PROGRAM语句,且语句中的程序名称必须与END语句中的程序名称相同,否则产生语法错误。
④程序单元中只要首部不出现关键字:
SUBROUTINE、FUNCTION、MODULE或BLOCKDATA,则该程序单元被识别为主程序单元。
⑤PROGRAM语句是可选的,但只能出现一次,PROGRAM语句中程序名称被确定为FORTRAN程序主程序的名称,不出现PROGRAM语句将指定“MAIN$文件名”为FORTRAN程序主程序的名称。
{<内部子程序>}
3.程序名称作用域
PROGRAM语句中程序名称的作用域为整个FORTRAN程序,属于全局名称,不能在其它程序单元中重复说明,也不能在本程序单元中说明为局部名称。
[例3.2]编写一个包含下列语句的主程序单元,给出所有可能的主程序单元结构。
INTEGERa,b,c
a=10;b=20
c=a+b
PRINT*,'a+b=',c
解:
有5种程序单元结构,如图3-1所示。
图3-1主程序单元结构
表3-2语句排列次序
注释行,
INCLUDE语句和
指令
OPTION语句
PROGRAM,FUNCTION,SUBROUTINE,MODULE或BLOCKDATA语句
USE语句
NAMELIST,FORMAT和ENTRY语句
IMPLICITNONE语句
PARAMETER语句
IMPLICIT语句
PARAMETER和
DATA语句
派生类型定义,接口块,类型说明语句,语句函数语句和说明语句
DATA语句
可执行语句
CONTAINS语句
内部子程序或模块子程序
END语句
3.5语句
FORTRAN90语句分为两类:
一类为可执行语句,另一类为非执行语句。
可执行语句表示程序要完成某个操作,如一条PRINT语句表示要完成一个输出操作。
非执行语句描述程序的某种属性(数据的特性、安排、编辑、转换等信息),如INTEGER语句描述一组整型变量数据。
1.语句排列次序
程序中语句要求按规定次序排列,即语句位置不能随意放置,否则将产生语法错误,如INTEGER语句和PRINT语句的先后顺序就不能颠倒。
语句排列次序规定如表3-2所示,表中给出了全部语句的排列次序要求。
语句的排列次序与执行次序不完全相同。
说明:
①竖线表示左右两边语句可任意交叉颠倒,如FORMAT语句和PARAMETER语句可交叉颠倒。
②横线表示上下语句不能交叉颠倒,如FORMAT语句在前,CONTAINS语句在后,两者不可颠倒。
2.语句受限使用
FORTRAN90对语句的使用范围有具体规定,即语句的受限使用。
表3-3给出了FORTRAN90受限语句及使用的程序单元范围。
表3-3FORTRAN90受限语句
程序单元范围
受限语句
主程序单元
ENTRY和RETURN语句
模块单元
ENTRY,FORMAT,OPTIONAL,和INTENT语句,语句函数,及可执行语句
块数据单元
CONTAINS,ENTRY,和FORMAT语句,接口块,语句函数,及可执行语句
内部子程序
CONTAINS和ENTRY语句
说明:
模块单元范围不包括模块子程序。
接口实体
CONTAINS,DATA,ENTRY,SAVE,和FORMAT语句,语句函数,及可执行语句
3.6程序书写格式
每种程序设计语言对程序书写格式都有具体而严格的要求,程序书写格式反映了语言独特的书写风格。
对于传统FORTRAN语言,采用固定书写格式。
目前自由书写格式受到了人们的普遍欢迎,成为体现现代程序设计语言的要素之一。
FORTRAN90既保留了传统的固定书写格式,又引入了现代的自由书写格式。
用户可视具体情况灵活选择使用。
FORTRAN90程序书写格式有自由格式和固定格式两种,VisualFORTRAN5.0还增加了tab格式,在FORTRAN95中取消了固定格式。
固定格式或tab格式在同一个源程序中不能与自由格式混合使用,但在不同程序中可使用不同的书写格式。
所有格式都不区分大小写字母。
1.标志符
对于源程序中一行文本及文本行中不同区域的意义,不同书写格式有不同规定,FORTRAN90定义了若干标志符来指定一文本串的实际意义。
不同书写格式都定义了自己特有的标志符,有些标志符相互不能通用,也有一些标志符在所有书写格式中含义相同,相互通用。
有3个通用标志符:
注释标志符“!
”、语句分隔标志符“;”和续行标志符“&”。
●注释标志符
注释标志符“!
”在自由格式中可出现在程序单元任何位置,表示其后至行末为注释文本。
注释行只起解释和说明作用,对程序单元的编译没有影响。
一行均为空格也是一个注释行。
●语句分隔标志符
允许一行书写多条语句,所有书写格式都定义了语句分隔符“;”用于分隔语句。
多个连续“;”视为一个“;”,如果“;”是一行中或是注释前最后一个字符,则该“;”被忽略。
●续行标志符
一条长语句可分多行书写,中间需用续行标志符连接。
所有书写格式都允许使用续行标志
符“&”实现续行。
在自由格式中,续行标志符“&”只能出现在前一续行的末尾。
在固定格式中,则只能出现在第6列。
在DigitalVisualFORTRAN5.0中,续行可达511行。
表3-4给出标志符及其含义。
表3-4标志符及其含义
项目
标志符
书写格式
位置
注释
!
所有格式
程序单元任意位置
注释行
!
自由格式
在一行的开始位置
!
C,or*
固定格式
在第1列
Tab格式
在第1列
续行
&
自由格式
在一行的末尾处
除0和空格之外的任意字符
固定格式
在第6列
除0之外任何数字
Tab格式
第一个tab之后
语句分隔
;
所有格式
在一行内两条语句之间
语句标号
1至5位十进制数
自由格式
在一条语句之前
固定格式
在1至5 列
Tab格式
在第一个tab之前
调试语句
D
固定格式
在第1列
Tab格式
在第1列
说明:
①如果标志符出现在字符常量或Hollerith常量中,则忽略标志符。
②调试语句标志符仅在固定格式和Tab格式中使用。
1.语句标号
语句前面可设置语句标号(即语句编号)。
语句标号有两个作用:
一个作用是可改善和提高程序的可读性;另一个作用是便于其他语句访问该语句,获取信息或转移控制。
语句标号可放在任何完整语句前面,但不属于后面的语句。
语句标号是长度不超过5位十进制正整数,不允许全0。
空语句不能加语句标号。
语句标号的声明具有唯一性,在同一程序单元中不能声明相同的语句标号。
在自由格式中,语句标号可出现在一条语句的前面。
在固定格式中,语句标号可出现在一行的1至5列。
2.自由格式
在自由格式中,语句在一行中的位置不受限制。
语句长度可达132个字符。
空格在自由格式中是有意义的。
关于空格的使用要求有:
●空格除允许出现在字符串文本中外,它不能出现在任何合法单词内,如单词“INTEGER”和“**”中字符之间不能出现空格,空格只能出现在程序中两个单词之间。
●在相邻两个关键字、名称、常量、标号之间必须插入一个或多个空格。
如语句“100DOcount=1,8”中,标号“100”和关键字“DO”后必须有空格。
●有些关键字之间必须有至少一个空格,有些关键字之间可没有空格。
如关键字“DO”和“WHILE”之间必须有空格,即“DOWHILE”非法,而关键字“BLOCK”和“DATA”之间可没有空格,即“BLOCKDATA”或“BLOCKDATA”均为合法。
表3-5给出关键字对空格的要求。
表3-5相邻关键字对空格的要求
可选空格
必有空格
BLOCKDATA
CASEDEFAULT
DOUBLECOMPLEX
DOWHILE
DOUBLEPRECISION
IMPLICITtype-specifier
ELSEIF
IMPLICITNONE
ENDBLOCKDATA
INTERFACEASSIGNMENT
ENDDO
INTERFACEOPERATOR
ENDFILE
MODULEPROCEDURE
ENDFORALL
RECURSIVEFUNCTION
ENDFUNCTION
RECURSIVESUBROUTINE
ENDIF
RECURSIVEtype-specifierFUNCTION
ENDINTERFACE
type-specifierFUNCTION
ENDMODULE
type-specifierRECURSIVEFUNCTION
ENDPROGRAM
ENDSELECT
ENDSUBROUTINE
ENDTYPE
ENDWHERE
GOTO
INOUT
SELECTCASE
在自由格式中,注释标志符“!
”可出现在一行的任意位置。
若出现在第1列,则表示该行为注释文本。
若出现在中间位置,则表示前面为语句部分而后面至行末为注释文本。
在自由格式中,一行允许写多个语句,语句之间用分号“;”分隔,最后语句之后不能有分号“;”。
一个语句最长不能超过2640个字符。
在自由格式中,续行标志符“&”出现在待续行语句末尾处,若出现在注释文本、字符常量或Hollerith常量中,则失去续行功能。
符号“&”后的第一个非注释行为续行,FORTRAN90允许有39个续行,VisualFORTRAN5.0允许511个续行。
续行有以下两种情况:
●在语句中单词符号外续行,要求待续行语句部分末尾必须有续行标志符“&”,在接续行语句部分首字符可以写续行标志符“&”,也可以不写。
如下面两条语句功能相同,接续行续行标志符“&”,可写可不写。
total=100*(i+j)*&!
待续行
count!
接续行
total=100*(i+j)*&!
待续行
&count!
接续行
●在语句中的单词符号(名称、关键字、常量)内续行,要求待续行语句部分末尾和接续行语句部分首字符必须有续行标志符“&”,这样前一行末尾字符串和后一行首部字符串被组合成语句中的完整单词。
下面语句接续行续行标志符“&”必须写。
total=100*(i+j)*co&!
待续行,在名称单词“count”内续行
&unt!
接续行
total=10&!
待续行,在常量单词“100”内续行
&0*(i+j)*count!
接续行
print*,'Output&!
待续行,在字符常量单词内续行
&studenttotal'!
接续行
IF((i+j)>100)TH&!
待续行,在关键字单词“THEN”内续行
&EN!
接续行
3.7数据类型
计算机系统的处理对象是数据(信息),离开了数据,计算机就失去了应有的价值。
数据、数据表示及数据类型在计算机科应用(特别是程序设计语言和程序设计)中占有重要位置。
1.数据
数据是自然界中客观事物的符号表示,数据的含义极为广泛。
在计算机科学中,一切能够被计算机接受和处理的对象(信息)均看成是数据。
如:
面积、周长、体积、距离、速度等都是计算机处理的数据。
随着计算机技术的发展,数据的内涵也在不断扩展。
数据由早期的整数、实数、复数等简单数据,发展到现在字符串、文本、图形、图像、声音等复杂数据。
数据分数值数据和非数值数据。
●数值数据是能直接进行算术运算(科学计算)的数据。
如:
整数、实数、复数等。
●非数值计算是不能直接进行算术运算,一般进行查询、检索、分类和处理等操作的数据。
如:
字符串、文本、表格、图形、图像、声音等。
2.数据表示
数据在计算机中进行运算或处理必须采用某种合适的表示形式。
同一数据如果表示形式不同,则处理的方式也有所差异。
选择合适的数据表示形式,对于程序设计来说至关重要。
●数据的定点表示。
定点表示就是数据小数点位置固定不变的表示方式。
如整型数采用定点表示。
定点表示的数据非常精确,没有误差,但表示数据的范围小。
定点表示整数的范围如表3-6所示。
表3-6定点整数范围
整数位数
有符号整数范围
8位(一个字节)
-128~127
16位(二个字节)
-32,768~32767
32位(四个字节)
-2,147,483,648~2,147,483,647
64位(八个字节)
-9,223,372,036,854,775,808~9,223,372,036,854,775,807
●数据的浮点表示。
浮点表示就是数据小数点位置浮动变化的表示方式。
如实型数采用浮点表示。
浮点表示的数据存在一定误差,当实数非常小时,计算机将认定其为0,但表示数据的范围大。
浮点表示实数的范围如表3-7所示。
表3-7浮点实数范围
实数位数
实数范围
32位(四个字节)
1.17549435×10-38~3.40282347×10-38
64位(八个字节)
2.2250738585072013×10-308~1.7976931348623158×10308
●数据的ASCII码表示。
ASCII码是数据的一种编码形
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fortran90 程序设计 chapter3