首页 fortran语言第三章

fortran语言第三章

举报
开通vip

fortran语言第三章主讲:吴蓉晖李懿第一章FORTRAN语言的初步认识第二章FORTRAN语言的基本元素第三章FORTRAN语言的简单语句第四章选择结构程序设计第五章循环结构的程序设计第六章FORTRAN数据的输入和输出第七章FORTRAN的过程第八章FORTRAN的数据文件FORTRAN语言的简单语句第三章一、语句FORTRAN程序是由若干条语句与注解行组成。(一)语句的分类:(二类)非执行语句可执行语句1.非执行语句(分为5小类)(1)程序单位语句PROGRAM (主程序语句)FUNCTION (函数语句)SUBROUTINE(子...

主讲:吴蓉晖李懿第一章FORTRAN语言的初步认识第二章FORTRAN语言的基本元素第三章FORTRAN语言的简单语句第四章选择结构程序设计第五章循环结构的程序设计第六章FORTRAN数据的输入和输出第七章FORTRAN的过程第八章FORTRAN的数据文件FORTRAN语言的简单语句第三章一、语句FORTRAN程序是由若干条语句与注解行组成。(一)语句的分类:(二类)非执行语句可执行语句1.非执行语句(分为5小类)(1)程序单位语句PROGRAM (主程序语句)FUNCTION ( 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数语句)SUBROUTINE(子程序语句)BLOCKDATA(数据块子程序语句)(2)说明语句IMPLICIT(隐含类型语句)类型说明语句SAVE(保留语句)DIMENSION(维数语句)EXTERNAL (外部语句)COMMON (公用语句)INTRINSIC (内部语句)PARAMETER (参数语句)(3)DATA语句(赋初值语句)(4)FORMAT语句(格式语句)(5)语句函数语句(1)赋值语句2.可执行语句算术赋值语句字符赋值语句逻辑赋值语句(2)输入输出语句 READ(读语句) INQUIRE(询问语句)WRITE(写语句) BACKSPACE(回退语句)PRINT(打印语句)ENDFILE(结束文件语句)CLOSE(关闭语句) REWIND(反绕语句)(3)控制语句 GOTO语句 算术IF语句DO语句CONTINUE语句块IF语句 STOP语句ELSEIF语句 PAUSE语句ENDIF语句CALL语句逻辑IF语句RETURN语句如前所述,程序单位是由若干条语句和注解行组成的。注解行是为人们阅读程序方便,可以随意选择编写,它对程序运行不起任何作用,所以它在程序中出现的位置无任何限制。可执行语句是完成数据计算、输入、输出等处理的,所以可执行语句自然是按处理数据的顺序依次编排的。3.语句在程序中排列顺序的规定• • •READ语句(输入初始数据)赋值语句(算术计算)WRITE(输出计算结果)END(结束)如另外,还有非执行语句,这些语句是为FORTRAN编译系统提供信息的,它们出现的顺序,FORTRAN77规定,如表中所示。程序单位中语句和注释行的顺序在上表中,水平实线是语句允许出现的前后界线,实线是不可跨越的,否则,被判定为语句顺序错(Statementoutoforder)。垂直虚线表示左边可以向右任意插入。如FORMAT语句可以插到程序单位语句和END语句之间任意一行。注释行可放在END语句之前任一行。粗略地说,FORTRAN语句顺序规定是:说明语句在前,可执行语句在后。二、赋值语句1.格式:变量名=表达式(=为赋值号)2.作用:先计算赋值号右边表达式的值,然后将该表达式的值赋给赋值号左边的变量。3.例1:I=3I=I+1 例2:交换X与Y的值的语句。T=X X=Y Y=T4.类型自动转换(表达式类型--变量类型)变量名与表达式均为数值类型的赋值语句5.算术赋值语句例:X1=AX1+10 合法X1+1=AX1+10 不合法例:Y=35/4结果为3.0(类型与变量一致)(一)算术赋值语句的一般形式算术型变量=算术表达式其中 =称为赋值号算术赋值语句是一个可执行语句。在执行该语句时,计算机是先计算算术表达式的值,然后把结果传送到算术型变量的存储单元中,如图a所示。(使值与变量类型一致)算术型变量算术表达式的值(存储单元)(运算器)算术赋值示意图a算术赋值规则如表所示。算术赋值规则表达式赋值规则变量整型实型整型直接赋值先化为实型,再赋值实型先取整,再赋值直接赋值这就是说,若变量与表达式的类型相同,则直接赋值,若类型不同,系统则自动改变表达式值的类型,使它与左边变量类型一致,再赋值。X=5X=5.0都是合法的。赋值结果,X值皆为5.0,但后一个语句执行速度快些。例如,设X为实型,把5赋给X,下列语句(二)说明(1)赋值号与数学中的等号意义不同,例如:N=N+1在数学中,这是一个方程,而且是一个矛盾的方程,但在FORTRAN程序中,它却是一个合法的赋值语句,它的语义是把变量N的旧值取出来,加上1,然后再送到变量N的存储单元中。重复执行上述语句,这是一个基本算法,叫计数法。(2)赋值号左边是变量名,右边是表达式,左右不允许颠倒。即使右边是变量也不允许颠倒。赋值操作是把右边表达式的值赋给左边变量。如图a所示。(3)FORTRAN规定,不允许多重赋值,例如:X=Y=Z=0.0或X,Y,Z=0.0都是不合法的,必须写成三个赋值语句。例1.任意给定a,b值,按下式计算x,y的值。     x=(a2+b2)3,y=(a2+b2)4解 依据上述要求可编程序如下:(三)几个实例也可以编成如下形式:1:2:3:4:5:6:7:8:PROGRAMC2P1BREALA,B,X,Y,WKREAD(,)A,BWK=(AA+BB)X=WK3Y=XWKWRITE(,)A,B,X,YEND编写程序和办理任何事情一样,同一个命题可能有多种解决问题的方法,方法有好坏之分,编写程序追求的目标是易读、正确、高效率。程序C2P1A作了9次乘法,而程序C2P1B只作了5次乘法,明显地提高了效率。原因是在程C2P1B中,设置了一个临时变量WK,先计算了公用部分,在计算Y时,又引用了变量X。设置临时变量,提前计算公用部分,这是程序设计中常用的技巧之一。例2.交换变量A和变量B的值(简称变量交换)。解 在日常生活中,人们倒两瓶子的液体时,需要一个空瓶子。交换两个变量的值,同样需要一个临时变量。变量值的传递过程,如图所示。设A的值为1.0,B的值为2.0。依据上图a,可编程序如下:1:2:3:4:5:6:7:8:9:PROGRAMC2P2AREALA,B,WREAD(,)A,BWRITE()A,BW=AA=BWRITE(,)A,B,ENDB=W注意:第5行到第7行三条赋值语句的顺序,即图a中,,的次序,这个顺序不能随意颠倒。图b设置了两个临时变量X,Y,依据图b可编写程序如下:1:2:3:4:5:6:7:8:9:10:PROGRAMC2P2BREALA,B,X,YREAD(,)A,BWRITE()A,BX=AY=BWRITE(,)A,BENDA=YB=X程序C2P2B比程序C2P2A多用了一个临时变量,多了一个临时变量,多了一条语句效率差了一些,所以,编程时设置临时变量也要适当。 例:CHARACTERC15,C25,C312C1=Hello,C2=WorldC3=C1//,//C2//!6.字符赋值语句赋值号右边为字符型常数、字符型表达式、字符型变量。类型说明语句CHARACTER说明C1,C2和C3的类型是字符类型,它们的长度分别是5,5和12。字符型变量的长度表示它能存放的字符个数,每个字符用1个字节存放,如图所示。Hollewdlroh!dlrow,olleC1C2C3字符型变量存储单元说明: 字符型表达式值的长度有时和字符型变量的长度不同。若长度不同,其赋值规则为:(1)若字符型变量长度L>=字符表达式长度W,则字符型表达式后面补空格后再赋值。(2)若字符变量长度L<字符表达式长度W,则字符型表达式左边的L个字符赋值。例:CHRACTERC14,C25,C36C1=HelloC2=HelloC3=HelloHellHelloHelloC1C2C37.逻辑赋值语句赋值号左边为逻辑型变量,右边为一个逻辑表达式、逻辑常数、逻辑变量。规定:逻辑表达式的值不能赋值给数值型变量算术表达式的值不能赋给逻辑型变量。例:LOGICALL1,L2L1=4.0.NE.0L2=.TRUE.例 REALA,B,CLOGICALL1,L2,L3A=4.0B=9.6C=3.2L1=A.NE.0L2=BB–4AC.GE.0L3=L1.AND.L2类型说明语句LOGICAL说明L1,L2和L3的类型 是逻辑类型;用关系表达式A.NE.0和BB–4AC.GE.0 给L1和L2赋值;用逻辑表达式L1.AND.L2给L3赋值。注意:(1)赋值号与数学中的等号意义不同。例N=N+1(2)赋值号左边是变量名,右边是表达式,左右不允许颠倒。(3)不允许多重赋值。例X=Y=Z=0或x,y,z=0(错误)必须写成三个赋值语句。综上:对于赋值语句三、简单输入语句(表控输入语句)要求:1.在隐含的输入设备(通常是键盘)上输入相应的数据。2.在输入数据时,各数据之间用逗号或空格分隔。(一)概念表控输入:自由格式输入。(二)格式:例:READ(,)A,BREAD(,)输入表项例:read(,)x,y,z(三)注意:在使用表控输入语句为变量提供数据时应注意以下几个问题:1.输入数据的个数、类型应与READ语句中变量的个数、类型一致。当输入数据的类型与READ语句中的变量类型不一致时,一般按出错处理。但如果输入数据为整型,而变量为实型,许多计算机系统自动将整型数据转换成实型后再输入给实型变量。而当READ语句中的变量为整型时,输入的数据不允许为实型。例如,输入语句为READ(,)M2.FORTRAN77规定,每一个READ语句总是从一个新的输入行开始读数。例如,下列是两个连续的语句(变量类型按隐含规则确定):  READ(,)I,JREAD(,)X,Y如果从键盘输入如下一行数据:  4,18,3.5,–7.6则只是将前两个整数4与18分别输入给第一个READ语句中的两个整型变量I和J,而后两个实数没有起作用,计算机系统继续等待输入数据。这是因为第二个READ语句要求从一个新行开始输入数据。但如果将上述的两个READ语句合并成一个,即改成  READ(,)I,J,X,Y则上述的输入数据就足够了,前两个整数4与18分别输入给整型变量I和J,后两个实数3.5与–7.6分别输入给实型变量X和Y。3.如果在输入数据中出现斜杠(/)符号,则表示对READ语句的输入结束,后面还未被输入的变量不再赋值。例如,设输入语句为 READ(,)I,J,M,K若,从键盘输入为4,18/12,36则,只是将两个整数4与18输入给了整型变量I和J,系统不再把后面的两个整数12和36输入给整型变量M和K;即,执行这个READ语句后,变量M和K的值没有改变,而保持原有的值。4.在为READ语句中的变量提供数据时,每一个数据的各数字之间不能有空格,因为空格也是各数据的分隔符。例如,设输入语句为READ(,)I,J如果从键盘输入为  123,435最后输入给整型变量I与J的值分别为12与3,而逗号后面的整数435没有起作用。这是因为在输入数据时,12与3之间有一个空格,即12与3是两个独立的整数数据,正好依次输入给整型变量I和J。5.在为逻辑型变量输入数据时,逻辑型常数.TRUE.(真)用以字母T开头的一串字母代替,逻辑型常数.FALSE.(假)可以用以字母F开头的一串字母代替。且字符序列前后不加(撇)号,字母前面的.可有可无,字符序列中不包含空格、逗号、斜杠(/)。例如,设FORTRAN77程序为  LOGICAL P,Q  READ(,)P,Q  WRITE(,)P=,P,Q=,QEND在运行这个程序时,如果从键盘输入  TASD,FYUIKMJ输出为  P=T,Q=F6.如果在READ语句中无输入表项,即READ(,)则,要求输入一个回车换行符(即Enter)。7.输入表中,允许出现数组元素名和数组名,当数组名出现在输入表中时,表示按数组的存储顺序读入数据。例:INTEGER M(6) READ(,)M END则数组M的赋值情况123456M(1)M(2)M(3)M(4)M(5)M(6)若输入数据1,2,3,4,5,6INTEGER M(2,3)READ(,)MEND则数组M的赋值情况123456M(1,1)M(2,1)M(1,2)M(2,2)M(1,3)M(2,3)列优先例2.若输入数据1,2,3,4,5,61.给整型变量提供的数据必须是整型常数。2.给实型变量、双精度型变量提供的数据可以是整型常数、实型常数和双精度型常数。3.给复型变量提供的数据必须是复型常数。4.如果变量的类型是字符类型,输入的数据必须是字符型常数。综上:输入数据时注意:例1CHARACTERC12,C25READ(,)C1,C2WRITE(,)C1=,C2=,C2END输入数据:Ok,Hello程序运行结果:C1=OkC2=Hello变量C1和C2的值是:C1C2OHkolle若字符型变量的长度L同所输入的字符型常数的长度W不等时,按前面在赋值方式中的规则一样地进行赋值:即当LW时,字符型常数后面补上L~W个空格后,再给变量赋值。当L<W时,取字符型常数左边的L个字符,给变量赋值。例2CHARACTERC16,C25,C34READ(,)C1,C2,C3WRITE(,)C1,C2,C3END输入数据:Hello,Hello,Hello程序运行结果:Hello?,?变量C1,C2和C3的值为:C1C2HolleHolleHlleC3]四、简单输出语句(表控输出)由常数、变量和表达式组成,每个输出项之间用逗号(,)隔开。1.格式:2.输出表项:WRITE(,)输出表项例如,输出语句  WHITE(,)A,B1,M的作用是依次输出变量A、B1、M的值。又如,输出语句  WRITE(,) S=,S的作用是先输出字符串S=,然后输出变量S的值。所谓表控输出,是指由计算机系统隐含地规定了输出数据的格式。在用表控输出语句输出数据时,计算机系统自动地分别为需要输出的每一个不同类型的数据规定了所占的列数和表示数据的形式。但必须注意,不同的计算机系统对表控输出的格式有不同的规定,在实际使用前,自己上机试一下就可以知道本系统的规定。(2)若输出逻辑型变量的值,.TRUE.(真)时,输出为T.FALSE.(假)时,输出为F。3.说明:(1)无输出表项,即WRITE(,),表示输出一空行。4.表控输出格式表格输出语句在输出各种类型的数据时,是按照表控格式输出的。表控格式是FORTRAN编译系统规定的格式,具体规则如下:(1)整型数的输出域宽度是12,即输出一个整型数时占12个字符的宽度,正号不输出,负号占一个字符位置。整型例1  INTEGERI,J,K,LI=1J=-1  K=10L=-10WRITE(,)123456789012345678901234567890WRITE(,)I,KWRITE(,)J,LEND程序运行结果:123456789012345678901234567890    1   10    –1  –1012列12列右对齐(2)实型数的输出域宽度是24,小数点后面有7位有效数字。输出格式有小数形式和指数形式两种。采用哪一种格式输出,取决于实型数的数量级。实型例2WRITE(,)12345678901234567890123456789012345678901234567890WRITE(,)0.1,0.1234E10WRITE(,)–0.1,–0.1234E–10END程序运行结果:12345678901234567890123456789012345678901234567890    0.1000000   1.2340000E+009    –0.1000000  –1.2340000E–01124列24列7列(3)双精度型数的输出域宽度是24,小数点后面有15位有效数字。输出格式有小数形式和指数形式两种。采用哪一种格式输出,取决于双精度型数的数量级。双精度型例3WRITE(,)12345678901234567890123456789012345678901234567890WRITE(,)0.1D0,0.1234D10WRITE(,)–0.1D0,–0.1234D–10END程序运行结果:12345678901234567890123456789012345678901234567890 0.100000000000000 1.234000000000000E+009–0.100000000000000–1.234000000000000E–01124列24列15列(4)复型数的输出格式是用一对圆括号括起来的两个实型数,两个实型数用逗号隔开。因此,复型数的输出域宽度是48。复型例4WRITE(,)12345678901234567890123456789012345678901234567890WRITE(,)(0.123,–0.0123)WRITE(,)(–0.123,0.0123)END程序运行结果:12345678901234567890123456789012345678901234567890 (0.1230000,0.0123000) (0.1230000,0.0123000)48列逻辑型例5 LOGICALL1,L2L1=.TRUE.L2=.FALSE.WRITE(,)123456789012345678901234567890WRITE(,)L1,L2END程序运行结果:123456789012345678901234567890TF12列12列(6)字符型数据输出时,其值原样输出。输出域的宽度起决于字符型数据的长度。字符型例6 INTEGERI,J,K,SUMWRITE(,)InputI,J,K=READ(,)I,J,KSUM=I+J+KWRITE(,)SUM=,SUMEND输出数据:Inputi,j,k=15,27,58程序运行结果:SUM=]]]]]]]]]10012列(7)如果在出表中有数组名时,则按数组的存储顺序输出其所有元素。数组综上:表控输出格式表控输入输出语句应用举例例1:设平面上有三个互不重合的点A,B,C,用这三个点可组成一个三角形,如图,编写程序,读入A,B,C三点的坐标,求三角形的边长与面积。分析:平面上任一点A(X,Y),可以用一个复数表示Za=Xa+Ybi(X实部,Y虚部)Zb=Xb+Ybi那么,平面上任意A,B两点的距离为三角形三边长为:AB,BC,CA则三角形面积程序COMPLEXA,B,CREALAB,BC,CA,S,AREAWRITE(,)INPUTA,B,C=READ(,)A,B,CAB=ABS(A-B)BC=ABS(B-C)CA=ABS(C-A)S=(AB+BC+CA)/2.0AREA=SQRT(S(S-AB)(S-BC)(S-CA))WRITE(,)AB=,ABWRITE(,)BC=,BCWRITE(,)CA=,CAWRITE(,)AREA=,AREAEND例2:由键盘输入一个大写英文字母,打印输出这个英文字母和它的ASCII码,求出相应的小写英文字母,并输出这个小写字母和其ASCII码。(见教材P39)说明:内部函数ICHAR(C)(已知字符,求ASCII码)如ICHAR(A)=65,ICHAR(a)=97ACSII码为I的字符可由FORTRAN语言的内部函数CHAR(I)求得。如CHAR(68)=D,CHAR(100)=dINTEGERUASCII,LASCII(大小写字母的ASCII码)WRITE(,)Inputauppercaseletter:(输入大写字母)CHARCTER1CUPER,CLOWERREAD(,)CUPPERUASCII=ICHAR(CUPPER)(求ASCII码)WRITE(,)Uppercaseletter=,CUPPER,ASCII=,UASCIILASCII=UASCII-ICHAR(A)+ICHAR(a)CLOWER=CHAR(LASCII)(求小写字母)WRITE(,)lowercaseletter=,CLOWER,ASCII=,LASCIIEND运行:Inputauppercaseletter=(CRT上显示)E(输入)结果:Uppercaseletter=EASCII=69lowercaseletter=eASCII=101(1)由I-N隐含规则确定(2)在PARAMETER语句之前用IMPLICIT语句或显示说明语句说明五、参数说明语句(PARAMETER)2.功能:定义符号常数1.格式:PARAMETER(P=C[,P=C]...)其中:P为符号常数;C是常数,已定义的符号常数或常数表达式3.符号常数P的类型:例:CHRACTER2STARPARAMETER(PI=3.14,TWOPI=2PI,STAR=(1)符号常数一经定义,可在程序任意处引用。(2)定义后,不允许以任何方式修改,包括用赋值语句对它赋值。4.说明:定义符号常数的作用:例:已知圆柱、圆锥和球半径均相等,用R表示。圆柱和圆锥的高相等,用H表示。半径R和高H由键盘输入。编程:计算圆柱、圆锥和球的表面积和体积表面积体积圆柱S1=2R(H+R)V1=R2H球圆锥PARAMETE(PI=3.1415926)REALR,H,S1,S2,S3,V1,V2,V3RITE(,)R=READ(,)RWRITE(,)H=READ(,)HS1=2PIR(H+R)V1=PIRRHS2=PIR(R+SQRT(R*R+HH))V2=PIRRH/3.0S3=4.0PIRRV3=3.0PIR3/4.0WRITE(,)S1=,S1,V1=,V1WRITE(,)S2=,S2,V2=,V2WRITE(,)S3=,S3,V3=,V3END六、变量赋初值语句(DATA)nlist:由变量名、数组名、数组元素名和字符子串组成.名字之间以逗号(,)分隔clist:常数和符号常数组成.整数数据项间以,分隔每项数据与写上与无符号数字,代表说常数重复r次,nlist与clist按从左到右的顺序一一对应。变量表列初值表1.格式:DATAnlist/clist/[[,]nlist/clist/]..3.与赋值语句的区别2.功能给变量、数组、数组元素和字符子串提供初值。4.例:DATAI,R,D,C/1.2,0.3,3.0DO,(4.0,5.0)/等价于DATAI/1/,R/2.0/,D/3.0DO/,C/(4.0,5.0)/DATAI/1/DATAR/2.0/DATAD/3.0DO/DATAC/(4.0,5.0)/5.注意:(1)变量表列中的变量与初值表中的常量在个数、类型等方面要一一对应。例如,下列各DATA语句都是错误的:  DATAA,B,C/2.0,–5.8/DATAA,B,C/2.0,–5.6,3.5,10.0/  DATAI,K,X/3.6,4.5,–4.5/在第一个DATA语句中,初值表中的数据个数少于变量表列中变量的个数;在第二个DATA语句中,初值表中的数据个数多于变量表列中变量的个数;在第三个DATA语句中,变量表列中的前两个变量是整型,而初值表中的前两个常量为常数,即它们的类型不一致。(2)在初值表中如果有n个连续的常量相同,则可以简写为:n常量例如,DATA语句  DATA A,B,C,X,Y,Z/1.0,0.0,0.0,–1.0,–1.0/可以写成  DATA A,B,C,X,Y,Z/1.0,–1.0,20.0,2–1.0/(20.0表示两个连续的0.0, 2–1.0也表示两个连续的–1.0)但特别要注意,2–1.0不能写成2(–1.0),因为2(–1.0)是一个表达式。下列DATA语句都是错误的:DATA A,B,C,Y,Z/1.0,–1.0,20.0,2(–1.0)/在此语句中,2(–1.0),原意可能是表示两个连续的–1.0,但实际上这是一个表达式;DATA X,Y,Z/1.0/3.0,1.32.5,4.0–1.234/在此语句中,初值表中出现了三个表达式1.0/3.0、 1.32.5与4.0–1.234。正确写法是  DATA X,Y,Z/0.3333333,3.25,2.766/(3)在初值表中不允许出现任何形式的表达式。例如,在一个程序单位中依次下三个DATA语句: DATA A,B,C,/1.0,2.0,3.0/DATAK,S,B/10,4.0,5.0/DATAA,K,B/2.4,6,10.0/(4)如果在一个程序单位中有多个DATA语句给同一变量初值,则以最后一个DATA语句中所赋的初值为准。其中变量A分别在第一和第三个DATA语句中赋了初值,此时以第三个DATA语句中赋的初值为准,即变量A的最后初值为2.4。同样的道理,变量K的最后初值为6,变量B的最后初值为10.0。(5)FORTRAN77中DATA语句的作用是赋初值,它本身不是可执行语句。系统在对FORTRAN77源程序进行编译的过程中就完成了这个赋初值的操作。并且,用DATA语句为变量赋初值后,在程序中还可以对赋过初值的变量重新赋值。例:INTEGERIREALRDOUBLEPRECISIONDCOMPLEXCDATAI,R,D,C/4*1/(常数1,重复4次)WRITE(,)I,R,D,CEND程序运行结果:7个015个011.00000001.000000000000000(1.0000000,0.0000000)(7个)(7个)例:CHARACTERC16,C25,C34LOGICALL1L2DATAC1,C2,C3/3Hello/DATAL1,L2/TRUE,FALSE/WRITE(,)C1,C2,C3WRITE(,)L1,L2END程序运行结果:HelloHelloHellTF注意:nlist长度与clist长度不一致时:字符型常数右边多余部分被截去。不足时右边被上空格。与赋值语句的赋值规则相同。七、结束语句(END)2.说明:任一程序单元(主程序和子程序)有且仅有一条END语句,且必须是单元的最后一条语句。1.格式END(1)FORTAN程序单元的结束标志(3)子程序中是停止子程序执行,返回调用子程序处,继续运行3.说明(2)主程序中END是停止程序执行八、停语句(STOP)1.格式STOP[disp]disp:代表5位无符号整数,或字符常数例:STOP99STOPhere2.作用停止程序运行,同时显示disp的内容。例REAL X,XSQRTREAD(,)XXSQRT=SQRT(ABS(X))WRITE(,)X=,XWRITE(,)XSQRT=,XSQRTSTOPProgramstops.END输入数据:–123.0程序运行结果:X=  –123.0000000XSQRT=   11.0905400Programstops.STOP语句是一条可执行语句,其作用是使程序停止运行。根据程序设计的需要,STOP语句可以出现在程序的任何地方。当程序中有多处STOP语句时,有时候我们需要知道程序是在什么地方停止执行的,这时可以在每条STOP语句的后面加上不同的显示内容,计算机执行STOP语句停止程序运行时,显示STOP语句后面的信息。由于END语句的作用之一是使程序停止运行,因此,当STOP语句和END语句相邻时,这条STOP语句可以省略不写。在上例程序中的STOP语句就可以省略不写。九、暂停语句(PAUSE)1.格式PAUSE[disp]disp:代表5位无符号整数或字符常数例:pause99pausehere2.作用:暂停程序运行,同时显示disp的内容。2.例:REALX,XSQRT READ(,)X XSQRT=SQRT(ABS(X)) WRITE(,)X=X,X PAUSEPausehere! WRITE(,)XSQRT=,XSQRT STOPProgramstops. END若,输入数据:1234.0程序运行结果:X=1234.0000000Pausehere!XSQRT=11.0905400Programstops.PAUSE语句是一条可执行语句,其作用是使程序暂时停止运行。根据程序设计的需要,PAUSE语句可以出现在程序的任何地方。当程序中有多处PAUSE语句时,有时候需要知道程序是在什么地方暂时停止执行的,这时可以在每条PAUSE语句的后面加上不同的显示内容,计算机执行PAUSE语句暂时停止程序运行时,显示PAUSE语句后面的信息。十、程序说明语句(PROGRAM)1.格式PROGRAMnamename:主程序名,起名规则同变量名。2.说明在程序中可有可无,如有,则必须是主程序的第一条语句。3.作用:标志着主程序的开始,并给出主程序名。但,不可以与程序中的变量名,符号常数名,数组名等相同。十一、无条件转移语句(GOTO)S:是GOTO语句所在程序单元中的一条执行语句的。改变计算机执行的正常顺序,而转移到GOTO语句指定的语句上去执行。1.格式:GOTOS2.作用:GOTO语句易造成死循环,初学者尽量少用。3.注意:例: PROGRAMEX01 REALX,SUM DATASUM/0.0/10 READ(,)X SUM=SUM+X WRITE(,)X=X,SUM=,SUM GOTO10 STOP END十二、顺序结构程序的算法表示顺序结构程序或程序中的顺序结构部分,是一组不包含改变程序执行顺序的语句。由于这些语句中不包含控制转移语句,程序的执行总是从上至下按书写顺序逐条执行每一执行语句。例:由键盘输入一个正数X,求它的平方根Y,然后打印输出X和Y。(1)输入一个正数给变量X赋值;(2)计算X的平方根,然后给Y赋值;(3)打印输出X和Y。根据以上解题步骤,可以很容易地写出相应的FORTRAN程序。PROGRAMEXAM0301REALX,YREAD(,)XY=SQRT(X)WRITE(,)X,YEND这个程序由两条非执行语句(PROGRAM语句和REAL语句)和四条执行语句组成。这四条执行语句不包含改变程序执行顺序的语句,因此这个程序是顺序结构程序。计算机执行此程序时,按程序的书写顺序从上至下顺序执行。首先执行READ(,)X语句;第二步执行Y=SPRT(X)语句;第三步执行WRITE(,)X,Y语句;最后执行END语句,程序运行结束。在程序设计过程中,为了清晰、简明地描述解题步骤,通常采用流程图。顺序结构流程图是一组用箭头线连接起来的矩形框和平行四边形框。其中:每一个矩形框里面写上解题的一个步骤或一条执行语句; 每一个平行四边形框里面写上一个输入/输出操作或一条输入/输出语句。下图为上例算法的顺序结构流程图:输入一个正数给变量X赋值计算X的平方根,然后给Y赋值打印输出X和Y画结构流程图时,应该注意以下事项:(1)只描述可执行语句,非执行语句一律不出现在结构流程图中。(2)为了使结构流程图简明,常常将若干条连续的语句依次写在同一个矩形框或平行四边形框或平行四边形框中。(3)流程图既表示了程序的结构,也反映了程序运行流程。上图中所示的流程图是采用文字描述的,也可以采用FORTRAN语句进行表述,如下图所示:READ(,)XY=SQRT(X)WRITE(,)X,Y用自然语言描述的流程图的特点是不涉及程序设计语言的具体细节,便于阅读和进行交流。而用程序设计语言描述的流程图宜于写出相应的源程序。十三、顺序结构程序设计前面详细地讲述了表控输入/输出语句和赋值语句等,这些语句都是顺序执行的语句,即按在程序中出现次序从上到下依次执行,直到END语句结束。同一个问题可以用多种算法(即解题的方法和步骤),编出各种各样的程序。下面简要介绍评价程序的基本准则,以及调试程序的基本方法,以便使同学们能编出高质量的程序。(一)评价程序的基本准则早期因为机器硬件功能差(内存容量小,速度低)为此评价程序标准是“效率第一”(速度快,占内存少),近代机器硬件水平大幅度提高。为提高编程效率,评价程序是“清晰第一”,即易读和易维护,具体有以下几点:1.可靠性:数据类型要合理,算法要正确,语句要合法,程序要完整,经过上机认真调试和运行。这是最基本的要求。2.可用性:指用户使用该程序方便性,即有良好的用户输面,如输入前有提示,输入后,有应答显示。3.可维护性:算法简明,逻辑通顺,易读,易理解,便于修改扩充。4.通用性:不但适用于某一个问题,而且适用于某一类问题。为了便于从一个机器上移植到另一个机器上,要用标准化语句写程序。5.高效率:运行速度快,占用内存单元少。例如2.5程序C2P1B比程序C2P1A要好。当然,以上五点也是有矛盾的,在实际工作中,要依据用户要求、软硬件条件,需要做合理折中的处理。(二)调试程序的基本方法在编写一个程序过程中,常常发生这样或那样错误,有一类错误是语法错,即语句、程序不符合语法规定,一般地说,这类错误通过上机编译连接可以发现,被排除。在排除语法错误时,注意,由前到后的去排除,有时后边的“错误”是前面错误引发的,当改正了前面错误后,后面“错误”就没有了。另外一类错误是逻辑错,它包括解题方法错、变量类型选择不对,以及小的书写错误而引发的逻辑错等。总之,只要有一点错误,都会导致程序运行结果不对,编程工作失败。排除程序错误的过程叫调试程序。调试程序的方法概括地说分动态调试和静态调试。 动态调试即上机反复修改、编译、连接、运行。 静态调试即不上机,阅读、分析、检查、修正。 静态调试只是一辅助手段,最好是动态调试。例:已知机械振动的振幅(im)、角频(:单位为度/秒)和时间(t:单位为秒),计算机械振动位移(i)公式为i=im·cost某人编程如下1: PROGRAMC2P52:C implicitlogical(a-z)3: REALI,IM,W,T,PI4: PARAMETER(PI=3.1415926)5: READ(,)IM,W,T6: WRITE(,)IM,WT7: W=WRI/180.08: I=IMCOSWT9: WRITE(,)I10: END]经过编译连接未发现错误,运行输入数据如下:80.0,15.0,3.0输出结果是80.0000000.000000E+000.000000E+00而如何检查一个程序呢?通常要从如下几方面入手:1)检查程序是否符合题意。看看程序的数据类型和算法是否正确。程序C2P5选择实型,并作了类型说明,算法基本正确。2)检查程序是否完整。一个程序通常要有提供数据部分,处理数据部分,和处理结果输出部分。程序C2P5无误。3)检查书写形式是否符合语法规定。看看程序语句顺序、语句、常数等。程序C2P5经过编译连接语法错误已经排除。现在已经出结果,但是不对。4)要检查变量名是否有书写错误。由于FORTRAN77有“数据类型隐含规则(I-N规则)”。使得整型或实型变量名可以不作类型说明,即可以使用。这样,如果一个变量名写错了,将按隐含规则被编译系统认定是一个新变量,而隐藏起来,变量名书写错误是非常隐蔽的错误。IMPLICITLOGICAL(A-Z)这里推荐一个方法,即在程序中,加上一条隐含类型说明语句。如说明隐含出现的变量名为逻辑型,即若把上述语句加到上例程序C2P5中,再编译会发现第8行有语法错误(运算项类型不一致)。COSWT按隐含说明为逻辑型被暴露,应改为COS(WT)。经修改编译连接,再运行会发现第6行会输出一个逻辑值(F),你会发现WT是一个逻辑变量。因为符号名中的空格是无效的,这里要用逗号(,)作分隔符。再修改、编译、连接、运行,即可得到正确结果。]5)检查逻辑错误。逻辑错误是比较难查的,如果程序较长,可以在程序的适当位置插入一些输出语句,作分段检查,往往是行之有效的。(三)顺序程序设计举例例1我国人口在1982年统计为10.3亿,如果年增长为1.5%,求公元2000年末的人口总数。解P0为人口初始值,P1为n年后人口,r为年增长率。计算人口公式为P1=P0(1+r)n依据上述分析可编程序如下:1: PROGRAMC2P62: R=0.0153: N=2000-19824: P0=10.3E35: P1=P0*(1.0+R)**N6: WRITE(*,*)THEPOPULATIONOF2000IS,P17: END运行结果THEPOPULATIONOF2000IS1.346561E+09即13亿4千多万。18年将增1亿4千多万人。这个程序没有READ语句,所以在运行时,不需要从键盘上输入数据。例2火车原以均匀速度V0(公里/小时)行驶,从t=20分钟时开始加速运行,加速度a(公里/小时2),问t=50分钟时,火车共行驶距离s(米)和速度v(米/秒)是多少?(输出数值取小数点后二位,对第三位按四舍五入处理)。解从物理学知道,匀速运动公式为V1=V0(t1=20分钟)S1=V0t1(前20分钟为匀速运动)加速运动公式为(t2=t-t1=30分钟)(后30分钟为加速运动)所以,其行驶距离S和末速度V为另外,还有两个问题未解决(1)计算单位要统一。按题目要求选用米,秒制解决办法是:先将小数点后移两位,加上0.5使第三位四舍五入,然后取整截去小数部分,最后将小数点再前移二位。设X是要输出的变量,可用如下表达式处理INT(X100+0.5)/100.0(2)输出数值取小数点后二位,对第三位按四舍五入处理。依据上述分析可编写程序如下:1: PROGRAMC2P72:C FUN(X)=INT(X100.0+0.5)/100.03: READ(,)V0,A4: V0=V01000.0/3600.05: A=A1000.0/(3600.02)6: T=50.060.07: T1=10.060.08: T2=T-T19: V=V0+AT210: S=V0T+0.5AT2T211: WRITE(,)V=,FUN(V),m/sec12: WRITE(,)S=,FUN(S),m13: END这里V=,m/sec等是字符串,将输出两个撇号之间的所有字符。第3行输入V0(公里/时),A(公里/时2)。
本文档为【fortran语言第三章】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
xrp27580
暂无简介~
格式:ppt
大小:530KB
软件:PowerPoint
页数:
分类:企业经营
上传时间:2019-04-13
浏览量: