Fortran数据类型.ppt_第1页
Fortran数据类型.ppt_第2页
Fortran数据类型.ppt_第3页
Fortran数据类型.ppt_第4页
Fortran数据类型.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

5.1 数据类型的概念,内部数据类型,数值型,非数值型,派生数据类型,第五章 FORTRAN 90数据类型,系统提供了多种表示整数值的方法,每种方法定义了一个整型数据值的集合。,每种方法用类别类型参数来区分。整型常量的表示形式为一个数字串,并在数字串后有一个可任选的下划线后再跟类别类型参数。,例如,373、-1024、35792、0、32_2、1992110235764803_8,5.2 整型数据,二进制、八进制和十六进制整型常量,只能用于DATA语句中。,二进制常量:以字母B开头,后跟一对撇号或双引号括起来的数字串,数字不是0就是1。如 B10101101、B“1011101“,八进制常量:以字母O开头,后跟一对撇号或双引号括起来的数字串,数字是0到7之间的数字。例如,O453、O“376“。,十六进制常量:以字母Z开头,后跟一对撇号或双引号括起来的数字串,且每个数字是0到9或字母A到F之间的一个。例如,ZFFA9、 Z“9B45“ 。,INTEGER i, j, k DATA i /B110010/ DATA j /O62/ DATA k /Z32/,整型变量的说明,格式: INTEGER ( KIND = 类别参数值 ) ,属性列表: 变量列表,类别参数可缺省,取决于计算机的字长, 对于32 位计算机默认为 231 231-1,类别参数值取: 1 2 4 8 对应字节数 : 1 2 4 8,可等价写成: INTEGER*2 : K,LIMIT INTEGER*4 : MIN,MAX,例:INTEGER I,TOTAL INTEGER(2):K,LIMIT INTEGER(KIND=4):MIN,MAX,使变量具有符号常量属性: integer(4) , parameter : n=10,使变量具有数组属性: integer , dimension(1:10) : A,实型常量的表示方法: 小数形式 _类别参数 有效数E指数 _类别参数 有效数D指数,5.3 实型数据,FORTRAN用类别类型参数区分不同类型的实型数据。实型数据有单精度和双精度之分。单精度类别类型参数值为4,双精度数类别类型参数值为8。默认的类别参数是4。,D表示双精度实型常量,此时禁用类别参数,单精度:3.45E2 12.3E2_4 双精度:5.3D-2 (表示 5.3*10-2) 表示为: 5.3E-2_8 但不能写成:5.3D-2_8 .052D0 .052_8,实型变量的说明,REAL : x,y !单精度 REAL(4):DX,DY 或:REAL*4 : DX,DY !单精度 REAL(8):a1,b2 或:REAL*8 : a1,b2 !双精度 DOUBLE PRECISION : a6,b8 !双精度,REAL (KIND = 类别参数值) ,属性列表:变量列表,单精度用REAL(4)定义, 双精度用REAL(8)或DOUBLE PRECISION定义。 缺省的类别值为4,即为单精度。,5.4 复型数据,a,b 类别不同,低向高转换类别,复型常量的表示方法,复数 a+bi 表示为 (a, b), 其中是a,b一对实数常量,例如:(1.25, 0.4) 表示复数1.25+0.4i (1E2, -3.4) 表示复数 100.0-3.4i,复型数据的类别类型参数是用于说明实部和虚部这两个实型数据的类别类型。,a,b都为整型或都为默认实型,则得到默认复型,复型变量的说明,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) C = CMPLX(3.0*A, 6.0+B) 实部虚部含变量,用CMPLX函数将实部和虚部组成复型数据再赋给复型变量。,P75 例5.5 有一线段AB,A的坐标为(1,1),B的坐标为(4.5,4.5)。求AB的长度,以及黄金分隔点C的坐标。黄金分割点在线段的0.618处。,分析:A,B的坐标可用复数表示:即A为(1.0,1.0),B为(4.5,4.5)。AB的长度就是(A-B)的模,可用ABS函数直接求出复数的模ABS(A-B)。黄金分隔点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,输入:( 1.0 , 1.0 ),( 4.5 , 4.5 )回车 以2个实数作为一个复型数据,第一个实数为复数的实部,第二个实数为虚部,用括号括起来。,输出:L=4.949748 C=(3.163000, 3.163000),5.5 字符型数据,字符型常量 (字符串常量),用单撇号或双撇号括起来的字符序列。,china 12345 -234.4 “-234.4”,在字符串内部的空格是有效字符,当字符串本身含有单撇号时,例如要将Im a boy作为一个字符串来处理,可采用两种方式表示: Im a boy 用双撇号作定界符 Im a boy 用单撇号作定界符,将字符串的单撇号用两个单撇号表示。,字符串的长度:字符串内字符的个数。,例: abcff 的长度为 5,和为空串,长度为0。,字符型变量,CHARACTER( LEN= n ), 属性说明 : ,变量列表,n:变量的长度,character(len=15):a,b,c !长度均为15的字符变量a,b,c,等价于:character *15:a,b,c,等价于:character (15):a,b,c,Character (len=10), parameter:name=fortran 90,CHARACTER(LEN=8),DIMENSION(1:10):X,Y,Z,CHARACTER(LEN=15):A, B*8, C*5 A的长度为15,B的长度为8, C的长度为5,,注:以下情形均可以采用* 来说明长度 (1)character(len=*),parameter:name=fortran90 具有PARAMETER属性的字符常量,给出的字符串长度是确定的,因此字符符号常数name的长度等于9,可用*说明。,(2)用字符变量做虚参时,一般可以不具体指明长度。,子字符串,子字符串的表示方法:字符变量名(m:n),m,n:整数,表示子串在字符串中的起止位置,子字符串的长度:n-m+1 (nm1),例如: CHARACTER(LEN=80):ROW ROW(4:7) ROW字符串中从第4个字符到第7个字符组成的一个子串,其长度为4 ROW(I:I) 表示该字符型变量的第I个字符 row(:5) 相当于row(1:5) row(5:) 相当于row(5:80) row(:) 相当于row(1:80),字符表达式与字符赋值语句,(1)字符连接符/ 将两个字符型数据连接起来,成为一个字符型数据 例:“human”/“shanghai”的值“humanshanghai”,(2)赋值,PROGRAM CHAR_1 CHARACTER(LEN=5):A, B, C CHARACTER(LEN=11):D A= abcde B= fghij C=A D=A/ /B PRINT*, C, D END PROGRAM CHAR_1,当赋值号两端数据的字符长度不等时,character(len=7):a, b*2 a=abcd b=ef a= a/b a= b/a,结果 a=“abcd”,结果 a=“efabcd”,character(len=7):a, b a=“abcde” 结果 a=“abcde” a=“abcdefghfiemd” 结果b=“abcdefg”,对字符数据的输入作同样处理,字符关系表达式,(1)两个单个字符比较,以它们的代码值决定大小。 A“2” 的值为真,(2)两字符串比较,先将短的字符串后面以空格补足再比较。两串中的字符自左向右逐对比较。若所有对字符均相同,则两串相等;否则,以第一次出现不同字符的比较结果为准。例如 SHANGHAI”thi” 的值为真,用于字符处理的内部函数,1求字符串长度函数 LEN和 LEN_TRIM,LEN (String) 函数值是String中字符个数 LEN_TRIM (String) 去掉尾部空格后的长度 String为字符型常量、变量等字符串,LEN( )的值为3,例如: LEN(“abcdfg”)的值为6,LEN( ABCD)的值为5,LEN_TRIM(“abcd”)的值为5,LEN_TRIM(“abcd”)的值为4,LEN_TRIM(“ ”)的值为0,2除去字符串尾部空格函数 TRIM,TRIM(String),TRIM(ABC)的值为ABC TRIM(ABC)的值为ABC,3子串位置函数 INDEX,INDEX(“followme”,“me”) 的值为8,INDEX(String1, String2),若string2是string1子串,返回String2在String1中起始位置,否则返回0,4字符串比较函数 LGE、LGT、LLE和LLT,LGE(string1, string2) = LGT(string1, string2) LLE(string1, string2) = LLT(string1, string2) ,5字符与ASCII转化,IACHAR(“A”) 的值为65 IACHAR(“Z”) 的值为90 ICHAR( ABC) 的值为65,字符 ASCII : IACHAR 或 ICHAR,IACHAR:字符转化为ASCII码 ICHAR:字符转化为在相应处理系统中的字符序号,函数取值: 真或假,ASCII 字符 : ACHAR 或 CHAR,ACHAR(65)的值为 “A”, ACHAR(90 )的值为 “Z”,P82 例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*10:WORD DO READ*, WORD IF(WORD=ZZZ)EXIT IF(INDEX(WORD, B)=1) PRINT*, WORD END DO END PROGRAM CHAR_2,P82 例5.8 将一个字符串中的字符逆序打印出来 Program char_3 implicit none integer : i, j, lenth character (len=8): s1, s2 read*, s1 lenth= LEN_TRIM(s1) do i=1, lenth j=lenth-i+1 s2(j:j)=s1(i:i) end do write(*,*) “old string :“ , s1 write(*,*) “new string : “ , s2 end program char_3,为了保密,常不采用明码电文,而用密码电文,按事先约定的规律将一个字符转换为另一个字符。收报人则按相反的规律转换得到原来的字符。例如,将字母AF,BG,CH,即将一个字母变成其后第五个字母。例如: HE IS IN BEIJING.应转换为: MJ NX NS GJNONSL.,P83 例5.9 翻译密码,分析:可用IACHAR函数取该字母的ASCII代码,加上5,再用ACHAR函数按其ASCII码转换为另一个字母。 当字母为 V 时,加5就超过了 Z ,故应使之转换为 A,同理, WB,XC,YD,ZE。只对字母进行转换,对字母之外的字符维持原样。,integer: i, j, k character (len=80): line1, line2 Character (len=1) : l1 read(*,*) line1 do k=1, 80 l1=line1(k:k) if(lge(l1,A).and.lle(l1,Z).or.(lge(l1,a).and.lle(l1,z) then i=iachar(l1) j=i+5 if(jiachar(z).or.(jiachar(Z).and.j=ichar(Z)+6) j=j-26 l1=achar(j) end if line2(k:k)=l1 end do write(*,*) line2 end,用表控方式输入字符串时,要加引号。,5.6 逻辑型数据,逻辑常量只有真和假两种值:.TRUE.和.FALSE.,变量说明的格式为: LOGICAL ( KIND = 类别值 ) ,属性列表 : 变量列表,例5.11 当某点的X,Y坐标落在图中四个方块内和方块边上时,Z=0,如在方块外,Z=3。,INTEGER:Z REAL :X, Y LOGICAL:P, Q, R, S READ*, X, Y Z=3 P=X=-5.0 .AND. X=1.0 .AND. X=-6.0 .AND. Y=2.0 .AND. Y=4.0 IF(P.AND.R) .OR. (P.AND.S) .OR. (Q.AND.R)& .OR. (Q.AND.S)Z=0 PRINT*, X=, X, Y=, Y, Z=, Z END,作业:P87 4,8,9,10,4:三角形面积: 三个边长:a, b, c 面积=sqrt(s(s-a)(s-b)(s-c) 其中s=(a+b+c)/2,implicit none character : str1=m, str*25 integer: i, n=12 str(1:1)=m do i=1, n str(i*2:i*2)=achar(iachar(str1)-i) str(i*2+1:i*2+1)=achar(iachar(str1)+i) end do print*, str end,作业:P87,7 把25个字母 A,B,Y, 打印出:MLNKO,作业:P87,8 将一个字符串中的前导空格、后置空格及中间的空格全部去掉,得到一个新的字符串后输出。,implicit none character *8

温馨提示

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

评论

0/150

提交评论