资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,洛阳师范学院物理系,07/08,第一学期,第二章,Fortran,程序设计初步,1.,Fortran,程序简例,1.1,编程实例,1.2 Fortran,程序的特点,2.,Fortran,程序的基本组成,2.1,字符集,2.2,程序组成,3.,数学运算,3.1,常量和变量类型,3.2,内在函数,3.3,算术表达式,2,计算物理导论,课多媒体课件,洛阳师范学院物理系,2.1 Fortran,程序简例,程序实例,基本语句,程序特点,例,1.1,输入两个数,求算数平均和几何平均值。,Fortran 77/90,程序,第一章,Fortran,程序设计初步,洛阳师范学院物理系,程序示例比较,洛阳师范学院物理系,C-,求两种平均値,-,PROGRAM Example_1_1,REAL a,b,av1,av2,READ(*,*)a,b,av1=(a+b)/2,av2=,sqrt(a,*b),WRITE(*,*)av1,av2,END,PROGRAM Example_1_1!,求平均,REAL:a,b,av1,av2,READ*,a,b,av1=(a+b)/2;av2=(a*b)*0.5,PRINT*,av1,av2,END,第一章,Fortran,程序设计初步,程序説明:程序中第,1,行是注释行,对程序起说明作用。,F77,注释行是以“,C”,或“,!”,作为该行第一个字符的,,F90,可在任意一行末以“,!”,开始作为注释符。第,2,行是主程序名,第,3,行是变量类型定义,第,4,行是输入语句,第,5,6,行是赋值部分,第,7,行是打印输出语句,最后是程序结束。注意,F77,的固定书写格式和,F90,的自由格式,。,F90,中用“;”将两行并为一行。,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,固定格式示例,!,求一元二次方程两个实根,PROGRAM quadratic,REAL a,b,c,d,x1,x2,READ*,a,b,c,输入系数,d=b*b4*a*c,算判别式,100 IF (d=0)THEN,x1=(b+SQRT(d)/(2*a),x2=(bSQRT(d),&/(2*a),PRINT*,x1=,x1,PRINT*,x2=,x2,ELSE,PRINT*,该方程有复数根。,END IF,END,程序结束,标号区,(1-5,列,),语句区,(7-72,列,),注释区,(73-80,列,),续行区,(6,列,),洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,标号区:第,l5,列,可以写,l,至,5,位整数。也可以没有标号。标号区中的空格不起作用。如,lOO,与,100,或,1 0 0,作用相同。标号应是无符号整数,(,无正负号或小数点,),。标号大小顺序没有任何要求。假如第二行的标号为,1000,,第三行的标号可以是,10,,也可以是,99999,。,标号区内不得出现标号以外的内容,但注释行例外。注释行的内容可以写在标号区内,一行中第一列为,C,或*的,该行即被认为注释行,编译时对该行内容不作翻译,对程序运行不产生任何影响。如果在第一列上出现的不是数字、空格或,C,和*的字符,编译时按出错处理。,续行区:第,6,列,如果在一行的第,6,列上写一个非空格和非零的字符,则该行作为其上一行的续行。注意在某些系统中,这个字符可以不限于上面所列的,如,等字符均可使用,。,F77,允许一个语句有,19,个续行,(,即一个语句最多可以写成,20,行,),。有的程序中第,6,列上用“,l”,,“,2”,,,表示该行是第,1,个或第,2,个续行,但用数字字符容易与第,7,列的数字形成连续的数字串而引起错觉,故最好使用固定的特殊字符。,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,语句区:第,772,列,不要求一定从第,7,列开始写语句,可以从第,7,列以后(,72,列以前)的任何一列开始写,但一行只能写一个语句。如果写满,了,72,列,一旦在终端上修改程序时在该行又插入了一些字符,就会使本行最后几个字符超出语句区而引起意料不到的错误。特别注意到语句最后的空格将可能溢出,72,列,在某些计算机系统上将导致难以查出的错误。应注意,引号内的字符串中所包括的空格是有效的,不能忽略,。,注释区:第,7380,列,在卡片输入法时代,程序员一般利用此,8,列为程序行编序号以便查找。注释区只对程序员提供辨别信息,不是语句的一部分,在编译时不对,7280,列作处理,。,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,自由格式示例,!,求一元二次方程两个实根,PROGRAM quadratic,REAL a,b,c,d,x1,x2,READ*,a,b,c !,输入系数,d=b*b4*a*c !,计算判别式,IF (d=0)THEN,x1=(b+SQRT(d)/(2*a),;,x2=(bSQRT(d)/(2*a),PRINT*,x1=,x1,PRINT*,x2=,x2,ELSE,PRINT*,该方程有复数根。,END IF,END !,程序结束,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,行,:一行为,132,列。可以有复数条程序语句,语句间用分号“,;”,分开。语句没有位置规定。,注释行,:起始用注释符“,!”,号,此行其后的所有字符均作为注释(字符串中的,!,号除外,如,print*,help!,)。,续行,:当一个语句非常长以至于,132,列都书写不下时,允许有,39,个续行。在语句行最后加上续行符“,&”,号。,空格,:在语句名和变量名中间不能有空格。需要空格的地方必须有一个以上空格(,GOTO,和,GO TO,,,ELSEIF,和,ELSE IF,,,END,构造名,(,构造名有:,DO,PROGRAM,FUNCTION,MODULE,SUBROUTINE),等有两种写法的除外),如关系运算符,=,,,=,不能写成,=,,,=,。这与,F77,有很大不同之处,因为,F77,的设计中将编译源程序的空格忽略,分号,:,在自由格式中,一行允许写多个语句,语句之间用分号“,;”,分隔,最后语句之后不能有分号“,;”,。一个语句最长不能超过,2640,个字符。,洛阳师范学院物理系,程序实例,基本语句,程序特点,第一章,Fortran,程序设计初步,PROGRAM,语句,:宣布程序开始,,其后跟程序名。,可省略。,REAL,语句,:定义,a,b,.,等变量为实数型数据。如为整数型,则用,INTEGER,定义。,变量名,:,可用,a,b,等无具体意义的文字,或用,average_value,等英文缩写。使用的字 符和文字长度有具体规定。,输入输出语句,:可以用以下任一种默认格式,注意星号,(*),和逗号,(,),。星号意指,默认的输入输出硬件,(,键盘和屏幕,),及格式。,READ*,变量名,READ(*,*),变量名,PRINT*,变量或常数,关系式,WRITE(*,*),变量或常数,关系式,赋值语句:,将等式右边的变量取值赋予左边的变量。,变量,=,变量、常数、关系式,例:,sum=sum+x,算术运算,:项运算:加,(+),,减,(-),,乘,(*),,除,(/),,乘方,(*),。,运算的优先顺序:加,减,乘,除,乘方,括号中优先,(,),。,单项运算:(例,-a,),数据类型,:按定义有整数、实数、复数、双精度数等。,C-,求两种平均値,-,PROGRAM Example_1_1,REAL a,b,av1,av2,READ(*,*)a,b,av1=(a+b)/2,av2=,sqrt(a,*b),WRITE(*,*)av1,av2,END,2.1 Fortran,程序简例,洛阳师范学院物理系,程序实例,基本语句,程序特点,第一章,Fortran,程序设计初步,2.1 Fortran,程序简例,一个,Fortran,程序由一个或若干个程序单位组成。,主程序,和,辅程序,分别是一个独立的程序单位。主程序单元起整体控制作用,各辅程序单元完成总问题中的一个子问题。,每一个程序单位都是以,END,语句结束的。,END,既是一个程序单位的结束标志,又是一个独立的语句,(,结束语句,),。主程序中的,END,语句的作用是使程序“停止运行”。辅程序中的,END,语句是“使流程返回调用程序”。,Fortran,程序中的语句可以有标号。一个语句有否标号是根据需要而定,其作用是标志一个语句以便被其它语句引用。在同一个程序单元中不能有两个相同标号的语句。标号不影响语句的执行顺序。但在,F90,中因为提倡结构化程序设计,一般不使用标号。,F77,源程序必须按固定格式书写,即源程序中哪些内容应写在一行中的哪一列,(,或哪几列上,),有严格的规定。而,F90,可采用自由格式,一个程序单位中各类语句的位置是有一定规定的。例如,PROGRAM,语句应是主程序的第一个语句。,FUNCTION,语句是函数子程序的第一个语句,,END,语句只能是程序单位中最后一行。程序中语句执行的顺序一般依照它们在程序中的先后位置而定。,洛阳师范学院物理系,程序实例,基本语句,程序特点,第一章,Fortran,程序设计初步,2.1 Fortran,程序简例,一个程序单位包括若干行。,F77,行分为下面两类。,F77,规定,一行只能写一个语句,一行中不能写几个语句。如果一个语句太长,一行内写不下的话,可以写在,继续行,(,要用“续行标志”,),语句行,。由一个,Fortran,语句组成,,Fortran,语句分为执行语句和非执行语句。,执行语句,使计算机在运行时产生某些操作,如赋值语句、打印语句等。,非执行语句,(,包括说明语句,数据语句等,),将有关信息通知编译系统,以便在编译时作出相应的处理,例如类型说明语句、函数子程序语句等。,Fortran,程序的基本成份是语句。,非语句行,即注释行,。它不是,Fortran,语句,它不被翻译成机器目标指令。不产生任何机器操作。它仅仅是为了人们阅读程序的方便而加到程序中的。一个程序中注释行的数目不受限制,根据需要而定。但一个程序单位不能只由注释行组成。注释行的内容完全是根据程序设计人员需要而写的,一般是为程序,(,或程序中一部分,),的作用作注释以易于理解程序。,F90,行不分类。注释可以写在任一行末尾,而且一行不限语句 数,可以将几个,F77,行合并写入一行。这样,极大地简化了程序写法,使得程序可以编写得更为清晰明了。因此,F90,的格式较,F77,有柔软性。,洛阳师范学院物理系,字符集,程序组成,第一章,Fortran,程序设计初步,2.1 Fortran,程序的基本组成,FORTRAN 90,源程序是一个符合,FORTRAN 77/90,词法、语法和语义规定的特殊文本,它由,FORTRAN 77/90,字符集规定的字符按照词法、语法和语义规定进行描述。,概述:,Fortran,允许使用的字符如下:,英文字母:,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,特殊符号:空格,=+-*/(),.:,!%$?_(F90,中新增的字符,),其中“,$”,和“,?”,号在程序中没有确切意义。应当注意,在,F77,语句中不区分大小写字母,例如写,READ,和,read,或,Read,是一样的,其它变量名和函数名中,大、小写字母也是等价的。但早期的,Fortran,卡片不允许小写,故老的程序代码都是大写的,很多人也养成了大写的习惯。,洛阳师范学院物理系,字符集,程序组成,总体构造,程序单位,语句顺序,英文名,标号标签,第一章,Fortran,程序设计初步,2.1 Fortran,程序的基本组成,程序总体构造,:,Fortran90,程序是一种分块形式的程序,整个程序由若干个程序模块组成。各模块都有相似的语句组织形式,其中主程序起整体控制作用,各辅程序模块各自完成问题中的一个算法。在解决一个比较复杂的问题时,先把求解的问题分解为若干相对独立的子算法,每一个子算法编为一个辅程序,然后按搭积木一样将各有关程序模块组成一个程序。主程序依次调用各辅程序模块,控制各子算法的实施,通过主程序对子程序的调用,形成程序的整体运行,完成问题的解。,若某一子程序算法仍复杂,可再把它分解为若干更小的算法,分别编写为更低一层次的辅程序,由其他辅程序分别去调用。这种情况可以类推到其它子程序或更低一层次。所以,,Fortran,程序,n,个程序单位,1,主程序单位,(0,n-1),个子程序单位。在最简情况下,Fortran,程序只由一个主程序构成而没有辅程序,所有算法都由主程序自身完成。按现代要求,即使功能比较简单的问题,也最好写成主程序调用辅程序的形式,以便于维护。,洛阳师范学院物理系,字符集,程序组成,总体构造,程序单位,语句顺序,英文名,标号标签,第一章,Fortran,程序设计初步,2.1 Fortran,程序的基本组成,程序单位,:,主程序,PROGRAM,程序,名,语句,可省略,.,END PROGRAM,程序,名,END,必须有,辅程序,(,过程,),SUBROUTINE,子程序,FUNCTION,函数,BLOCK DATA,块数据,MODULE,模块(,F90),内部过程,CONTAINS(F90),程序单位是,Fortran,中的基本成分,包括主程序、辅程序、块数据单元和内部过程。辅程序可以是函数辅程序或子程序辅程序。模块中包含可由其他程序单位访问的各种实体。块数据单元用来对有名公用块的数据对象规定初始值。一个执行程序总是由一个主程序单位和任意个,(,可以为零,),其他类型的程序单位组成,任何程序单位都不能调用主程序。,MODULE,过程在主程序中通过,USE,语句与之相联系。模块用于组装若干功能,(,如过程、类型定义、语义扩展等,),为一集团,是,F90,中极具柔软性的程序单位,它取代了,F77,中的某些不安全的特性。,BLOCK DATA,辅程序的用处是定义全局常数或全局初始化,在,F90,中是不推荐使用的,其功能已被,MODULE,和,USE,取代。,洛阳师范学院物理系,字符集,程序组成,总体构造,程序单位,语句顺序,英文名,标号标签,第一章,Fortran,程序设计初步,2.1 Fortran,程序的基本组成,程序体和语句顺序,:,Fortran,要求严格的语句顺序。在每个程序单位中,根据语句种类按如下的次序排列。,F77,中的顺序可简单归纳为:,P,ROGRAM,FUNCTION,SUBROUTINE,,,BLOCK DATA,等,程序单位开始语句,变量类型和语句函数等定义语句,(,说明部分,),执行语句,,DATA,语句,,FORMAT,语句,(,执行部分,),END,语句,在,F90,中将新增加的语句功能综合后,其顺序为:,洛阳师范学院物理系,字符集,程序组成,总体构造,程序单位,语句顺序,英文名,标号标签,第一章,Fortran,程序设计初步,2.1 Fortran,程序的基本组成,英文名,:,变量名和程序名等使用的英文名是由,(F77,:,6,;,F90,:,31),个字符,(,包含英文字母,A-Z,、,数字,0-9,、,F90:,下划线,_),构成,且第一个字符必须是字母。其英文名的有效使用范围原则上限于一个程序单位之内(内部过程除外)。,例如:,Fortran,没有规定保留字,,即可以用函数名或语句定义符作变量名。但为了避免混淆,建议不要使用,Fortran,中已有特定含义的字作变量名。如,SIN,是正弦函数的名字,如果有以下语句:,SIN,3.5,PRINT*,,,SIN,则语句中的,SIN,是变量名而不代表正弦函数。系统会根据它后面有无自变量而作出判断,又如:,READ*,,,PRINT,此时,PRINT,是一个变量名而不代表“打印输出”的操作。系统会认定语句的第,个字,READ,为代表操作的语句定义符,而把,PRINT,作为,READ,语句中读数的变量。但在同一个程序单位,(,主程序或子程序分别是一个程序单位,),中,,变量名和函数名或语句定义符不能同名,。,洛阳师范学院物理系,字符集,程序组成,总体构造,程序单位,语句顺序,英文名,标号标签,第一章,Fortran,程序设计初步,2.1 Fortran,程序的基本组成,标号和标签,:,可在语句开头加上标号或标签,用于指定特定的语句。有效范围限于一个程序单位内。,标号,:,1-5,位的,10,进制整数,且至少一位不为,0,,前导,0,不起作用。,F90,中,不可对空语句加上语句标号。,标签,:英文名,后面接,“,:”,(冒号),(F90),例,:,DO 10 k=1,100,.,10 CONTINUE,例,:,(F90),DO k=1,100,loop2,:DO,.,END DO,loop2,!,已有标签名时不能省略标签名。,END DO,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,例,1,:,INTEGER:1A !,不是以字母开头,INTEGER:A_name_made_up_of_more_than_31_letters !,太长,INTEGER:China:0 !,含有不允许的字符,INTEGER:A-3 !,减号在此是无意义的,例,2,:,SIN,3.5,A,SIN*SIN(2.0),PRINT*,,,PRINT,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,数据的输入,:,READ*,语句执行时进入等待数据输入的状态。数个数据输入时以英文逗号、空格或换行符作区别,单个数据中间不能有空格。,字符的输出,:在执行,READ,语句时,计算机已经进入等待数据输入的状态,但它不会给出任何提示。除了程序员以外,谁也不会知道需要输入什么数据,即使是程序员自己可能也会忘记。另外,,PRINT,语句打印的数据到到底是什么物理含义也需指明。因此,需要输出文字内容。,字符常量,:,用,或,括起来的文字字符。,例,1.2,输入圆錐底面半径,r,和高,h,,,求体积和表面积。,!-,求圆錐体积和表面积,-,PROGRAM Example_1_2,REAL:pi,r,h,v,s,pi=3.141593,PRINT*,Input radius r and height h?,READ*,r,h,v=pi*h*r*2/3.0,s=pi*r*(r+,sqrt(r,*2+h*2),PRINT*,Volume=,v,PRINT*,Area=,s,END,洛阳师范学院物理系,常量,变量,第一章,Fortran,程序设计初步,3.1,常量和变量类型,常量是指其值始终不变的一些量。整型、实型、双精度和复型常量是算数型常量,也为常数。,五种内部数据类型常量,:,整型常量:,整数,。,实型常量:,实数,性质,。,复型常量:,复数,说明,。,字符型常量:,字符串,。,数组型,逻辑型常量:,逻辑值,。,其值只能为:,.TRUE.,(,真)和,.FALSE.,(,假)。,洛阳师范学院物理系,常量,变量,第一章,Fortran,程序设计初步,3.1,常量和变量类型,变量是指在程序运行期间其值是可以变化的量。系统为程序中的每一个变量开辟一个存储单元,用来存放变量的值。,常量是分为类型的,而变量是用来存放常量的,因此变量也相应地区分为整型变量,INTEGER,、,实型变量,REAL,、,双精度变量,DOUBLE PRECISION,、,复型变量,COMPLEX,、,逻辑型变量,LOGICAL,、,字符型变量,CHARACTER,。,在程序中应当说明哪些变量是整型变量,哪些变量是实型变量。,在程序中规定变量的类型可以用以下几种方法,。,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,隐含约定,:,Fortran,规定,凡以字母,I,,,J,,,K,,,L,,,M,,,N,六个字母开头的变量名,如无另外说明则为整型变量。以其它字母开头的变量为实型变量。可以将这个隐含约定称为“,IN,规则”,表示用,I,到,N,之间的字母开头的变量为整型。例如:,I,,,J,,,IMAX,,,NUMBER,,,LINE,,,JOB,,,Kl,为整型变量,而,A,,,Bl,,,COUNT,,,AMOUNT,,,TOTAL,,,BOOK,为实型变量。,类型指定,:,如果想改变“,IN,规则”对变量类型的约束,可以用类型说明语句专门指定某些变量的类型。,Fortran,中有六个类型说明语句:,(1)INTEGER,语句,(,整型说明语句,),(2)REAL,语句,(,实型说明语句,),(3)DOUBLE PRECISION,语句,(,双精度说明语句,),(4)COMPLEX,语句,(,复型说明语句,),(5)LOGICAL,语句,(,逻辑型说明语句,),(6)CHARACTER,语句,(,字符型说明语句,),洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,IMPLICIT,语句,(,隐含说明语句,),指定,:,可以用,IMPLICIT,语句将某一字母开头的全部变量指定为所需的类型,还可以用一个,IMPLICIT,语句同时指定几种类型。例如:,IMPLICIT INTEGER(A,,,C,,,T-V),IMPLICIT REAL(I,,,J),IMPLICIT INTEGER(A,,,B),,,REAL(I,K),,,INTEGER(X-Z),洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,注:,(1),以上三种方法中,以类型说明语句最优先,,IMPLICIT,语句次之,“,IN,规则”的隐含约定级别最低。如下程序中,IMAX,变量为整型,而其它以,I,、,J,开头的变量为实型:,IMPLICIT REAL(I,,,J),INTEGER IMAX,(2),类型说明语句和,IMPLICIT,语句是非执行语句。,(3),类型说明只在本程序单位内有效。,(4)IMPLICIT,语句和类型说明语句应该出现在本程序单位中的所有执行语句之前,其中,IMPLICIT,语句又应在所有的类型说明语句之前,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,实数有四个性质,:,实数可写成小数形式实数,也可写成指数形式实数。,实数写成指数形式实数可有多种等价写法,如,1.2345E1,和,0.12345E2,为同一实数。,指数形式实数的指数部分决定小数点的位置,指数部分为正,表示小数点向右移动若干位,指数部分为负,表示小数点向左移动若干位。,指数形式实数数值部分决定有效数字位数,(,即精度,),超出有效数字位数,将产生误差。指数部分决定实数大小。,实数性质,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,复数语法和表示,复,数语法,(,),复数表示,代数表示,:,12.5+23.4i,F90,表示,:,(12.5,23.4),洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,字符型,:,1,个字符为,1,字节(中文系统中为,2,字节)。用,(F90,:,),围起来的字符串。,例:,Im a boy.,(,長为,10,字节),Im a boy.,(,長为,10,字节),数 组,:这不是一种单独的类型,可把同类型的常量用一维维数括起来表示:,(/,常量,常量,,.,,常量,/),。,(F90),洛阳师范学院物理系,示例,注意,第一章,Fortran,程序设计初步,3.1,内在函数,Fortran,解题往往要用到一些专门运算。如求三角函数,sinx,,,cosx,,,开根,绝对值,对数,指数,求一组数中最大数和最小数等。,Fortran,提供了一些系统,内在函数,来完成这些运算。程序设计者不必自己设计进行这些运算的语句组(即程序段或子程序),只需写出一个函数的名字以及结出一个或若干个自变量,就可以得到所需的值。例如:,SQRT(4.0),SIN(2.0)2(,弧度,),的正弦值 注意三角函数中 的自变量单位为弧度!,EXP(3.5),LOG(3.0),常用的,Fortran77,函数如下表所示。,洛阳师范学院物理系,示例,注意,第一章,Fortran,程序设计初步,3.1,内在函数,一个内在函数可要求一个或多个自变量,例如,,SQRT,函数只能有一个自变量,而,MOD,函数要求两个自变量,,MAX,和,MIN,函数要求两个以上自变量。注意当自变量个数规定为,2,个时,自变量的顺序不应任意颠倒,如,MOD(8,3),表示,8,被,3,除的余数,其值为,2,,而,MOD(3,8),则表示,3,被,8,除的余数,其值为,3,。当自变量个数为,2,时,自变量的顺序无关。,函数的自变量是有类型的,函数值也是有类型的,例如,MOD(8,3),中自变量,8,和,3,是整型,函数,MOD(8,3),的值“,2”,也是整型,如果写成,MOD(8.0,3.0),,,自变量是实型的,函数值也是实型的,其值为,2.0,。,函数名分为“,通用名,”和“,专用名,”,例如求余函数的“通用名”为,MOD,,“,专用名”有两个,(MOD,,,DMOD),。,根据自变量的类型就自动确定了函数值的类型,如,MOD(8,3),的值为整型,而,MOD(8.0,3.0),的值为实型。当调用子程序时如果用内在函数作为自变量,(,实参,),,必须使用该内在函数的专用名。,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,洛阳师范学院物理系,运算符,优先次序,表达式,第一章,Fortran,程序设计初步,3.2,算术表达式,FORTRAN,规定可以使用五种算术运算符号:,+,表示“加”,(,或正号,),-,表示“减”,(,或负号,),*,表示“乘”,/,表示“除”,*表示“乘方”,请注意:乘号用“*”表示,不能写成“,”,,以免与字母“,X”,混淆,也不能用“,.”,代替乘号。除号不能用“,”,号。两个运算符不能紧邻,如,A*-B,是不合法的,应写成,A*(-B),。,洛阳师范学院物理系,运算符,优先次序,表达式,第一章,Fortran,程序设计初步,3.2,算术表达式,不同的运算符按以下优先级次序:,加,减 乘,除 乘方,括号()中优先。同一优先级的两个运算,乘方按“先右后左”,其它按“先左后右”原则。,例:,x+y*z x+(y*z),x*y*2 x*(y*2),x/y/z (x/y)/z,x*y*z x*(y*z),3+5-6.0*8.0/4*2 3,5,48.0/16.0=5,例:,4,b,分,之,a,a/(4*b),或,a/4/b,,而,a/4*b,和,a/4b,是错误的。,如无自信时可用括号(),对运算时间几乎无影响,。,洛阳师范学院物理系,运算符,优先次序,表达式,第一章,Fortran,程序设计初步,3.2,算术表达式,表达式,是指一个或多个运算的组合。它是由,Fortran,的运算符和括号将各运算元素,(,包括常量、变量、函数、数组元素,),连结起来的一个有值的式子,注意:,(1),由于用“,/”,号作为除号,因此在写除法运算式子时应加上必要的括号。,(2),乘号不能省略,如,必须写成,A*SIN(X),,,而不能写成,ASIN(X),。,(3)Fortran,中无大、中、小括号之分,一律用小括号。,(4),乘方按“先右后左”原则处理。,(5),对单项运算符,(,如,-A,中的符号,),相当于在它前面有一个运算量“,0”,,如:,A*2,相当于,0-A*2,而非,(-A)*2,。,Fortran,算术表达式的求值运算中的优先次序以及,类型,括号,函数,*/,,即括号内的运算级别最高,加减最低。例如,,SQRT(3.*2)*2,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,表达式运算中的类型,同类型的算术量之间运算的结果仍保持原类型。,特别要注意:,两个整数相除的商也是整数,。,例如,,5/2,的值是,2,而不等于,2.5,,,4*(-1),等于,0,,应写为,5*(1./3.),而非,5*(1/3),。,如果参加运算的两个算术量为不同类型,则编译系统会自动将它们转换成同一类型后进行运算。,转换的规律是:将低级类型转换成高级类型。类型的级别如下:,整型,(,低,),实型,(,高,),。类型的转换是从左向右进行的,在遇到不同类型的算术量时才进行转换。,例如:,1/2*1.0,等于,0,,而,1./2*1,对于,0.5,。,洛阳师范学院物理系,洛阳师范学院物理系,第一章,Fortran,程序设计初步,如果类型不同,则应先进行表达式的求值,然后将该表达式的值转换为被赋值变量的类型。如:,I,3.5*2.1,表达式,3.5*2.1,的值为,7.35,,实型。,又如,:,T,3*5/7,表达式的值为,2,,整型。,变量,I,为整型,因此,I,的值等于,7,。,由于,T,为实型,故系统先将整数,2,转换成实数,2.0,,再赋给变量,T,,,T,的值为,2.0,。,当赋值号两侧的类型不同时,往往会产生程序设计者事先预想不到的结果。所以在编写程序时,应尽可能使贼值号两侧保持同类型。,洛阳师范学院物理系,语句排列次序表,第一章,Fortran,程序设计初步,洛阳师范学院物理系,
展开阅读全文