FORTRAN语言第5章(共8章).ppt_第1页
FORTRAN语言第5章(共8章).ppt_第2页
FORTRAN语言第5章(共8章).ppt_第3页
FORTRAN语言第5章(共8章).ppt_第4页
FORTRAN语言第5章(共8章).ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章,FORTRAN 90数据类型,数据类型的概念 整型数据 实型数据 复型数据 字符型数据 逻辑型数据,本章主要内容,5.1 数据类型的概念,数据记录了现实世界中客观事物的属性,它包括两个方面:数据内容(值)和数据形式(型)。 数据内容就是数据的值; 数据形式就是数据的存储形式和操作使用方式,也称为数据类型。,整型 实型 复型 逻辑型 字符型,内部数据类型,数值型,非数值型,派生数据类型,数据类型的性质:,(1)类型的名称 (2)允许值的集合 (3)允许值(常量)的表示方法 (4)操作这些值的运算的集合,5.2 整型数据,在FORTRAN语言中,整型值的集合是数学上整数的一个子集。每种方法

2、用类别类型参数来区分。整型常量的表示形式为一个数字串,并在数字串后有一个可任选的下划线后再跟类别类型参数。例如,373、-1024、35792、0、32_2、1992110235764803_8,整型数据类型的字节数和取值范围,在FORTRAN90中,还可以使用二进制、八进制和十六进制整型常量,但它只能用于DATA语句中。,二进制常量的形式是以字母B开头,后跟用一对撇号或双引号括起来的数字串,而且每个数字不是0就是1。例如 B10101101、B1011101 八进制常量的形式是以字母O开头,后跟用一对撇号或双引号括起来的数字串,而且每个数字是0到7之间的一个数字。例如,O453、O376。,

3、十六进制常量的形式是以字母Z开头,后跟用一对撇号或双引号括起来的数字串,而且每个数字是0到9或字母A到F之间的一个。例如,ZFFA9、 B9B45 。 INTEGER i, j, k DATA i /B110010/ DATA j /O62/ DATA k /Z32/,整型变量的说明,基本格式为: INTEGER ( KIND = 类别参数值 ) ,属性列表 : 变量列表 其中类别参数值取1,2,4 例:INTEGER I,TOTAL INTEGER(2) : K,LIMIT INTEGER(KIND=4) : MIN,MAX INTEGER*2 : K,LIMIT INTEGER*4 : M

4、IN,MAX,变量的属性,属性是被说明对象的所属性质。一个对象被说明具有某一属性时,就使该对象具有某种附加功能、特殊的使用方式与适用范围。属性的种类有很多,这里介绍两种最常见属性的说明格式。 INTEGER, PARAMETER : I=5,J=24 INTERGER, DIMENSION(1:10) : A,例5.1 求Fibonacci数列前30项之和。Fibonacci数列的递推公式是: F00 F11 FiFi1Fi2,分析:设置两个变量来存放已求得的最后两项的值:F2保存已求得的最后一项(即Fi1),F1保存前一项(即Fi2)。这样,下一待求项就是F1和F2之和,我们将它赋值给F,然

5、后将原来的F2赋值给F1,原来的F赋值给F2,又可以由F1和F2推出一个新的F,如此可以一直推下去。 本例中,Fibonacci数列前30项之和是一个很大的数,已经超过了类别参数为2的整数的取值范围,只能采用类别参数为4整数。如果数超过类别参数为4的整数取值范围,就只能采用实型数据来处理。,5.3 实型数据,FORTRAN用类别类型参数区分不同类型的实型数据。实型数据有单精度和双精度之分。单精度类别类型参数值为4,双精度数类别类型参数值为8。 一般形式为: 有效数E指数 _类别参数 有效数D指数,实型变量的说明,REAL ( KIND = 类别参数值) ,属性列表 : 变量列表 单精度用REA

