Fortran数据类型.ppt

上传人:牧羊曲112 文档编号:5431286 上传时间:2023-07-06 格式:PPT 页数:36 大小:296KB
返回 下载 相关 举报
Fortran数据类型.ppt_第1页
第1页 / 共36页
Fortran数据类型.ppt_第2页
第2页 / 共36页
Fortran数据类型.ppt_第3页
第3页 / 共36页
Fortran数据类型.ppt_第4页
第4页 / 共36页
Fortran数据类型.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《Fortran数据类型.ppt》由会员分享,可在线阅读,更多相关《Fortran数据类型.ppt(36页珍藏版)》请在三一办公上搜索。

1、5.1 数据类型的概念,内部数据类型,数值型,非数值型,派生数据类型,第五章 FORTRAN 90数据类型,系统提供了多种表示整数值的方法,每种方法定义了一个整型数据值的集合。,每种方法用类别类型参数来区分。整型常量的表示形式为一个数字串,并在数字串后有一个可任选的下划线后再跟类别类型参数。,例如,373、-1024、35792、0、32_2、,5.2 整型数据,二进制、八进制和十六进制整型常量,只能用于DATA语句中。,二进制常量:以字母B开头,后跟一对撇号或双引号括起来的数字串,数字不是0就是1。如 B10101101、B1011101,八进制常量:以字母O开头,后跟一对撇号或双引号括起来

2、的数字串,数字是0到7之间的数字。例如,O453、O376。,十六进制常量:以字母Z开头,后跟一对撇号或双引号括起来的数字串,且每个数字是0到9或字母A到F之间的一个。例如,ZFFA9、Z9B45。,INTEGER i,j,kDATA 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,LIMITINTEGER*4:MIN,MA

3、X,例:INTEGER I,TOTALINTEGER(2):K,LIMITINTEGER(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.3E

4、2_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 类别不同,低向高转换类别,复型常量的表示方法

5、,复数 a+bi 表示为(a,b),其中是a,b一对实数常量,例如:(1.25,0.4)表示复数1.25+0.4i(1E2,-3.4)表示复数,复型数据的类别类型参数是用于说明实部和虚部这两个实型数据的类别类型。,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

6、)实部虚部含变量,用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_3IMPLICIT NONECOMPLEX:A,B,CREAL:LREAD*,A,BC=A+0.618*(B-A)L=ABS(A-B)

7、PRINT*,L=,LPRINT*,C=,CEND 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 用单

8、撇号作定界符,将字符串的单撇号用两个单撇号表示。,字符串的长度:字符串内字符的个数。,例: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):

9、A,B*8,C*5A的长度为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):ROWROW(4:7)ROW字符串中从第4个字符到第7个字符组成的一

10、个子串,其长度为4ROW(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,当赋值号两端数据的字

11、符长度不等时,character(len=7):a,b*2a=abcdb=efa=a/b a=b/a,结果 a=“abcd”,结果 a=“efabcd”,character(len=7):a,ba=“abcde”结果 a=“abcde”a=“abcdefghfiemd”结果b=“abcdefg”,对字符数据的输入作同样处理,字符关系表达式,(1)两个单个字符比较,以它们的代码值决定大小。A“2”的值为真,(2)两字符串比较,先将短的字符串后面以空格补足再比较。两串中的字符自左向右逐对比较。若所有对字符均相同,则两串相等;否则,以第一次出现不同字符的比较结果为准。例如 SHANGHAI”thi”

12、的值为真,用于字符处理的内部函数,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)的值为ABCTRIM(ABC)的值为ABC,3子串位置函数 INDEX,INDEX(“

13、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”)的值为65IACHAR(“Z”)的值为90ICHAR(ABC)的值为65,字符 ASCII:IACHAR 或 ICHAR,IACHAR:字符转化为ASCII

14、码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 DOEND PROGRAM CHAR_2,也可以用INDEX函数:PROGRAM CHAR_2 IMPLICIT NO

15、NE CHARACTER*10:WORD DO READ*,WORD IF(WORD=ZZZ)EXIT IF(INDEX(WORD,B)=1)PRINT*,WORD END DOEND 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:,s

16、1 write(*,*)new string:,s2end 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。只对字母进

17、行转换,对字母之外的字符维持原样。,integer:i,j,kcharacter(len=80):line1,line2Character(len=1):l1read(*,*)line1do 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)=l1end dowrite(*,*)line2en

18、d,用表控方式输入字符串时,要加引号。,5.6 逻辑型数据,逻辑常量只有真和假两种值:.TRUE.和.FALSE.,变量说明的格式为:LOGICAL(KIND=类别值),属性列表:变量列表,例5.11 当某点的X,Y坐标落在图中四个方块内和方块边上时,Z=0,如在方块外,Z=3。,INTEGER:ZREAL:X,YLOGICAL:P,Q,R,SREAD*,X,YZ=3P=X=-5.0.AND.X=1.0.AND.X=-6.0.AND.Y=2.0.AND.Y=4.0IF(P.AND.R).OR.(P.AND.S).OR.(Q.AND.R)&.OR.(Q.AND.S)Z=0PRINT*,X=,X,

19、Y=,Y,Z=,ZEND,作业:P874,8,9,10,4:三角形面积:三个边长:a,b,c面积=sqrt(s(s-a)(s-b)(s-c)其中s=(a+b+c)/2,implicit nonecharacter:str1=m,str*25integer:i,n=12str(1:1)=mdo 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*,strend,作业:P87,7把25个字母A,B,Y,打印出:MLNKO,作业:P87,8将一个字符串中的前导空格、后置空

20、格及中间的空格全部去掉,得到一个新的字符串后输出。,implicit nonecharacter*80 str1,str2integer:i,j=1read*,str1do i=1,len_trim(str1)if(str1(i:i)/=)then str2(j:j)=str1(i:i)j=j+1 endifenddoprint*,str2end,字符型变量默认值为空字符,ASCII码为0。,作业:P87,9输入n个英文单词,输出其中以元音字母开头的单词。,implicit nonecharacter*10 wordinteger:i,nread*,ndo i=1,n read*,word s

21、elect case(word(1:1)case(A,E,I,O,U,a,e,i,o,u)print*,word end selectend doend,complex x,y,z,xyzreal a,b,c,s,arearead*,x,y,za=abs(x-y)b=abs(x-z)c=abs(y-z)s=(a+b+c)/2area=SQRT(s*(s-a)*(s-b)*(s-c)xyz=(x+y+z)/3print*,area,xyzend,作业:P87 4,implicit nonereal x,ylogical ainteger zread*,x,yx=abs(x)y=abs(y)z=0a=sqrt(x-2)*2+(y-2)*2)=1if(a)z=1print*,z=,zend,作业:P87 10,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号