资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Fortran,语言,(,Fortran77,结构化程序设计),普通高校计算机基础教学课程,2024/11/26,2,说明,第一章 算法,(略),第二章 计算机和计算机程序,(略),2024/11/26,3,第三章,Fortran,语言程序设计初步,2024/11/26,4,3.1 Fortran,语言的发展概况,FOR,mula,TRAN,slator,公式翻译器,Fortran,语言是一种适合于科学和工程计算问题的程序设计语言;也是计算机高级语言发展史上使用最早的一种程序设计语言。,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,语言的特征,Fortran,语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。,易学,语法严谨。,可以直接对矩阵和复数进行运算。,自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。,很多专用的大型数值运算计算机针对,Fortran,做了优化。,广泛地应用于并行计算和高性能计算领域。,Fortran 90,,,Fortran 95,,,Fortran 2003,的相继推出使,Fortran,语言具备了现代高级编程语言的一些特性。,2024/11/26,7,3.2,简单的,Fortran,程序分析,例,1,:求一元二次方程,x,2,+3x-5.6=0,的根,并打印结果。,利用公式:,(这里,,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,简单的,Fortran,程序分析,执行结果:,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) 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,”,语句结束。,每个程序单位包括若干行,语句行(执行语句和非执行语句行),非语句行(注释行),语句前可不设标号,也可根据需要设标号。,各类语句在程序单位中的位置有一定规则。,程序必须按规定格式书写。,2024/11/26,12,3.3 Fortran,源程序的书写格式,Fortran77,源程序必须按以下格式书写:,每行只能在,80,列内书写,,并把,80,列分为,4,个区。,1,5,列:标号区,(,1,5,位无符号整数;第,1,列为,“,*,”,或,“,c,”,时,为注释行),第,6,列:续行标志区,(非空格或非零字符;最多,19,个续行),7,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,”,。,二、创建项目工作间,选,“,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,程序的书写规则编辑程序。,四、编译项目工作间中的文件,打开指定的文件选,“,Build,”,“,Compile st01.for,”,。,五、连编项目文件,选,“,Build,”,“,Build aaa.exe,”,。,六、运行项目文件,选,“,Build,”,“,Execute aaa.exe,”,。(显示程序执行结果),2024/11/26,16,3.4 Fortran,程序的编辑与运行,注:若,Fortran,程序是由一个主程序文件和若干个子程序文件组成,则应将各文件添加到同一项目工作间,分别进行编译,然后连编和运行项目文件。,七、打开项目文件,选,“,File,”,“,Open,”,在打开对话框文件类型下拉列表中选,“,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,整型常量,包括正、负整数和零。,例:,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 ,指数形式,(通常表示较大或较小的数),例:,1000000001.0E+8,0.0000125,1.25,E-05,数字部分,指数部分,2024/11/26,20,3.5,常 量,说明:,一个数值用指数形式表示时有两种表达方式:,一个基本实数后面跟指数部分。,例:,0.8768.76E-1,-2589.4-2.5894E+3,一个整数后面跟指数部分。,例:,0.876876E-3,-2589.4-25894E-1,2024/11/26,21,3.5,常 量,同一个数值可用不同的指数形式表示。,例:,0.8768.76E-187.6E-2876E-3,计算机在输出时,按标准化指数形式输出。,例:,0.282.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,变 量,变量,在程序执行期间其值可以改变的量。,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,变 量,注意几点:,变量名不区分大小写字母。,例:,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,能处理各种类型的变量。不同类型的变量用来存放不同类型的数据。,变量类型的说明,(三种方式),隐含说明,即以,I,、,j,、,k,、,l,、,m,、,n,开头的变量为整型变量,以其它字母开头的变量为实型变量。(,“,I,N,规则,”,),例:,imax,,,m5,,,number,,,为整型变量,v,,,h2,,,aver,,,为实型变量,2024/11/26,27,3.6,变 量,显式说明,即用类型说明语句指定变量的类型。,如:,Integer,说明变量为整型变量,Real,说明变量为实型变量,Double precision,说明变量为双精度变量,Complex,说明变量为复型变量,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,变 量,三种类型说明的优先级:,高,类型说明语句(显式说明),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),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,三角函数的角度单位是,“,弧度,”,而不是,“,度,”,。,函数名分为,“,通用名,”,和,“,专用名,”,内部函数名一般用,“,通用名,”,。,2024/11/26,33,3.8 Fortran,算术表达式,Fortran77,提供了四种表达式:,算术表达式,关系表达式,逻辑表达式,字符表达式,算术表达式,将各运算元素(常量、变量、函数和数组等)用算术运算符连接起来的一个有值的式子。,2024/11/26,34,3.8 Fortran,算术表达式,一、算术运算符及其优先级,算术运算符(五种),加(,+,) 减(,-,) 乘(,*,),除(,/,) 乘方(,*,),算术运算符的优先级,括号函数乘方乘、除加、减,注:,同级,运算,“,先左后右,”,,,连续乘方,时,“,先右后左,”,。,2024/11/26,35,3.8 Fortran,算术表达式,例:,3+5-6.0*8.5/4*2+sin(x),3+5-6.08.54,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,算术表达式,二、算术表达式书写规则,表达式中的各运算元素之间必须用运算符分隔。,例:,xyzx*y*z,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,表达式一律用小括号。,例:,ax+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.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,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,),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,提供了三种输出方式:,表控格式输出(标准或固定格式输出),指定格式输出,无格式输出(二进制形式,适应磁盘文件),一、表控格式输出,按,Fortran,编译系统隐含规定的格式输出。,(即系统根据输出数据的不同类型,自动给出相应的输出格式。),2024/11/26,44,3.10,简单的输出语句,二、表控格式输出语句,一般格式:,print ,输出表列,write (,),输出表列,例,1,:,print ,56.8,125,或,write (,) 56.8,125,例,2,:,print ,a, b, c,或,write (,) 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,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,简单的输入语句,Fortran,提供了三种输入方式:,表控格式输入(自由格式输入),指定格式输入,无格式输入,一、表控格式输入,表控格式输入,根据变量的数据类型输入相应的数据形式,数据间以逗号或空格分隔的输入方式。,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.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,(最后两个数被忽略),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,语句的输入。,例:,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,的圆面积和圆周长。,编程如下:,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,位正整数或字符常量。,功能,暂停程序的执行。,(一个程序单位可以有多个,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,位正整数或字符常量。,功能,终止程序的执行。,(一个程序单位可以有多个,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,计算机程序,程序设计的基本方法,计算机解决问题所需要的一系列代码化指令序列,计算机程序,。,程序,=,数据结构,+,算法,即,“,程序就是在数据的某些特定的表示方式和结构的基础上,对抽象算法的具体描述。,”,上述公式可扩充为:,程序,=,数据结构,+,算法,+,程序设计方法,+,语言工具,2024/11/26,65,所谓面向过程的程序设计,是指利用面向过程的语言工具,(如,Basic,、,Pascal,、,Fortran,和,C,等),进行程序开发的各项活动。,程序设计的基本方法,面向过程的程序设计,优点:,编程简单、结构性强、可读性好,程序执行时序特征明显;遵循这种结构的程序只有一个入口和一个出口。,缺点:,存在数据与程序模块的分离和程序的可重用性差等问题。,基本思想:,把一个需要求解的复杂问题分为若干个模块来处理,每个模块处理一个子问题;设计时遵循,自顶向下,、,逐步细化,、,模块化设计,和,结构化编码,的原则。,2024/11/26,66,程序设计的基本方法,结构化程序设计方法:,结构化编码,在结构化程序设计中,任何复杂的算法,都可以由,三种基本结构,组成。,在构造算法时,也仅以三种基本结构作为基本单元。,遵循这种结构的程序只有,一个输入口,和,一个输出口,。,模块化设计,将一个复杂问题的程序分为若干个程序模块,每个模块完成一项特定功能;其中有一个,主模块,和若干个,子模块,,主模块控制各个子模块来实现整个程序的功能。,自顶向下,逐步细化,2024/11/26,67,程序设计的基本方法,面向对象的程序设计,面向对象的程序设计是一种新的程序设计范型。它将一些新的理念和结构化程序设计中好的思想相融合,提供了一种全新的程序设计方法。,基本思想,将一个需要求解的问题分解为一系列实体(对象),然后围绕这些对象建立数据和函数;函数的功能决定了该对象的行为。规定一个对象的函数可以访问另一对象的函数,但一个对象的数据不能应用于另一对象的函数中。,几个基本概念: 三类机制:,类,对象,属性,事件,方法 封装、继承、多态,2024/11/26,68,4.1,算法及其表示方法,一、算法的概念,算法,解决某一问题所采取的方法和步骤。,计算机算法,计算机能够执行的算法。,计算机算法的特征:,有穷性,操作步骤是有限的。,确定性,方法步骤是明确的。,有效性,方法是正确的,步骤是完整的。,必须有输入和输出。,(取得必要的信息,给出正确的结果。),2024/11/26,69,4.1,算法及其表示方法,Fortran,是结构化程序设计语言,每个程序单位可由三种基本结构组成:,顺序结构,分支选择结构,循环结构,实践证明,任何复杂的问题都可以用这三种基本结构来描述。,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.5a,4.5b,(a+b),2,c,打印,c,结束,2024/11/26,72,4.1,算法及其表示方法,三角框,用于表示分支选择结构。,如:若,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,循环体),如:首先执行循环体,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,关系表达式,二、关系表达式的一般形式,算术量,关系运算符,算术量,即:,关系表达式是由关系运算符将两个算术量连接起来的式子。,关系表达式的运算元素是算术量,结果是,逻辑量,:真(,.True.,)或假(,.False.,)。,2024/11/26,77,4.2,关系表达式,有了关系表达式,我们就可以将:,数学关系式,Fortran,关系表达式,例:,x+y15.4,a+ba-b,e,x,2.17,2024/11/26,78,4.2,关系表达式,注意:,算术运算优先于关系运算。,如:等同于,(a+b).ne.(a-b),实数运算误差对关系表达式的影响,如:,值为,.false.,1.0/3.0*3.0=0.9999999,对于,abs(a-b).lt.1E-6,abs(c-d).gt.1E-6,2024/11/26,79,4.3,逻辑表达式,关系表达式只能表达简单的关系,如:,5x10,就不能用关系表达式表达,此时要用逻辑表达式。,2024/11/26,80,4.3,逻辑表达式,一、逻辑表达式的一般形式,逻辑量,逻辑运算符,逻辑量,即:,逻辑表达式是由逻辑运算符将两个逻辑量连接起来的式子。,逻辑表达式的运算元素是逻辑量,结果也是逻辑量:真,(.True.),或假,(.False.),。,逻辑量包括逻辑常量、逻辑变量和关系表达式。,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,逻辑表达式,五、逻辑运算符的运算规则,(,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,),运算次序为:,括号算术运算关系运算逻辑运算,而逻辑运算:,.not.and.or.eqv.,.neqv.,2024/11/26,85,4.3,逻辑表达式,例,1,:写出下列条件的逻辑表达式。,5k10,f3g,或,f,5t,abs(f).le.3*g.or.abs(f).eq.5*t,1a8,并且,1b8,(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 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/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 (X2),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,X2,True 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 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,的根。,(当,b,2,-4ac0,时有两个实根,,b,2,-4ac,0,时有两个复根。),输入,a,、,b,、,c,b,2,4ac d,true d0 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)/(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 (-10x,0),y= 20 (0x,20),30-0.5x (20x,40),50-x (40x,50),0 (x50),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,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*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.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 (X2),Y,X,5 (X,2),编程如下:,read(*,*) x read(*,*)x,if (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,第五章 循环结构的实现,所谓循环,是指在程序执行过程中需要重复执行的程序段。,在实际问题中,我们经常遇到循环,如:,求 ,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,语句实现循环,如果我们把以上,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+1x,sum+xsum,直到,x10,输出,sum,2024/11/26,107,5.2,当型循环的实现,一、用块,if,和,goto,语句实现循环,一般形式:,s1 if (,条件,) then,标号,块,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,in,mim,i,1i,输出,m,例:求,n!,。,2024/11/26,109,5.2,当型循环的实现,二、用,do while,语句实现当型循环,一般形式,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,所谓直到型循环,是指先执行循环体,再判断条件。如果条件为,“,假,”,(真),继续执行循环,直到条件为,“,真,”,(假)时终止循环。,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,m1, i1,m*im,i+1i,直到,i,n,输出,m,结束,2024/11/26,113,5.3,直到型循环的实现,编程如下:,integer sign,s=1.0,d=2.0,sign=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/26,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/
展开阅读全文