6、L(4)定义,双精度用REAL(8)或DOUBLE PRECISION定义。缺省的类别值为4,即为单精度。 REAL : M12,AREA,LEN REAL(4) : DX,DY REAL*4 : DX,DY REAL(8) : D_PRE,X REAL*8 : D_PRE,X DOUBLE PRECISION : D_PRE,X,例5.2 利用双精度按下面近似公式求,直到最后一项的绝对值小于1015为止。 分析:首先找出累加项fn与fn-1的递推关系。不难推出 f0 =x,源程序如下: Implicit none Real*8 :x,y,f Integer:n Read*,x Y=x F=x

7、 Do f=-f*(2*n-1)/(2*n)*(2*n-1)/(2*n+1)*x*x if (abs(f) .LT. 1d-15) exit y=y+f n=n+1 Enddo Print*,y=,y,f=,f end,5.4.1 复型常量 将两个实数用逗号分隔,再用括号括起来就构成了一个FORTRAN复型常量。其中第一个实数称为复数的实部,第二个实数称为复数的虚部。例如(1.25,0.4)、(1E2,-3.4)分别表示复数1.25+0.4i和100.0-3.4i,(1.0_4,4.2)。 复型数据的类别类型参数是用于说明实部和虚部这两个实型数据的类别类型。,5.4 复型数据,5.4.2 复型

8、变量 COMPLEX ( KIND = 类别值) ,属性列表 : 变量列表 COMPLEX Z1,Z2 COMPLEX(4) : COM_VAL COMPLEX(8) : CZ, CQ CZ = (3.0, 6.3) CQ = (8.76E+5, -67.8E-3) 如果实部和虚部都不是常数,而是表达式,则应该用CMPLX函数将实部和虚部组成复型数据再赋给复型变量。例如 C = CMPLX(3.0*A, 6.0+B),例5.5 有一线段AB,A的坐标为(1,1),B的坐标为(4.5,4.5),如图5.2所示。求AB的长度,以及黄金分隔点C的坐标。黄金分割点在线段的0.618处。,分析:A,B的

9、坐标可用复数表示:即A为(1.0,1.0),B为(4.5,4.5)。AB的长度就是(A-B)的模,从图中可以明显地看到,AB的长度,可用ABS函数直接求出复数的模。黄金分隔点C的坐标为A+0.618(B-A)。,PROGRAM COMP_3 IMPLICIT NONE COMPLEX:A,B,C REAL:L READ*,A,B C=A+0.618*(B-A) L=ABS(A-B) PRINT*,L=,L PRINT*,C=,C END PROGRAM COMP_3 用READ语句读入复型数据时,以2个实数作为一个复型数据,第一个实数为复数的实部,第二个实数为虚部,用括号括起来。程序的输入可以

10、如下: ( 1.0 , 1.0 ),( 4.5 , 4.5 ),5.5 字符型数据,5.5.1 字符型常量 字符型常量又叫字符串常量,它是用单撇号或双撇号括起来的字符序列。例如,ABCD、CHINA、12345678等都是FORTRAN字符型常量。字符型常量中的字符可以是计算机系统中允许使用的任何字符。在字符串内大小写字母均可使用,但它们是不同的字符。单撇号和双撇号只起定界作用,它们不是字符串的组成部分。,字符串中含有单撇号或双引号的处理,当字符串中又含有单撇号时,例如要将IM A STUDENT作为一个字符串来处理,为了区分是字符串中的字符还是定界符,可采用两种方式表示: IM A STUD

11、ENT IM A STUDENT 前者用双撇号作定界符,后者用单撇号作定界符,而将字符串的单撇号用两个单撇号表示,系统会自动将其处理为字符串的一个单撇号字符。,字符串内字符的个数称为字符串的长度。字符串和的长度为0。在字符串内部的空格是有效字符,并占有一个字符的位置。例如,ABC和A B C是两个不同的字符串。前者字符串的长度为3,后者为5。 一个字符常数需要写成多行源程序时,有一条特殊的规则:不仅每一续行都不能尾随注释,而且每一续行必须以续行标识符(&)作为开头,任何尾随&号之后或者前导&号之前的空格都不是字符常数的组成部分,&号本身不是常数的组成部分。其它的字符包括空格都是字符常数的有效组

12、成部分。,5.5.2 字符型变量,CHARACTER(LEN=n1,KIND=n2),属性说明 : 变量列表 格式中的n1和n2是一个整数和整型表达式,n1代表被说明变量的长度,n2代表字符变量的类别参数,各项属性说明是字符型变量有关属性的说明。,例如: CHARACTER(LEN=25,KIND=2):A,B,C CHARACTER(KIND=3,LEN=15):VAR,CH CHARACTER(LEN=8),DIMENSION(1:10):X,Y,Z CHARACTER(LEN=10),PARAMETER:NAME=FORTRAN_90 CHARACTER(LEN=15):A CHARAC

13、TER*15:A CHARACTER(LEN=15):A,B*8,C*5,在以下两种状态下均可以采用星号来说明长度: (1)具有PARAMETER属性的字符常量。例如以下两个语句: CHARACTER(LEN=*),PARAMETER:PARA= FORTRAN_90 CHARACTER*(*),PARAMETER:PARA= FORTRAN_90 给出的字符串长度是确定的,因此字符符号常数PARA的长度是可知的(等于10),可用*说明。 (2)用字符变量作虚元时 在子程序中,用字符型变量作虚元时可以不指明其具体长度,即用*定义长度。这时它可以与任意长度的字符型实元相结合,有利于提高子程序的通

14、用性。,5.5.3 子字符串,字符变量名(m:n) 其中,m和n是整数和整型表达式,表示子字符串在字符串中的起止位置,该子字符串的长度为n-m+1(nm1)。例如有说明语句如下: CHARACTER(LEN=80):ROW 则ROW(4:7)表示ROW字符串中从第4个字符到第7个字符组成的一个子串,其长度为4;ROW(I:I)表示该字符型变量的第I个字符。,5.5.4 字符表达式与字符赋值语句,字符表达式是指用字符运算符把字符常数、字符变量等字符型数据连接起来的有意义的式子。 字符运算符只有一个,就是字符连接符/,它是由两个斜杠组合而成的,其作用是将两个字符型数据连接起来,成为一个字符型数据。

15、该运算符是一个双目运算符,在其两侧应各有一个字符型操作数。 例如: HE/LLO!的值为HELLO!, FORTRAN/ /90的值为 FORTRAN 90。,PROGRAM CHAR_1 IMPLICIT NONE CHARACTER(LEN=5):A,B,C CHARACTER(LEN=11):D A=CHINA B=JAPAN C=A D=A/ /B PRINT*, A,B,C END PROGRAM CHAR_1,5.5.5 字符关系表达式,字符比较的规则是:一般按其ASCII代码的值(见附录)进行比较。常用的字符顺序为:数字0小9大;数字比字母小;大写字母比小写字母小;字母A小Z大,

16、a小z大;空格字符最小。 在进行关系运算时,遵循以下规律: (1)两个单个字符比较,以它们的代码值决定大小。 A2的值为真,(2)两个字符串比较时,将两个字符串中的字符自左向右这个进行比较。若所有字符完全相同,则两表达式相等;否则,以第一次出现不同字符的比较结果为准。例如 SHANGHAI SHANKONG的值为真 因为第3个字符E O,则前一表达式的值小于后者。 (3)若两个字符串中字符个数不等时,则将较短的字符串后面补足空格后再比较。例如 WHERE WHEREVER的值为真 因为先将WHERE后边补空格成为WHERE 之后,再与WHEREVER比较,第6个字符空格小于字母V。,5.5.6

