资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,精选2021版课件,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,精选2021版课件,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,精选2021版课件,*,FORTRAN语言程序设计,1,精选2021版课件,第一章,程序设计概述,2,精选2021版课件,1.1 程序设计基本概念,1.程序:计算机操作命令的集合。例:求x、y、z的平均值aver的程序。,2.程序设计:编制程序(操作命令)的过程。,3.程序设计语言:书写程序所采用的某种专用语言。,高级语言:数学语言或自然语言。,如:FORTRAN语言等,程序设计语言的类型:,低级语言:机器语言和汇编语言。,3,精选2021版课件,1.2 程序设计方法和步骤,1.2.1 程序设计方法,1.结构化方法,(1)采用“自顶向下,逐步求精”的程序设计方法.,(2)采用“单入口单出口”的控制结构.,(3)三种基本程序结构:,顺序、选择和循环.,结构化程序设计的,特征:,(a),模块化,:把一个较大的程序划分为若干个子程序,每一个子程序独立成为一个模块;,(b),层次化,:先设计第一层(即顶层)。然后步步深入,逐层细分,逐步求精,直到整个问题可用程序设计语言明确地描述为止。,(c),逐步求精,:是对一个复杂问题,从抽象到具体,最终编制出一个可执行的程序。,2.面向对象方法,详见P,5,4,精选2021版课件,1.2.2 程序设计步骤,1.分析问题,2.建立数学模型,3.选择算法,4.编写程序,5.调试运行,6.分析结果,7.写出程序的文档,5,精选2021版课件,第二章 算 法,6,精选2021版课件,2.1 算法概述,1.算法:计算机解题的方法和步骤.,2.算法特征:,(1)有穷性,一个算法必须总是在执行有限步骤之后结束。,(2)确定性,算法中的每一个步骤应当是确定的,无二义性;相同的输入只能得出相同的输出。,(3)可行性,算法中的每步骤都是有效地执行。,(4)有零个或多个输入,(5)有一个或多个输出,3.算法的分类:,(1),数字运算:用于求数值解,此类算法有现成的模型,运用较成熟.,(2),非数字运算:用于非数据处理的一些事务性工作,此类算法面广量大,要求各异,有一定难度.,7,精选2021版课件,2.2 算法特点,计算机特别适合做大量的重复性操作,如连续加、连续乘或者其他连续判断或处理。计算机对于大量的重复性操作,并非一次性完成,而是每次按部就班,循环往复重复前一次的操作,即,每次操作方法(即循环体)相同,但操作数据不同而已。,例如,求1,2,10的累加和,其程序如下:,do i=1,10,!循环语句,s=s+i,!循环体,enddo,上述循环所要执行的重复操作是:s=s+i(即循环体),但每一次循环时,循环体的操作数据s,i的值是不同的。,.,8,精选2021版课件,2.3 算法的表示方法,(1)传统流程图 即用有向线段将描述,算法步骤,的,各功能框,连接起来.如下图所示:,图(a)顺序结构 图(b)选择结构,A,B,条件P,A,B,真,假,图(c)当型循环结构 图(d)直到型,循环,结构,循环条件,循环体,循环体,循环条件,真,假,假,真,9,精选2021版课件,(2)N-S流程图,它是一种去掉流程线的流程图,称为盒图.N-S流程图形式如下图所示:,A,B,图(a)顺序结构 图(b)选择结构,图(c)当型循环结构 图(d)直到型,循环,结构,当执行循环的条件成立,循环体,直到退出循环的条件成立,循环体,条件,真,假,A,B,10,精选2021版课件,第三章 FORTRAN语言简介,11,精选2021版课件,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,精选2021版课件,3.2 FORTRAN程序的执行过程,13,精选2021版课件,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,精选2021版课件,第四章,FORTRAN,语言开发环境,详见教材:3.3 FORTRAN语言开发环境,15,精选2021版课件,第五章 FORTRAN 语言基础知识,16,精选2021版课件,5.1 字符集,FORTRAN语言允许使用的字符集为:,英文字母,A-Z 或 a-z,(,即,大、小写英文字母,),阿拉伯数字,0、1、2、3、4、5、6、7、8、9,特殊符号,空格=+-*/#?(),.:“!$_,应当注意:,在FORTRAN语言中,,英文,字母,不区分大,小写,,在保留字、变量名和函数名中,大、小写字母,都是等价的,如REAL何real或Real是一样的。,17,精选2021版课件,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,精选2021版课件,5.3 程序单元,一个完整的FORTRAN程序,应由以下程序单元构成:,主程序单元 外部子程序单元1,PROGRAM MAIN SUBROUTINE SUB1(),主程序体 子程序体 ,END PROGRAM END,其中主程序单元只能有1个,其它程序单元可以有0-n个。,程序单元的描述详见第十章。,19,精选2021版课件,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,精选2021版课件,5.5 程序的书写格式,(1)固定格式:将一个语句行分为若干个区域,如下图所示:,(2)自由格式:一个语句的书写不受区域的限制。,FORTRAN90,的,源程序,格式,采用,自由格式,书写,,源程序,文件,扩展名,为,.f90,。,例:详见,eex5_1,.f90,的,源程序,格式,及其,扩展名。,21,精选2021版课件,5.6 数据类型,5.6.1 基本概念,1.内部数据类型,FORTRAN语言将内部数据划分为以下类型:,整型,实型 算术型,数据类型 复型,逻辑型,字符型,2.种别,一个数据在内存中均占有一定字节个数的存储单元。上述每类数据都有其不同的种别(即Kind)特性,即上述每类数据根据其种别特性(即Kind值)的不同分别拥有不同字节个数的存储单元。,3.数据对象,1)常量:程序运行时,其值不能改变的量,称为常量。如:5,3等等。,2)变量:程序运行时,其值可以改变的量,如:变量a,a是一个存储单元。,22,精选2021版课件,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,精选2021版课件,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,精选2021版课件,5.6.2.4 字符,型常量,在程序中用以表示文字等非数值信息。,一般形式:字符串 或“字符串”,其中:字符串可以是字母、数字、汉字、特殊符号。通常字符串中字,符的个数称为,字符长度,。,例:PRINT*,南京信息工程大学,PRINT*,”a+b=”,ab,说明:1)引号(或“”)是字符串的分隔符,并非字符常量的一部分。,2)字符串中的空白符有意义,要计数的。例:“A B”,其字符长度是3。,3)当字符长度为0时,即为空串。,4),字符串内的字母区分大小写,a和A是不同的字符常量。,5),如果字符串中含有单引号,则这个单引号要用两个连续的单引号表示,如:Im a boy.。或者单引号和双引号交替使用,如“Im a boy.”。,25,精选2021版课件,5.6.2.5 逻辑型常量,在程序中用以表示某个条件(关系表达式和逻辑表达式)的判别结果。,一般形式:,.,TRUE,.,即为逻辑真(表示判别条件成立)。,.,FALSE,.,即为逻辑假(表示判别条件不成立)。,例:条件5,3,的判别结果是,.,TRUE,.,,表示判别条件5,3,成立。,条件3,1,的判别结果是,.,FALSE,.,,表示判别条件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,精选2021版课件,5.7.3,逻辑表达式,1.作用:,用作较复杂的逻辑比较。如表示多个条件同时成立,或表示多个条件中只有一个条件成立即可,这种条件的表示方法,必须要用逻辑表达式。,例如:,1)a b.and.x y,!该逻辑表达式表示:ab 同时 xy,2)x 0.or.y 0,!该逻辑式表示这两个条件只要有一个成立即可,42,精选2021版课件,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,精选2021版课件,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,精选2021版课件,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,精选2021版课件,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,精选2021版课件,5.8 赋值语句,作用:给变量赋一个确定的值。,5.8.1 赋值语句的类型,算术赋值语句,类型 字符赋值语句,逻辑赋值语句,5.8.2 赋值语句的一般形式,其中:1)“”称为赋值号,意义为“左传送”。,2)变量统称为左部变量。,语意:将 右端表达式的值赋给同类型(算术型、字符型、逻辑型)的左部变量。,即:算术型变量算术表达式,!算术赋值语句,字符型变量字符表达式,!字符赋值语句,逻辑型变量逻辑表达式,!逻辑赋值语句,49,精选2021版课件,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,精选2021版课件,b)类型不同,实型左部变量=整型右端表达式值,则将右端表达式值添加小数点后再赋值。,整型左部变量=实型右端表达式值,仅取右端表达式值的整数部分数值赋值。,例:,INTEGER:a=23,c,REAL :b=98.78,d,d=a,!d=23.0,将整型右端表达式值添加小数点后再赋值给d。,c=b,!c=98,仅取实型右端表达式值的整数部分数值赋值给c。,51,精选2021版课件,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,精选2021版课件,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,精选2021版课件,5.10 停与暂停语句,用以表示程序的停止运行(END或STOP)或暂时中断程序的运行(PAUSE)。,1.END语句,作用:1)表示一个程序段的结束,提示编译程序该程序段编译结束。,2)主程序中的END语句,表示程序运行到此结束可以返回操作系统。,一般形式:END,说明:END语句一般出现在一个程序段的最后。,2.STOP语句,作用:表示随时执行STOP语句停止程序运行返回操作系统。,一般形式:STOP 字符串,其中:字符串用以表示STOP语句停止运行时的标记。,说明:STOP语句可以出现在一个程序段的任何可执行语句之处。,3.PAUSE语句,作用:表示暂停程序的执行,一般用于调试程序时给程序设置运行断点,,当从键盘上键入任意键后,可使程序从刚暂停处(即中断点)继,续运行。,一般形式:PAUSE 字符串,说明:PAUSE语句可以出现在一个程序段的任何可执行语句之处。,54,精选2021版课件,5.11 标准函数,对于一些常用的标准函数,编译系统已定义好且存入函数库,,只要在程序中采用“函数名(参数)”的方式直接引用即可。,1.函数分类:,标准函数,函数 语句函数,用户自定义函数,外部函数,2.标准函数的引用方式:,(),其中:1):一个或用逗号隔开的一系列参数名。,2)函数名、参数表中参数的类型及个数详见,附录D常用库函数,.,3.说明,1)参数的个数必须与函数表中参数的个数一致。,2)参数类型和函数值类型(即函数类型),详见附录。,3)三角函数的参数均使用弧度:弧度角度*3.14159/180,4)参数可以是常量、变量、表达式,且允许函数的嵌套。,4.常用函数,FORTRAN函数表,详见附录D常用库函数。,55,精选2021版课件,(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,精选2021版课件,例如:,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,精选2021版课件,(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是字符串,调用该函数,求解string去除尾端空格后的字符串,58,精选2021版课件,例如:,PROGRAM eex5_3,CHARACTER*1 c1,c2,c3*19,c4*10,c5*8,c6*8,INTEGER:num=99,asc,len1,len2,len3,c1=a,c3=This is a computer.,c4=computer,c5=computer,c2=CHAR(num),!调用函数CHAR()求解与参数num的ASCII代码值对应的字符,asc=ICHAR(c1),!调用函数ICHAR()求解与参数a对应的ASCII代码值,len1=LEN(c3),!调用函数LEN()求解字符变量c3的长度,len2=LEN_TRIM(c4),!调用函数LEN_TRIM()求,解,去掉字符变量c4末尾空格的实际长度,len3=INDEX(c3,c5),!调用函数INDEX()求解子串c5在字符变量c3中的位置值,c6=TRIM(c4),!调用函数TRIM()求解去掉字符变量c4末尾空格的字符串,PRINT*,与参数num的ASCII代码值对应的字符是:,c2,PRINT*,与参数字符a对应的ASCII代码值是:,asc,PRINT*,字符变量c3的长度是:,len1,PRINT*,去掉字符变量c4末尾空格的实际长度是:,len2,PRINT*,子串c5在字符变量c3中的位置是:,len3,PRINT*,去掉字符变量c4末尾空格的字符串是:,c6,END,59,精选2021版课件,程序的运行结果是:,与参数num的ASCII代码值对应的字符是:c,与参数字符a对应的ASCII代码值是:97,字符变量c3的长度是:19,去掉字符变量c4末尾空格的实际长度是:8,子串c5在字符变量c3中的位置是:11,去掉字符变量c4末尾空格的字符串是:computer,60,精选2021版课件,
展开阅读全文