资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,FORTRAN,语言程序设计,1,第一章,程序设计概述,2,1.1,程序设计基本概念,1.,程序:计算机操作命令的集合。例:求,x,、,y,、,z,的平均值,aver,的程序。,2.,程序设计:编制程序,(,操作命令,),的过程。,3.,程序设计语言,:,书写程序所采用的某种专用语言。,高级语言:数学语言或自然语言。,如:,FORTRAN,语言等,程序设计语言的类型,:,低级语言:机器语言和汇编语言。,3,1.2,程序设计方法和步骤,1.2.1,程序设计方法,1.,结构化方法,(,1,)采用,“,自顶向下,逐步求精,”,的程序设计方法,.,(,2,)采用,“,单入口单出口,”,的控制结构,.,(,3,)三种基本程序结构:,顺序、选择和循环,.,结构化程序设计的,特征:,(,a,),模块化,:,把一个较大的程序划分为若干个子程序,每一个子程序独立成为一个模块;,(,b,),层次化,:,先设计第一层(即顶层)。然后步步深入,逐层细分,逐步求精,直到整个问题可用程序设计语言明确地描述为止。,(,c,),逐步求精,:,是对一个复杂问题,从抽象到具体,最终编制出一个可执行的程序。,2.,面向对象方法,详见,P,5,4,1.2.2,程序设计步骤,1.,分析问题,2.,建立数学模型,3.,选择算法,4.,编写程序,5.,调试运行,6.,分析结果,7.,写出程序的文档,5,第二章 算 法,6,2.1,算法概述,1.,算法:计算机解题的方法和步骤,.,2.,算法特征:,(,1,)有穷性,一个算法必须总是在执行有限步骤之后结束。,(,2,)确定性,算法中的每一个步骤应当是确定的,无二义性;相同的输入只能得出相同的输出。,(,3,)可行性,算法中的每步骤都是有效地执行。,(,4,)有零个或多个输入,(,5,)有一个或多个输出,3.,算法的分类:,(,1,),数字运算,:,用于求数值解,此类算法有现成的模型,运用较成熟,.,(,2,),非数字运算,:,用于非数据处理的一些事务性工作,此类算法面广量大,要求各异,有一定难度,.,7,2.2,算法特点,计算机特别适合做大量的重复性操作,如连续加、连续乘或者其他连续判断或处理。计算机对于大量的重复性操作,并非一次性完成,而是每次按部就班,循环往复重复前一次的操作,即,每次操作方法(即循环体)相同,但操作数据不同而已。,例如,求,1,,,2,,,10,的累加和,其程序如下:,do i=1,10,!,循环语句,s=s+i,!,循环体,enddo,上述循环所要执行的重复操作是:,s=s+i(,即循环体,),但每一次循环时,循环体的操作数据,s,i,的值是不同的。,.,8,2.3,算法的表示方法,(,1,)传统流程图 即用有向线段将描述,算法步骤,的,各功能框,连接起来,.,如下图所示:,图,(a),顺序结构 图,(b),选择结构,A,B,条件,P,A,B,真,假,图,(c),当型循环结构 图,(d),直到型,循环,结构,循环条件,循环体,循环体,循环条件,真,假,假,真,9,(,2,),N-S,流程图,它是一种去掉流程线的流程图,称为盒图,.N-S,流程图形式如下图所示:,A,B,图,(a),顺序结构 图,(b),选择结构,图,(c),当型循环结构 图,(d),直到型,循环,结构,当执行循环的条件成立,循环体,直到退出循环的条件成立,循环体,条件,真,假,A,B,10,第三章,FORTRAN,语言简介,11,3.1 FORTRAN,语言概述,1.,何谓,FORTRAN,语言?,FORTRAN,是英文,“,FOR,mula,TRAN,slate,”,的缩写,即中文的,“,公式翻译器,”,之意。,FORTRAN,语言是一种用于科学计算的程序设计语言。,2.,何谓,FORTRAN,源程序?,用,FORTRAN,语言编制的程序,称为,FORTRAN,源程序。,举例,:,编制,FORTRAN,源程序,ex02_01.f90,求,x,、,y,、,z,的平均值,aver,。,PROGRAM ex02_01,READ*,,,x,y,z,aver=,(,x+y+z,),/3,PRINT*,,,aver,END,12,3.2 FORTRAN,程序的执行过程,13,3.3 FORTRAN,语言的发展历程,(,1,),1951,年,,John Backus,在纽约首次提出,FORTRAN,语言,并于,1954,年对外发布,称,FORTRAN,。,(,2,),1958,年,扩充和完善,FORTRAN,推出,FORTRAN,。,(,3,),1960,年,推出,FORTRAN,,但没有在计算机上实现。,(,4,),1963,年,推出了,FORTRAN,。没有充分考虑兼容性。,(,5,),1966,年,推出,FORTRAN 66,美国标准,后被,ISO,采用。,(,6,),1978,年,推出,FORTRAN 77,,兼容性好,结构化特征。,(,7,),1991,年,推出,FORTRAN 90,现代语言,可视化编程。,(,8,),1997,年,公布,FORTRAN 95,标准,并行运算的支持。,(,9,),1997,年,微软和数据设备公司合作推出,Digital Visual FORTRAN 5.0,。,14,第四章,FORTRAN,语言开发环境,详见教材:,3.3 FORTRAN,语言开发环境,15,第五章,FORTRAN,语言基础知识,16,5.1,字符集,FORTRAN,语言允许使用的字符集为:,英文字母,A-Z,或,a-z,(,即,大、小写英文字母,),阿拉伯数字,0,、,1,、,2,、,3,、,4,、,5,、,6,、,7,、,8,、,9,特殊符号,空格,=+-*/#,?(),,.,:,“,!$_,应当注意,:,在,FORTRAN,语言中,,英文,字母,不区分大,小写,,在保留字、变量名和函数名中,大、小写字母,都是等价的,如,REAL,何,real,或,Real,是一样的。,17,5.2,名称,及,保留字,5.2.1,名称,作用:用来表示,FORTRAN,源程序中的变量、符号常量名、,数组、函数、过程等实体的名称。,名称的定义(即语法描述):由英文字母开头的,31,个以内,的字母、数字、下划线(,_,)以及美元符字符序列组成。,例:,NUMBER,、,x1,、,root_2,、,y$,_ab,、,5xy,、,x.y,5.2.2,保留字,一个语句中的特定单词,如,PROGRAM,、,END,、,IF,、,ENDIF,、,DO,、,ENDDO,等,称为语句保留字。,说明:,FORTRAN90,程序中允许用保留字作为其它实体的名称,但是一般不提倡。,18,5.3,程序单元,一个完整的,FORTRAN,程序,应由以下程序单元构成:,主程序单元 外部子程序单元,1,PROGRAM MAIN SUBROUTINE SUB1,(),主程序体 子程序体,END PROGRAM END,其中主程序单元只能有,1,个,其它程序单元可以有,0-n,个。,程序单元的描述详见第十章。,19,5.4,语句的排列顺序,一个程序单元中语句的排列顺序如下,:,非执行语句,程序单元,可执行语句,例,:,编制,FORTRAN,源程序,eex5_1,.f90,求,x,、,y,、,z,的平均值,aver,。,PROGRAM eex5_1,REAL x,y,z,aver,READ*,,,x,y,z,aver=,(,x+y+z,),/3,PRINT*,,,aver,END,20,5.5,程序的书写格式,(,1,)固定格式:将一个语句行分为若干个区域,如下图所示:,(,2,)自由格式:一个语句的书写不受区域的限制。,FORTRAN90,的,源程序,格式,采用,自由格式,书写,,源程序,文件,扩展名,为,.f90,。,例,:,详见,eex5_1,.f90,的,源程序,格式,及其,扩展名。,21,5.6,数据类型,5.6.1,基本概念,1.,内部数据类型,FORTRAN,语言将内部数据划分为以下类型:,整型,实型 算术型,数据类型 复型,逻辑型,字符型,2.,种别,一个数据在内存中均占有一定字节个数的存储单元。上述每类数据都有其不同的种别(即,Kind,)特性,即上述每类数据根据其种别特性(即,Kind,值)的不同分别拥有不同字节个数的存储单元。,3.,数据对象,1,)常量:程序运行时,其值不能改变的量,称为常量。如,:5,3,等等。,2,)变量:程序运行时,其值可以改变的量,如,:,变量,a,a,是一个存储单元。,22,5.6.2,常量,整型、实型、复型常量是一个,代数值,;逻辑型常量是一个,逻辑值,(,.true.,或,.false.,);字符型常量是一个,字符串,。以上常量均以,书写方式,确定其类型。,5.6.2.1,整型常量,整型常量表示普通代数中的,整数,。,十进制整型常量的一般形式:,n _Kind,值,其中,:,是该整型常量的符号。,n,是一个十进制数字,(09),序列。,Kind,值为:,1,、,2,、,4,、,8,之一。分别表示,1,、,2,、,4,、,8,个字节个数。,FORTRAN 90/95,标准中整型常量的范围没有明确规定。,例如:,122,、,0,、,-36,、,559_2,均为合法的整型常量,100.0,、,100,,,000,、,100 0,、,100,2,均为非法的整型常量,5.6.2.2,实,型常量,实型常量表示普通代数中的,小数,或,指数,。,1.,小数,实,型常量,一般形式:,n.m,或,n.,或,.m,其中:,n,、,m,是十进制数字序列。,n,是整数值,,m,是小数值。,例:,12.0,、,0.12,、,12.,、,.12,23,2.,指数,实,型常量,一般形式:,n.mE,s,或,n E,s,其中:,n,、,m,是十进制数字序列。,n,是整数值,,m,是小数值。,E,s,是指数部分,,表示,10,的几次方。,其中:,E,是指数符号,,s,是指数数值,,是指数数符。,例,:,指数实型常量:,12E2 0.12E-2 2E5 1E-10,相应代数值,:,12x10,2,0.12x10,-2,2x10,5,1x10,-10,注意:单独的指数部分不能构成一个实型常量。,例:,E5,5.6.2.3,复,型常量,表示普通代数中的复数。即:,a,b,i,(其中,a,是,实部,,,b,是,虚部,),一般形式,:(,a,,,b,),例,:(,-3,,,5,),!表示,复数,:,-3+5i,(,0,,,1,),!表示,复数,:,i,(,2.4,,,-2.5E2,),!表示,复数,:,2.4-2.5x10,2,i,24,5.6.2.4,字符,型常量,在程序中用以表示文字等非数值信息。,一般形式:,字符串,或,“,字符串,”,其中,:,字符串可以是字母、数字、汉字、特殊符号。通常字符串中字,符的个数称为,字符长度,。,例:,PRINT*,,,南京信息工程大学,PRINT*,,,”,a+b=,”,a,b,说明:,1),引号,(,或,“,”,)是字符串的分隔符,并非字符常量的一部分。,2),字符串中的空白符有意义,要计数的。例:,“,A B,”,其字符长度是,3,。,3),当字符长度为,0,时,即为空串。,4),字符串内的字母区分大小写,,a,和,A,是不同的字符常量。,5),如果字符串中含有单引号,则这个单引号要用两个连续的单引号表示,如:,I,m a boy.,。或者单引号和双引号交替使用,如,“,I,m a boy.,”,。,25,5.6.2.5,逻辑型常量,在程序中用以表示某个条件(关系表达式和逻辑表达式)的判别结果。,一般形式:,.,TRUE,.,即为逻辑真(表示判别条件成立)。,.,FALSE,.,即为逻辑假(表示判别条件不成立)。,例:条件,5,3,的判别结果是,.,TRUE,.,,表示判别条件,5,3,成立。,条件,3,1,的判别结果是,.,FALSE,.,,表示判别条件,3,1,不成立。,说明:,1.,逻辑常量仅有两个,,.TRUE.,(真)和,.FALSE.,(假)。注意:逻辑常量两侧的两个小数点不能省略。逻辑型常量是具有逻辑型数据类型的非数值数据,又称为逻辑值或布尔值。,2.,对于逻辑值,.TRUE.,,在其存储单元字节内每位为,“,1,”,,可视为整数值,-1,;对于逻辑值,.FALSE.,,在其存储单元字节内每位为,“,0,”,,可视为整数值,0,,它们均能参与整数运算。如,7+.FALSE.,,结果仍为,7,。,1+.TRUE.,,结果则为,0,。,26,5.6.2.6,符号常量,用一个符号所表示的常量值,称为符号常量。例如,圆周率、重力加速度等。使用符号常量时,应当用参数语句(,PARAMETER,语句,)对符号常量予以声明。,PROGRAM ex05_01,IMPLICIT NONE,REAL pi,PARAMETER(pi=3.1415926),!,定义,pi,为符号常量,3.1415926,WRITE(*,*)sin(pi/6),END,27,变量是数据的存储单元。不同类型的变量存储不同类型的数值。整型、实型、复型变量存储一个(或一对)代数值,逻辑型变量存储一个逻辑值(,.true.,或,.false.,),字符型变量存储一个字符串。以上变量均以,类型声明,确定其类型。,5.6.3.1,变量的种别,变量的种别,是指一个变量由几个字节组成。其种别值(即,kind,值)与常量相同。,5.6.3.2,变量的类型,变量的类型,均用,类型说明,(或称,类型声明,)指定。,其目的是通知编译系统为变量分配存储单元,以便存放程序中的数据。,显式类型说明,类型说明方式,隐式类型说明,5.6.3,变量,28,1.,显式类型说明,由,类型说明(声明)语句,指明变量的类型。,类型说明语句,的一般形式:,INTEGER(kind,值,),变量名表,!整型变量类型说明语句,REAL(kind,值,),变量名表,!实型变量类型说明语句,COMPLEX(kind,值,),变量名表,!复型变量类型说明语句,LOGICAL(kind,值,),变量名表,!逻辑型变量说明语句,CHARACTER(kind,值,),变量名表,!字符型变量类型说明语句,其中:,1),变量名表:用逗号隔开的一系列变量名。,例如:,INTEGER(2)a,b,c,!a,b,c,为变量名表中的变量。,2)INTEGER,、,REAL,等为类型说明语句的保留字,称为类型说明符。,例如:,INTEGER(2)a,b,c,!INTEGER,为类型说明符。,29,3),(,kind,值),=n:,为变量的种别值,用以说明变量名表中的各变量由几个字节组成。,n,为,1,、,2,、,4,、,8,之一。,a.,整,型变量的不同种别值及其取值范围,如下表所示:,b.,实,型变量的不同种别值及其取值范围,如下表所示:,类型,Kind,值,字节数,取值范围,INTEGER(1),1,1,-128,127,INTEGER(2),2,2,-32768,32767,INTEGER(4),4,4,-2147483648,2147483648,INTEGER(8),8,8,-9223372036854775808,9223372036854775808,类型,Kind,值,字节数,取值范围,REAL(4),4,4,1.1754944E-38,3.4028235E+38,REAL(8),8,8,2.225073858507201E-308,1.797693134862316E+308,DOUBLE PRECISION,8,2.225073858507201E-308,1.797693134862316E+308,c.,复,型变量的种别值分别为,4,或,8,,字节数为,8,或,16,30,d.,字符,型变量不同种别值的说明方式,如下表所示:,类型,Kind,值,字节数,CHARACTER,1,1,CHARACTER(n),n,n,CHARACTER len=n,n,n,CHARACTER*n,n,n,e.,逻辑,型变量的不同种别值,如下表所示:,类型,Kind,值,字节数,LOGICAL(1),1,1,LOGICAL(2),2,2,LOGICAL(4),4,4,LOGICAL(8),8,8,31,4)kind,值为可省略项。该项省略时系统将自动采用由系统指定的缺省值。,缺省值一般由编译器确定。但各类变量的,种别初始,缺省值如下:,a.,整型变量,为,4.,b.,实型变量,为,4.,c.,复型变量,为,8.,d.,字符型变量,为,1.,e.,逻辑型变量,为,4.,注意:,当一个整型、实型变量中所存储的数值超过以上,种别值,取值范围,时,则,出错!,5),类型说明语句中可以使用,“,:,”,给变量名表中的变量赋初值。,例,:INTEGER,:,a=6,b=8,!,说明变量,a,b,为,4,字节整型的同时为其赋初值,REAL(4),:,e=3.5,!e,为,4,字节单精度实型变量且初值是,3.5,REAL(kind=8),:,h=2.6,!h,为,8,字节双精度实型变量且初值是,2.6,LOGICAL,:,la=.true.,!la,是,4,字节逻辑型变量且初值是,.true.,CHARACTER,:,c1=,“,a,”,!c1,是,1,字节字符型变量且初值是字符,“,a,”,CHARACTER*4,:,c2=,“,南京,”,!c2,是,4,字节字符型变量且初值是字符串,“,南京,”,CHARACTER*5,:,c3=,“,”,!c3,是,5,字节字符型变量且初值为空,即空串,32,2.,隐式类型说明,1),隐含约定,(即系统约定,简称,I-N,规则):程序中凡以字母,I-N,开头的变量名系统约定(即默认)为整型变量,其余字母,(A-H,O-Z),开头的变量名系统均约定为实型变量。,例:,n1,m2,i1,j2,均被系统约定为整型变量,a1,,,b1,,,c2,,,d2,均被系统约定为实型变量,说明,:,i),上述隐含约定仅对整、实型变量有效!,ii)Fortran 90,虽然支持隐含约定,但不提倡使用。为此,在程序的开始用:,IMPLICIT,NONE,语句向系统声明不使用隐含约定。,2),隐含说明语句,(即人为约定):按程序中变量名的首字符来确定变量的类型。,一般形式:,IMPLICIT,类型说明符,(,字母,1,,字母,n,),或:,IMPLICIT,NONE,例:,IMPLICIT,REAL(i,k),!程序中凡以,i,k,开头的变量均为实型变量。,IMPLICIT,INTEGER(n,t),!程序中凡以,n,t,开头的变量均为整型变量。,IMPLICIT,NONE,!程序中取消隐含约定。,33,注意:,以上三种,类型说明方式,中,,显式类型说明语句,优先级最高,,IMPLICIT,语句,次之,,“,I-N,规则,”,则最低。,例如:,INTEGER IMAX,IMPLICIT REAL(I,J),以上的类型说明语句,变量,IMAX,被,显式类型说明语句,说明,为整型变量,以字母,I,、,J,开头的变量名被,IMPLICIT,语句,说明,为实型变量,程序中出现的其它整、实型变量均按,I-N,规则,约定其类型。,类型说明语句和,IMPLICIT,语句都是非执行语句。,类型说明只在本程序单位内有效。,IMPLICIT,语句,要置于,PROGRAM,语句,的下一行,不能把它放在其他位置。,34,5.7,表达式,5.7.1,算术表达式,1.,作用:表示普通数学中的代数式。,2.,组成:由算术型运算分量(如:算术型常量,变量,函数)、算术运算符以及圆括号按照通常的数学含义连接而成。,3.,算术运算符:、*、,/,、*,表示:加、减、乘、除、乘方,4.,算术运算符的求值规则,1),优先级:高 *,*、,/,单目,+,、,-,低 双目,+,、,但括号可以改变优先级。,2),结合规则,左结合,:,当运算分量两侧的运算符优先级,相同,时,运算顺序先,左,后,右,。,结合方向,右结合,:,当运算分量两侧的运算符优先级,相同,时,运算顺序先,右,后,左,。,35,FORTRAN90,规定:*为右结合,,+,、,-,、*、,/,为左结合。,例如:,指出下列表达式的运算次序。,(a*b*2,8 *c*d)/(-e+f*g*3),(,1,)(,3,)(,8,)(,6,),(,2,)(,4,)(,7,),(,5,)(,9,),(,10,),36,5.,算术运算的类型转换,对于混合型(即指,运算分量的类型,和,kind,值,不同,)的算术表达式,运算时必须将两个不同类型的运算分量转换成同一种类型才能运算。类型转换时既要考虑运算分量的,类型,,同时还要考虑其,kind,值,。,类型转换原则:,(,1,)同类型的,运算分量,无需转换,,直接运算,其运算,结果仍保持原类型。,(,2,)不同类型的,运算分量,,运算前系统会自动将它们转换成同一类型后进行运算。转换的方法是:将类型级别低的,运算分量,向类型级别高的,运算分量,转换(,运算分量,的类型级别,如下所示)。运算,结果的类型与类型级别高的,运算分量,相同,。,运算分量的,类型,(含,kind,值),级别如下:,高,COMPLEX(8),COMPLEX(4),REAL(8),REAL(4),INTEGER(8),INTEGER(4),INTEGER(2),低,INTEGER(1),37,例如:,INTEGER(1)i,j,INTEGER(2)k,REAL(4)a,i *k +j *a,上述表达式的运算步骤及类型转换如下:,(,1,)将,i,转换成,2,字节整型,即,INTEGER(2),,执行,“,i *k,”,的运算,,运算结果类型为,2,字节整型。,(,2,)将,j,转换成,4,字节实型,即,REAL(4),,执行,“,j *a,”,的运算,,运算结果类型为,4,字节实型。,(,3,)将第(,1,)步的运算结果转换成,4,字节实型,即,REAL(4),,,执行最终的加法的运算,最终结果类型为,4,字节实型。,38,6.,有关注意事项,1,)两表达式相乘,*号不能少。,2,)两表达式相除,分子和分母上的表达式要酌情加上括号。,例:(,a+b,),/,(,c-d,),3,)分母不得为零,负数不能开平方。,4,)表达式中只能配对使用圆括号,不能使用,“,”,和,“,”,5,)整型量,/,整型量整商(舍去小数部分自动取整),例:,1/2*g*t*2,=0,39,5.7.2,关系表达式,1.,作用:用以比较两个算术表达式之间的大小等同关系。,2.,一般形式:,3.,关系运算符:,、,、,=,、,=,、,/=,或,:.LT.,、,.LE.,、,.GT.,、,.GE.,、,.EQ.,、,.NE.,4.,结果:,.TRUE.,若关系表达式(即所表示的条件)成立,结果为,.TRUE.,逻辑值,.FALSE.,若关系表达式(即所表示的条件)不成立,结果为,.FALSE.,上述逻辑值其,kind,值为,4.,例:,1)3+45,!,3+4 5,,结果为,.TRUE.,2)ab,!,a b,,若,ab,结果为,.TRUE.,;否则为,.FALSE.,3)abc,!,a b,c,,则无法比较!,逻辑值 代数值,5.,注意事项:,两个实型量慎用关系相等,”,=,”,和关系不等,”,/=,“,的比较,.,例,:,判别实型量,a,b,是否相等,即,a=b?,用,:abs(a-b)34,!判别结果为,.FALSE.,(4+5*2).LE.10,!判别结果为,.FALSE.,(4.2,7.3).NE.(7.3,4.2),!判别结果为,.TRUE.,41,5.7.3,逻辑表达式,1.,作用:,用作较复杂的逻辑比较。如表示多个条件同时成立,或表示多个条件中只有一个条件成立即可,这种条件的表示方法,必须要用逻辑表达式。,例如,:,1)a b.and.x y,!该逻辑表达式表示:,ab,同时,xy,2)x 0.or.y 0,!该逻辑式表示这两个条件只要有一个成立即可,42,0 x1,例:,1)y=,1 -1=x0,y0(I),2)xy=-1 x0,y0(III),0 x*y=0(II,),上述判别条件均较复杂,故引进逻辑表达式比较。,2.,组成:由逻辑型量(,如:,逻辑型常量、变量、函数)、关系表达式,、逻辑运算符以及圆括号连接而成。,3.,逻辑运算符,:.not.,、,.and.,、,.or.,、,.xor.,、,.eqv.,、,.neqv.,表示:逻辑非、逻辑与、逻辑或、逻辑异或、逻辑相等、逻辑不等,.,y=1,0,-1,1,y=0,y=0,x,x*y0,y0,x0,y0,x*yc.and.d.or.e,PRINT*,x=,x,END,45,5.7.4,字符表达式,5.7.4.1,字符合并表达式,1.,作用:将,字符型量(如:字符型常量、变量、函数)予以,合并。,2.,组成:由字符型量(如:字符型常量、变量、函数)、字符运算符(即字符连接符,/,)或子字符串(简称子串)构成。,3.,子串概念,子串是由字符串中的一部分相邻字符组成,又称子字符串。,子串的一般形式:,字符型变量名(,子串的起始位置,:,子串的终止位置,),其中:若缺省子串起始位置,系统则默认该值为,1,;,若缺省子串终止位置,系统则默认该值为字符串的长度值。,上述一般形式表示子串在字符串中的相对位置。,例:,CHARACTER(19)string,CHARACTER(10)substring,string=,This is a computer.,substring=string,(,1:4,),!,子串为,“,This,”,substring=string,(,:7,),!,子串为,“,This is,”,substring=string,(,11:,),!,子串为,“,computer.,“,46,4.,字符串连接操作(即,字符表达式,),字符串连接是由字符连接符,/,将若干个字符串连接起来的操作。,一般形式:字符型操作数,1/,字符型操作数,2/,/,字符型操作数,n,例:,CHARACTER(19)str1,,,str2*5,,,str3*3,,,str4*11,str2=,This,str3=,is,str4=,a computer.,str1=str2/str3/str4,!str1,的连接结果为,This is a computer.,47,5.7.4.2,字符关系表达式,1.,作用:用以比较两个字符表达式之间的大小等同关系。,2.,一般形式:,3.,关系运算符:,、,、,=,、,=,、,/=,或,:.LT.,、,.LE.,、,.GT.,、,.GE.,、,.EQ.,、,.NE.,4.,结果:,.TRUE.,若关系表达式(即所表示的条件)成立,结果为,.TRUE.,逻辑值,.FALSE.,若关系表达式(即所表示的条件)不成立,结果为,.FALSE.,5.,比较方法:依次比较两个字符串(即,字符表达式,)中相同位置字符的,ASCII,码值。,例如:,1,),banana,=,apple,!由于,”,b,“,的,ASCII,为,98,,而,“,a,”,的,ASCII,为,97,,故比较结,果为,.FALSE.,2,),This is a pen.,=,This is a pencil.,!由于字符,“,.,”,的,ASCII,为,46,,,而,“,c,”,的,ASCII,为,99,,故比较结果为,.TRUE.,48,5.8,赋值语句,作用:给变量赋一个确定的值。,5.8.1,赋值语句的类型,算术赋值语句,类型 字符赋值语句,逻辑赋值语句,5.8.2,赋值语句的一般形式,其中:,1,),“,”,称为赋值号,意义为,“,左传送,”,。,2,)变量统称为左部变量。,语意:将 右端表达式的值赋给同类型,(,算术型、字符型、逻辑型,),的左部变量。,即:算术型变量算术表达式,!,算术赋值语句,字符型变量字符表达式,!,字符赋值语句,逻辑型变量逻辑表达式,!,逻辑赋值语句,49,5.8.3,赋值语句举例,1.,算术赋值语句,赋值时类型转换:,当赋值号两端的类型及其,kind,值一致,无需类型转换,直接赋值,;,若赋值号两端的类型及其,kind,值不一致,系统自动把右端表达式之值的类型转换成左部变量的类型。转换规则如下:,a,)类型相同而,kind,值不同,右端表达式值的,kind,值,j,左部变量的,kind,值,i,仅转换,i,个低位字节值,例:,INTEGER(1):b=126,INTEGER(2):a,c=56,INTEGER(4):d=32771,a=b,!a=126,,,ji,类型转换后,赋值结果改变,即,a,值出错!,50,b,)类型不同,实型左部变量,=,整型右端表达式值,则将右端表达式值添加小数点后再赋值。,整型左部变量,=,实型右端表达式值,仅取右端表达式值的整数部分数值赋值。,例:,INTEGER:a=23,c,REAL :b=98.78,d,d=a,!d=23.0,,将整型右端表达式值添加小数点后再赋值给,d,。,c=b,!c=98,,仅取实型右端表达式值的整数部分数值赋值给,c,。,51,2.,字符赋值语句,当字符型左部变量与字符型右端表达式的长度不相等时,需进行长度转换。,例,:1)CHARACTER*7 str1,str2,str1=,student,!str1=,student,str2=,He is a,/,student,!str2=,He is a,2)CHARACTER*5 str1,str2*3,str1=,is,!str1=,is,str2=,china,!str2=,chi,3.,逻辑赋值语句,例,:,LOGICAL L,L1,L2,L3,L4,REAL:A=3,B=5,C=2,L=.TRUE.,!L,的结果是一个逻辑常量,.TRUE.,L1=A.GT.B,!L1,的结果是关系表达式的结果,即逻辑常量,.FALSE.,L2=B.GT.C,!L2,的结果是关系表达式的结果,即逻辑常量,.TRUE.,L3=L1.AND.L2,!L3,的结果是逻辑表达式的结果,即逻辑常量,.FALSE.,L4=L3,!L4,的结果是逻辑变量的值,.FALSE.,52,1.,作用:给变量或数组赋初值。,2.,一般形式:,DATA,变量名表,1/,初值表,1/,变量名表,2/,初值表,2,,,其中:变量名表中可以是变量名、数组名、数组元素,变量,名,表中的各,变量间用逗号隔开,初值表中只允许出现常量,不允许出现表达式。,例如,:,DATA a,b,i/3.0,-3.1,8/,!给,a,b,分别赋初值,3.0,,,-3.1,;,i,赋初值,8,3.,说明:,(,1,)初值表中如果有几个连续相同的常量可以简写为:,n*,常量,例如,:,DATA a,b,c,i,k/3*1.0,2*3/,!给,a,b,c,均赋初值,1.0;i,k,均赋初值,3,(,2,)变量名表中的变量与初值表中的常量个数应当相同,类型应当一致。,例如,:,DATA a,b,c,d/3.0,2*2.0/,i/3.0/,(,3,)若一个程序中有多个,DATA,语句给同一个变量赋初值,则以最后一个,DATA,语句所赋的初值为准。例如:,DATA a,b,c,d/1.0,3.0,2*0.0/,DATA x,y,c/4.0,2.0,7.5,/,其中变量,c,分别在两个,DATA,语句中出现,并且赋的值不同,结果,c,的值应为,7.5,5.9 DATA,语句,53,5.10,停与暂停语句,用以表示程序的停止运行,(END,或,STOP),或暂时中断程序的运行,(PAUSE),。,1.END,语句,作用:,1),表示一个程序段的结束,提示编译程序该程序段编译结束。,2),主程序中的,END,语句,表示程序运行到此结束可以返回操作系统。,一般形式:,END,说明:,END,语句一般出现在一个程序段的最后。,2.STOP,语句,作用:表示随时执行,STOP,语句停止程序运行返回操作系统。,一般形式:,STOP ,字符串,其中:字符串用以表示,STOP,语句停止运行时的标记。,说明:,STOP,语句可以出现在一个程序段的任何可执行语句之处。,3.PAUSE,语句,作用:表示暂停程序的执行,一般用于调试程序时给程序设置运行断点,,当从键盘上键入任意键后,可使程序从刚暂停处(即中断点)继,续运行。,一般形式:,PAUSE ,字符串,说明:,PAUSE,语句可以出现在一个程序段的任何可执行语句之处。,54,5.11,标准函数,对于一些常用的标准函数,编译系统已定义好且存入函数库,,只要在程序中采用,“,函数名,(,参数,),”,的方式直接引用即可。,1.,函数分类:,标准函数,函数 语句函数,用户自定义函数,外部函数,2.,标准函数的引用方式:,(),其中:,1,),:一个或用逗号隔开的一系列参数名。,2,)函数名、参数表中参数的类型及个数详见,附录,D,常用库函数,.,3.,说明,1,)参数的个数必须与函数表中参数的个数一致。,2,)参数类型和函数值类型(即函数类型),详见附录。,3,)三角函数的参数均使用弧度:弧度角度*,3.14159/180,4,)参数可以是常量、变量、表达式,且允许函数的嵌套。,4.,常用函数,FORTRAN,函数表,详见附录,D,常用库函数。,55,(,1,)常用数值处理函数,函数,功能,ABS(x),求,x,的绝对值,|x|,EXP(x),求指数函数,e,x,SIN(x),求正弦函数,sin(x),,其中,x,的单位为弧度,COS(x),求余弦函数,cos(x),,其中,x,的单位为弧度,ASIN(x),求反正弦函数,arcsin(x),TAN(x),求正切函数,tan(x),,其中,x,的单位为弧度,ATAN(x),求反正切函数,arctan(x),LOG(x),求自然对数,ln(x),或,log,e,x,LOG10(x),求常用对数,log,10,(x),INT(x),取,x,的整数部分,不四舍五入,MOD(x1,x2),求,x,1,除以,x,2,的余数,即求,x,1,-int(x,1,/x,2,)*x,2,SIGN(x1,x2),若,x,2,0,,则,|x,1,|,;若,x,2,0,,则,-|x,1,|,REAL(x),把整型量,x,转换为实型,MAX(x1,x2,),求,x,1,x,2,中的最大值,56,例如:,INT(5.85)=5,MAX(-1,3,16,0)=16,LOG(3.0)=1.098612,SIN(1.0)=0.8414709,SQRT(,4.0,)=2.0,MOD(,9,6,)=3,SIGN(,3.0,-2.0,)=-3.0,SIGN(,-3.0,2.0,)=3.0,REAL(8)=8.0,57,(,2,)常用字符处理函数,函数,功能,CHAR(num),参数,num,是字符的,ASCII,代码值。调用该函数,求解与该,ASCII,代码值所对应的字符。,ICHAR(char),参数,char,是字符,调用该函数,求解与参数,char,所对应的,ASCII,代码值。,LEN(string),参数,string,是字符串,调用该函数,求解,string,字符串的声明长度值。,LEN_TRIM(string),参数,string,是字符串,调用该函数,求解,string,字符串去除尾端空格后的实际长度值。,INDEX(string,key),参数,string,是字符串,,key,是其中的子串。调用该函数,求解子串,key,在,string,字符串中第一次出现的位置值。,TRIM(string),参数,string,是
展开阅读全文