17、 用于字符处理的内部函数,1求字符串长度函数(LEN和LEN_TRIM) LEN(String)和LEN_TRIM(String) 其中String为字符型常量、变量等字符串。 函数LEN的结果值是String中字符个数(包括前置及尾随空格)。函数LEN_TRIM的值是把字符串去掉尾部空格后的长度。例如 LEN_TRIM(ABC D)的值为5 LEN(ABC D)的值为5 LEN_TRIM(ABC )的值为3 LEN(ABC )的值为5 LEN_TRIM( )的值为0 LEN( )的值为5,2除去字符串尾部空格函数(TRIM) 其一般形式为:TRIM(String) 函数的结果值是去掉Stri

18、ng中的尾部空格后剩余的字符串。例如 TRIM(ABC )的值为ABC TRIM( ABC )的值为 ABC,3子串位置函数(INDEX) 其一般形式为:INDEX(String1, String2) 其中String1,String2均为字符型,且类别参数应该一致。若String2是String1的一个子串,其函数的结果值是一个正整数,该数表示String2在String1中最左边的子串的起始位置;若String2不是String1的子串,则函数结果值为0。例如,INDEX(FOLLOW ME, ME)的值为8,因为ME的第一个字符M出现在FOLLOW ME的第8个字符位置上;INDEX(F

19、OLLOW ME, L O)的值为0。,4字符串比较函数(LGE、LGT、LLE和LLT) (1)大于或等于函数LGE 其一般形式为:LGE(String1,String2) 若String1String2,其函数值为真,否则为假。例如,LGE(ABC, EFG)的值为假。 (2)大于函数LGT (3)小于或等于函数LLE (4)小于函数LLT,5首、尾部空格调整函数(ADJUSTL和ADJUSTR) 其一般形式为:ADJUSTL(String)和ADJUSTR(String) 调左函数ADJUSTL的函数值是把String的首部空格调到尾部,调右函数ADJUSTR的函数值是把String的尾

20、部空格调到首部。例如 ADJUSTL( ABC )的值为ABC ADJUSTR(ABC )的值为 ABC,6.字符与字符序号相互转化函数,(1)字符向字符序号转化函数 其一般形式为:ICHAR(CH)和IACHAR(CH) 其中CH是长度为1的字符型常量和变量。其函数的结果值为字符在相应处理系统中的字符序号,例如 IACHAR(A)的值为65 IACHAR(Z)的值为90 在FORTRAN90中,允许String所代表的字符长度超过1,此时只取第一个字符作为有效字符。例如,ICHAR(ABC)的值为65。,(2)字符序号向字符转化函数 其一般形式为:CHAR(I)和ACHAR(I) 其中I可以

21、是整型常量、变量或表达式。其函数的结果值为序号I所对应的字符。例如 ACHAR(65)的值为 A IACHAR(90)的值为Z,5.5.7 字符处理应用举例,例5.7 在读入的一批单词中,把以字母B开头的打印出来,直到输入ZZZ结束。 PROGRAM CHAR_2 IMPLICIT NONE CHARACTER*10:WORD DO READ*,WORD IF(WORD=ZZZ)EXIT IF(WORD(1:1)=B)PRINT*,WORD END DO END PROGRAM CHAR_2,也可以用INDEX函数: PROGRAM CHAR_2 IMPLICIT NONE CHARACTER

22、*10:WORD DO READ*,WORD IF(WORD=ZZZ)EXIT IF(INDEX(WORD, B)=1)PRINT*,WORD END DO END PROGRAM CHAR_2,例5.9 翻译密码,为了保密,常不采用明码电文,而用密码电文,按事先约定的规律将一个字符转换为另一个字符。收报人则按相反的规律转换得到原来的字符。例如,将字母AF,BG, C H,即将一个字母变成其后第五个字母。例如: HE IS IN BEIJING. 应转换为: MJ NX NS GJNONSL.,分析:可以这样实现,取该字母的ASCII代码,加上5,再按其ASCII码转换为另一个字母。为此可用I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论