资源预览内容
第1页 / 共138页
第2页 / 共138页
第3页 / 共138页
第4页 / 共138页
第5页 / 共138页
第6页 / 共138页
第7页 / 共138页
第8页 / 共138页
第9页 / 共138页
第10页 / 共138页
亲,该文档总共138页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
3.4FORTRAN字符集字符集3.5常量常量3.6变量变量3.7内部函数内部函数3.8算术表达式算术表达式3.9赋值语句赋值语句3.10简单的输出语句表控输出简单的输出语句表控输出3.11简单的输入语句表控输入简单的输入语句表控输入3.12PARAMETER语句语句(参数阐明参数阐明)3.13PROGRAM语句语句,END语句语句,STOP语句语句,PAUSE语句语句下一页上一页停止放映不是任何一种外文字母或数字符号都能被某一不是任何一种外文字母或数字符号都能被某一计算机言算机言语接受。每一种接受。每一种计算机的高算机的高级言言语分分别规定了它允定了它允许运运用的字符。用的字符。Fortran允允许运用的字符如下:运用的字符如下:英文字母英文字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ阿拉伯数字阿拉伯数字:0123456789特殊符号特殊符号:空格:空格=+-*/(),.:!%&;$?_(F90中新增的字符中新增的字符)3.4FORTRAN字符集字符集下一页上一页停止放映文字字符英文字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z数字 0 1 2 3 4 5 6 7 8 9 下划线 _特殊字符图形称号图形称号空格: 冒号等号!叹号十加号引号一减号 百分号*星号 英语的and斜线; 分号(左括号 小于)右活号 大于,逗号?问号小数点或句号 货币符号撇号表表3-13-1根本的根本的FORTRAN 90/95FORTRAN 90/95字符集字符集 根本字符分根本字符分为两大两大类:文字字符和特殊字符。除了:文字字符和特殊字符。除了货币符号符号可以本地化之外,其他任何字符都必需按照表里的方式。可以本地化之外,其他任何字符都必需按照表里的方式。下一页上一页停止放映留意留意:一一.文字字符的用途文字字符的用途主主要要是是命命名名的的作作用用,可可以以用用来来命命名名言言语中的一切中的一切对象,象,这三种符号可以混合运用;三种符号可以混合运用;其其中中数数字字还具具有有它它本本来来的的含含义,就就是表示数目。是表示数目。二二.特殊字符的用途特殊字符的用途特特殊殊字字符符主主要要具具有有功功能能的的意意义,如如编辑功功能能,运算功能,运算功能,语法功能等。法功能等。FORTRAN90/95规范范原原那那么么上上接接受受小小写写字母。因此除了以下位置,大小写是等价的。字母。因此除了以下位置,大小写是等价的。三三.大小写必需区分的位置大小写必需区分的位置作作为字符常量的字符串里面;字符常量的字符串里面;输入入输出的出的纪录里面;里面;作作为编辑描画符的引号或撇号里面。描画符的引号或撇号里面。下一页上一页停止放映四四.CVF编译平台接受小写字母。平台接受小写字母。在在OPEN或或者者INQUIRE语句句里里面面的的FILE=或或NAME=后面能否区分大小写,也是由后面能否区分大小写,也是由编译平台指定的。平台指定的。五五.假假设是是需需求求调用用其其他他言言语写写的的子子程程序序,而而恰恰好好该种种言言语(例如例如C言言语)是区分大小写的,是区分大小写的,这时就需求特就需求特别小心。小心。【例例3_13_1】 假假设用用C C写写了了两两个个子子程程序序EIGENEIGEN和和eigeneigen,然然后后有有如如下下的的FROTRANFROTRAN片断:片断: EXTERNAL EIGEN EXTERNAL EIGEN . . CALL EIGEN CALL EIGEN . . END END这时它是它是该援用援用EIGENEIGEN还是是eigeneigen呢?假呢?假设所运用的所运用的FROTRANFROTRAN系系统正好是怪异的那种,没正好是怪异的那种,没问题。假。假设是常是常见的的如如CVFCVF,这时它就无法区分它就无法区分EIGENEIGEN和和eigeneigen,这样就必需就必需给它它们改改换称号了。称号了。 下一页上一页停止放映六六.数字的涵数字的涵义:除了以下情形,数字除了以下情形,数字总是表示十是表示十进位数字位数字属于二属于二进制,八制,八进制,十六制,十六进制的字面常量;制的字面常量;带有有B,O,Z编辑描画符的描画符的输入入输出出纪录。【例【例3_23_2】 以下以下语句当中的数字不是属于十句当中的数字不是属于十进位数字:位数字: DATA I, J, K / O1001, 23.54, Z5CA2 / DATA I, J, K / O1001, 23.54, Z5CA2 / 其中第一个其中第一个为八八进制数,第二个制数,第二个为十十进制数,第三个制数,第三个为十六十六进制数。制数。下一页上一页停止放映七七.下划下划线的涵的涵义:下下划划线的的主主要要作作用用就就是是置置于于单词之之间替替代代空空格格,使得我使得我们在命名在命名时运用清楚的英运用清楚的英语词汇。下下划划线不不能能置置于于恣恣意意称称号号的的前前面面,但但是是可可以以置置于于称号的最后。称号的最后。下下划划线也也用用于于在在字字面面常常量量中中区区隔隔常常量量的的值和和种种别参数。参数。无无论给什什么么对象象起起名名,都都尽尽量量运运用用完完好好的的英英语单词,同同时运运用用下下划划线以以区区隔隔不不同同的的单词。所所谓好好记性性不不如如烂笔笔头,只只需需这样才才干干真真实保保证他他在在任任何何时候候,在在程程序代序代码的恣意位置都知道恣意的恣意位置都知道恣意变量等的含量等的含义。下一页上一页停止放映与平台有关的与平台有关的FORTRAN辅助字符集助字符集根根本本字字符符集集是是在在一一切切FROTRAN的的编译平平台台都都可可以以运运用用的的,被被FORTRAN95规范范规定定为必必需需运运用用的的默默许字字符符集集。另另外外还有有些些辅助助的的字字符符那那么么是是不不同的平台有不同的用法商定。同的平台有不同的用法商定。辅助字符分两助字符分两类:可打印字符和不可打印字符。:可打印字符和不可打印字符。可打印字符;可打印字符;各各种种本本地地化化言言语的的字字符符,象象汉字字,希希腊腊字字母母等等,都都可可以以运运用用在在字字符符串串,注注释,和和输入入输出出纪录当当中。中。下一页上一页停止放映不可打印字符。不可打印字符。主要就是控制字符,例如制表符主要就是控制字符,例如制表符Tab键。制制表表符符(Tab键)对于于一一个个FORTRAN77规范范的的编译系系统来来说,在在固固定定源源程程序序方方式式里里的的Tab被被看看成成是是至至少少6个个空空格格,而而在在自自在在源源程程序序方方式式里里的的Tab被被看看成成1个个空空格格。这样假假设Tab被被放放在在文文本本当当中中用用于于输出出格格式式控控制制,那那么么这种种默默许的的转换方方式式,有有时就就会会导致致输出出格格式式的的混乱。混乱。有有关关FORTRAN95的的辅助助字字符符集集的的运运用用规那那么么,请参考参考详细的的编译系系统的的阐明。明。下一页上一页停止放映所所谓谓FORTRAN的的词词汇汇就就是是一一个个语语句句的的最最小小的的意意义义单单位位,它它由由一一个个或或多多个个FORTRAN字字符符集集里里的的字字符符组组成成。包包括括两两类类共共6种,分类例举如下:种,分类例举如下:3.5 3.5 词汇词汇由文字字符由文字字符组成的成的词汇,包括,包括4种:种:语句关句关键词称号称号由由单个个词汇组成的字面常量成的字面常量标识符符由特殊字符由特殊字符组成成算符算符:+,.OR.定界符:逗号,定界符:逗号,=,=,:,:,:,;,;,%。下一页上一页停止放映1.1.语句关句关键词标志志语句本身句本身【例【例3-3】下面的】下面的DO语句中的关句中的关键词DO本身本身标志了志了该语句句DOI=1,500标志志选项。【例【例3-4】下面的】下面的INTENT语句当中的句当中的IN,OUT,或或INOUT。INTENT(IN),A。BINTENT(INOUT),X,Y,Z用在用在语句当中,起分界的作用。句当中,起分界的作用。【例【例3-5】如下面如下面DO语句当中的句当中的WHILEDOWHILE(.NOT.VECTOR)并非一切的并非一切的语句都必需包含关句都必需包含关键词,在,在FORTRAN里面,里面,赋值语句和函数都不需求关句和函数都不需求关键词。下一页上一页停止放映在在一一个个程程序序当当中中,任任何何对象象都都需需求求有有一一个个称称号号,给它它们命命名名所所得得到到的的词汇,可可以以说就就是是普普通通言言语里里的的名名词,这样的的对象象包包括括:变量量,命命名名常常量量,程程序序单元元,过程程,公公用用块,构造,派生,构造,派生类型,型,哑元等。元等。2.2.称号称号称号的拼写称号的拼写规那么那么为:称号必需由字母开称号必需由字母开头,可以由文字字符混合,可以由文字字符混合组成,而下成,而下划划线不能作不能作为称号的第一个字符。称号的第一个字符。一个称号至多允一个称号至多允许含有含有31个字符。个字符。下一页上一页停止放映一个常量就是一个常量就是对一个一个值的符合的符合语法的字符法的字符标志。志。常量分常量分为字面常量和命名常量两种:字面常量和命名常量两种:一一个个值假假设没没有有在在程程序序里里面面经过命命名名,那那么么称称为字字面面常量,常量,这种常量不能取派生数据种常量不能取派生数据类型。型。【例【例4-6】66953Z5120A2.3417.TRUE.(33.2,5.0)3. 3. 常量常量下一页上一页停止放映一一个个值假假设在在程程序序里里面面经过命命名名,那那么么称称为命命名名常常量量,这种常量能取派生数据种常量能取派生数据类型。型。【例【例3-73-7】 在如下声明在如下声明语句当中的常量句当中的常量UNSTABLE_POINTUNSTABLE_POINT为命名常命名常量:量: PARAMETER (UNSTABLE_POINT=5.332) PARAMETER (UNSTABLE_POINT=5.332) 对于常量的于常量的语义,将在,将在阐明数据明数据时进一步一步讨论。 下一页上一页停止放映在在一一个个程程序序单元元内内部部,对任任何何一一条条语句句,都都可可以以在在该语句句的的前前面面加加上上语句句标签,以以便便在在该程程序序单元元内内部部的的任任何何其其他他位位置置援援用用该语句句。需需求求援援用用其其他他语句句的的语句句包包括括CALL语句,句,DO构造,分支构造,分支语句,句,输入入输出出语句等。句等。4. 4. 语句句标签语句句标签的的书写写规那么那么为:语句句标签由由1到到5个十个十进制数字制数字组成,其中必需至少有一成,其中必需至少有一个数字不能是个数字不能是0,例如,例如000不能作不能作为标识符;符;标识符以符以0开开头是没有任何意是没有任何意义的,例如的,例如0034与与34没有没有区区别。标识符不能放置于空符不能放置于空语句之前。句之前。下一页上一页停止放映算符用在表达式当中,算符用在表达式当中,经过运算而运算而获得某种得某种类型的型的值。算符分算符分为固有算符和自定固有算符和自定义算符两算符两类:固有算符固有算符在在FORTRAN95语法法当当中中,R310规定定了了固固有有算算符符的的构构成成法那么。法那么。【例【例4-9】/表示字符串的表示字符串的衔接接+表示表示对数数值的加法的加法.NOT.表示表示逻辑否否.OR.表示表示逻辑或或5. 5. 算符算符下一页上一页停止放映6. 6. 定界符定界符全部的定界符有如下全部的定界符有如下1212种方式:种方式:/ / ( ( ) ) (/ (/ /) /) , , = = = = : : : : ; %; %其中其中( (和和) ),(/(/和和/)/)都必需成都必需成对出出现顾名名思思义,这些些定定界界符符的的功功能能就就是是在在一一个个延延续的的源源码文文本本当当中中,用用来来把把不不同同性性质的的源源码成成分分区区分分开开。它它们的的详细含含义将将在在详细的的语句句当当中中阐明。明。下一页上一页停止放映数数据据表表示示的的实实现现具具有有一一个个重重要要的的参参数数,即即存存储储空空间间,所所以以当当问问题题要要求求的的数数据据,不不能能满满足足于于默默许许的的存存储储空空间间的的时时候候,这这时时,就就需需求求进进一一步步给给出出数数据据的的种种别别参参数数,这是更加详细的数据描画。这是更加详细的数据描画。 假假设设在在真真实实世世界界问问题题当当中中出出现现的的的的数数据据对对象象,不不符符合合已已有有的的固固有有数数据据类类型型以以及及数数组组的的定定义义,这这时时就就需需求求根根据据用用户户的的要要求求构构造造一一个个依依赖赖于于问问题题的的特特定定的的数数据据构构造造,这就是数据描画时会遇到的三种情况。这就是数据描画时会遇到的三种情况。对于这三种情况,对于这三种情况,FORTRANFORTRAN的处理方式如下:的处理方式如下: 数据的性数据的性质 数据的数据的类型以及其他属性型以及其他属性3.6 3.6 常量与变量常量与变量下一页上一页停止放映第一种情况:第一种情况: 确确定定固固有有数数据据的的类型型以以及及相相应的的能能够具具有有的属性。的属性。 FORTRAN FORTRAN所能辨所能辨识的数据的数据类型首先分型首先分为两大两大类: 固有数据固有数据类型型 派生数据派生数据类型型 所所谓固固有有类型型,是是FORTRANFORTRAN言言语所所定定义的的最最根根本本的的数数据据类型型,每每一一种种固固有有类型型是是和和该种种数数据据类型型相相应的的各各种种运运算算一一同同隐式式定定义的的,也也就就是是说一一旦旦声声明明引引入入某某种种固固有有数数据据类型型,那那么么系系统总是是默默以以为对它它进展展相相应的的运运算算是是合合法法的的,并且并且总是可是可访问的。的。固有固有类型包括五种:型包括五种:整型整型(INTEGER)、实型型(REAL)、复型、复型(COMPLEX)、逻辑型型(LOGICAL)和字符型和字符型(CHARACTER)。下一页上一页停止放映所所谓派派生生类型型是是由由用用户定定义的的,非非隐式式定定义的的类型型,只只需需用用一一个个类型型定定义来来声声明明其其成成员是是何何种种固固有有类型型,或或者者是是何何种种其其它它曾曾经定定义过的的派派生生类型型,就就可可以以被被FORTRANFORTRAN认可可为一种数据一种数据类型。型。 由由于于派派生生数数据据类型型正正是是由由固固有有数数据据类型型充充任任成成员而而构构成成的的,因因此此在在构构造造关关系系上上,可可以以把把固固有有数数据据类型型看成原子,而把派生数据看成原子,而把派生数据类型看成分子。型看成分子。 派派生生类型型数数据据最最重重要要的的用用途途就就是是扩展展了了数数组这种种重要的数据构造。重要的数据构造。 下一页上一页停止放映每一种固有数据每一种固有数据类型的存型的存储方式方式: :在在FORTRAN77FORTRAN77中:中: 整整型型,实型型,逻辑型型数数据据都都是是运运用用了了一一个个数数值存存储单元元,复复型型和和双双精精度度数数据据那那么么运运用用了了两两个个数数值存存储单元元, 字字符符型型数数据据运运用用一一个个字字符符存存储单元。元。在在FORTRAN90FORTRAN90与与9595中:中:默默许在在FORTRAN77FORTRAN77中中的的规定定, , 在在FORTRAN90FORTRAN90之之后后的的规范范里里,开开场允允许在在一一个个程程序序单元元内内,由由用用户定定义特特定定的的不不依依赖于于固固有有数数据据存存储方方式式的的数数据据类型型,这就是派生数据就是派生数据类型。型。下一页上一页停止放映第二种情况:第二种情况: 指定固有数据指定固有数据类型的种型的种别参数。参数。用用来来指指定定程程序序当当中中需需求求运运用用的的每每一一种种固固有有数数据据类型型所所要要求求占占据据的的内内存存空空间大大小小的的属属性性由由种种别参参数数表表示示。给这个个变量量( (参参数数) )指指定定一一个个数数值,就就可可以以阐明明数数据据所所需需求求的的存存储空空间的的大大小小,也也就就是是程程序允序允许的数的数值数据的位数和字符串的字符数目。数据的位数和字符串的字符数目。 KIND(KIND(种种类种种别参参数数) )分分别阐明明整整数数类型型的的十十进制制指指数数范范围,实数数类型型和和复复数数类型型的的十十进制制精精度和指数范度和指数范围,字符,字符类型和型和逻辑类型的表示方法。型的表示方法。 LEN(LEN(长度度种种别参参数数) )对字字符符类型型规定定了了字字符符的的个数。个数。【例】【例】 REAL(KIND REAL(KIND2):ABC2):ABC,X X,LONGLONG CHARACTER(LEN CHARACTER(LEN4040,KINDKINDGREECE)GREECE):NAMENAME下一页上一页停止放映假假设没有声明数据的种没有声明数据的种别,那么程序就会采用默,那么程序就会采用默许的参数,的参数,FORTRANFORTRAN的早期版本没有引入种的早期版本没有引入种别参数,直接采用参数,直接采用了两种不同的数据了两种不同的数据类型型: REAL: REAL和和DOUBLE PRECISIONDOUBLE PRECISIONFORTRAN90FORTRAN90以来的版本里,引入种以来的版本里,引入种别参数,参数,对种种别参数的不参数的不同取同取值,就足,就足够表达不同的精度,表达不同的精度,对于在指定种于在指定种别参数的数参数的数值时,普通是以字或字,普通是以字或字节为单位,位,这样对于字于字长不同的机器而言,相互之不同的机器而言,相互之间就会出就会出现程程序移植的困序移植的困难,下面分情况予以,下面分情况予以阐明:明:下一页上一页停止放映实型型-由于由于DOUBLEPRECISION是属于老式是属于老式规范的范的遗留物,因此运用留物,因此运用DOUBLEPRECISION作作为数据声明的数据声明的程序就不具程序就不具备良好的可移植性,由于所良好的可移植性,由于所谓双精度是双精度是针对详细的机器的字的机器的字长而言的,而言的,对于于32位的机器,双精度就是位的机器,双精度就是64位,而位,而对于于64位机器,双精度就意味着位机器,双精度就意味着128位,位,这样在不同字在不同字长的机器的机器环境里,双精度就具有不同的位数,使境里,双精度就具有不同的位数,使得程序无法在不同字得程序无法在不同字长的平台之的平台之间进展直接的移植。展直接的移植。最好一致运用最好一致运用REAL的种的种别参数来表达算法所要求的参数来表达算法所要求的实数数精度。精度。整型整型-在程序运用当中会出在程序运用当中会出现几乎任何大小的整型数据,几乎任何大小的整型数据,因此无法在言因此无法在言语规范里面一致的范里面一致的规定整型数据的存定整型数据的存储空空间大小,大小,这就同就同样需求依托种需求依托种别参数来指定参数来指定应该给详细问题当中的整型数据确定多大的存当中的整型数据确定多大的存储空空间。详细地指定方式属地指定方式属于于编译器器设计者的者的选择,需求参考相,需求参考相应编译器的言器的言语阐明。明。下一页上一页停止放映复复型型-由由于于所所谓复复型型本本质上上就就是是由由两两个个实数数表表达达的的,因因此此按按道道理理复复型型同同样应该可可以以具具有有表表达达多多种种精精度度的的才才干干,而而实践践上上早早期期的的版版本本在在这方方面面是是有有欠欠缺缺的的,不不过随随着着FORTRAN90FORTRAN90引引入入种种别参参数数,就就可可以以在在COMPLEXCOMPLEX的的声声明明语句句里里经过运运用用种种别参参数数来来实现多多种种精精度度的的表表达达,对于于任任何何FORTRANFORTRAN的的实现,至至少少能能表表达达两两种种精精度度,而而普普通通来来说是是多多于两种的。于两种的。 字字符符型型-对于于字字符符,普普通通的的机机器器都都是是用用单字字节8bits8bits来来表表示示一一个个字字符符,这样就就可可以以总共共表表示示28=25628=256个个不不同同的的字字符符,这对于于任任何何以以字字母母写写出出来来的的言言语都都是是足足够的的了了,不不过对于于汉语,日日语这样一一些些言言语就就不不够用用了了,普普通通得得需需求求双双字字节,即即16bits16bits,这样就就可可以以表表达达216216个个字字符符。因因此此字字符符型型数数据据同同样需需求求附附加加种种别参参数数,以以便便除除了了运运用用默默许的的根根本本字字符符之之外外,还可可以以运运用用辅助助字字符符集集里里的的字字符符,从从而而实现程程序序的的本本地地化化。不不过某某个个详细的的编译器器能能否否支支持双字持双字节字符,必需参考相字符,必需参考相应的手册。的手册。下一页上一页停止放映 逻辑型型-由由于于一一切切逻辑型型数数据据都都只只需需两两个个值,因因此此如如何何确确定定逻辑型型数数据据的的存存储空空间应该是是非非常常好好办的的,不不过不不幸幸的的是是,FORTRANFORTRAN的的早早期期版版本本规定定逻辑型型数数据据运运用用和和实型型数数据据一一样大大小小的的机机器器存存储单位位,这样当当机机器器的的字字长很很大大时,就就会会非非常常的的浪浪费机机器器的的存存储空空间。因因此此到到了了FORTRAN90FORTRAN90和和FORTRAN FORTRAN 9595,除除了了作作为默默许的的情情形形,和和旧旧的的言言语规范范坚持持兼兼容容之之外外,还可可以以经过指指定定种种别参参数数,使使得得逻辑型型数数据据的的存存储空空间大大小小只只需需一一个个字字,甚甚至至一一个个bitbit。当然当然详细的运用方法需求参考相的运用方法需求参考相应编译器的器的阐明。明。下一页上一页停止放映第三种情况:第三种情况: 派生数据派生数据类型。型。在在计算算机机言言语里里,把把对象象的的每每一一个个需需求求描描画画的的性性质用用一一个个适适当当的的根根本本数数据据类型型来来表表示示,这样用用一一组根根本本数数据据类型型就就可可以以描描画画该对象象。而而这一一组数数据据可可以以看看成成是是一一个个新新的数据的数据类型,表示了一个型,表示了一个变量。量。这样构构造造出出来来的的数数据据类型型称称为派派生生数数据据类型型,和和固固有有数数据据类型型一一样,在在声声明明派派生生数数据据类型型时,需需求求给知知称称号号,描描画画它它的的每每一一个个元元素素的的固固有有数数据据类型型以以及及相相应属属性性和和种种别参参数数( (假假设非非默默许的的话) ),当当然然也也需需求求适适当当地地定定义其其运运算。算。下一页上一页停止放映派生数据派生数据类型是由一型是由一组数数组成,就会出成,就会出现两种情况:两种情况:这组数据都是属于一个数据数据都是属于一个数据类型型这样构构成成的的派派生生数数据据类型型就就是是数数组,显然然对于于数数组的的元元素素的的描描画画就就可可以以一一致致进展展。详细的的用用法法会会在在后后面面专门阐明。明。这组数据的各个元素属于不同的数据数据的各个元素属于不同的数据类型型这样构构成成的的派派生生数数据据类型型称称为构构造造,这时就就需需求求对每每个个数数据据元元素素进展展分分别的的阐明明, 即即每每一一个个元元素素的的数数据据类型,能型,能够有的属性,种有的属性,种别参数等等。参数等等。下一页上一页停止放映【例【例5-25-2】 下面是一个典型的派生数据下面是一个典型的派生数据类型。型。 TYPE SAMPLE TYPE SAMPLE REAL CURRENT REAL CURRENT COMPLEX (KIND = QUAD) PHASE COMPLEX (KIND = QUAD) PHASE CHARACTER (LEN = 50) SOURCE CHARACTER (LEN = 50) SOURCE END TYPE SAMPLE END TYPE SAMPLE TYPE TYPE (SAMPLE)SI401(SAMPLE)SI401,SI402SI402,SI403SI403,SI404SI404在在上上面面的的例例子子里里,首首先先定定义了了一一个个称称号号为SAMPLESAMPLE的的数数据据类型型,每每一一个个SAMPLESAMPLE类型型的的数数据据由由三三个个分分量量组成成,它它们的的称称号号分分别为CURRENTCURRENT,PHASEPHASE,SOURCESOURCE,分分别属属于于实型型,复复型型和和字字符符型型,其其中中复复型型和和字字符符型型还分分别阐明明了了种种别参参数数和和字字符符长度度属属性性,然然后后给出出了了程程序序当当中中需需求求运运用用的的四四个个属属于于该种种数数据据类型型的的变量量:SI401SI401,SI402SI402,SI403SI403,SI404SI404。下一页上一页停止放映数据不同种类的存储方式数据不同种类的存储方式对于计算机来说,数据分类的第一个反响就是针对不同对于计算机来说,数据分类的第一个反响就是针对不同类型的数据商定不同的存储方式。类型的数据商定不同的存储方式。由于存储方式的规定涉及到编译环境的设置,因此存储由于存储方式的规定涉及到编译环境的设置,因此存储方式的商定是与系统环境相关的,鉴于方式的商定是与系统环境相关的,鉴于Compaq Visual Compaq Visual FortranFortran的广泛运用,本节特别针对的广泛运用,本节特别针对Compaq Visual Compaq Visual FortranFortran系统而言的阐明了数据的各种存储方式。系统而言的阐明了数据的各种存储方式。下表下表5-15-1列出了列出了Compaq Visual FortranCompaq Visual Fortran一切的固有数据一切的固有数据类型的存储空间要求,和相应的可以在这个空间里表达类型的存储空间要求,和相应的可以在这个空间里表达的数据规模。的数据规模。 下一页上一页停止放映数据类型单位存储空间能表示的数据规模BYTEINTEGER(1)1byte(8bits)BYTE表示等价于INTEGER(1)的带符号的整型数据类型。INTEGER参见INTEGER(2), INTEGER(4), 以及 INTEGER(8). 带 符 号 的 整 型 数 据 , 包 括 INTEGER(2), INTEGER(4), or INTEGER(8)。数据规模由编译器选项/integer_size:nn 控制。默许的规模控制选项为/integer_size:32 (等价于INTEGER(4)。INTEGER(1)1byte(8bits)从-128到127带符号的整数。INTEGER(2)2bytes(16bits)从-32,768到32,767带符号的整数。INTEGER(4)4bytes(32bits)从-2,147,483,648到2,147,483,647带符号的整型数据。INTEGER(8)8bytes(64bits)从-9,223,372,036,854,775,808到9,223,372,036,854,775,807带符号的整型数据。 下一页上一页停止放映REAL(4)REAL4bytes(32bits)从1.17549435E-38到 3.40282347E38的按照IEEE S_floating格式的单精度实型浮点值 。 在 1.17549429E-38和 1.40129846E-45之间的值是非常态的。REAL(8)DOUBLEPRECISION8bytes(64bits)从2.2250738585072021D-308到1.7976931348623158D308的 按 照 IEEE T_floating格式的双精度实型浮点值。在2.2250738585072021D-308和4.94065645841246544D-324之间的值是非常态的。COMPLEX(4)COMPLEX8bytes(64bits)由一对从1.17549435E-38到 3.40282347E38的按照IEEE S_floating格式的单精度实型浮点值组成的单精度复型浮点值。在1.17549429E-38和1.40129846E-45之间的值是非常态的。COMPLEX(8)DOUBLECOMPLEX16bytes(128bits)由 一 对 从 2.2250738585072021D-308到1.7976931348623158D308的 按 照 IEEE T_floating格式的双精度实型浮点值组成的 双 精 度 复 型 浮 点 值 。 在2.2250738585072021D-308和4.94065645841246544D-324之间的值是非常态的。下一页上一页停止放映LOGICAL参见LOGICAL(2), LOGICAL(4), 以及LOGICAL(8).逻辑型值, 包括LOGICAL(2), LOGICAL(4),以及 LOGICAL(8). 数据规模由编译器选项/integer_size:nn 控制。默许的规模控制选 项 为 /integer_size:32 (等 价 于LOGICAL(4)。LOGICAL(1)1byte(8bits)逻辑型值.TRUE. 或.FALSE.LOGICAL(2)2bytes(16bits)逻辑型值.TRUE. 或.FALSE.LOGICAL(4)4bytes(32bits)逻辑型值.TRUE. 或.FALSE.LOGICAL(8)8bytes(64bits)逻辑型值.TRUE. 或.FALSE.CHARACTER每个字符1 byte (8 bits) 根据商定的字符编码表示的字符数据,经过 字 符 数 据 的 声 明 方 式 :CHARACTER(LEN=n)或 CHARACTER*n,其中n 表示byte数,来表示数据规模。 HOLLERITH每个Hollerith 字符1 byte (8 bits) Hollerith常量。下一页上一页停止放映对于于字字符符型型数数据据来来说,它它的的存存储空空间完完全全和和字字符符串串长度度成成正正比比,因因此此只只需需直直接接规定定字字符符串串的的字字符符个个数数,就可以一致地得到其存就可以一致地得到其存储空空间分配分配规范。范。至至于于复复型型和和派派生生类型型,那那么么完完全全以以其其他他数数据据类型型作作为成成员,本本身身没没有有什什么么特特别的的规定定,因因此此也也就就没没有有独独特特的的针对这两种数据两种数据类型的种型的种别参数。参数。显然然,FORTRANFORTRAN经过运运用用种种别参参数数来来明明确确地地规定定数数据据的的表表示示,使使得得FortranFortran的的规范范化化程程度度得得到到了了进一一步步提提高高,从从而而提高了程序的可移植性。提高了程序的可移植性。 下一页上一页停止放映 数据的根本固有数据的根本固有类型型 对对于于计计算算机机来来说说,数数据据的的意意义义无无非非就就是是要要知知道道在在存存储储空间为一个特定的数据划出多大的空间来装载它。空间为一个特定的数据划出多大的空间来装载它。FORTRAN早早期期的的做做法法一一致致地地给给一一类类数数据据指指定定固固定定的的存存储方式。储方式。FORTRAN90引引进进的的种种别别参参数数,这这样样就就扩扩展展了了固固有有数数据类型的存储方式。据类型的存储方式。整型整型(INTEGER)实型实型(REAL)双精度型双精度型(DOUBLEPRECISION)复型复型(COMPLEX)逻辑型逻辑型(LOGICAL)字符型字符型(CHARACTER)隐含阐明隐含阐明IMPLICIT固有数据类型固有数据类型:Fortran中有七种类型阐明语中有七种类型阐明语句:句:类型阐明类型阐明1 1隐式式类型描画法型描画法 当初当初FORTRANFORTRAN运用运用隐式式类型声明方法,是与言型声明方法,是与言语的的简朴形状相朴形状相顺应的除非首先声明了的除非首先声明了IMPLICITIMPLICIT语句。句。 隐式式类型声明方法的商定,就是型声明方法的商定,就是让称号的第一个称号的第一个字母来字母来标志它的志它的类型,型,隐含含阐明明(I-N(I-N规那么那么) ) I-N I-N规那么那么: :假假设不加不加阐明,以字母明,以字母I,J,K,L,M,NI,J,K,L,M,N六六个字母开个字母开头的一切的一切变量名,其量名,其变量量类型型为整型,以整型,以其他字母开其他字母开头的的为实型型变量。量。例如:例如:I I,J J,IMAXIMAX,NUMBERNUMBER,LINELINE,JOB KlJOB Kl为整型整型变量量A A,BlBl,COUNTCOUNT,AMOUNTAMOUNT,TOTAL TOTAL 为实型型变量量 FORTRANFORTRAN沿用了数学里的很多沿用了数学里的很多习惯,这里运用里运用I I,J J,K K,L L,M M,N N来表述整数,就是一个明来表述整数,就是一个明显的数学的数学习惯。 下一页上一页停止放映利用利用IMPLICIT语句来自定句来自定义字母分配方式,普通的字母分配方式,普通的IMPLICIT语句的句法方式有句的句法方式有2种,分种,分别行使不同的功能:行使不同的功能:IMPLICITtype-specification(letter-specification-list)IMPLICITNONEf90其中的字母分配其中的字母分配阐明列表的句法方式明列表的句法方式为:letter-letter例如:例如:IMPLICITINTEGER(A,C,T-V)IMPLICITREAL(I,J)IMPLICITINTEGER(A, B), REAL(I,K),INTEGER(X-Z)下一页上一页停止放映隐式式类型的普通型的普通规那么如下:那么如下:假假设要运用要运用IMPLICITNONE语句,那么它必需句,那么它必需放置在任何放置在任何PARAMETER语句之前,并且在其作句之前,并且在其作用域内,再也不能出用域内,再也不能出现其他其他IMPLICIT语句。句。IMPLICIT语句当中出句当中出现的表述字母范的表述字母范围的的letter-letter,左,左边的字母的字母绝对不能是右不能是右边字母的字母的按照字母表按照字母表顺序的后面的字母。序的后面的字母。letter-letter的字母之的字母之间为减号,而非下划减号,而非下划线,表示按照字母表表示按照字母表顺序从左序从左边字母到右字母到右边字母的一切字母的一切字母。字母。在一个作用域里面的在一个作用域里面的IMPLICIT语句里面,同一句里面,同一个字母不能出如今字母分配个字母不能出如今字母分配阐明列表里面的不同明列表里面的不同项里,例如作里,例如作为单个字母出个字母出现了,又同了,又同时处于另一个于另一个字母范字母范围之中,或同之中,或同时处于于2个不同的字母范个不同的字母范围里里面。面。下一页上一页停止放映IMPLICIT语句同句同样可以用来可以用来为派生数据派生数据类型分配首字型分配首字母作母作为类型型标志。志。例如:例如:IMPLICITCOMPLEX(E-G,W-Z)IMPLICITNONEf90中每个中每个变量名都量名都应该在在阐明部分明部分中中阐明其明其类型,不型,不应该运用运用隐式式阐明、明、为了抑制了抑制隐式式阐明明发生作用,生作用,应该在程序在程序阐明部分开明部分开场就写出就写出语句:句:IMIPLlCITNONE既声明不运用既声明不运用隐式式阐明。明。下一页上一页停止放映【例【例7-15】下面的下面的IMPLICIT语句都是合法句都是合法语句:句:IMPLICITCHARACTER*30(B,T),COMPLEX(W-Z)IMPLICITLOGICAL(KIND=BIT)(Q)IMPLICITREAL(QUAD)(X-Z)IMPLICITTYPE(NUMBER)(A-E)IMPLICITTYPE(ARTICAL)(A,V),CHARACTER*100(B)【例【例7-167-16】 下面的下面的IMPLICITIMPLICIT语句都是非法句都是非法语句:句: IMPLICIT CHARACTER*30(B IMPLICIT CHARACTER*30(B,T)T),COMPLEX(Z -W)COMPLEX(Z -W) !W W应该放置在放置在Z Z 之前。之前。 IMPLICIT LOGICAL(KIND=BIT)(Q) IMPLICIT LOGICAL(KIND=BIT)(Q),REAL(QUAD)(P-T)REAL(QUAD)(P-T) ! Q Q同同时表示表示2 2种种类型。型。 IMPLICIT TYPE(ARTICAL)(A-H) IMPLICIT TYPE(ARTICAL)(A-H),CHARACTER*100CHARACTER*100(B(B,Q)Q) !B B同同时表示表示2 2种种类型。型。 运用运用隐式式类型声明在一个嵌套作用域里面所型声明在一个嵌套作用域里面所导致的致的变量量作用域混乱作用域混乱问题在有关作用域之在有关作用域之间通通讯时再再讨论。下一页上一页停止放映 注: (1) “IN规那么的隐含商定级别最低。 如下程序中IMAX变量为整型,而其它以I、J开头的 变量为实型: IMPLICIT REAL(I,J) INTEGER IMAX (2) 类型阐明语句和IMPLICIT语句是非执行语句。 (3) 类型阐明只在本程序单位内有效。 (4) IMPLICIT语句和类型阐明语句应该出如今本程序单位中的一切执行语句之前,其中IMPLICIT语句又应在一切的类型阐明语句之前。下一页上一页停止放映a)a)普通方式普通方式 类型型阐明明(种种别阐明明),),属性属性阐明表明表 : : 变量名表量名表=初初值 2 2类型型阐明明语句句 F90程序中的数据都有三个特征:程序中的数据都有三个特征:类型、种型、种别、属性,、属性,由由类型型阐明明语句来定句来定义阐明明例:例:REAL(KIND=2),DIMENSION(1:10):X,Y阐明明变量量X,Y都都是是实型型,种种别是是2,属属性性是是一一维数数组。这样X、Y实践践上上是是两两个个种种别参参数数为2的的一一维实型型数数组,各各具具有有10个元素。个元素。在某些在某些场所下,种所下,种别阐明与属性明与属性阐明可以省略,此明可以省略,此时它的它的普通方式是最根本方式:普通方式是最根本方式:类型型阐明明:变量名表量名表(90/95)类型型阐明明变量名表量名表(77)下一页上一页停止放映b)类型阐明内部类型一共有五种,三种数值型:整数型INTEGER、实数型、复数型COMPLEX;两种非数值型:逻辑型LOGICAL、字符型CHARACTER。例:例:INTEGER:X,YREAL:A,BCOMPLEX:C,D或:或:INTEGERX,YREALA,BCOMPLEXC,D下一页上一页停止放映c)赋初值F90中置初值不需求专门语句,只需在类型阐明语句的变量表中,把要置的初值写在指定的变量名后即可。它的方式为:类型阐明:变量名1=初值1,变量名2=初值2,例如REAL:X=1.1,Y=2.2,Z,W=4.4留意:在留意:在过程中程中这种种赋初初值的方法的方法实践上是践上是对变量量赋于了于了SAVE属性,即当属性,即当过程被程被调用以后,用以后,变量的量的新新值将被保管下来,将被保管下来,过程再次被程再次被调用用时变量的初量的初值不再是不再是类型型阐明明语句中的初句中的初值,而是上次被保管下,而是上次被保管下来的来的值。例如,假例如,假设希望上面的希望上面的变量量X在在过程每次被程每次被调用用时都有一都有一样的初的初值,那么,那么应该写成:写成:REAL,SAVE:X,Y=2.2,Z,W=4.4X=1.1下一页上一页停止放映d)DATA语句在F77中,有一个专门给变量赋初值的阐明语句,即DATA语句。它的普通方式为:DATA变量名表1/初值表1/,变量名表2/初值表2/变量名表可以是隐DO循环,初值表中的常数之间须用逗号分开,反复的常数表值可以采用如下表示方法:反复次数*常数值在DATA语句中赋值的变量都有SAVE属性,除非变量名又出如今COMMON语句中,可以经过SAVE语句或类型阐明中的SAVE属性对其显式阐明。下一页上一页停止放映例如,可以对数组作以下的初始化:例如,可以对数组作以下的初始化:DIMENSIONA(10,10)DATAA/100*1.0/!按数组变量名一致初始化按数组变量名一致初始化DATAA(1,1),A(10,1),A(3,3)/2*2.5,2.0/!按数组元素逐个初始化按数组元素逐个初始化DATA(A(I,J),I=1,5,2),J=1,5)/15*1.0/!按隐按隐DO循环初始化循环初始化下一页上一页停止放映对数值型数据作初始化:对数值型数据作初始化:INTEGERn,order,list(100)REALcoef(4),eps(2),pi(5),x(5,5)COMPLEX*8cstuffDATAn/0/,order/3/,list/100*0/DATAcoef/1.0,2*3.0,1.0/,eps(1)/.00001/DATApi/5*3.14159/DATA(x(j,i),i=1,j),j=1,5)/15*1.0/DATAcstuff/(-1.0,-1.0)/下一页上一页停止放映a)种别阐明方法种别是F90的新概念。一个数据,不仅有一个类型,并在同一类型下可分为假设干种别,种别值确定了数据的大小范围和精度。有了种别阐明后,程序更易于移植。为了提高效率,节约内存,按照该变量表达的值范围与表达的精度范围,把同一类划分成几个种别,不同种别分配不同数目的内存单元。3 3种别阐明种别阐明下一页上一页停止放映种种别由由种种别选择符符阐明明,写写在在类型型关关键字字后后括括号号内内,其其关关键字是字是KIND,后跟,后跟=号及种号及种别值。其方式。其方式为:类型型阐明明(KIND=种种别值)例如:要例如:要阐明明变量量X是是实型,种型,种别值是是2REAL(KIND=2):X一个一个变量必有一个种量必有一个种别,假,假设变量的量的类型型阐明明语句中没有种句中没有种别阐明符,如:明符,如:REAL:X,Y或或REALX,Y那么表示那么表示变量量X,Y的种的种别缺省,缺省,这时采用系采用系统规定的定的规范范值。下一页上一页停止放映 b) 种别值Compaq Fortran 提供了如下几类种别值:整数:有4种,种别值即为字节数n。 种别值种别值n n取取值范范围 (-28n-128n-1-1) (-28n-128n-1-1)INTEGER(KIND=1)或或INTEGER*1-128127INTEGER(KIND=2)或或INTEGER*2-3276832767INTEGER(KIND=4)或或INTEGER*4-21474836482147483647缺省值缺省值INTEGER(KIND=8)或或INTEGER*8-92233720368547758089223372036854775807仅用于仅用于AlphaAlpha芯片芯片机型机型下一页上一页停止放映实型数:有实型数:有3种。种。F90规范没有规定指数的允许范围和有规范没有规定指数的允许范围和有效位数。效位数。REAL(KIND=4)orREAL*4通常通常实数的范数的范围是是10-38103810-381038之之间的的7 7位有效数字位有效数字缺省值缺省值REAL(KIND=8)orREAL*8等价于双精度型等价于双精度型DOUBLE PRECISIONDOUBLE PRECISIONREAL(KIND=16)orREAL*16仅用于仅用于OpenVMSOpenVMS、Tru64 UNIXTru64 UNIX、LinuxLinux操作系统操作系统下一页上一页停止放映复型数:有复型数:有3种。每种表示整型数据或实型数据的方法种。每种表示整型数据或实型数据的方法都可以用来表示复型数据的实部和虚部。留意简写与都可以用来表示复型数据的实部和虚部。留意简写与完好写法之间的差别。完好写法之间的差别。COMPLEX(KIND=4)orCOMPLEX*8缺省值缺省值COMPLEX(KIND=8)orCOMPLEX*16等价于双精度复型等价于双精度复型DOUBLE COMPLEXDOUBLE COMPLEXCOMPLEX(KIND=16)orCOMPLEX*32仅用于仅用于OpenVMSOpenVMS、Tru64 UNIXTru64 UNIX、LinuxLinux操作操作系统系统下一页上一页停止放映逻辑型:有逻辑型:有4种种LOGICAL(KIND=1)orLOGICAL*1LOGICAL(KIND=2)orLOGICAL*2LOGICAL(KIND=4)orLOGICAL*4缺省值缺省值LOGICAL(KIND=8)orLOGICAL*8仅用于仅用于AlphaAlpha芯片机型芯片机型字符型:有字符型:有1种种CHARACTER(KIND=1)字字 节节 型型 BYTE: 取取 值值 为为 1个个 字字 节节 , 等等 价价 于于INTEGER(KIND=1)。下一页上一页停止放映c)种别函数F90中关于种别选择的内部函数有:KIND(X):函数KIND用于查询变量的种别,它前往X的种别值,当X取值为0时,前往规范种别值即缺省值。如:KIND(0)前往值是整型的规范种别值KIND(0.)前往值是实型的规范种别值KIND(.FALSE.)前往值是逻辑型的规范种别值KIND(“A)前往字符型的规范种别值。下一页上一页停止放映SELECTED_REAL_KIND(n,m):该函数前往函数前往实型型变量量对所取的所取的值范范围和精度恰当的种和精度恰当的种别值。其中。其中n是指明十是指明十进制有效位的位数,制有效位的位数,m指明指明值范范围内以内以10为底的底的幂次。次。例如:例如:SELECTED_REAL_KIND(6,70)的前往的前往值为8,表示一个能表达表示一个能表达6位精度、位精度、值范范围在在10701070之之间实型数的种型数的种别值为8。如如该机型上不能提供机型上不能提供满足要求的种足要求的种别值时,它的前往,它的前往值是:是:-1(当精度位数达不到当精度位数达不到时),-2(当数当数值范范围达不到达不到时),-3(两者都达不到两者都达不到时)。对给定的定的实型和复型量型和复型量X,它的精度和范,它的精度和范围可可经过内部函内部函数数PRECISION(X)和和RANGE(X)查出。出。下一页上一页停止放映SELECTED_INT_KIND(m):该函函数数前前往往整整型型变量量对所所取取的的值范范围恰恰当当的的种种别值。m指明指明值的范的范围是是10m10m。可以用可以用SELECTED_REAL_KIND或或SELECTED_INT_KIND定定义一个一个PARAMETER常数以常数以备后用。后用。例如:下面的例如:下面的语句定句定义了有了有9位数的整型数。位数的整型数。INTEGER,PARAMETER:MY_INT_KIND=SELECTED_INT_KIND(9)INTEGER(MY_INT_KIND):HILL下一页上一页停止放映 d) d)常数种常数种别程序中的常数如要程序中的常数如要标明种明种别,方法有二。,方法有二。假假设是数是数值型常数或型常数或逻辑型常数那么用后型常数那么用后辍法,法,即后加一下划即后加一下划线,再跟种,再跟种别值。留意:留意:当当实数型数据的指数字母是数型数据的指数字母是D时,制止,制止阐明种明种别值。假假设复型数据的复型数据的实部和虚部都是整数,那么它的部和虚部都是整数,那么它的精度和范精度和范围与缺省的与缺省的实型一型一样。假。假设两部分都是两部分都是实型,那么它的精度和范型,那么它的精度和范围按如下的方法确定:两部按如下的方法确定:两部分有一分有一样的种的种别,为该种种别,两部分中有不同的种,两部分中有不同的种别,那么由,那么由较大的种大的种别值确定。确定。下一页上一页停止放映例如:例如:21_2+7.6_4表表示示整整型型种种别别为为2的的数数21与与实实型型种种别别为为4的的数数7.6相加。相加。3.8E-5_40.87D-16双精度数据制止阐明种别值双精度数据制止阐明种别值(4.7_8,5)复复型型数数据据表表示示用用括括号号,逗逗号号分分开开前前面面的的实实部部(种种别值为别值为8的实数的实数)和后面的虚部和后面的虚部(缺省种别值的整数缺省种别值的整数)。.FALSE._4表示逻辑型,其常数值是假,种别值是表示逻辑型,其常数值是假,种别值是4。下一页上一页停止放映例:例:INTEGER,PARAMETER:LONG=SELECTED_REAL_KIND(9,99)REAL:A=2.8_LONG,B=1.23456789E60_LONG来来保保证常常数数有有需需求求的的9位位有有效效数数字字和和-10-991099的的指指数数范范围。PRECISION(A)和和RANGE(A)的前往的前往值应是是9和和99。假假设是字符型常数,那么用前是字符型常数,那么用前辍法,把种法,把种别值列在字符常数列在字符常数之前,其之前,其间用下划用下划线衔接。接。例如:例如:对CompaqFortran1_或:或:1_计算数学算数学或:或:计算数学算数学字符串的字符不只限于字符串的字符不只限于Fortran字符集内,字符集内,处置系置系统支持支持的的图形符号也是允形符号也是允许的。的。下一页上一页停止放映在在FORTRAN言言语规范里面,范里面,规定了十定了十进制之外的三种制之外的三种进制方式:制方式: 二进制常量方式: B digit digit B “ digit digit 其中的数字只能是0或1.即二进制常量表示为以字母B开头,后跟用一对撇号或引号括起来的数字串,而且每个数字不是0就是l。 e)e)整数的其他整数的其他进制制 下一页上一页停止放映 八进制常量方式: O digit digit O “ digit digit 其中的数字只能是0到7.八进制常量表示为以字母O开头,后跟用一对撇号或引号括起来的数字串,而且每个数字是0到7之间的一个数字。下一页上一页停止放映十六进制常量方式: Z digit digit Z “ digit digit 其中的数字只能是0到9,和A到F这五个字母,用来表示10到15.十六进制常量表示为以字母z开头,后服用一对撇号或引号括起来的数字或字母的串,而且每个数字是数字0到9或字母A到F之一。 这里定里定义的二的二进制、八制、八进制和十六制和十六进制的字面常量方式只制的字面常量方式只能用于能用于DATA语句中。句中。下一页上一页停止放映假设要在CVF系统里面运用非十进制来表示数值,除了属于FORTRAN规范的二进制,八进制,十六进制三种额外的进制方式之外,还可以运用如下的语法方式表示更多的进制方式: s base # nnn.其中:base是从2到36的恣意整数。这阐明CVF可以运用从2进制不断到36进制来表示整数。而假设base省略了,但是给出了符号#,那么表示后面的整型数据被看成16进制,假设base 和#都被省略了,那么后面的整型数据就被看成默许的10进制。s 数的符号下一页上一页停止放映例例: 下下面面的的7个个变变量量所所赋赋予予的的整整型型数数值值都都是是表表示示十十进进制制的的3,994,575:I=2#1111001111001111001111m=7#45644664J=+8#17171717K=#3CF3CFn=+17#2DE110L=3994575index=36#2DM8F下一页上一页停止放映例例:这些都是正确的整型常量;些都是正确的整型常量;0-112+4321262_21992110235764803_831_SHORT9999999999999999999_LONG下一页上一页停止放映例例:这些都是些都是错误的整型常量的整型常量:9999999999999999999!对于于默默许的的种种别参参数来数来说,这个数太大了。个数太大了。3.14!不允!不允许出出现小数点。小数点。32,767!不允!不允许出出现逗号。逗号。33_3!3不是一个有定不是一个有定义的种的种别参数。参数。下一页上一页停止放映44属性属性阐明明阐明明语句除句除阐明明对象的象的类型、种型、种别外,外,还可可阐明明对象的属性。每种属性象的属性。每种属性阐明都有明都有专门的关的关键字,字,各属性关各属性关键字字间用逗号分开,全部属性关用逗号分开,全部属性关键字写字写在在阐明明语句种句种别阐明符之后,双分隔号明符之后,双分隔号:之前,之前,各属性关各属性关键字之字之间次序恣意。属性不次序恣意。属性不仅用于用于阐明明数据,数据,还用于用于阐明明过程。程。 a) a)属性属性属性属性阐明关明关键字有很多,将在有关章字有很多,将在有关章节中中详细阐明。普通来明。普通来说,数据属性描画了一个,数据属性描画了一个对象是如何象是如何在程序中被运用的,可以运用一个或多个在程序中被运用的,可以运用一个或多个语句来句来规定某个数据定某个数据对象的属性。象的属性。Visual FortranVisual Fortran的数的数据属性如下表所示。据属性如下表所示。下一页上一页停止放映属性关键字属性关键字描画描画适用范围适用范围ALLOCATABLEALLOCATABLE阐明动态数组阐明动态数组数组数组AUTOMATICAUTOMATIC声明变量在堆栈中而不是在内存中声明变量在堆栈中而不是在内存中变量变量DIMENSIONDIMENSION阐明数组阐明数组数组变量数组变量EXTERNALEXTERNAL声明外部函数的称号声明外部函数的称号过程过程INTENTINTENT阐明过程哑元的意图阐明过程哑元的意图过程哑元过程哑元INTRINSICINTRINSIC声明一个内部函数声明一个内部函数过程过程OPTIONALOPTIONAL允许过程被调用时省略哑元允许过程被调用时省略哑元过程哑元过程哑元PARAMETERPARAMETER声明常量声明常量常量常量POINTERPOINTER声明数据对象为指针声明数据对象为指针变量变量PRIVATEPRIVATE限制模块中的实体访问于本块内限制模块中的实体访问于本块内常常量量、变变量量或或模块模块PUBLICPUBLIC允许模块中的实体被外部运用允许模块中的实体被外部运用常常量量、变变量量或或模块模块SAVESAVE保管过程执行后其中的变量值保管过程执行后其中的变量值变量或公共块变量或公共块STATICSTATIC阐明变量为静态存储阐明变量为静态存储变量变量TARGETTARGET声明变量为目的声明变量为目的变量变量VOLATILEVOLATILE声明对象为完全不可预测并在编译时无优化声明对象为完全不可预测并在编译时无优化数数据据对对象象或或公公共块共块下一页上一页停止放映a)PARAMETER属性PARAMETER属性也称常数名属性。被阐明对象一旦附加了PARAMETER属性,就不再是变量名,而是一个常数的名字,它的方式虽与变量名方式一样,但在程序中不能改动值,只能当常数运用。在在F77中:中:PARAMETER参数参数语句句例:例:PARAMETER(LOCAL=100)详细运用在后面运用在后面张杰引杰引见例如:例如:INTEGER,PARAMETER:K=20REAL(8),PARAMETER:PI=3.141592654,K_PAI=K*PI,Light_Speed=2.99654E10下一页上一页停止放映b)DIMENSION属性属性阐明一个符号名是数明一个符号名是数组名,只需在名,只需在阐明明语句中附加数句中附加数组属属性关性关键字。数字。数组属性关属性关键字是:字是:DIMENSION(数数组外形外形阐明明)。例如:例如:INTEGER(KIND=2),DIMENSION(-2:8):X阐明了明了X是种是种别为2的整型一的整型一维数数组名,数名,数组下下标以以-2为下界,下界,8为上界,共有上界,共有11个元素。个元素。留意:留意:F77中不允中不允许DIMENSION和和类型型阐明明语句出如今同句出如今同一个一个语句中。句中。下一页上一页停止放映a)逻辑型型变量量类型型阐明明语句普通方式句普通方式为:LOGICAL(KIND=种种别值),属性属性阐明表明表:变量名表量名表=初始初始值例如:例如:LOGICAL(KIND=2),DIMENSION(1:10):X阐明明X数数组内有元素内有元素X(1),X(2),X(10)都是种都是种别值为2的的逻辑型数据。型数据。变量名表中要量名表中要阐明明为逻辑型的型的对象可以是普通象可以是普通变量名、数量名、数组名、名、函数名、构造名等等,彼此用逗号分开,函数名、构造名等等,彼此用逗号分开,还可以可以对变量量赋以初以初值。例如要例如要阐明明L1,L2是是逻辑型型变量,并且置量,并且置L1初初值为真,可写成:真,可写成:LOGICAL:L1=.TRUE.,L2或或LOGICALL1,L25 5 逻辑型数据型数据下一页上一页停止放映b)逻辑赋值逻辑变量取量取值的方法和数的方法和数值型数据型数据类似:似:赋初初值、读入、入、运用运用逻辑赋值语句句赋值。逻辑赋值语句的普通方式是:句的普通方式是:逻辑变量量逻辑表达式表达式它通常用来将一个它通常用来将一个较长的表达式的的表达式的值赋给一个一个逻辑型型变量,而后作量,而后作为条件写在条件写在IF语句或句或选择构造中,使条件构造中,使条件变得得简短明确。短明确。下一页上一页停止放映例:例:输入入实数数x,求下面的函数,求下面的函数值。ProgramSampleimplicitnonereal:x,ylogical:in_sideread*,x;print*,x=,xin_side=x1.and.x 6字符型数据字符型数据 a) a) 字符字符变量量字符常数的普通方式是由一字符常数的普通方式是由一对单引号引号 或一或一对双引号双引号“9090限定的一串字符。字符串中的字符,允限定的一串字符。字符串中的字符,允许是是PORTRANPORTRAN字符集的恣意字符,假字符集的恣意字符,假设系系统还支持其它字符,支持其它字符,例如例如汉字、希腊字、化学符号、数学符号,也可引入字字、希腊字、化学符号、数学符号,也可引入字符串内,用一符串内,用一对 或或“界定。界定。字符型数据除了有字符型数据除了有类型、种型、种别外,比其它外,比其它类型型还多了一多了一个个长度特性,即度特性,即规定它有几个字符数。其普通方式是:定它有几个字符数。其普通方式是:CHARACTER(LEN=CHARACTER(LEN=整型字符整型字符长度表达式度表达式,KIND=,KIND=种种别值),属性属性阐明明 : : 变量名表量名表=初始初始值 或或CHARACTER*字符字符长度度变量名表量名表CHARACTER变量名量名1*字符字符长度,度,变量名量名2*字符字符长度,度,下一页上一页停止放映例如:例如:CHARACTER(LEN=12,KIND=1):A,BCHARACTER(KIND=1,LEN=12):A,BCHARACTER(12,1):A,BCHARACTER*12:A,BCHARACTER*12A,B都都是是等等价价的的,前前者者阐阐明明X、Y2是是字字符符型型变变量量,种种别别参参数数为为3每个变量长度为每个变量长度为12。后者阐明阐明长度为。后者阐明阐明长度为12,种别值为,种别值为1。下一页上一页停止放映例如:例如:CHARACTER(LEN=*),PARAMETER:C_NAME=GIRLCHARACTER(LEN=*),PARAMETER:C_NAME=BOY都都是是合合法法的的阐明明语句句,阐明明字字符符常常量量C_NAME,前前者者长度度为4,后者,后者长度度为3。CHARACTER后后面面阐明明的的长度度是是其其后后一一切切实体体名名的的公公共共长度度,假假设某某一一变量量的的长度度与与其其它它不不同同,可可以以在在其其变量量名名后后标出出本本人人的的特特有有长度度,方方法法是是在在变量量名名后后写写上上*及及长度度。例加:例加:CHARACTER(LEN=12):A,B*5,C,D*7,E长度度也也可可以以写写成成一一个个*号号,表表示示长度度暂不不确确定定,待待以后与程序中以后与程序中实践需求的践需求的长度相一致。度相一致。下一页上一页停止放映b)b)字符子串字符子串字符数据中某一部分相字符数据中某一部分相连的字符的字符为字符子串,也字符子串,也可以作可以作为一个一个实体与字符体与字符变量一量一样参与操作。参与操作。字符子串的普通方式是:字符子串的普通方式是:V(e1:e2)V(e1:e2)。 V V是字符型是字符型实体名,包括字符体名,包括字符变量名、字量名、字符函数名、字符数符函数名、字符数组元素等等。元素等等。 e1,e2 e1,e2是整型表达式或正整常数,是整型表达式或正整常数,e1e1的的值指明子串在指明子串在V V中的起始列号,中的起始列号,e2e2的的值指明子串在指明子串在V V中的中的终止列号。假止列号。假设e1e1省略,表示子串从第一个省略,表示子串从第一个字符取起;字符取起;e2e2省略,表示子串取到末尾;如省略,表示子串取到末尾;如e1,e2e1,e2都省略,表示子串从都省略,表示子串从头取到尾。取到尾。下一页上一页停止放映例如:例如:设有字符有字符变量量A,其取,其取值为ABCDE12345FGH,那么下面的子串取那么下面的子串取值为:A(3:11)-CDE12345F,A(I+4:9)-E1234(I=1),1234(I=2)A(:5)-ABCDEA(11:)-FGHA(:)-ABCDE12345FGHA(3:3)-C下一页上一页停止放映c)字符操作与字符操作与赋值字符操作符只需一个,称并置符,字符操作符只需一个,称并置符,为两相两相连的斜的斜杠杠“/,其功能是把前后两个字符串拼,其功能是把前后两个字符串拼连在一同。在一同。例如:例如:AB/CDE的的值为ABCDE。C/ABC/A(2:6)/B(1:4)/D是把几是把几个字符串个字符串连在一同。在一同。字符字符赋值语句的普通方式:句的普通方式:字符字符变量字符表达式量字符表达式在字符在字符赋值语句中,要求两句中,要求两边种种别值一致,此外一致,此外还有有长度度问题。当两。当两边长度不等度不等时,赋值时以左以左边的字符的字符变量量阐明明长度度为准,当右准,当右边小于左小于左边时,尾部,尾部补空格,否那么空格,否那么将右将右边尾部的多余部分截去。尾部的多余部分截去。下一页上一页停止放映对字符串作初始化:对字符串作初始化:CHARACTER(LEN=10)nameCHARACTERBELL,TAB,LF,FF,STARS*6CHARACTER*8helpDATAname,STARS/ZhangFei,*/DATABELL,TAB,LF,FF/7,9,10,12/!对对ACSII控制字符码赋于值控制字符码赋于值DATAhelp(1:4),help(5:8)/2*HELP/!对字符子串分段赋值对字符子串分段赋值下一页上一页停止放映 d) 字符比较在书写FORTRAN语句时,大小写字母是等价的,但当进展字符操作和字符比较时必需看成是不同的。字符作比较实践上是比较它们的ASCII码代码大小。字符比较的普通方式:字符表达式关系操作符字符表达式例如:A=(XY/C2)/C3 当C1、C2、C3是字符型变量名时是合法的,要先计算两端字符表达式的值,而后比较它们能否满足关系。比较的方法随关系操作符而异:下一页上一页停止放映、关系操作符只需两边表达式第一个字符不等就可求得关系表达式的值。如:ABCCDE,因第一个字符AABC,因在ASCII码中1的序号为49,空格的序号为32。故上述关系表达式的值为真。下一页上一页停止放映 、 /=关系操作符先作第一位比较,如不等,关系表达式值为假,如相等,再比较第二位,不断比较到最后一位都相等缺乏添空格,才干得出关系表达式值为真,否那么值都为假。如作不等/=比较,只需有一位不等就可得出表达式的值为真,否那么不断比较到末位。 设有字符型变量名为NAME,其值为Einstein,那么关系表达式:NAME=Einstein- 真NAME=Ein/stein- 真NAME/=Ein/Stein - 真NAME=EINSTEIN - 假下一页上一页停止放映e)字符函数F90的内部函数中有许多与字符型操作有关的函数供用户运用,可以很方便地进展各种文本编辑。字符与数值相互转换的函数:ICHAR,CHAR,IACHR,ACHAR函数函数ICHAR的功能是把字符型的功能是把字符型转换成数成数值,援用方式是:,援用方式是:ICHAR(字符字符实体体)这里自里自变量的字符量的字符实体不一定是体不一定是单个字符,也可以是字符个字符,也可以是字符变量、字符子串、字符数量、字符子串、字符数组元素、字符函数元素、字符函数值等等以及由它等等以及由它们组成的字符表达式。成的字符表达式。函数函数值ICHAR前往字符前往字符实体第一个字符的代体第一个字符的代码值。例如:例如:print*,ichar(A),ichar(A_dog)print*,ichar(A_dog/in_my_room)打印的打印的结果是果是3个数字个数字65(A的序号是的序号是65)。下一页上一页停止放映函数函数CHAR的功能是把一个序号的功能是把一个序号转换成它的字符。成它的字符。援用方式:援用方式:CHAR(整型数整型数值表达式表达式)。先先计算算整整型型表表达达式式的的值,再再以以这个个值为序序号号,前前往往相相应的的单个字符,如个字符,如CHAR(65)的的值是是A。有了字符与数有了字符与数值的的转换函数,就可函数,就可处置字符循置字符循环。例如例如设要延要延续打印打印DIMENSIONA,DIMENSIONB,DIMENSIONZ,那么程序可写成:,那么程序可写成:DOI=0,25PRINT*,DIMENSION/CHAR(I+6)ENDDO下一页上一页停止放映求字符串求字符串长度的函数:度的函数:LENLEN函函数数LENLEN的的功功能能是是求求出出一一个个字字符符实体体的的长度度,援援用用方方式式是是:LEN(LEN(字字符符实体体) )。函函数数值前前往往一一个个正正整整教教,为该字字符符实体体的的长度包括尾随空格、中度包括尾随空格、中间空格在内。空格在内。如:如:LEN(ABCD 12 )LEN(ABCD 12 )的的值是是8 8。求子串在父串位置的函数:求子串在父串位置的函数:INDEX援用方式:援用方式:INDEX(父串父串,子串子串)函数函数值前往一个正整数,指明子串在父串中是从第几个前往一个正整数,指明子串在父串中是从第几个字符开字符开场的。父串、子串都可以是各种方式的字符的。父串、子串都可以是各种方式的字符实体。体。假假设第二个字符第二个字符实体不是第一个字符体不是第一个字符实体的子串,前往函体的子串,前往函数数值为0。如:如:INDEX(Einstein,s)的的值4。不不计尾部空格的字符串尾部空格的字符串长度函数:度函数:LEN_TRIM如:如:LEN_TRIM(ABCD12)的的值是是7。下一页上一页停止放映除去尾部空格函数:除去尾部空格函数:TRIM如:如:TRIM(ABCD12)/34的的值是是ABCD1234。比比较字符大小的函数:字符大小的函数:LGE、LGT、LLE、LLT比比较字字符符大大小小的的四四个个函函数数都都有有两两个个字字符符型型实体体作作自自变量量,用用来来判判别它它们之之间能能否否满足足各各种种、关关系系的的,其其函函数数值是是一一个个逻辑值,满足足该不不等等关关系系为真真,否否那那么么为假假。它它们的援用方式与功能如下:的援用方式与功能如下:援用方式援用方式含含 义义例例LGE(a1,a2)LGE(a1,a2)a1a1能否能否a2a2LGE(ALGE(A,B)B)值为假假LGT(a1,a2)LGT(a1,a2)a1a1能否能否a2a2LGT(ALGT(A,B)B)值为假假LLE(a1,a2)LLE(a1,a2)a1a1能否能否a2a2LLE(ALLE(A,B)B)值为真真LLT(a1,a2)LLT(a1,a2)a2a2能否能否a2a2LLT(ALLT(A,B)B)值为真真下一页上一页停止放映用用FortranFortran解解题往往往往要要用用到到一一些些专门运运算算。如如求求三三角角函函数数,开开根根号号,绝对值,对数数,指指数数,求求一一组数数中中最最大大数数和和最最小小数数等等。FortranFortran提提供供了了一一些些系系统内内在在函函数数来来完完成成这些些运运算算。程程序序设计者者不不用用本本人人设计进展展这些些运运算算的的语句句组即即程程序序段段或或子子程程序序,只只需需写写出出一一个个函函数数的的名名字字以以及及结出出一一个个或或假假设干干个个自自变量量,就就可可以以得得到到所所需需的的值。例例如:如: SQRT(4.0) SQRT(4.0) SIN(2.0) SIN(2.0) 2(2(弧弧度度) )的的正正弦弦值 留留意意三三角函数中的自角函数中的自变量量单位位为弧度!弧度! EXP(3.5) EXP(3.5) LOG(3.0) LOG(3.0) 3.7 3.7 内部函数内部函数下一页上一页停止放映函数名含 义运用例子相当数学上的运算ABSEXPSINCOSASINACOSTANATANLOGLOGlOINTMODSIGNREALMAXMIN求绝对值指数运算正弦值余弦值反正弦反余弦正切反正切自然对数常用对数取整求余求符号转换为实型求最大值求最小值ABS(X)EXP(X)SIN(X)COS(X)ASIN(X)ACOS(X)TAN(X)ATAN(X)ALOG(X)ALOG10(X)INT(X)MOD(X1,X2)SIGN(Xl,X2)REAL(I)MAX0(I1,I2,I3)MIN(Xl,X2,X3)取的整数部分 (当 ), (当 ) 常用的内部函数常用的内部函数二二内部函数的普通方式及援用内部函数的普通方式及援用普通援用方式普通援用方式:函数名函数名(自变量表列自变量表列)阐明阐明:自变量应该括起来自变量应该括起来.如如SINX应写成应写成SIN(X).三角函数的单位是弧度而不是度三角函数的单位是弧度而不是度.自变量可以是表达式自变量可以是表达式.如如EXP(3.5*6.2),还可是援用还可是援用函数函数SIN(3.5*COS(2.0),且可多次套用且可多次套用.如如:sin(1.5*sin(2.3*sin(2.0)隐含阐明不能改动内部函数的类型隐含阐明不能改动内部函数的类型.例例:implicitinteger(a-d)对程序中的对程序中的alog,dexp,dlog函数无影响函数无影响.下一页上一页停止放映内在函数的执行方法:Fortran将这些内在函数分别编成单个子程序,组成函数库,存在于外部介质(如磁盘)上。在完成源程序的编译之后,用LINK命令实现衔接,即将已翻译成二进制指令的目的程序与函数库衔接。也就是将程序中出现函数名的地方用函数库中相应的一组指令代入之,组成一个一致的“可执行目的块。一个内在函数可要求一个或多个自变量例如,SQRT函数只能有一个自变量,MOD函数要求两个自变量,MAX和MIN函数要求两个以上自变量。留意:当自变量个数规定为2个时,自变量的顺序不应恣意颠倒,如MOD(8,3)表示8被3除的余数,其值为2,当自变量个数为2时,自变量的顺序无关。下一页上一页停止放映函数的自变量是有类型的,函数值也是有类型的例如MOD(8,3)中自变量8和3是整型,函数MOD(8,3)的值“2也是整型,假设写成MOD(8.0,3.0),自变量是实型的,函数值也是实型的,其值为2.0。函数名分为“通用名和“公用名对自变量类型有严厉要求例如求余函数的“通用名为MOD,“公用名有三个(MOD,AMOD,DMOD)。要求自变量类型ird根据自变量的类型就自动确定了函数值的类型,如MOD(8,3)的值为整型,而MOD(8.0,3.0)的值为实型。当调用子程序时假设用内在函数作为自变量(实参),必需运用该内在函数的公用名。下一页上一页停止放映例如:例如:ABS(-5.6)=5.6ABS(-5.6)=5.6EXP(3.0)= =20.08553EXP(3.0)= =20.08553SQRT(4.0)= =2.0SQRT(4.0)= =2.0ALOG(3.0)=ln3.0=1.098612ALOG(3.0)=ln3.0=1.098612MOD(8,6)=2MOD(8,6)=2MAX0(3,4,5)=5MAX0(3,4,5)=5AMAX(3.0,4.0,5.0)=5.0AMAX(3.0,4.0,5.0)=5.0下一页上一页停止放映3.8 fortran3.8 fortran表达式表达式算符分算符分为两两类:固有算符与自定:固有算符与自定义算符算符 固有算符固有算符所所谓固固有有算算符符就就是是直直接接运运用用相相应符符号号,可可以以被被FORTRANFORTRAN编译器器所辨所辨识的算符。的算符。表达式包含三个根本成分:表达式包含三个根本成分:算元;算元;算符;算符;括号。括号。其中算元具有最根本的本其中算元具有最根本的本质含含义,因此最,因此最简单的表达式的表达式就是一个常量,或一个就是一个常量,或一个变量。量。下一页上一页停止放映表表FORTRAN的固有算符以及相应的算元类型的固有算符以及相应的算元类型算符类别固有算符算元类型算术运算+,-(一元算符)*,*,/,+,-(二元算符)任意数值类型与任意种别参数的数值的组合字符运算/具有相同种别参数的任意长度的字符串关系运算.EQ.,.NE.,=,/=两个算元或者同时是任意数值类型与任意种别参数的数值,或者同时是具有相同种别参数的任意长度的字符串关系运算.GT.,.GE.,.LT.,.LE.,=, ,=, ,=是为了向数学公式的写法是为了向数学公式的写法接近,而在接近,而在FORTRANFORTRAN里面最新引入的算符写法,分别等价里面最新引入的算符写法,分别等价于于.EQ.EQ.,.NE.NE.,.GT.GT.,.GE.GE.,.LT.LT.,.LE.LE.。下一页上一页停止放映自定自定义算符算符FORTRAN商商定定了了经过OPERATOR界界面面的的函函数数子子程序定程序定义自自定定义算符的算符的规那么。那么。(定定义过程略程略)自定自定义算符的方式算符的方式为:.XXX.在两个句点之在两个句点之间有有n个字母,个字母,n不大于不大于31。中中间的的字字母母串串最最好好是是一一个个表表达达该运运算算含含义的的英英文文单词。这个个单词不不能能与与固固有有运运算算符符或或者者逻辑常常量量里里面面曾曾经运用了的运用了的单词反复。反复。一元自定一元自定义算符具有最高的运算算符具有最高的运算优先先级,二元自定二元自定义算符具有最低的运算算符具有最低的运算优先先级。下一页上一页停止放映算符的优先级顺序算符的优先级顺序表各类算符在同样的优先级的情形下的运算优先级顺序表各类算符在同样的优先级的情形下的运算优先级顺序算符类型算符同优先级下的运算顺序优先级自定义一元自定义算符无最高数值运算*右到左数值运算*或/左到右数值运算一元算符+或-无数值运算二元算符+或-左到右字符运算/左到右关系运算.EQ.,.NE.,.LT.,.LE.,.GT.,.GE.,=,/=,=无逻辑运算.NOT.无逻辑运算.AND.左到右逻辑运算.OR.左到右逻辑运算.EQV.或.NEQV.左到右自定义二元自定义算符左到右最低下一页上一页停止放映固有算符算元1的类型算元2的类型计算结果的类型一元算符+,-I,R,ZI,R,Z二元算符+,-,*,/,*IRZI,R,ZI,R,ZI,R,ZI,R,ZR,R,ZZ,Z,Z串联算符/CCC.EQ.,.NE.,=,/=IRZCI,R,ZI,R,ZI,R,ZCL,L,LL,L,LL,L,LL.LT.,.LE.,.GT.,.GE.,=,/=,=IRCI,RI,RCL,LL,LL.NOT.LL.AND.,.OR.,.EQV.,NEQV.LLL表中表中I表示整型,表示整型,R表示表示实型,型,Z表示复型,表示复型,C表示字符型,表示字符型,L表示表示逻辑型。型。不同的算符所可以作用的算元不同的算符所可以作用的算元类型型下一页上一页停止放映1.对于固有数于固有数值运算的解运算的解释除了整数除了整数幂次的次的幂次运算之外,固有数次运算之外,固有数值运算运算总是首先按照前面的算元与是首先按照前面的算元与结果的数据属性一致性果的数据属性一致性规那么。那么。例例:3*4-123.5*4.0-14.0A*B-实型型I*J-整型整型对于表达式含有不同于表达式含有不同类型运算量的混合运算型运算量的混合运算,其运其运算算过程是先将低程是先将低级的运算量的运算量转换成高成高级类型型,然后然后进展同展同类型的运算量运算型的运算量运算.级别按如下按如下规定定:实型型(高高)整型整型(低低)例例:8.5*6=51.0非非51对于两个整数除法,由于一致性的要求,商也必于两个整数除法,由于一致性的要求,商也必需是整数,需是整数,对于无法整除的情形,于无法整除的情形,规定取离小数定取离小数方式的商最近的整数方式的商最近的整数值作作为计算算结果。果。下一页上一页停止放映 【例】下面表达式【例】下面表达式 5*(-2) 5*(-2)的的结果等于果等于0 0。对于于幂次运算次运算X*Y,假,假设Y是是负数,那么表达式就数,那么表达式就转换为1/(X*(-Y)留意,留意,这里引入除法之后,就在里引入除法之后,就在幂次运算里添加除法的特殊性。次运算里添加除法的特殊性。假假设X为负数,而数,而Y为实型,那么表达式无意型,那么表达式无意义。而当而当Y为实型或复型,那么前往型或复型,那么前往值是数学函数是数学函数XY的根本的根本值至于整数至于整数幂次的次的幂次运算,那么完全不用次运算,那么完全不用转换整数整数幂次次的的类型,由于乘方型,由于乘方实践上就是践上就是转换为乘法运算,整数乘法运算,整数幂次次的的乘方,就是非常直接的乘法。的的乘方,就是非常直接的乘法。=8=16.0=8.0=4.0下一页上一页停止放映接接连进展几次乘方运算展几次乘方运算时, ,按由右至左按由右至左组合。合。为防止出防止出错,运,运用括号来决用括号来决议运算次序运算次序 如如:234:234不能不能为(2*3)*4(2*3)*4 应写成写成2*(3*4)2*(3*4) 即即3*43*4结果果81,81,然后算然后算2*812*81的的结果果. .下一页上一页停止放映2.对于非数于非数值固有运算的解固有运算的解释字符型数据的运算就是字符的串字符型数据的运算就是字符的串联,按照从左到右的,按照从左到右的顺序把右序把右边的算元接在左的算元接在左边的算元的右的算元的右边即可。即可。关系运算按照算元分三关系运算按照算元分三类:1算元都是数算元都是数值。假假设它它们的的类型或种型或种别不同,那么先不同,那么先转换为它它们的和的的和的类型或种型或种别,再,再进展比展比较。对于复数,只能于复数,只能说能否相等,不能比能否相等,不能比较大小。大小。结果都是默果都是默许逻辑型。型。2算元都是字符型。算元都是字符型。算元的算元的长度可以不同,但是度可以不同,但是类型必需一型必需一样。假假设长度不同,那么在短字符串的右度不同,那么在短字符串的右边添加空格符,使得添加空格符,使得两者两者长度一致,再从左度一致,再从左边第一个字符开第一个字符开场作比作比较。假。假设一一样,那么比,那么比较第二个字符,直到出第二个字符,直到出现不一不一样的情况,的情况,这时就可以得到能否相等的判就可以得到能否相等的判别,进一步根据第一个不一步根据第一个不一一样的字符在的字符在编译器器规那么的字符那么的字符顺序表里的位置前后,序表里的位置前后,来决来决议它它们的大小。的大小。下一页上一页停止放映3 3算元都是逻辑型算元都是逻辑型 逻辑型运算的取值表见表逻辑型运算的取值表见表XY.NOT.YX.AND.YX.OR.YX.EQV.YX.NEQV.YTURETUREFALSETURETURETUREFALSEFALSETUREFALSEFALSETUREFALSETURETUREFALSETUREFALSETUREFALSETUREFALSEFALSETUREFALSEFALSETUREFALSE下一页上一页停止放映表达式等价的表达式X+YY+XX*YY*X-X+YY-XX+Y+ZX+(Y+Z)X-Y+ZX-(Y-Z)X*Y/ZX*(Y/Z)X*Y-X*ZX*(Y-Z)X/Y/ZX/(Y*Z)X/5.00.2*XXY(X-Y)0X.OR.Y.OR.ZX.OR.(Y.OR.Z)X.AND.XXX=Y/ZX=Y!LEN(X)=。过滤数数组赋值:这个个赋值过程程是是对满足足一一定定条条件件的的数数组元素元素进展展赋值,而不是,而不是对数数组整体整体进展展赋值。并并行行目目的的数数组赋值。这种种赋值方方式式给出出了了一一种种有有效效的的并并行机制,可以大行机制,可以大规模地模地对多重目的多重目的变量量进展展赋值。下一页上一页停止放映【例】【例】X=X-2实型的固有赋值CHAR(5:8)=“M_30逻辑型的固有赋值SAMPLE=NOTE_2构造的固有赋值STRING=MYSAMPLE可变串构造的自定义赋值WHERE(X/=0.0)A=B/XENDWHERE过滤数组赋值FORALL(I=0:N,J=1:N)A(I,J)=3.0/(I-J+2)B(I,J)%PTR=C(I:N,J:N)ENDFORALLPTR=X 并行目的构造 并行目的赋值 并行目的指针赋值指针赋值下一页上一页停止放映固有固有赋值语句句所所谓固有固有赋值的主要特征就是被的主要特征就是被赋值的的变量不能量不能是指是指针变量,量,赋值语句本身就是句本身就是对变量的定量的定义或或重定重定义,变量的取量的取值就是直接就是直接计算算赋值语句右句右边的表达式所得。不需求的表达式所得。不需求额外的子程序来加以外的子程序来加以阐明。明。下面下面阐明固有明固有赋值语句的用法:句的用法:固有固有赋值中中变量与表达式所可以具有的量与表达式所可以具有的类型,型,以及它以及它们的一致性要求下表。的一致性要求下表。下一页上一页停止放映变量的类型表达式的类型INTEGERINTEGER,REAL,COMPLEXREALINTEGER,REAL,COMPLEXCOMPLEXINTEGER,REAL,COMPLEXCHARACTER变量为具有一样种别参数的CHARACTERLOGICALLOGICAL派生类型变量为一样的派生类型固有赋值中变量与表达式的类型固有赋值中变量与表达式的类型下一页上一页停止放映 在在赋值过程程本本身身被被执行行之之前前,赋值语句句右右边表表达达式式以以及及表表达达式式和和变量量里里面面包包含含的的下下标与与下下标片片断断表表达达式式,都都必必需需预先先求求值终了。了。 假假设在在赋值语句句左左边的的变量量里里面面含含有有表表达达式式,例例如如下下标表表达达式式,那那么么这个个表表达达式式的的计算算与与取取值完完全全与与赋值语句句右右边的的表表达达式式无无关关,由由于于左左边变量量的的任任何何表表达达式式都都必必需需是是预先先完完成成计算算的。的。假假设变量量的的类型型以以及及种种别参参数数和和表表达达式式的的不不一一致致,那那么么在在执行行赋值语句句之之前前,还必必需需完完成成必必要要的的针对表表达达式式的的类型型转换,固有,固有转换函数函数见下表。下表。下一页上一页停止放映 固有转换函数变量的类型被赋的值INTEGERINT(expression,KIND(variable)REALREAL(expression,KIND(variable)COMPLEXCMPLX(expression,KIND(variable)LOGICALLOGICAL(expression,KIND(variable)下一页上一页停止放映 假假设变量量和和表表达达式式都都是是字字符符型型的的,那那么么它它们必必需需具具有有一一样的的种种别参数参数值。假假设变量量和和表表达达式式是是具具有有不不同同长度度属属性性的的字字符符型型对象象,那么那么赋值过程遵照以下程遵照以下规那么:那么: 1 1假假设变量量的的长度度比比表表达达式式的的短短,那那么么把把表表达达式式的的右右边长出来的部分截除;出来的部分截除; 2 2假假设变量量的的长度度比比表表达达式式的的长,那那么么在在表表达达式式的的右右边添加空格,直到跟添加空格,直到跟变量一量一样长。下一页上一页停止放映自定义赋值语句自定义赋值语句假设需求进展赋值的变量和表达式是不符合表所规定的一致性假设需求进展赋值的变量和表达式是不符合表所规定的一致性要求的固有类型或派生类型,那么就需求运用自定义赋值语句,要求的固有类型或派生类型,那么就需求运用自定义赋值语句,它提供赋值界面与相应子例行程序以供访问,从而完成赋值。它提供赋值界面与相应子例行程序以供访问,从而完成赋值。自定义赋值是由具有赋值阐明符自定义赋值是由具有赋值阐明符ASSIGNMENT(=)ASSIGNMENT(=)的子例行程序的子例行程序来完成赋值操作的。用户可以在子例行程序当中经过定义新的来完成赋值操作的。用户可以在子例行程序当中经过定义新的规那么,来扩展可以进展赋值的类型。规那么,来扩展可以进展赋值的类型。自定义赋值运算的用法略自定义赋值运算的用法略 3.10 3.10 简单的的输出出语句句一一. . 输入入/ /输出出 输入入:数据从外部介数据从外部介质(如卡片如卡片终端端键盘磁磁带磁磁盘等等)传输到到计算机内存或从内部文件算机内存或从内部文件传输到内存的到内存的过程称程称为读入或入或读入数据入数据输出出:数据信息从内存数据信息从内存传输到外部介到外部介质(如打印如打印纸,终端端显示器示器,磁磁带,磁磁盘等等)或从内存或从内存传输到内存到内存文件的文件的过程称之程称之为输出或写数据出或写数据二二. . 实现输入入/ /输出的要求出的要求 1. 1.数据所数据所进展的操作即是展的操作即是读又是写又是写 2. 2.运用什么外部运用什么外部设备进展展输入入输出出. .每个外每个外设都有一个都有一个 通道号通道号, ,通道号是通道号是为每台外部每台外部设备规定的定的设备号号, ,每每类 机器都不一机器都不一样, ,本本书商定如下商定如下: : 通道号通道号 设备称号称号 05 05 终端端键盘 06 06 终端端显示器示器 07 07 打印机打印机 08 08 穿孔机穿孔机 09 09 卡片卡片输入机入机 3. 3. 以什么以什么样的格式的格式进展展输入入输出出 4. 4. 指出要指出要输出的是哪些出的是哪些变量的量的值, ,输入的数据要入的数据要赋给哪哪 些些变量量 三三. . 记录 记录: : 记录是数据信息是数据信息输入入输出的根本出的根本单位位, ,详细说输出一打印行就是出一打印行就是输出一条出一条记录, ,从从键盘输入一行就是入一行就是输入一条入一条记录. . 前往前往在格式在格式输入入输出中开出中开场一个新一个新纪录的方式的方式:1.每每执行一次行一次READ,WRITE,PRINT语句就开句就开场输入或入或输出一条新出一条新纪录2.在格式在格式输入入输出中出中,遇到以下两种情况就开遇到以下两种情况就开场一条新一条新纪录a.每当在格式每当在格式阐明中遇到一个斜杠符号明中遇到一个斜杠符号“/b.当当输入入输出出语句数据表列中的工程句数据表列中的工程还未未输入入输出出终了了,且且对应的格式的格式阐明已到达最右明已到达最右边的括号的括号,而需求重新开而需求重新开场运用格运用格式式阐明明时,那么开那么开场一个新的一个新的纪录.四四. I/O. I/O种类种类 1. 1.表控输入表控输入/ /输出语句输出语句 READ *, READ *,输入表列输入表列 PRINT *, PRINT *,输出表列输出表列 2. 2.简单的格式输入输出语句简单的格式输入输出语句 READ READ 格式标识符格式标识符,输入表列输入表列 PRINT PRINT 格式标识符格式标识符,输出表列输出表列 3. 3.含控制信息表的输入含控制信息表的输入/ /输出语句输出语句 READ ( READ (控制信息表控制信息表)输入表列输入表列 WRITE ( WRITE (控制信息表控制信息表)输出表列输出表列 下一页上一页停止放映表控表控输出出格式格式: PRINT *,: PRINT *,输出列表出列表 WRINT(*,*) WRINT(*,*)输出列表出列表功能功能: : 按按编译系系统规定的格式定的格式, ,将将输出表列中各出表列中各项数据按数据按 自在打印自在打印输出格式打印出格式打印输出出. .阐明明: : 1. 1.输出表列中各元素可以是出表列中各元素可以是变量或表达式量或表达式 2. 2.输出表列中各元素的出表列中各元素的类型可一型可一样也可不一也可不一样 3. 3.输出表列中各元素出表列中各元素间运用逗号分开运用逗号分开 4. 4.用用单引号括起来的字符串可作引号括起来的字符串可作输出表列中元素出表列中元素例如例如: IA=12: IA=12 AB=0.3 AB=0.3 PRINT *,IA=,IA,AB=,AB PRINT *,IA=,IA,AB=,AB 输出出结果果:IA= 12AB= 0.300000:IA= 12AB= 0.300000系统隐含指定的输出设备系统隐含指定的输出格式下一页上一页停止放映 表控表控输出格式出格式:(:(随随计算机的不同而不同算机的不同而不同) ) 例例1:1:整型桉整型桉1212个字符个字符宽度度输出出. . PRINT *,I,J,K PRINT *,I,J,K 假假设:I=581,J=-274,K=981245,:I=581,J=-274,K=981245,那么那么输出出为: : 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 581 -274 981245 581 -274 981245 注注: :缺乏缺乏1212位靠右放位靠右放. .例例2:2:实型桉型桉1616个字符个字符宽度度, ,小数位小数位为6 6位位输出出. . PRINT *,P1,P2,P3 PRINT *,P1,P2,P3 假假设:P1=-15.0,P2=1566.834,P3=1750.9875768:P1=-15.0,P2=1566.834,P3=1750.9875768那么那么输出出为: :1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -15.000000 1566.834000 1750.987577 -15.000000 1566.834000 1750.987577下一页上一页停止放映阐明阐明: : 1. 1.每个每个PRINTPRINT语句打印一行语句打印一行 2. 2.假设输出表列空是打印空行假设输出表列空是打印空行 3. 3.此方法只适用于少量数据输出此方法只适用于少量数据输出下一页上一页停止放映3.11 3.11 简单的的输入入语句表控句表控输入入格式格式: READ *,: READ *,输入表列入表列功能功能: : 按照系按照系统规定的格式将数据分定的格式将数据分别一一一一对应的的赋给 输入表列中的各元素入表列中的各元素. .阐明明: : 1. 1.输入表列中各元素可入表列中各元素可为变量名量名, ,数数组名名, ,数数组元素等元素等 2. 2.输入表列中各元素入表列中各元素间运用逗号分开运用逗号分开 3.* 3.*与表列与表列间运用逗号分开运用逗号分开. .数据数据输入的入的规定定: : 1. 1.数据与数据之数据与数据之间运用运用,或或分开分开. .空格的多少空格的多少对数据数据 无任何影响无任何影响. . 2./ 2./终止止输入入语句数据句数据输入入, ,后后继各各项坚持原定持原定义情情况况. . 例例: k=9: k=9 read *,i,j,k read *,i,j,k输入数据入数据: 29/: 29/执行行结果果: i=29 k=9 : i=29 k=9 j j无定无定义下一页上一页停止放映注注: :1.1.输入的数据入的数据应与与输入表列中的各元素的数据入表列中的各元素的数据类型一致型一致例例: READ *,I,J,X,Y: READ *,I,J,X,Y 输入数据入数据 10,124,-6.7,0.8 10,124,-6.7,0.82.2.当延当延续输入入n n个相等数据个相等数据时可可简化化为n*n* 输入入例例: READ *,I,J,K,A,B,C: READ *,I,J,K,A,B,C 输入数据入数据 3*4,3*10 3*4,3*103.3.假假设要要坚持持输入表列中某元素的原入表列中某元素的原值时可在其可在其对应位位置置 上上输入两个延入两个延续的的,来表示来表示输入无效入无效值. .例例: w=1.0: w=1.0 IR=4 IR=4 READ *,A,IR,M,W,Y,T READ *,A,IR,M,W,Y,T 输入数据入数据 2.0, ,6,3.0,4.0/ 2.0, ,6,3.0,4.0/ 执行行结果果 A=2.0,IR=4,M=6,W=3.0,Y=4.0,T A=2.0,IR=4,M=6,W=3.0,Y=4.0,T无定无定义下一页上一页停止放映4.4.在无在无/符符紧跟最后一个数据后面跟最后一个数据后面时, ,输入入语句将要求再句将要求再 次次输入数据直到表中各元素都得到数据入数据直到表中各元素都得到数据为止止. .例例: READ *,A,B,C: READ *,A,B,C 输入数据入数据 9.4 9.4 6.7 6.7 -2.9 -2.95. 5. 假假设输入的数据多于入的数据多于输入表列中元素个数入表列中元素个数时, ,其多于部其多于部 分无效分无效. . 例例: READ *,X,Y: READ *,X,Y 输入数据入数据 12.1,29.6,3.4,-2.5 12.1,29.6,3.4,-2.5 执行行结果果 X=12.1,Y=29.6 X=12.1,Y=29.6 3.4 3.4和和-2.5-2.5无效无效 3.13 PROGRAM3.13 PROGRAM语句句,END,END语句句,STOP,STOP语句句,PAUSE,PAUSE语句句 一一 PROGRAM PROGRAM语句句格式格式: PROGRAM : PROGRAM 程序名程序名功能功能: : 为本程序本程序块取一个名字取一个名字. .阐明明: : 1. 1. 程序名是一字母开程序名是一字母开头的字母数字串的字母数字串 2. 2. 程序名不能作程序名不能作为其它用途其它用途. .如如变量名量名. . 3. PROGRAM 3. PROGRAM语句必需放在程序句必需放在程序块的第一条的第一条. .该语句也句也 可以省可以省. .二二 END END 语句句格式格式: END: END功能功能: : 表示本程序表示本程序块到此到此终了了. .阐明明: : 1.END 1.END语句必需在程序句必需在程序块的最后一行的最后一行 2.END 2.END语句后的内容均不属本程序句后的内容均不属本程序块 三三 STOP STOP语句句 格式格式: STOP n: STOP n功能功能: : 停停顿程序的程序的执行行阐明明: : 1. 1. 该语句可以出如今程序中句可以出如今程序中, ,能写能写执行行语句的任何句的任何 地方地方 2. 2. 一个程序一个程序块中可有多个中可有多个STOPSTOP语句句 3. n 3. n是一个不超越五位的数字或一个字符串是一个不超越五位的数字或一个字符串, ,供多个供多个STOPSTOP语句的停句的停顿标志志. . 例例: : : STOP 123 STOP 123 : : STOP the end STOP the end : :四四 PAUSE PAUSE语句语句格式格式: PAUSE n: PAUSE n功能功能: : 暂时停顿程序的执行暂时停顿程序的执行, ,用户视情况决议下一步需求用户视情况决议下一步需求 采取的措施采取的措施. .阐明:阐明:n n的含义与中的一样的含义与中的一样语句执行暂停后,可在暂停处接着语句执行暂停后,可在暂停处接着 运转运转语句是调试程序用,正式运用时大语句是调试程序用,正式运用时大 量的语句会降低任务效率量的语句会降低任务效率语句不能替代,语句不能替代, 不能使程序终了运转不能使程序终了运转3.14程序举例程序举例例1:知三角形三边之长分别为a,b,c,求三角形的面积.设三角形三边之长为:a=24.5,b=15.2,c=12.3公式area=s=(a+b+c)2programareaa=24.5b=15.2c=12.3print*,a=,a,b=,b,c=,cs=(a+b+c)/2.0area1=sqrt(s*(s-a)*(s-b)*(s-c)print*,area=,area1end运转:24.5,15.2,12.3输出为:a=24.5000000b=15.200000c=12.3000000area=75.9634123Read *,a,b,c下一页上一页停止放映例例2有一多边形土地有一多边形土地,其边长为其边长为LL1=100M,L2=130M,L3=100M,L4=140M,L5=140M,LL6=210M,L7=205M.求其面积求其面积.其中PROGRAMEXAM2IMPLICITREAL(L)L1=100.L2=130.L3=100.L4=140L5=140.0L6=210.0L7=205.0S1=(L1+L2+L6)/2.0S2=(L3+L6+L7)/2.0S3=(L4+L5+L7)/2.0下一页上一页停止放映程序程序(续续):A1=SQRT(S1*(S1-L1)*(S1-L2)*(S1-L6)A2=SQRT(S2*(S2-L3)*(S2-L6)*(S2-L7)A3=SQRT(S3*(S3-L4)*(S3-L5)*(S3-L6)AREA=A1+A2+A3WRITE(*,*)AREA=,AREAEND下一页上一页停止放映例3有不断流电路,电压U=100伏,R1=20欧,R2=50欧,R0=100欧求电路的等效电阻R和总电流IUR1R0R2IPROGRAMEXAM1REALIR0=100.R1=20.0R2=50.0U=100.0R12=R1*R2/(R1+R2)R=R0+R12I=U/RWRITE(*,*)R=,RPRINT*,I=,IEND下一页上一页停止放映例4 人造卫星绕地球外表做圆周运动,卫星轨道距地面H米高时圆周运动速度为:其中:R是地球半径约等于 在某一特定高度上,卫星脱离轨道的速度为: 当H=2000米时求:计算卫星的圆周运动速度(用公里/小时脱离轨道的速度(用公里/小时)公里/小时=米/秒*3600/1000环行一周所需的时间(用分表示).以上所得之数据均取至小数点后二位数字,对第三位小数四舍五入.下一页上一页停止放映PROGRAMEXAM3H=2000.0R=6.37154E6VC=7900.*SQRT(R)/SQRT(R+H)VE=VC*SQRT(2.0)C=2.0*3.1415926*(H+R)T=C/VCVC=INT(VC*3600./1000.*100.+0.5)/100.VE=INT(VE*3600./1000.*100.+0.5)/100.T=INT(T/60.0*100.+0.5)/100.WRITE(*,*)VC=,VC,KM/HWRITE(*,*)VE=,VE,KM/HWRITE(*,*)TIME=,T,MINUTESEND下一页上一页停止放映作业:作业:P76 三、五、六、七、八、十二三、五、六、七、八、十二 下一页上一页停止放映【例】下面是主要阐明数据项的例子:INTEGER,PARAMETER:LOCAL=100INTEGER,PARAMETER:A=COUNT(20,10),TEST=100+LOCAL【例】下面是主要阐明属性的例子:INTEGERLOCAL,A,TESTPARAMETER(LOCAL=100)PARAMETER(A=COUNT(20,10),TEST=100+LOCAL)参数语句的优点:1.参数语句是非执行语句,执行时不占用时间,假设改用赋值语句后就要占用时间.2.对于程序中需经常修正的常数,运用后非常方便.
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号