




已阅读5页,还剩382页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fortran语言(Fortran77结构化程序设计),普通高校计算机基础教学课程,2020/5/11,2,说明第一章算法(略)第二章计算机和计算机程序(略),2020/5/11,3,第三章Fortran语言程序设计初步,2020/5/11,4,3.1Fortran语言的发展概况,FORmulaTRANslator公式翻译器Fortran语言是一种适合于科学和工程计算问题的程序设计语言;也是计算机高级语言发展史上使用最早的一种程序设计语言。,2020/5/11,5,3.1Fortran语言的发展概况,Fortran语言的发展过程:1951年由约翰贝克斯等人开始研究Fortran语言;1957年第一个Fortran程序在IBM704机上运行;1958和1962年先后推出Fortran和Fortran;1966和1978年先后颁布Fortran66和Fortran77;1991年颁布了Fortran90。现在已经有了Fortran95,Fortran2003,2020/5/11,6,Fortran语言的特征,Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。易学,语法严谨。可以直接对矩阵和复数进行运算。自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。很多专用的大型数值运算计算机针对Fortran做了优化。广泛地应用于并行计算和高性能计算领域。Fortran90,Fortran95,Fortran2003的相继推出使Fortran语言具备了现代高级编程语言的一些特性。,2020/5/11,7,3.2简单的Fortran程序分析,例1:求一元二次方程x2+3x-5.6=0的根,并打印结果。利用公式:(这里,a=1,b=3,c=-5.6),2020/5/11,8,3.2简单的Fortran程序分析,编程如下:ctherootsofthequadraticequationa=1.0b=3.0c=-5.6x1=(-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,x2100format(1x,x1=,f6.2,x2=,f6.2)end,2020/5/11,9,3.2简单的Fortran程序分析,执行结果:x1=1.30 x2=-4.30,例2:试求3!,6!,9!的值。编程如下:,2020/5/11,10,3.2简单的Fortran程序分析,主程序:子程序:cmainprogramcsubprogramj=k(3)functionk(n)l=k(6)k=1m=k(9)i=2write(*,*)j,l,m5if(i.le.n)thenendk=k*ii=i+1执行结果:goto56720362880endifreturnend,2020/5/11,11,3.2简单的Fortran程序分析,Fortran程序的基本结构:一个Fortran源程序由一个或多个程序单位组成,每个程序单位以“end”语句结束。每个程序单位包括若干行语句行(执行语句和非执行语句行)非语句行(注释行)语句前可不设标号,也可根据需要设标号。各类语句在程序单位中的位置有一定规则。程序必须按规定格式书写。,2020/5/11,12,3.3Fortran源程序的书写格式,Fortran77源程序必须按以下格式书写:每行只能在80列内书写,并把80列分为4个区。15列:标号区(15位无符号整数;第1列为“*”或“c”时,为注释行)第6列:续行标志区(非空格或非零字符;最多19个续行)772列:语句区(书写语句;一行只能写一条语句)7380列:语句注释区(一般作编号注释),2020/5/11,13,3.4Fortran程序的编辑与运行,FortranPowerStation4.0集成开发环境简介,2020/5/11,14,3.4Fortran程序的编辑与运行,一、FortranPowerStation4.0的启动选“开始”“程序”“FortranPowerStation4.0”“MicrosoftDeveloperStudio”。二、创建项目工作间选“File”“New”“ProjectWorkspace”“ConsoleApplication”,并输入项目工作间名称(如:aaa)和存放项目工作间的位置或路径(如:c:for)Create。,2020/5/11,15,3.4Fortran程序的编辑与运行,三、给项目工作间添加和编辑文件打开指定的项目工作间选“Insert”“FileintoProject”输入要添加的文件名(如:st01.for)“Add”。然后按Fortran程序的书写规则编辑程序。四、编译项目工作间中的文件打开指定的文件选“Build”“Compilest01.for”。五、连编项目文件选“Build”“Buildaaa.exe”。六、运行项目文件选“Build”“Executeaaa.exe”。(显示程序执行结果),2020/5/11,16,3.4Fortran程序的编辑与运行,注:若Fortran程序是由一个主程序文件和若干个子程序文件组成,则应将各文件添加到同一项目工作间,分别进行编译,然后连编和运行项目文件。七、打开项目文件选“File”“Open”在打开对话框文件类型下拉列表中选“ProjectWorkspace(*.mdp)”然后选项目工作间文件夹中的项目文件。,2020/5/11,17,3.5常量,常量在程序执行期间其值固定不变的量。Fortran处理六种类型的常量:整型常量(Integer)实型常量(Real)双精度常量(Doubleprecision)复型常量(Complex)逻辑型常量(Logical)字符型常量(Character),2020/5/11,18,3.5常量,3.5.1整型常量包括正、负整数和零。例:5,-13,0,说明:在(16位)微机中,整数的取值范围为:-215215-1(-3276832767)在(32位)微机中,整数的取值范围为:-231231-1(-21474836482147483647),2020/5/11,19,3.5常量,3.5.2实型常量(有二种表示形式)小数形式例:15.8,-21.05,14.0,14.,.17,0.0,指数形式(通常表示较大或较小的数)例:1000000001.0E+80.00001251.25E-05数字部分指数部分,2020/5/11,20,3.5常量,说明:一个数值用指数形式表示时有两种表达方式:一个基本实数后面跟指数部分。例:0.8768.76E-1-2589.4-2.5894E+3一个整数后面跟指数部分。例:0.876876E-3-2589.4-25894E-1,2020/5/11,21,3.5常量,同一个数值可用不同的指数形式表示。例:0.8768.76E-187.6E-2876E-3计算机在输出时,按标准化指数形式输出。例:0.282.800000E-01-59.58E+12-5.958000E+13即数字部分大于1,且小数点前只有一位非零数字的指数输出形式。在微机中,一般用四个字节存放一个实数,其取值范围为:10-751075。超出此范围时为“溢出”错误。,2020/5/11,22,3.5常量,下列形式为不合法的指数形式:单独的小数点和单独的指数部分。例:.E5,E10指数部分只能是整数,不能带小数点。例:8E0.5,12.3E1.5,2020/5/11,23,3.6变量,变量在程序执行期间其值可以改变的量。3.6.1变量的概念Fortran为每一个变量分配一个相应的存储单元;每个变量在每个时刻只能有一个确定的值。例:x=4.5xx=8.0 x注:在程序中用到的变量都必须要有确定的值。,4.5,8.0,2020/5/11,24,3.6变量,3.6.2变量名变量名标识一个变量所用的名字。命名规则:变量名的第一个字符必须是字母;在第一个字符后可跟15个字母或数字。例:x,m1,total,k123,,2020/5/11,25,3.6变量,注意几点:变量名不区分大小写字母。例:TOTAL,Total,total代表同一变量变量名中的空格不起作用。例:abc,abc,abc,abc代表同一变量变量名尽量做到“见名知义”AVER、SUM、Imax允许变量名与语言中具有特定含义的字(“保留字”)同名。例:sin,read,open,end,建议不要使用fortran中具有特定含义的字作变量名,2020/5/11,26,3.6变量,3.6.3变量的类型Fortran能处理各种类型的变量。不同类型的变量用来存放不同类型的数据。变量类型的说明(三种方式)隐含说明即以I、j、k、l、m、n开头的变量为整型变量,以其它字母开头的变量为实型变量。(“IN规则”)例:imax,m5,number,为整型变量v,h2,aver,为实型变量,2020/5/11,27,3.6变量,显式说明即用类型说明语句指定变量的类型。如:Integer说明变量为整型变量Real说明变量为实型变量Doubleprecision说明变量为双精度变量Complex说明变量为复型变量Logical说明变量为逻辑型变量Character说明变量为字符型变量,2020/5/11,28,3.6变量,如:Integerabc,xyzrealimax,k3logicala1,kpz用implicit语句说明即说明用某一字母开头的变量为指定的类型。例:implicitinteger(a,b),real(k)implicitinteger(x-z),2020/5/11,29,3.6变量,三种类型说明的优先级:高类型说明语句(显式说明)implicit语句说明低“IN规则”,2020/5/11,30,3.7Fortran内部函数,在编制Fortran程序时,经常要用到一些基本的数学函数,如三角函数、指数函数、对数函数等。为方便用户,Fortran编译系统已提供了这些函数的计算程序,需要时即可调用。Fortran内部函数调用格式:函数名(自变量),2020/5/11,31,3.7Fortran内部函数,如:sin(90*3.14159/180)1.0sqrt(9.0)3.0abs(-5.6)5.6int(6.75)6exp(3.0)20.085540Fortran77全部内部函数见附录,2020/5/11,32,3.7Fortran内部函数,注意几点:函数自变量(参数)必须用括号括起来。例:sinx+cosxsin(x)+cos(x)函数自变量可以是常量、变量或表达式。例:exp(3.0)sin(x+cos(x)有些函数的类型是由自变量的类型确定的。例:mod(8.0,3.0)2.0mod(8,3)2三角函数的角度单位是“弧度”而不是“度”。函数名分为“通用名”和“专用名”内部函数名一般用“通用名”。,2020/5/11,33,3.8Fortran算术表达式,Fortran77提供了四种表达式:算术表达式关系表达式逻辑表达式字符表达式算术表达式将各运算元素(常量、变量、函数和数组等)用算术运算符连接起来的一个有值的式子。,2020/5/11,34,3.8Fortran算术表达式,一、算术运算符及其优先级算术运算符(五种)加(+)减(-)乘(*)除(/)乘方(*)算术运算符的优先级括号函数乘方乘、除加、减注:同级运算“先左后右”,连续乘方时“先右后左”。,2020/5/11,35,3.8Fortran算术表达式,例:3+5-6.0*8.5/4*2+sin(x)3+5-6.08.542sinxx*y*z、x*(y*z)xyz(x*y)*z(xy)z有了算术表达式概念之后,我们就可以将:数学运算式Fortran算术表达式,2020/5/11,36,3.8Fortran算术表达式,二、算术表达式书写规则表达式中的各运算元素之间必须用运算符分隔。例:xyzx*y*z2(x+y)2*(x+y)作任何运算的表达式只能写在一行。例:(a+b)/(c+d)a+b/c+d,2020/5/11,37,3.8Fortran算术表达式,两个运算符不能紧邻。例:a/(-b)-a/ba/-b表达式一律用小括号。例:ax+b(y+c)a*(x+b*(y+c),2020/5/11,38,3.8Fortran算术表达式,三、表达式求值中的类型问题同类型量运算的结果,仍为原类型。例:4*5=20,4.0*5.0=20.06.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(属同类量运算),2020/5/11,39,3.8Fortran算术表达式,四、运算中的误差问题整数量运算没有误差实型量由于有效位数的限制,运算时会出现误差例1:(1.0/3.0)*3.0=0.9999999(1.0)1.0/3.0=0.3333333例2:X=1E30Y=-1E30Z=1.0(X+Y)+Z=?X+(Y+Z)=?,2020/5/11,40,3.9赋值语句,Fortran提供三类赋值语句:算术赋值语句逻辑赋值语句字符赋值语句一、算术赋值语句一般格式V=e功能:把赋值号右边表达式的值,赋给赋值号左边的变量或数组元素。例:S=3.14159*r*2,2020/5/11,41,3.9赋值语句,二、算术赋值语句中的类型转换问题赋值号两边类型一致时,直接赋值。例:k=355赋值号两边类型不一致时,先计算,再转换,最后赋值。例:y1=6*2(y1的值为12.0)Imax=3.6*2(imax的值为7(7.27),2020/5/11,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),2020/5/11,43,3.10简单的输出语句,用户编制的程序必须要有输出语句,把结果显示或打印出来。Fortran提供了三种输出方式:表控格式输出(标准或固定格式输出)指定格式输出无格式输出(二进制形式,适应磁盘文件)一、表控格式输出按Fortran编译系统隐含规定的格式输出。(即系统根据输出数据的不同类型,自动给出相应的输出格式。),2020/5/11,44,3.10简单的输出语句,二、表控格式输出语句一般格式:print,输出表列write(,)输出表列例1:print,56.8,125或write(,)56.8,125例2:print,a,b,c或write(,)a,b,c,2020/5/11,45,3.10简单的输出语句,例3:x=12.5y=90.5z=x+yprint*,x,yprint*,z=,zend运行结果:12.50000090.500000Z=103.000000,2020/5/11,46,3.10简单的输出语句,整数的表控格式输出规定:每个整数占12列,数据打印在右端,左补空格。例:print*,123,-1128输出结果:123-1128,2020/5/11,47,3.10简单的输出语句,实数的表控格式输出规定:每个实数占16列,数据打印在右端,左补空格。例:print*,15.4,-321.45输出结果:15.400000-321.450000,2020/5/11,48,3.10简单的输出语句,当实数值的绝对值107或1时,按标准的指数形式输出。例:print*,-10000000.,0.98输出结果:-1.000000E+079.800000E-01,2020/5/11,49,3.11简单的输入语句,Fortran提供了三种输入方式:表控格式输入(自由格式输入)指定格式输入无格式输入一、表控格式输入表控格式输入根据变量的数据类型输入相应的数据形式,数据间以逗号或空格分隔的输入方式。,2020/5/11,50,3.11简单的输入语句,二、表控格式输入语句一般格式:read,输入表列read(,)输入表列例1:read,a,b(若a=14.7,b=30.0)键盘输入:14.7,30.0,2020/5/11,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.55,10,2020/5/11,52,3.11简单的输入语句,注意几点:输入数据的个数不得少于read语句中变量的个数,但多余的数据也不起作用。例:read,x,y,z(若x=1.5,y=2.5,z=3.5)键盘输入:1.5,2.5,3.51.5,2.5,3.5,5.2,6.0(最后两个数被忽略)1.5,2.5(计算机将等待用户继续输入数据),2020/5/11,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.52.53.55,10若键盘输入:1.5,2.5,3.5,5,10(错),2020/5/11,54,3.11简单的输入语句,在输入数据时若出现“/”,则终止对此read语句的输入。例:read,x,y,z键盘输入:1.5,2.5/(变量z的值为原值或为零。),2020/5/11,55,3.12参数语句(parameter语句),一、parameter语句的功能为常量命名,即用一个符号代表一个常量。二、parameter语句一般形式Parameter(p1=c1,p2=c2,pn=cn)其中:pn符号常量;cn常量。,2020/5/11,56,3.12参数语句(parameter语句),例:求半径为0.5m的圆面积和圆周长。编程如下:parameter(r=0.5,pi=3.14159)s=pi*r*2h=2.0*pi*rprint*,s,hend,2020/5/11,57,3.12参数语句(parameter语句),注意几点:参数语句必须写在所有可执行语句之前;符号常量的命名规则及类型与变量相同,并遵循“IN规则”;程序中不能给符号常量再赋值。,2020/5/11,58,3.13pause语句,stop语句,end语句,一、pause语句一般形式Pausen注:n为15位正整数或字符常量。功能暂停程序的执行。(一个程序单位可以有多个pause语句),2020/5/11,59,3.13pause语句,stop语句,end语句,例:parameter(r=0.5,pi=3.14159)s=pi*r*2h=2.0*pi*rpause打印面积和周长print*,s,hend,2020/5/11,60,3.13pause语句,stop语句,end语句,二、stop语句一般形式stopn注:n为15位正整数或字符常量。功能终止程序的执行。(一个程序单位可以有多个stop语句),2020/5/11,61,3.13pause语句,stop语句,end语句,三、end语句一般形式end功能对主程序:终止程序的执行和作为程序单位的结束标志;对子程序:返回调用程序和作为程序单位的结束标志。(一个程序单位只能有一个end语句),2020/5/11,62,课后练习题,P7576:第五、八、十一题,2020/5/11,63,第四章逻辑运算和选择结构,2020/5/11,64,计算机程序,程序设计的基本方法,计算机解决问题所需要的一系列代码化指令序列计算机程序。程序=数据结构+算法即“程序就是在数据的某些特定的表示方式和结构的基础上,对抽象算法的具体描述。”,上述公式可扩充为:程序=数据结构+算法+程序设计方法+语言工具,2020/5/11,65,所谓面向过程的程序设计,是指利用面向过程的语言工具(如Basic、Pascal、Fortran和C等)进行程序开发的各项活动。,程序设计的基本方法,面向过程的程序设计,优点:编程简单、结构性强、可读性好,程序执行时序特征明显;遵循这种结构的程序只有一个入口和一个出口。缺点:存在数据与程序模块的分离和程序的可重用性差等问题。,2020/5/11,66,程序设计的基本方法,结构化程序设计方法:,结构化编码在结构化程序设计中,任何复杂的算法,都可以由三种基本结构组成。在构造算法时,也仅以三种基本结构作为基本单元。遵循这种结构的程序只有一个输入口和一个输出口。,模块化设计将一个复杂问题的程序分为若干个程序模块,每个模块完成一项特定功能;其中有一个主模块和若干个子模块,主模块控制各个子模块来实现整个程序的功能。,自顶向下,逐步细化,2020/5/11,67,程序设计的基本方法,面向对象的程序设计,面向对象的程序设计是一种新的程序设计范型。它将一些新的理念和结构化程序设计中好的思想相融合,提供了一种全新的程序设计方法。,2020/5/11,68,4.1算法及其表示方法,一、算法的概念算法解决某一问题所采取的方法和步骤。计算机算法计算机能够执行的算法。计算机算法的特征:有穷性操作步骤是有限的。确定性方法步骤是明确的。有效性方法是正确的,步骤是完整的。必须有输入和输出。(取得必要的信息,给出正确的结果。),2020/5/11,69,4.1算法及其表示方法,Fortran是结构化程序设计语言,每个程序单位可由三种基本结构组成:顺序结构分支选择结构循环结构实践证明,任何复杂的问题都可以用这三种基本结构来描述。,2020/5/11,70,4.1算法及其表示方法,二、算法的表示用NS流程图表示。(由几种功能框组合而成)矩形框用于表示顺序结构。如:若先执行语句A,再执行语句B。,A,B,2020/5/11,71,4.1算法及其表示方法,例:若a=1.5,b=4.5,求a+b的平方。画NS图:编程:A=1.5B=4.5C=(a+b)*2Print*,cend,1.5a,4.5b,(a+b)2c,打印c,结束,2020/5/11,72,4.1算法及其表示方法,三角框用于表示分支选择结构。如:若P为条件,当P成立执行语句A,否则执行语句B。,2020/5/11,73,4.1算法及其表示方法,L形框用于表示循环结构。当型循环(P为条件,A循环体)如:若条件P成立,则执行循环体A,否则跳出循环体。,2020/5/11,74,4.1算法及其表示方法,直到型循环(P为条件,A循环体)如:首先执行循环体A,若条件P不成立继续执行循环体A,直到条件P成立为止。,2020/5/11,75,4.2关系表达式,关系表达式是构成选择结构判断条件的基本式子。它也是一种最简单的逻辑表达式。一、关系运算符(P80表4-1).gt.(大于).ge.(大于等于).eq.(等于).lt.(小于).le.(小于等于).ne.(不等于),2020/5/11,76,4.2关系表达式,二、关系表达式的一般形式算术量关系运算符算术量即:关系表达式是由关系运算符将两个算术量连接起来的式子。关系表达式的运算元素是算术量,结果是逻辑量:真(.True.)或假(.False.)。,2020/5/11,77,4.2关系表达式,有了关系表达式,我们就可以将:数学关系式Fortran关系表达式例:x+y15.4x+y.gt.15.4a+ba-ba+b.ne.a-bex2.17exp(x).ge.2.17,2020/5/11,78,4.2关系表达式,注意:算术运算优先于关系运算。如:a+b.ne.a-b等同于(a+b).ne.(a-b)实数运算误差对关系表达式的影响如:1.0/3.0*3.0.EQ.1.0值为.false.1.0/3.0*3.0=0.9999999对于a.eq.babs(a-b).lt.1E-6c.ne.dabs(c-d).gt.1E-6,2020/5/11,79,4.3逻辑表达式,关系表达式只能表达简单的关系,如:5x10就不能用关系表达式表达,此时要用逻辑表达式。,2020/5/11,80,4.3逻辑表达式,一、逻辑表达式的一般形式逻辑量逻辑运算符逻辑量即:逻辑表达式是由逻辑运算符将两个逻辑量连接起来的式子。逻辑表达式的运算元素是逻辑量,结果也是逻辑量:真(.True.)或假(.False.)。逻辑量包括逻辑常量、逻辑变量和关系表达式。,2020/5/11,81,4.3逻辑表达式,二、逻辑常量两个:.true.(真).false.(假)三、逻辑变量用于存放逻辑常量的变量。逻辑变量可以通过赋值语句来接受逻辑常量的值,但在使用前,要进行类型说明。例:logicala,ba=.true.b=.false.,2020/5/11,82,4.3逻辑表达式,四、逻辑运算符.and.(逻辑与).or.(逻辑或).not.(逻辑非).eqv.(逻辑等(同或).neqv.(逻辑不等(异或),2020/5/11,83,4.3逻辑表达式,五、逻辑运算符的运算规则(P83表4.3)若a,b为两个逻辑量,则:a.and.b(当a、b同时为真时,为真。)a.or.b(当a、b中任意一个为真或同时为真时,为真。).not.a(当a为真,其值为假;当a为假,其值真。)a.eqv.b(当a、b为同一逻辑常量时,为真。)a.neqv.b(当a、b不为同一逻辑常量时,为真。),2020/5/11,84,4.3逻辑表达式,六、逻辑表达式的运算次序(P84表4.5)运算次序为:括号算术运算关系运算逻辑运算而逻辑运算:.not.and.or.eqv.,.neqv.,2020/5/11,85,4.3逻辑表达式,例1:写出下列条件的逻辑表达式。5k10k.ge.5.and.k.le.10f3g或f5tabs(f).le.3*g.or.abs(f).eq.5*t1a8并且1b8(a.ge.1.and.a.le.8).and.(b.ge.1.and.b.le.8),2020/5/11,86,4.3逻辑表达式,例2:若a=2.5,b=7.5,c=5.0,d=6.0,求下列逻辑表达式的值。(a.lt.b).and.(b.lt.c)tff,2020/5/11,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.d8.5FTF.F.T,2020/5/11,88,4.4用块if实现选择结构,有以下三种典型的块if选择结构:if(条件)then(块if语句)块(then块)endif(endif语句),2020/5/11,89,4.4用块if实现选择结构,if(条件)then块1(then块)else块2(else块)endif,2020/5/11,90,4.4用块if实现选择结构,例:2X3(X2)YX5(X2)编程如下:read(*,*)xif(x.le.2)theny=2*x+3elsey=x+5endifwrite(*,*)x=,x,y=,yend,2020/5/11,91,4.4用块if实现选择结构,if(条件1)then块1elseif(条件2)then块2(elseif块)elseif(条件n)then块nelse块(n+1)endif,2020/5/11,92,4.4用块if实现选择结构,说明:每个块if中可以完整地包含一个(或多个)块if结构,即构成块if的嵌套结构。如:if(条件1)thenif(条件1)then块1if(条件2)thenelse块2if(条件2)thenendif块2elseendif块1endifendif,2020/5/11,93,4.4用块if实现选择结构,一个块if语句必须和一个endif语句相对应。块if中的“then块”、“else块”和“elseif块”可为空块。,2020/5/11,94,4.4用块if实现选择结构,例1:求一元二次方程ax2+bx+c=0的根。(当b2-4ac0时有两个实根,b2-4ac0时有两个复根。),2020/5/11,95,4.4用块if实现选择结构,print*,inputa,b,c:read*,a,b,cf=-b/(2.0*a)d=b*2-4.0*a*cg=sqrt(-d)/(2.0*a)if(d.ge.0.0)thenprint*,x1=,f,+i,ge=sqrt(d)print*,x2=,f,-i,gx1=(-b+e)/(2.0*a)endifx2=(-b-e)/(2.0*a)endprint*,x1=,x1print*,x2=,x2else,2020/5/11,96,4.4用块if实现选择结构,例2:求下列函数值。0(x-10)2x+20(-10x0)y=20(0x20)30-0.5x(20x40)50-x(40x50)0(x50),2020/5/11,97,4.4用块if实现选择结构,输入x,truex-10false,truex0false,truex20false,truex40false,truex50false,y=50-xy=0,打印y,y0,y=20,y=30-0.5x,y=2x+20,2020/5/11,98,4.4用块if实现选择结构,源程序一:read*,xif(x.lt.50.0)thenif(x.lt.-10.0)theny=50.0-xy=0.0elseelsey=0.0if(x.lt.0.0)thenendify=2.0*x+20.0endifelseendifif(x.lt.20.0)thenendify=20.0endifelseprint*,y=,yif(x.lt.40.0)thenendy=30.0-0.5*xelse,2020/5/11,99,4.4用块if实现选择结构,源程序二:read*,xprint*,y=,yif(x.lt.-10.0)thenendy=0.0elseif(x.lt.0.0)theny=2.0*x+20.0elseif(x.lt.20.0)theny=20.0elseif(x.lt.40.0)theny=30.0-0.5*xelseif(x.lt.50.0)theny=50.0-xelsey=0.0endif,2020/5/11,100,4.5逻辑if语句,逻辑if语句也是一种选择结构,但与块if不同,主要表现在:只用一行表示一个选择结构;仅当条件成立时执行,并且只执行一条语句。逻辑if语句的一般形式:If条件语句例:if(n.le.100)n=n+1,2020/5/11,101,4.5逻辑if语句,例:2X3(X2)YX5(X2)编程如下:read(*,*)xread(*,*)xif(x.le.2)thenif(x.le.2)y=2*x+3y=2*x+3if(x.gt.2)y=x+5elsewrite(*,*)y=,yy=x+5endendifwrite(*,*)y=,yend,2020/5/11,102,课后练习题,P96:第一三题;第四、五、七题,2020/5/11,103,第五章循环结构的实现,2020/5/11,104,第五章循环结构的实现,所谓循环,是指在程序执行过程中需要重复执行的程序段。在实际问题中,我们经常遇到循环,如:求n,n!,无条件循环GOTO循环结构直到型循环条件循环当型循环计数型循环,2020/5/11,105,5.1用goto语句实现循环,goto语句的一般形式:goto其中:s1语句标号。功能:程序执行到此语句时,无条件的转向标号为s1的语句去执行。,例:求110的累加和。编写程序段:integerx,sumx=0.0sum=0.010 x=x+1sum=sum+xgoto10,2020/5/11,106,5.1用goto语句实现循环,如果我们把以上goto语句作为逻辑if语句中的执行语句,则就可以实现有条件的循环。即:integerx,sum求110的累加和x=0.0sum=0.010 x=x+1sum=sum+xif(x.lt.10)goto10print*,sumend,2020/5/11,107,5.2当型循环的实现,一、用块if和goto语句实现循环一般形式:s1if(条件)then标号块gotos1endif,所谓当型循环,是指执行循环体要依据事先给定的条件。当条件成立时执行循环,否则就不执行循环。,2020/5/11,108,5.2当型循环的实现,编程如下:read*,nm=1i=110if(i.le.n)thenm=m*ii=i+1goto10endifprint*,mend,例:求n!。,2020/5/11,109,5.2当型循环的实现,二、用dowhile语句实现当型循环一般形式dos1,while(条件)循环体s1,2020/5/11,110,5.2当型循环的实现,例:求n!。编程如下:read*,nm=1i=1do10while(i.le.n)m=m*ii=i+110continueprint*,mend,2020/5/11,111,5.3直到型循环的实现,一、用逻辑if语句实现直到型循环一般形式s1循环体if(条件)gotos1,所谓直到型循环,是指先执行循环体,再判断条件。如果条件为“假”(真),继续执行循环,直到条件为“真”(假)时终止循环。,2020/5/11,112,5.3直到型循环的实现,例1:求n!。编程如下:read*,nm=1i=110continuem=m*ii=i+1if(i.le.n)goto10print*,mend,2020/5/11,113,5.3直到型循环的实现,编程如下:integersigns=1.0d=2.0sign=110sign=(-1)*signt=sign/ds=s+td=d+1if(d.le.100.0)goto10print*,send,例2:求的值。,2020/5/11,114,当型与直到型循环的比较,当型循环直到型循环不同:先判断条件先执行循环体再执行循环体再判断条件(循环体至少被执行一次),循环结构关键:条件判断改变条件的语句,2020/5/11,115,5.4用do语句实现循环,当循环的初值、终值和循环次数都已知时,可用do语句实现循环。用do语句实现的循环称为“do循环”。do循环是由一个do语句和循环体组成。,2020/5/11,116,5.4用do语句实现循环,一、一般形式dos,v=e1,e2,e3循环体s说明:s循环体终端语句的标号v循环控制变量(do变量),可为整型、实型或双精度,2020/5/11,117,5.4用do语句实现循环,一、一般形式dos,v=e1,e2,e3循环体s说明:e1,e2,e3是整型、实型或双精度表达式e1循环变量初值e2循环变量终值e3循环变量增量(步长,默认值:1)当v为整型变量,e3=1时,e3可忽略,例:DO10,I=1,10,2DO100,N=1,5,2020/5/11,118,do循环执行过程P103图5.8,2020/5/11,119,r=MAX(INT(e2-e1+e3)/e3),0),vv+e3,执行过程P103图5.7,并将其转换为循环变量的类型,2020/5/11,120,5.4用do语句实现循环,例如:求110的累加和。integerx,sumsum=0DO10,x=1,10sum=sum+xx=x+110continueprint*,sumend,integerx,sumx=0.0sum=010if(x.le.10)thenx=x+1sum=sum+xgoto10endifprint*,sumend,2020/5/11,121,5.4用do语句实现循环,二、执行过程(分四种情形)当e2e1且e30:当e2e1且e30:,2020/5/11,122,5.4用do语句实现循环,当e20:当e2e1且e30,则循环次数为0由于实数在内存中存储的误差,v,e1,e2,e3尽可能用整型量。,2020/5/11,126,5.4用do语句实现循环,说明:e1,e2,e3的值在do循环体内不会改变,即使给表达式e1,e2,e3中的变量赋值也不影响循环次数例:m=10do10,i=1,m,3m=100+mprint*,i,m10continueendr=(10-1+3)/3=4,2020/5/11,127,5.4用do语句实现循环,说明:循环终端语句必须是可执行语句(但除goto,块if,else,elseif,endif,end,stop和return语句外)。继续语句(continue语句)循环终端语句必须是可执行语句。那么,这种作为循环终端语句的语句具有双重作用:一是作为循环终端的标志,二是要完成自身的功能。因此影响了程序的可读性。Fortran用一个专门的语句作为do循环的终端语句,即continue语句,它本身不进行任何机器操作。,2020/5/11,128,5.4用do语句实现循环,三、有关do循环的规定在循环体内不允许对循环变量再赋值,但可以引用。例:do10,i=20,1,-1i=2*i不合法k=2*i引用i,合法print*,i,k10continue,2020/5/11,129,例2:do100,I=1,1020print*,I100continueif(x.gt.100.)goto20,例1:do10,n=1,100if(n*2.ge.500)goto2010continue20print*,n,n*2,5.4用do语句实现循环,三、有关do循环的规定可从do循环体内转到循环体外,但不允许从循环外转到循环内,内外,错误,2020/5/11,130,5.4用do语句实现循环,三、有关do循环的规定当退出do循环时,循环变量仍有定义,其值为离开循环时,循环变量的值三种情况循环正常结束v=e1+r*e3循环次数为0v=e1非正常退出循环例:m=100do10,i=1,100,3m=10+mprint*,i,mif(m.gt.150)goto2010continue20print*,i,mend,2020/5/11,131,5.4用do语句实现循环,例:计算100100100n=k,k2,1/k的值。k=1k=1k=1编程如下:ctocomputen,mands.n=0m=0s=0.0do50k=1,100n=n+km=m+k*ks=s+1.0/k50continueprint*,n,m,send,2020/5/11,132,5.4用do语句实现循环,四、do循环的嵌套在一个do循环中还可以包含一套或多套完整的do循环,这就是do循环的嵌套。一般形式(以双重循环为例)do10i=1,10do20j=1,1020continue10continue,2020/5/11,133,5.4用do语句实现循环,五、关于do循环嵌套的规定内外循环不允许交叉。do10i=1,10do20j=1,1010continue20continue,2020/5/11,134,5.4用do语句实现循环,五、关于do循环嵌套的规定在一个程序单位中,并列的do循环可用同名循环变量,而嵌套的do循环不允用同一变量作为循环变量。例:do10i=1,10do20i=1,1020continue10continue使循环控制产生混乱,2020/5/11,135,5.4用do语句实现循环,例:打印“九九表”。编程如下:do10i=1,9do20j=1,9k=i*jprint*,i,*,j,=,k20continueprint*,10continueend,2020/5/11,136,5.4用do语句实现循环,六、三种循环形式的选择循环次数可事先确定,优先用do循环若循环体可能一次也不执行,则优先用当型循环若循环体至少执行一次,则当型、直到型循环都可,2020/5/11,137,课后练习题,P126:第二、三、八题。,2020/5/11,138,第六章Fortran的数据结构,2020/5/11,139,6.1程序中的数据结构,程序代数表达式:程序=算法+数据结构对于同一个问题的求解,即一个程序的实现,可以采用不同的数据结构和不同的算法。选择合适的数据结构可以降低算法的复杂度。,2020/5/11,140,6.1程序中的数据结构,在计算机高级语言中用数据类型来表示不同的数据结构。数据结构一般有以下三类:基本类型(Fortran支持)构造类型(Fortran支持)指针类型(Fortran90支持),2020/5/11,141,6.1程序中的数据结构,Fortran支持如下几种基本类型:整型(第三章)实型(第三章)双精度型复型字符型逻辑型(第四章),2020/5/11,142,6.1程序中的数据结构,Fortran支持如下几种构造类型:数组(第九章)记录(第十三章)文件(第十三章),2020/5/11,143,6.2双精度数据类型,由于实型数据提供的有效数字的位数有限(微型计算机一般提供7位),一方面满足不了精度的需要,另一方面还会产生误差。双精度类型以两倍于实型的字节(一般为8个字节)来存储数据,提供1517位有效数字,解决了上述的问题。,2020/5/11,144,6.2双精度数据类型,Fortran中双精度常数要用指数表示:如:12.34567891.2345656789D+1-0.123456789-1.23456789D-1注意:不可写成1.2345656789E+1Fortran中双精度变量使用前要用类型说明语句或IMPLICIT语句加以说明:如:doubleprecisionA,B,Cimp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初中地理特岗教师招聘考试模拟题及备考策略
- 重点护理环节管理措施
- 甲状腺素合成课件
- 甲状腺相关课件获取
- 中国的民族教学课件
- 《飞机梦工厂》教学课件
- 江苏苏州2018-2022年中考满分作文65篇
- 用电设备安全知识培训课件
- 统编版小学二年级语文(上)第六单元测试题(含答案)
- 中外教育简史教学课件
- 2025版厂房装修施工安全责任合同模板
- GB 16808-2025可燃气体报警控制器
- 医疗机构重点部门感染预防与控制标准WST860-2025解读宣贯
- 2025至2030中国制造仿真软件行业项目调研及市场前景预测评估报告
- 心血管内科医师执业考试题库
- 2025年汽车后市场行业当前市场规模及未来五到十年发展趋势报告
- 德育副校长工作总结课件
- 业财一体化课件
- 2025当兵心理测试题及答案
- 2025年官方兽医牧运通考试题库附参考答案详解(考试直接用)
- 2025年兵团辅警考试题库
评论
0/150
提交评论