Fortran语言教程

上传人:tia****nde 文档编号:252938069 上传时间:2024-11-26 格式:PPT 页数:387 大小:1.60MB
收藏 版权申诉 举报 下载
Fortran语言教程_第1页
第1页 / 共387页
Fortran语言教程_第2页
第2页 / 共387页
Fortran语言教程_第3页
第3页 / 共387页
资源描述:

《Fortran语言教程》由会员分享,可在线阅读,更多相关《Fortran语言教程(387页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,*,,*,,Fortran,语言,(,Fortran77,结构化程序设计),普通高校计算机基础教学课程,2024/11/26,2,,,说明,,第一章 算法,(略),,第二章 计算机和计算机程序,(略),2024/11/26,3,第三章,Fortran,语言程序设计初步,,2024/11/26,4,3.1 Fortran,语言的发展概况,,FOR,mula,TRAN,slator,公式翻译器,,,,Fortran,语言是一种适合于科学和工程计算问题的程序设计语言;也是计算机高级语言发展史上使用最早的一

2、种程序设计语言。,2024/11/26,5,3.1 Fortran,语言的发展概况,,Fortran,语言的发展过程:,,1951,年由约翰,·,贝克斯等人开始研究,Fortran,语言;,,1957,年第一个,Fortran,程序在,IBM704,机上运行;,,1958,和,1962,年先后推出,FortranⅡ,和,FortranⅣ,;,,1966,和,1978,年先后颁布,Fortran66,和,Fortran77,;,,1991,年颁布了,Fortran90,。,,现在已经有了,Fortran 95,,,Fortran 2003,2024/11/26,6,Fortran,语言的特征,F

3、ortran,语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。,,易学,语法严谨。,,可以直接对矩阵和复数进行运算。,,自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。,,很多专用的大型数值运算计算机针对,Fortran,做了优化。,,广泛地应用于并行计算和高性能计算领域。,,Fortran 90,,,Fortran 95,,,Fortran 2003,的相继推出使,Fortran,语言具备了现代高级编程语言的一些特性。,2024/11/26,7,3.2,简单的,Fortran,程序分析,,例,1,:求一元二次方程,x,2,+3x-5.6=0,的根,并打

4、印结果。,,利用公式:,,,,(这里,,a=1,,,b=3,,,c=-5.6,),2024/11/26,8,3.2,简单的,Fortran,程序分析,,编程如下:,,c the roots of the quadratic equation,,a=1.0,,b=3.0,,c=-5.6,,x1=(-b+sqrt(b*b-4.0*a*c))/(2.0*a),,x2=(-b-sqrt(b*b-4.0*a*c))/(2.0*a),,write(*,100)x1,x2,,100 format(1x,'x1=',f6.2,'x2=',f6.2),,end,2024/11/26,9,3.2,简单的,Fo

5、rtran,程序分析,执行结果:,,x1= 1.30 x2=-4.30,,例,2,:试求,3!,,,6!,,,9!,的值。,,编程如下:,2024/11/26,10,3.2,简单的,Fortran,程序分析,主程序: 子程序:,,,c main program c subprogram,,j=k(3) function k(n),,l=k(6) k=1,,m=k(9)

6、 i=2,,write(*,*)j,l,m 5 if (i.le.n) then,,end k=k*i,,i=i+1,,执行结果:,goto 5,,6 720 362880 endif,,return,,end,2024/11/26,11,3.2,简单的,Fortran,程序分析,Fortran,程序的基本结构:,,⑴一个,Fortran,源程序由一个或多个,程序单位,组成,每个程序单位以,“,end,”,语句结束

7、。,,⑵每个程序单位包括若干行,,语句行(执行语句和非执行语句行),,非语句行(注释行),,⑶语句前可不设标号,也可根据需要设标号。,,⑷各类语句在程序单位中的位置有一定规则。,,⑸程序必须按规定格式书写。,2024/11/26,12,3.3 Fortran,源程序的书写格式,Fortran77,源程序必须按以下格式书写:,,,⑴每行只能在,80,列内书写,,并把,80,列分为,4,个区。,,,⑵,1,~,5,列:标号区,,(,1,~,5,位无符号整数;第,1,列为,“,*,”,或,“,c,”,时,为注释行),,,⑶第,6,列:续行标志区,,(非空格或非零字符;最多,19,个续行),,,⑷,7

8、,~,72,列:语句区,,(书写语句;一行只能写一条语句),,,⑸,73,~,80,列:语句注释区,,(一般作编号注释),2024/11/26,13,3.4 Fortran,程序的编辑与运行,Fortran PowerStation 4.0,集成开发环境,,简 介,2024/11/26,14,3.4 Fortran,程序的编辑与运行,一、,Fortran PowerStation 4.0,的启动,,选,“,开始,”,→,“,程序,”,→,“,Fortran PowerStation 4.0,”,→,“,Microsoft Developer Studio,”,。,,二、创建项目工作间,,选

9、,“,File,”,→,“,New,”,→,“,Project Workspace,”,→,“,Console Application,”,,并输入项目工作间名称(如:,aaa,)和存放项目工作间的位置或路径(如:,c:\for\,) →,Create,。,2024/11/26,15,3.4 Fortran,程序的编辑与运行,三、给项目工作间添加和编辑文件,,打开指定的项目工作间→选,“,Insert,”,→,“,File into Project,”,→,输入要添加的文件名(如:,st01.for,)→,“,Add,”,。然后按,Fortran,程序的书写规则编辑程序。,,四、编译项目工作间

10、中的文件,,打开指定的文件→选,“,Build,”,→,“,Compile st01.for,”,。,,五、连编项目文件,,选,“,Build,”,→,“,Build aaa.exe,”,。,,六、运行项目文件,,选,“,Build,”,→,“,Execute aaa.exe,”,。(显示程序执行结果),2024/11/26,16,3.4 Fortran,程序的编辑与运行,注:若,Fortran,程序是由一个主程序文件和若干个子程序文件组成,则应将各文件添加到同一项目工作间,分别进行编译,然后连编和运行项目文件。,,七、打开项目文件,,选,“,File,”,→,“,Open,”,→,在打开对话

11、框文件类型下拉列表中选,“,Project Workspace(*.mdp),”,→,然后选项目工作间文件夹中的项目文件。,2024/11/26,17,3.5,常 量,常量,——,在程序执行期间其值固定不变的量。,,Fortran,处理六种类型的常量:,,⑴整型常量(,Integer,),,⑵实型常量(,Real,),,⑶双精度常量(,Double precision,),,⑷复型常量(,Complex,),,⑸逻辑型常量(,Logical,),,⑹字符型常量(,Character,),2024/11/26,18,3.5,常 量,3.5.1,整型常量,,包括正、负整数和零。,,,例

12、:,5,,,-13,,,0,,,…,,,说明:,,①在(,16,位)微机中,整数的取值范围为:,,,-2,15,~,2,15,-1,(,-32768,~,32767,),,②在(,32,位)微机中,整数的取值范围为:,,,-2,31,~,2,31,-1,(,-2147483648,~,2147483647,),2024/11/26,19,3.5,常 量,3.5.2,实型常量,,(有二种表示形式),,⒈小数形式,,例:,15.8,,,-21.05,,,14.0 ,,14.,,,.17,,,0.0 ,,…,,⒉,指数形式,(通常表示较大或较小的数),,例:,100000000→1.0E+8,

13、,0.0000125→,1.25,E-05,,,,数字部分,,指数部分,2024/11/26,20,3.5,常 量,说明:,,⑴一个数值用指数形式表示时有两种表达方式:,,①一个基本实数后面跟指数部分。,,例:,0.876→8.76E-1,,-2589.4→-2.5894E+3,,②,一个整数后面跟指数部分。,,例:,0.876→876E-3,,-2589.4→-25894E-1,2024/11/26,21,3.5,常 量,⑵,同一个数值可用不同的指数形式表示。,,例:,0.876→8.76E-1→87.6E-2→876E-3,,⑶,计算机在输出时,按标准化指数形式输出。,,例:,

14、0.28→2.800000E-01,,-59.58E+12→-5.958000E+13,,,即数字部分大于,1,,且小数点前只有一位非零数字的指数输出形式。,,⑷在微机中,一般用四个字节存放一个实数,其取值范围为:,10,-75,~,10,75,。超出此范围时为,“,溢出,”,错误。,2024/11/26,22,3.5,常 量,⑸,下列形式为不合法的指数形式:,,①单独的小数点和单独的指数部分。,,例:,.E5,,,E10,×,,②,指数部分只能是整数,不能带小数点。,,例:,8E0.5,,,12.3E1.5,×,2024/11/26,23,3.6,变 量,变量,——,在程序执行期

15、间其值可以改变的量。,,3.6.1,变量的概念,,,Fortran,为每一个变量分配一个相应的存储单元;每个变量在每个时刻只能有一个确定的值。,,例:,x=4.5 x,,x=8.0 x,,,注:在程序中用到的变量都必须要有确定的值。,4.5,8.0,2024/11/26,24,3.6,变 量,3.6.2,变量名,,变量名,——,标识一个变量所用的名字。,,命名规则:,,变量名的第一个字符必须是字母;,,在第一个字符后可跟,1,~,5,个字母或数字。,,例:,,x,,,m1,,,total,,,k123,,,…,,2024/11/26,25,3.6,变 量,注意几点:

16、,,⑴变量名不区分大小写字母。,,例:,TOTAL,,,Total,,,total,代表同一变量,,⑵变量名中的空格不起作用。,,例:,abc,,,a bc,,,ab c,,,a b c,代表同一变量,,⑶变量名尽量做到,“,见名知义,”,,AVER,、,SUM,、,Imax,,⑷,允许变量名与语言中具有特定含义的字(,“,保留字,”,)同名。,,例:,sin,,,read,,,open,,,end,,,…,,建议,不要,使用,fortran,中具有特定含义的字作变量名,2024/11/26,26,3.6,变 量,3.6.3,变量的类型,,,Fortran,能处理各种类型的变量。不同类型

17、的变量用来存放不同类型的数据。,,变量类型的说明,(三种方式),,⒈隐含说明,,即以,I,、,j,、,k,、,l,、,m,、,n,开头的变量为整型变量,以其它字母开头的变量为实型变量。(,“,I,~,N,规则,”,),,例:,imax,,,m5,,,number,,,…,,为整型变量,,,v,,,h2,,,aver,,,…,,为实型变量,2024/11/26,27,3.6,变 量,⒉,显式说明,,即用类型说明语句指定变量的类型。,,如:,,Integer,——,说明变量为整型变量,,Real,——,说明变量为实型变量,,Double precision,——,说明变量为双精度变量,,Co

18、mplex,——,说明变量为复型变量,,Logical,——,说明变量为逻辑型变量,,Character,——,说明变量为字符型变量,2024/11/26,28,3.6,变 量,如:,,,Integer abc,,,xyz,,real imax,,,k3,,logical a1,,,kpz,,⒊,用,implicit,语句说明,,即说明用某一字母开头的变量为指定的类型。,,例:,implicit integer(a,,,b),,,real(k),,implicit integer(x-z),2024/11/26,29,3.6,变 量,三种类型说明的优先级:,,高,类型说明语

19、句(显式说明),,,implicit,语句说明,,低,,“,I,~,N,规则,”,2024/11/26,30,3.7 Fortran,内部函数,,在编制,Fortran,程序时,经常要用到一些基本的数学函数,如三角函数、指数函数、对数函数等。为方便用户,,Fortran,编译系统已提供了这些函数的计算程序,需要时即可调用。,,,Fortran,内部函数调用格式:,,函数名(自变量),,2024/11/26,31,3.7 Fortran,内部函数,如:,,sin(90*3.14159/180),→1.0,,sqrt(9.0),→3.0,,abs(-5.6),→5.6,,int(6.75),→

20、6,,exp(3.0),→20.085540,,,Fortran77,全部内部函数见附录,Ⅵ,2024/11/26,32,3.7 Fortran,内部函数,注意几点:,,⑴函数自变量(参数)必须用括号括起来。,,,例:,sinx+cosx → sin(x)+cos(x),,⑵,函数自变量可以是常量、变量或表达式。,,,例:,exp(3.0),,sin (x+cos(x)),,⑶,有些函数的类型是由自变量的类型确定的。,,,例:,mod(8.0,3.0) →2.0,,mod(8,3) →2,,⑷,三角函数的角度单位是,“,弧度,”,而不是,“,度,”,。,,⑸函数名分为,“,通用名,”,和,“

21、,专用名,”,内部函数名一般用,“,通用名,”,。,2024/11/26,33,3.8 Fortran,算术表达式,Fortran77,提供了四种表达式:,,算术表达式,,关系表达式,,逻辑表达式,,字符表达式,,,算术表达式,——,将各运算元素(常量、变量、函数和数组等)用算术运算符连接起来的一个有值的式子。,2024/11/26,34,3.8 Fortran,算术表达式,一、算术运算符及其优先级,,⒈算术运算符(五种),,加(,+,) 减(,-,) 乘(,*,),,除(,/,) 乘方(,**,),,⒉算术运算符的优先级,,括号→函数→乘方→乘、除→加、减,,注:,同

22、级,运算,“,先左后右,”,,,连续乘方,时,“,先右后左,”,。,,2024/11/26,35,3.8 Fortran,算术表达式,例:,3+5-6.0*8.5/4**2+sin(x),,→,3+5-6.0×8.5÷4,2,+,sinx,,x**y**z,、,x**(y**z),,→,x,y,z,,(x**y)**z,,→,(x,y,),z,,有了算术表达式概念之后,我们就可以将:,数学运算式,→,Fortran,算术表达式,2024/11/26,36,3.8 Fortran,算术表达式,二、算术表达式书写规则,,⑴表达式中的各运算元素之间必须用运算符分隔。,,,例:,xyz→x*y*z

23、,,2(x+y) → 2*(x+y),,⑵,作任何运算的表达式只能写在一行。,,例:,,,→,(a+b)/(c+d),,a+b/c+d,×,,2024/11/26,37,3.8 Fortran,算术表达式,⑶,两个运算符不能紧邻。,,,例:,,,,→,a/(-b),→,-a/b,→,a/-b,,⑷,表达式一律用小括号。,,例:,,,a[x+b(y+c)] → a*(x+b*(y+c)),2024/11/26,38,3.8 Fortran,算术表达式,三、表达式求值中的类型问题,,⑴同类型量运算的结果,仍为原类型。,,,例:,4*5=20,,,4.0*5.0=20.0,,6.0/4.0=1.

24、5,,,6/4=1,(≠,1.5,),,⑵不同类型量运算时,先将低级类型(,整型,)转换为高级类型(,实型,),然后再按同类型量进行运算。,,,例:,2.5*4=10.0,( ≠,10,),,,2.0**3=2.0*2.0*2.0=8.0,(属同类量运算),,2024/11/26,39,3.8 Fortran,算术表达式,四、运算中的误差问题,,⑴整数量运算没有误差,,⑵实型量由于有效位数的限制,运算时会出现误差,,,例,1,:,(1.0/3.0)*3.0=0.9999999 (≠1.0) ∵ 1.0/3.0=0.3333333,,,例,2,:,X=1E30,,Y=-1E30,

25、,Z=1.0,,,(X+Y)+Z=?,,X+(Y+Z)=?,2024/11/26,40,3.9,赋值语句,Fortran,提供三类赋值语句:,,,算术赋值语句,,逻辑赋值语句,,字符赋值语句,,一、算术赋值语句一般格式,,,V=e,,,功能:把赋值号右边表达式的值,赋给赋值号左边的变量或数组元素。,,,例:,,,S=3.14159*r**2,,2024/11/26,41,3.9,赋值语句,二、算术赋值语句中的类型转换问题,,⑴赋值号两边类型一致时,直接赋值。,,,例:,k=355,,⑵,赋值号两边类型不一致时,先计算,再转换,最后赋值。,,,例:,y1=6*2,(,y1,的值为,12.0,),

26、,,Imax=3.6*2 (imax,的值为,7(7.2,→,7)),2024/11/26,42,3.9,赋值语句,注意几点:,,⑴赋值号左边只能是变量或数组元素,不能为带运算符的表达式。,,,例:,3*a=6*x+sin(x),×,,⑵,一个赋值语句只能给一个变量或数组元素赋值。,,,例:,a=b=c=d=3.5,×,,⑶,一个赋值语句执行后,赋值号左边变量的原值被右边表达式的值取代。,,,例:,x=1.0,,x=x+1.0 (x,的值为,2.0),2024/11/26,43,3.10,简单的输出语句,用户编制的程序必须要有输出语句,把结果显示或打印出来。,,,Fortran,提供了三种

27、输出方式:,,①表控格式输出(标准或固定格式输出),,②指定格式输出,,③无格式输出(二进制形式,适应磁盘文件),,一、表控格式输出,,,按,Fortran,编译系统隐含规定的格式输出。,(即系统根据输出数据的不同类型,自动给出相应的输出格式。),2024/11/26,44,3.10,简单的输出语句,二、表控格式输出语句,,一般格式:,,,print ﹡,〈,输出表列,〉,,write (﹡,﹡)〈,输出表列,〉,,,,,例,1,:,print ﹡,56.8,125,,,或,write (﹡,﹡) 56.8,125,,,例,2,:,print ﹡,a, b, c,,,或,write (﹡,﹡)

28、 a, b, c,,2024/11/26,45,3.10,简单的输出语句,例,3,:,x=12.5,,y=90.5,,z=x+y,,print *, x, y,,print *, 'z=', z,,end,,,运行结果:,,,12.500000 90.500000,,Z= 103.000000,2024/11/26,46,3.10,简单的输出语句,⒈,整数的,表控格式输出,,规定:每个整数占,12,列,数据打印在右端,左补空格。,,例:,print *,,,123,,,-1128,,,输出结果:,,,︺︺︺︺︺︺︺︺,123,︺︺︺︺︺︺︺,-1128,2024/11/26,47,

29、3.10,简单的输出语句,⒉,实数的,表控格式输出,,规定:每个实数占,16,列,数据打印在右端,左补空格。,,,例:,print *,,,15.4,,,-321.45,,,输出结果:,,,︺︺︺︺︺︺,15.400000,︺︺︺︺︺,-321.450000,2024/11/26,48,3.10,简单的输出语句,当实数值的绝对值≥,10,7,或<,1,时,按标准的指数形式输出。,,,例:,print *,,,-10000000.,,,0.98,,,输出结果:,,,︺︺,-1.000000E+07,︺︺︺︺,9.800000E-01,2024/11/26,49,3.11,简单的输入语句,Fort

30、ran,提供了三种输入方式:,,①,表控格式输入(自由格式输入),,②指定格式输入,,③无格式输入,,一、表控格式输入,,表控格式输入,——,根据变量的数据类型输入相应的数据形式,数据间以逗号或空格分隔的输入方式。,2024/11/26,50,3.11,简单的输入语句,二、表控格式输入语句,,一般格式:,,,read ﹡,〈,输入表列,〉,,read (﹡,﹡)〈,输入表列,〉,,,例,1,:,read ﹡,a, b,(若,a=14.7, b=30.0,),,键盘输入:,14.7,30.0↙,,2024/11/26,51,3.11,简单的输入语句,例,2,:,read ﹡,x,k,(若,x=4

31、.5,k=200,),,键盘输入:,4.5,200↙,,,例,3,:,read ﹡,x,y,z,(若,x=1.5,y=2.5,z=3.5,),,,read ﹡,i,j,(若,i=5,j=10,),,键盘输入:,1.5,2.5,3.5↙,,5,10↙,,2024/11/26,52,3.11,简单的输入语句,注意几点:,,⑴输入数据的个数不得少于,read,语句中变量的个数,但多余的数据也不起作用。,,例:,read ﹡,x,y,z,(若,x=1.5,y=2.5,z=3.5,),,键盘输入:,,①,1.5,2.5,3.5↙,,② 1.5,2.5,3.5,,5.2,6.0,↙,(最后两个数被忽略),

32、,③,1.5,2.5↙,(计算机将等待用户继续输入数据),,2024/11/26,53,3.11,简单的输入语句,注意几点:,,⑵一个,read,语句可以分多行输入,,但每一个,read,语句必须从新的一行输入,。,,例:,read ﹡,x,y,z,(若,x=1.5,y=2.5,z=3.5,),,,read ﹡,i,j,(若,i=5,j=10,),,键盘输入:,1.5↙,,2.5↙,,3.5↙,,5,10↙,,,若键盘输入:,1.5,2.5,3.5,5,10↙,(错),2024/11/26,54,3.11,简单的输入语句,⑶,在输入数据时若出现,“,/,”,,则终止对此,read,语句的输入。

33、,,例:,read ﹡,x,y,z,,,键盘输入:,1.5,2.5/↙,,(变量,z,的值为原值或为零。),2024/11/26,55,3.12,参数语句(,parameter,语句),一、,parameter,语句的功能,,为常量命名,即用一个符号代表一个常量。,,二、,parameter,语句一般形式,,,Parameter(p,1,=c,1,[,p,2,=c,2,,,…,,p,n,=c,n,]),,,其中:,p,n,——,符号常量;,c,n,——,常量。,,,,2024/11/26,56,3.12,参数语句(,parameter,语句),例:求半径为,0.5m,的圆面积和圆周长。,,编程

34、如下:,,,parameter (r=0.5,pi=3.14159),,s=pi*r**2,,h=2.0*pi*r,,print*,s,h,,end,2024/11/26,57,3.12,参数语句(,parameter,语句),注意几点:,,⑴参数语句必须写在所有可执行语句之前;,,⑵符号常量的命名规则及类型与变量相同,并遵循,“,I,~,N,规则,”,;,,⑶程序中不能给符号常量再赋值。,2024/11/26,58,3.13 pause,语句,, stop,语句,, end,语句,一、,pause,语句,,,⒈一般形式,,,Pause [n],,,,注:,n,为,1,~,5,位正整数或字符常

35、量。,,,⒉功能,,暂停程序的执行。,,(一个程序单位可以有多个,pause,语句),,2024/11/26,59,3.13 pause,语句,, stop,语句,, end,语句,例:,,,parameter (r=0.5,pi=3.14159),,s=pi*r**2,,h=2.0*pi*r,,,pause ',打印面积和周长,',,print*,s,h,,end,2024/11/26,60,3.13 pause,语句,, stop,语句,, end,语句,二、,stop,语句,,,⒈一般形式,,,stop [n],,,,注:,n,为,1,~,5,位正整数或字符常量。,,,⒉功能,,终止程序

36、的执行。,,(一个程序单位可以有多个,stop,语句),,2024/11/26,61,3.13 pause,语句,, stop,语句,, end,语句,三、,end,语句,,⒈一般形式,,,end,,,⒉,功能,,对主程序:终止程序的执行和作为程序单位的结束标志;,,对子程序:返回调用程序和作为程序单位的结束标志。,,(一个程序单位只能有一个,end,语句),,2024/11/26,62,课后练习题,,P,75,~,76,:第五、八、十一题,,2024/11/26,63,第四章 逻辑运算和选择结构,,2024/11/26,64,计算机程序,程序设计的基本方法,,计算机解决问题所需要的一系列代

37、码化指令序列,——,计算机程序,。,,,程序,=,数据结构,+,算法,,即,“,程序就是在数据的某些特定的表示方式和结构的基础上,对抽象算法的具体描述。,”,,,上述公式可扩充为:,,程序,=,数据结构,+,算法,+,程序设计方法,+,语言工具,2024/11/26,65,所谓面向过程的程序设计,是指利用面向过程的语言工具,(如,Basic,、,Pascal,、,Fortran,和,C,等),进行程序开发的各项活动。,程序设计的基本方法,面向过程的程序设计,优点:,编程简单、结构性强、可读性好,程序执行时序特征明显;遵循这种结构的程序只有一个入口和一个出口。,,缺点:,存在数据与程序模块的分离

38、和程序的可重用性差等问题。,基本思想:,,把一个需要求解的复杂问题分为若干个模块来处理,每个模块处理一个子问题;设计时遵循,自顶向下,、,逐步细化,、,模块化设计,和,结构化编码,的原则。,2024/11/26,66,程序设计的基本方法,结构化程序设计方法:,结构化编码,,在结构化程序设计中,任何复杂的算法,都可以由,三种基本结构,组成。,,在构造算法时,也仅以三种基本结构作为基本单元。,,遵循这种结构的程序只有,一个输入口,和,一个输出口,。,模块化设计,,将一个复杂问题的程序分为若干个程序模块,每个模块完成一项特定功能;其中有一个,主模块,和若干个,子模块,,主模块控制各个子模块来实现整个

39、程序的功能。,自顶向下,逐步细化,,2024/11/26,67,程序设计的基本方法,面向对象的程序设计,面向对象的程序设计是一种新的程序设计范型。它将一些新的理念和结构化程序设计中好的思想相融合,提供了一种全新的程序设计方法。,基本思想,,将一个需要求解的问题分解为一系列实体(对象),然后围绕这些对象建立数据和函数;函数的功能决定了该对象的行为。规定一个对象的函数可以访问另一对象的函数,但一个对象的数据不能应用于另一对象的函数中。,,,几个基本概念: 三类机制:,,类,,,对象,,,属性,,,事件,,,方法

40、 封装、继承、多态,2024/11/26,68,4.1,算法及其表示方法,一、算法的概念,,算法,——,解决某一问题所采取的方法和步骤。,,计算机算法,——,计算机能够执行的算法。,,,计算机算法的特征:,,,⑴有穷性,——,操作步骤是有限的。,,,⑵确定性,——,方法步骤是明确的。,,,⑶有效性,——,方法是正确的,步骤是完整的。,,,⑷必须有输入和输出。,(取得必要的信息,给出正确的结果。),2024/11/26,69,4.1,算法及其表示方法,Fortran,是结构化程序设计语言,每个程序单位可由三种基本结构组成:,,,⑴顺序结构,,⑵分支选择结构,,⑶循环结构,,实践证明,任何复杂的问

41、题都可以用这三种基本结构来描述。,2024/11/26,70,4.1,算法及其表示方法,二、算法的表示,,用,N,~,S,流程图表示。(由几种功能框组合而成),,,⑴矩形框,——,用于表示顺序结构。,,如:若先执行语句,A,,再执行语句,B,。,,A,B,2024/11/26,71,4.1,算法及其表示方法,例:若,a=1.5,,,b=4.5,,求,a+b,的平方。,,①画,N,~,S,图: ②编程:,,,A=1.5,,B=4.5,,C=(a+b)**2,,Print *, c,,end,1.5→a,4.5→b,(a+b),2,→c,打印,c,结束,2024/11/26,72,4.1,算

42、法及其表示方法,⑵,三角框,——,用于表示分支选择结构。,,如:若,P,为条件,当,P,成立执行语句,A,,否则执行语句,B,。,P,,True False,A B,P,A,B,2024/11/26,73,4.1,算法及其表示方法,⑶L,形框,——,用于表示循环结构。,,,①当型循环(,P,为条件,,A,循环体),,如:若条件,P,成立,则执行循环体,A,,否则跳出循环体。,P,,,A,,Y,N,P,A,2024/11/26,74,4.1,算法及其表示方法,,②,直到型循环(,P,为条件,,A,循环体),

43、,如:首先执行循环体,A,,若条件,P,不成立继续执行循环体,A,,直到条件,P,成立为止。,,,,A,,,,P,,P,A,Y,N,2024/11/26,75,4.2,关系表达式,,关系表达式是构成选择结构判断条件的基本式子。它也是一种最简单的逻辑表达式。,,,一、关系运算符,(,P80,表,4-1,),,,.gt.,(大于),,,.ge.,(大于等于),,,.eq.,(等于),,,.lt.,(小于),,,.le.,(小于等于),,,.ne.,(不等于),2024/11/26,76,4.2,关系表达式,二、关系表达式的一般形式,,,〈,算术量,〉〈,关系运算符,〉〈,算术量,〉,,,即:,,⑴

44、关系表达式是由关系运算符将两个算术量连接起来的式子。,,⑵关系表达式的运算元素是算术量,结果是,逻辑量,:真(,.True.,)或假(,.False.,)。,,2024/11/26,77,4.2,关系表达式,有了关系表达式,我们就可以将:,,数学关系式─→,Fortran,关系表达式,,例:,,,x+y>15.4,─→,,a+b≠a-b,─→,,e,x,≥2.17,─→,,2024/11/26,78,4.2,关系表达式,注意:,,⑴算术运算优先于关系运算。,,如:等同于,(a+b).ne.(a-b),,⑵,实数运算误差对关系表达式的影响,,如:,,值为,.false.,,1.0/3.0*3.0

45、=0.9999999,,∴,对于,,→,abs(a-b).lt.1E-6,,,→,abs(c-d).gt.1E-6,2024/11/26,79,4.3,逻辑表达式,关系表达式只能表达简单的关系,如:,,,5≤x≤10,,就不能用关系表达式表达,此时要用逻辑表达式。,2024/11/26,80,4.3,逻辑表达式,一、逻辑表达式的一般形式,,,〈,逻辑量,〉〈,逻辑运算符,〉〈,逻辑量,〉,,即:,,⑴逻辑表达式是由逻辑运算符将两个逻辑量连接起来的式子。,,⑵逻辑表达式的运算元素是逻辑量,结果也是逻辑量:真,(.True.),或假,(.False.),。,,逻辑量包括逻辑常量、逻辑变量和关系表达

46、式。,,2024/11/26,81,4.3,逻辑表达式,二、逻辑常量,,两个:①,.true.,(真)②,.false.,(假),,三、逻辑变量,,,——,用于存放逻辑常量的变量。,,逻辑变量可以通过赋值语句来接受逻辑常量的值,但在使用前,要进行类型说明。,,,例:,logical a, b,,a=.true.,,b=.false.,2024/11/26,82,4.3,逻辑表达式,四、逻辑运算符,,,.and.,(逻辑与),,,.or.,(逻辑或),,,.not.,(逻辑非),,,.eqv.,(逻辑等(同或)),,,.neqv.,(逻辑不等(异或)),2024/11/26,83,4.3,逻辑表

47、达式,五、逻辑运算符的运算规则,(,P83,表,4.3,),,若,a,b,为两个逻辑量,则:,,,——,(,当,a,、,b,同时为真时,为真。,),,,a.or.b,——,(,当,a,、,b,中任意一个为真或同时为真时,为真。,),,,.not.a,——,(,当,a,为真,其值为假;当,a,为假,其值真。,),,,——,(,当,a,、,b,为同一逻辑常量时,为真。,),,,——,(,当,a,、,b,不为同一逻辑常量时,为真。,),2024/11/26,84,4.3,逻辑表达式,六、逻辑表达式的运算次序,(,P84,表,4.5,),,,运算次序为:,,,括号→算术运算→关系运算→逻辑运算,,,而

48、逻辑运算:,,,.not.→.and.→.or.→.eqv.,.neqv.,2024/11/26,85,4.3,逻辑表达式,例,1,:写出下列条件的逻辑表达式。,,⑴,5≤k≤10,,,,⑵│f│≤3g,或│,f│,=,5t,,,abs(f).le.3*g.or.abs(f).eq.5*t,,⑶1≤a≤8,并且,1≤b≤8,,(a.ge.1.and.a.le.8).and.(b.ge.1.and.b.le.8),2024/11/26,86,4.3,逻辑表达式,例,2,:若,a=2.5,b=7.5,c=5.0,d=6.0,,求下列逻辑表达式的值。,,⑴,().and.(),,,①t

49、 ②f,,③f,,,,2024/11/26,87,4.3,逻辑表达式,例,2,:若,a=2.5,b=7.5,c=5.0,d=6.0,,求下列逻辑表达式的值。,,⑵,c/2.0+d,.lt.,a,.and.,.not.,.true.,.or.,c,.le.,d,,,①8.5,④F ③T,,,②F,,.,,,,⑤F,.,,,⑥T,2024/11/26,88,4.4,用块,if,实现选择结构,有以下三种典型的块,if,选择结构:,,,⑴,if (,条件,) then,(,块,if,语句,),,,块,(then,块,),,endif,(endif,语句,),,P,A,2024/

50、11/26,89,4.4,用块,if,实现选择结构,⑵,if (,条件,) then,,,块,1,(then,块,),,else,,,块,2,(else,块,),,,endif,,,P,A,B,2024/11/26,90,4.4,用块,if,实现选择结构,例:,2X,+,3 (X≤2),,Y,=,,,X,+,5 (X,>,2),,编程如下:,,,read(*,*) x,,if (x.le.2) then,,,y=2*x+3,,else,,,y=x+5,,endif,,,write(*,*)’x=’,x,’y=’,y,,end,X≤2,,True

51、 False,Y=2X,+,3,,Y=X+5,输出结果,结束,输入,X,值,2024/11/26,91,4.4,用块,if,实现选择结构,⑶,if (,条件,1) then,,,块,1,,else if (,条件,2) then,,,块,2,(else if,块,),,,┆,,else if (,条件,n) then,,,块,n,,[else,,,块,(n+1)],,endif,,,2024/11/26,92,4.4,用块,if,实现选择结构,说明:,,⑴每个块,if,中可以完整地包含一个(或多个)块,if,结构,即构成块,if,的嵌套结构。如:,,,if (,条件,1) then

52、 if (,条件,1) then,,,块,1,if (,条件,2) then,,,else,块,2,,,if (,条件,2) then endif,,,块,2,,else,,,endif,,块,1,,endif,,endif,,,,2024/11/26,93,4.4,用块,if,实现选择结构,⑵,一个块,if,语句必须和一个,endif,语句相对应。,,⑶块,if,中的,“,then,块,”,、,“,else,块,”,和,“,else if,块,”,可为空块。,,2024/11/26,94,4.4,用块,if,实现选择结构,,例,1,:求一元二次方程,ax,2,+bx+c=0

53、,的根。,,(当,b,2,-4ac≥0,时有两个实根,,b,2,-4ac,<,0,时有两个复根。),,,,输入,a,、,b,、,c,b,2,-,4ac → d,true d≥0 false,计算两实根 计算两复根,输出,x1,,,x2,输出,x1,,,x2,结束,2024/11/26,95,4.4,用块,if,实现选择结构,,print*,’input a,b,c:’,,read*,a,b,c f=-b/(2.0*a),,d=b**2-4.0*a*c g=sqrt(-d)/(

54、2.0*a),,,if (d.ge.0.0) then,print*,'x1=',f,'+i',g,,e=sqrt(d) print*,'x2=',f,'-i',g,,x1=(-b+e)/(2.0*a),endif,,x2=(-b-e)/(2.0*a) end,,print*,'x1=',x1,,print*,'x2=',x2,,,else,2024/11/26,96,4.4,用块,if,实现选择结构,例,2,:求下列函数值。,,,0 (x,<,-10),,2x+20 (-10

55、≤x,<,0),,y= 20 (0≤x,<,20),,30-0.5x (20≤x,<,40),,50-x (40≤x,<,50),,0 (x≥50),2024/11/26,97,4.4,用块,if,实现选择结构,,输入,x,true,x,<,-10,false,true,x,<,0,false,true,x,<,20,false,true,x,<,40,false,true,,x,<,50,,false,y=50-x y=0,打印,y,y,=,0,y=20,y=30-0.5x

56、,y=2x+20,2024/11/26,98,4.4,用块,if,实现选择结构,源程序一:,,,,read*,x,if (x.lt.50.0) then,,,if (x.lt.-10.0) then,y=50.0-x,,y=0.0,else,,,else,,y=0.0,,,if (x.lt.0.0) then,endif,,y=2.0*x+20.0,endif,,,else,endif,,,,if (x.lt.20.0) then,,,endif,,y=20.0,endif,,,else,,print*,’y=‘,y,,,if (x.lt.40.0) then,,end,,y=30.0-0.5

57、*x,,,else,2024/11/26,99,4.4,用块,if,实现选择结构,源程序二:,,,read*,x print*,’y=‘,y,,,if,(x.lt.-10.0),then,end,,y=0.0,,,else if,(x.lt.0.0),then,,y=2.0*x+20.0,,,else if,(x.lt.20.0),then,,y=20.0,,,else if,(x.lt.40.0),then,,y=30.0-0.5*x,,,else if,(x.lt.50.0),then,,y=50.0-x,,else,,y=0

58、.0,,endif,2024/11/26,100,4.5,逻辑,if,语句,,逻辑,if,语句也是一种选择结构,但与块,if,不同,主要表现在:,,①只用一行表示一个选择结构;,,②仅当条件成立时执行,并且只执行一条语句。,,,逻辑,if,语句的一般形式:,,,If〈,条件,〉,语句,,,例:,if (n.le.100) n=n+1,,2024/11/26,101,4.5,逻辑,if,语句,例:,2X,+,3 (X≤2),,Y,=,,,X,+,5 (X,>,2),,编程如下:,,,read(*,*) x read(*,*)x,,if (

59、x.le.2) then if(x.le.2) y=2*x+3,,,y=2*x+3,if(x.gt.2) y=x+5,,else,write(*,*)’y=’,y,,,y=x+5 end,,endif,,write(*,*)’y=’,y,,end,2024/11/26,102,课后练习题,P96,:,,第一~三题;第四、五、七题,,2024/11/26,103,第五章 循环结构的实现,,2024/11/26,104,第五章 循环结构的实现,,所谓循环,是指在程序执行过程中需要重复执行的程序段。,,在实际问题中

60、,我们经常遇到循环,如:,,求 ∑,n,,,n!,,,…,,,无条件循环,GOTO,,,循环结构,,直到型循环,,,条件循环 当型循环,,计数型循环,2024/11/26,105,5.1,用,goto,语句实现循环,goto,语句的一般形式:,,,goto ,,,其中:,s1,——,语句标号。,,功能:程序执行到此语句时,无条件的转向标号为,s1,的语句去执行。,,例:求,1,~,10,的累加和。,,编写程序段:,integer x,sum,,x=0.0,,sum=0.0,,10 x=x+1,,sum=sum+x,,goto 10,2024/11/26,106,5.1,用,goto

61、,语句实现循环,,如果我们把以上,goto,语句作为逻辑,if,语句中的执行语句,则就可以实现有条件的循环。即:,,,,integer x,sum,求,1,~,10,的累加和,,,x=0.0,,sum=0.0,,10 x=x+1,,sum=sum+x,,if(x.lt.10)goto 10,,print*,sum,,end,x=0.0 ,sum=0.0,,,x+1→x,,,,sum+x→sum,,,直到,x≥10,,,输出,sum,,2024/11/26,107,5.2,当型循环的实现,一、用块,if,和,goto,语句实现循环,,,一般形式:,,,s1 if (,条件,) then,,,标

62、号,块,,,goto s1,,endif,,P,,,,A,,所谓当型循环,是指执行循环体要依据事先给定的条件。当条件成立时执行循环,否则就不执行循环。,2024/11/26,108,5.2,当型循环的实现,编程如下:,,,read*,n,,m=1,,i=1,,,10 if (i.le.n) then,,m=m*i,,i=i+1,,,goto 10,,endif,,print*,m,,end,输入,n,,,m=1,i=1,,,i≤n,,,,m×i→m,,,i,+,1→i,,,输出,m,,例:求,n!,。,2024/11/26,109,5.2,当型循环的实现,,二、用,do while,语句实

63、现当型循环,,,一般形式,,,do s1[,] while (,条件,),,┆,循环体,,,s1 <,终端语句,>,,,2024/11/26,110,5.2,当型循环的实现,例:求,n!,。,,编程如下:,,,read*,n,,m=1,,i=1,,,do 10 while (i.le.n),,m=m*i,,i=i+1,,,10 continue,,print*,m,,end,2024/11/26,111,5.3,直到型循环的实现,一、用逻辑,if,语句实现直到型循环,,,一般形式,,,s1,循环体,,,if (,条件,) goto s1,,所谓直到型循环,是指先执行循环体,再判断条件

64、。如果条件为,“,假,”,(真),继续执行循环,直到条件为,“,真,”,(假)时终止循环。,2024/11/26,112,5.3,直到型循环的实现,例,1,:求,n!,。,,编程如下:,,,read*,n,,m=1,,i=1,,,10 continue,,,m=m*i,,i=i+1,,,if (i.le.n) goto 10,,,print*,m,,end,读,n,,m→1, i→1,,m*i→m,,i+1→i,,直到,i,>,n,,输出,m,,结束,,2024/11/26,113,5.3,直到型循环的实现,编程如下:,,,integer sign,,s=1.0,,d=2.0,,sign=

65、1,,,10 sign=(-1)*sign,,t=sign/d,,s=s+t,,d=d+1,,,if (d.le.100.0) goto 10,,print*, s,,end,例,2,:求 的值。,2024/11/26,114,当型与直到型循环的比较,,当型循环 直到型循环,,,,,不同:,先判断条件 先执行循环体,,再执行循环体 再判断条件,(循环体至少被,,执行一次),P,,,A,,,,P,A,循环结构关键:⑴条件判断,,⑵改变条件的语句,2024/11/2

66、6,115,5.4,用,do,语句实现循环,,当循环的初值、终值和循环次数都已知时,可用,do,语句实现循环。,,用,do,语句实现的循环称为,“,do,循环,”,。,do,循环是由一个,do,语句和循环体组成。,2024/11/26,116,5.4,用,do,语句实现循环,一、一般形式,,,do s[,] v=e1, e2 [,e3],,┆,循环体,,,s <,终端语句,>,,,说明:,,①,,s,——,循环体,终端语句,的标号,,②,v,——,循环控制变量(,do,变量),可为整型、实型或双精度,,,2024/11/26,117,5.4,用,do,语句实现循环,一、一般形式,,,do s[,] v=e1, e2 [,e3],,┆,循环体,,,s <,终端语句,>,,说明:,,③,e1,e2,e3,是整型、实型或双精度,表达式,,,e1,——,循环变量初值,,,e2,——,循环变量终值,,,e3,——,循环变量增量(步长,默认值:,1,),,当,v,为整型变量,,e3=1,时,,e3,可忽略,,,例:,DO 10,I=1,10,2,,DO 100,N=1,5,2024/11/

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!