《FORTRAN程序设计(电子教案).docx》由会员分享,可在线阅读,更多相关《FORTRAN程序设计(电子教案).docx(72页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、FORTRAN程序设计教案第一章FORTRAN程序设计基础学习目的,就是要学会利用FORTRAN语言编写出适合自己实际需要的程序,让计算机 完成自己指定的任务。内容:1、程序设计的基本概念2, FORTRAN语言的发展3、FORTRAN程序的基本结构与书写格式4、FORTRAN 90开发环境等内容。1.1程序与程序设计“程序”是用计算机能识别的语言所描述的解决实际问题的方法和步骤。程序设计:(1)分析问题,确定数学模型或方法。(2)设计算法,画出流程图。(3)选择编程工具,编写程序。(4)调试程序,分析输出结果。1.2算法及其描述1.2.!算法的概念卡-x-y求 U= x + y这题的算法并不
2、难,可写成:(1)从键盘输入a,b的值。(2)如果ab,贝x=, y=,否贝x=,尸。(3)计算u的值:。(4)输出u的值。例1.2输入十个数,要求找出其中最大的数。设max单元用于存放最大数,先将输入的第一个数放在max中,再将输入的第二个数与 max相比较,大者送到max,然后将第三个数与max相比,大者放在max中,一直到 比完九次为止。算法要在计算机上实现,还需要把它描述为更适合程序设计的形式,对算法中的量要抽 象化、符号化,对算法的实施过程要条理化。上述算法可写成如下形式:(1)输入一个数,放在存储单元max中。(2)设置用来统计比较次数的单元i,初值置1。(3)若imax,则将x的
3、值送给max,否则,max值不变。(6)i增加1,(7)返回到第(3)步。(8)输出max中的数,此时max中的数就是十个数中最大的数。例1.3求两个正整数m和n的最大公约数。略:1.2.2算法的描述常用的有:自然语言、一般流程图、N-S图等。1. 一般流程图般流程图是种传统的算法描述方法,它用不同的儿何图形来代表不同性质的操作。 例如,用矩形框表示要进行的操作,用菱形框表示判断,用流程线将各步操作连接起来并 指示算法的执行方向。例1.4用一般流程图来描述例1.1例1.3的算法。见教材2. 程序的三种基本结构1966年Bohra和Jacopini提出了组成结构化算法的三种基本结构,即顺序结构、
4、选择 结构和循环结构。顺序结构:最简单的种基本结构,依次顺序执行不同的程序块。选择结构:根据条件满足或不满足而去执行不同的程序块。在图1.4(b)中,当条件P 满足时执行A程序块,否则执行B程序块。循环结构:是指重复执行某些操作,重复执行的部分称为循环体。循环结构分当型循 环和直到型循环两种,分别见图1.4(c)和图1.4(d)。当型循环先判断条件是否满足,当条件 P满足时反复执行A程序块,每执行一次测试一次P,直到P不满足为止,跳出循环体执 行它下面的基本结构。直到型循环先执行一次循环体,再判断条件P是否满足,如果不满 足则反复执行循环体,直到P满足为止。3. N-S 图N-S图以三种基本结
5、构作为构成算法的基本元素,每种基本结构用个矩形框来表示, 而且取消了流程线,各基本结构之间保持顺序执行关系。N-S图可以保证程序具有良好的 结构,所以N-S图又叫做结构化流程图。例1.5用N-S图来描述例1.1例1.3的算法。1.3 程序设计方法1.3.1 结构化程序设计结构化程序设计采用自顶向下、逐步求精和模块化的分析方法。模块化是结构化程序的重要原则。结构化程序设计的过程就是将问题求解由抽象逐步具体化的过程。这种方法符合人们 解决复杂问题的普遍规律,可以显著提高程序设计的质量和效率。例 1.6 计算 s=l+(l+2!)+(l+2!+3!)H林 1+2!-1-10!)例1.7两个自然数之和
6、是667,且它们的最小公倍数与最大公约数之比是120:1,例如115 和552,求这样的自然数。例1.8验证哥德巴赫猜想:任何大于2的偶数都是两个素数之和。1.3.2 面向对象程序设计面向对象程序设计(Object-Oriented Programming,简称OP)方法。对象是数据和操作的“封装体”,封装在对象内的程序通过“消息”来驱动运行。在图形 用户界面上,消息可通过键盘或鼠标的某种操作来传递。1.4 FORTRAN语言的发展FORTRAN 是 Formula Translation 的缩写1.5 FORTRAN程序的基本结构为了使读者对FORTRAN 90有一个初步认识,下面先举两个简
7、单的例子。例1.9输入圆的半径,计算并输出圆的周长和面积。该问题的程序分为三个步骤:是输入原始数据,即圆的半径,二是计算圆的周长和面 积,三是输出圆的周长和面积。程序如下:PROGRAM SAMPLE!程序举例(以!开始的内容用于对程序进行注释说明)REAL R,P,S!定义三个实型变量READ *,R!输入圆的半径P=2*3.14I59*RS=3.14159*R*RPRINT *,R,P,S!计算圆的周长!计算圆的面积!输出圆的周长和面积END例1.10输入两个实数,输出它们中较大的数。程序略例如 个简单的FORTRAN程序结构如下:PROGRAM程序名说明部分可执行部分END PROGRA
8、M 程序名其中,方括号中的内容为可选项。由此可见,从语法上讲只有END是必不可少的。 对FORTRAN程序而言,END意味着程序的编译到此为止,即程序的结束。1.6 FORTRAN程序的书写格式1.6.1 固定格式(1)第15列为标号区。标号最多为5位数字,数字中的空格不起作用。标号大小与程 序执行顺序无关,语句可以不带标号。第1列为C或*,说明此行为注释行。(2)第6列为续行标志区。续行标志是除空格和零以外的任何FORTRAN 77字符。注意, 注释行不具有续行的概念,续行不能使用语句标号。(3)第772列为语句区。语句可以从第7列以后任何位置开始书写。但一行只能写 个语句。(4)第7380
9、列为注释区。1.6.2 自由格式在自由格式源程序中,不再有标号区、续行标志区、语句区和注释区的划分,源程序可 以从第1列写到第132歹。具体规定如下:(1) 一行可以写多个语句,语句之间用“;”分隔,但最后个语句不允许有标点符号。(2)用!作为注释符,!可以写在一行中的任一列。因为注释总是延伸致程序行的结束, 所以在同一行的不同语句之间不能插入注释。(3)续行符&,表示其后有续行。例如Y=exp(-0.5*x)*cos(x+3.14258/3)+exp(0.5*x)*sin(x+3.14258/3)+120&* log(l +sqrt(l-x*x)1.7 FORTRAN 90开发环境1.7.1
10、 系统安装与启动licrsftSt4i - ppO - 12. f90 同日二也J凶-Win32图 1.Edit Yiv gsert guild lools findow 画潮。回II ot rP-2*3.11159R ?S-3.1H159RR ?PRINT R.P.S! !ENDPROGRAM SAMPLE周 I - AHH AMH AMH AMH 义入M出 一定输X Profite /ReadyLn 7. Col 14 |SecI图 1.14 FORTRAN PowerStation 4.0 工作窗 1.7.2 上机步骤(1)建立一个项目(Project)o(2)建立源程序文件。(3)将源
11、文件加入项目。(4)编译和运行。作业:3.(1)、(2), (3)、 (4)、 (5)。第二章顺序结构程序设计2.1 FORTRAN 常量常量是在程序运行过程中,其值不改变的量。例如15、0、21、3.1416, ,FORTRAN5 等都是常量。FORTRAN中,常量可以分为直接常量和符号常量两大类。1 .直接常量:是指数据本身就是个常量。不同类型的常量有不同的表示方法,下面 依次介绍。(1)整型常量:整型常数或整数,包括正数、负数或0。如125, -258, +28等。必须注意:整型常量中的数字之间不能用“,”分隔(2)实型常量:实数。它有2种表示形式:小数形式和指数形式。小数形式根据小数点
12、前后是否有数字形成3种不同格式,分别是:m.n、m.、.n。数字 前面可以加上“+”或“-”号,默认为正号。小数点”.”前或后可以不出现数字。例如3.52、 4.0、-5.(相当于-5.0)、.6378 (相当于 0.6378)等。指数形式:1.32E5表示13200或1.32*15。指数形式应注意以下事情:首先,有效数字可以是整型或实型常量;其次,E后面的指数只能是整型常量。2 .符号常量:用个标识符来代表个常量。符号常量常用PARAMETER语句来定 义。例如:PARAMETER (PI=3.1416, M=10,)。2.2 FORTRAN 变量变量:是指在程序运行过程中其值可以改变的量。
13、变量实质上代表的是一个内存单元 (高级语言的个重要的优点是:允许通过变量名,而不是存储单元的物理地址来访问存 储单元)。2.2.2变量名变量的名字即标识符。标识符只能由字母、数字和下划线组成,且开头只能是字母。定义标识符时应注意以下事情:(1) FORTRAN标识符不区分字母的大小写,如grade、Grade GRADE所表示的是 同一个变量。(2)标识符的长度因FORTRAN版本不同而有差异,在FORTRAN90中,标识符长 度范围是131,超过的字符无效。(3)标识符要尽量做到“见名知义”,如可用AREA代表“面积”,GRADE代表“成 绩”,AVER代表“平均值”等。(4) FORTRA
14、N没有规定的“保留字”2.2.3变量的说明FORTAN中变量的类型的定义有三种方式:1 .强制说明:类型说明词变量名1,变量名2。INTEGER:整型变量说明:REAL:实型变量说明;DOUBLE PRECISION:双精度型变量说明;COMPLEX:复型变量说明:LOGICAL:逻辑型变量说明;CHARACTER:字符型变量说明;注意,在FORTRAN%中,还可以用如下语句来声明变量的类型:REAL: : SCORE=89.5该语句在变量类型进行声明的同时进行变量的初始化。2隐含说明语句:IMPLICIT说明语句可以将某个或某些字母开头的变量规定为所需的 类型,格式为:IMPLICIT类型说
15、明(字母表)。例如:IMPLICIT INTEGER (A, C, T-V)该语句的含义是将以A和C及T到V开头的变量规定为INTEGER类型(即整型)。3隐含约定FORTRAN语言规定,以I, J, K, L, M, N 6个字母开头的变量被当作整型变量。 该规则又称为IN规则。例如:在没有前面两种说明的情况下,II, MA, N3s等都为整型变量。注意:(1) IN规则有一定的副作用,FORTRAN%中一般不提倡用,通过在程序变量说 明之前加入:IMPLICIT NONE语句来取消I-N规则。(2)在以上3类规则中,第一类优先级最高,第二类次之,隐含约定最低。1.1 IMPLICIT语句和
16、变量强制说明语句,都为非执行语句,FORTRAN77规定:应 把它们放在所有可执行语句之前。2.3 FORTRAN内部函数内部函数是指系统本身带有的能完成定功能的程序单位。如数学函数中的三角函数, 象正弦函数。FORTRAN常用的函数见教材。说明:内部函数使用应当注意:(1)所有函数必须遵守原有数学规则。(2)所有函数名字的后面都必须带有括号(),否则将产生错误。(3)三角函数参数单位是弧度。(4)要注意FORTAN语言中函数名与数学中函数名的差异,如FORTRAN语言中 LOG(X),相当于数学的自然对数,即LNX。下面看一些函数运用的具体例子:(1)求三个数X、Y、Z中的最大值可以表示为:
17、MAX (X, Y, Z);(2)判断个数自然数M是否为另外一个自然数N的因数,通过MOD (N, M)是 否为可以判断,如果为,则说明M是N的因数,否则说明N不能被M整除。2.4 FORTRAN算术表达式2.4.1 运算符号与其优先级别FORTRAN提供5中算术运算:+、/、*,分别代表加、减、乘、除、乘方运算。 例如:2*3表示2,M*N表示MXN。2.4.3算术表达式中类型转化2.5 赋值语句2.5.1 赋值语句的格式为:变量名=表达式例如,PI=3.1416其含义是将3.1416的值赋给左边的变量PI, X=Xl+X2*X3+5将算 术表达式Xl+X2*X3+5的值赋给变量X, 1=1
18、+1变量I在原来的基础上增加1。赋值语句的作用是:将右边表达式的值赋给左边变量,即将表达式的值存放到变量所 对应的存储单元。2.5.2 执行赋值语句时的类型转换问题:FORTRAN规定:(1)左右两边类型相同,运算完毕,直接赋值(2)左右两边类型不同,右边表达式按原来规则计算,再转换为与左边变量相同的 类型,然后将值赋给左边的变量。例如INTEGER NN=3.33*3赋值过程如下:先计算右边表达式3.33*3的值,为9.99,再将9.99转化为整型9,最 后将9赋值给N,因此N的值是9。为了加深对赋值语句的理解,看下面程序段INTEGER M,NREAL X,YM=5/2N=5.0/2X=5
19、/2Y=5.0/2X 的值是 2.000000; Y 的值是 2.500000o2.6 简单输入输出语句输入输出是计算机内存与外部设备交换数据的过程。要顺利地传递数据,一般应在输 入输出语句中给计算机语提供三方面的信息:(1)通过什么设备进行输入输出:2.6.1 什么样的格式进行输入输出;2.6.2 、输出的内容。FORTRAN提供多种输入输出方式,与此对应的是各种输入输出语句。下面要介绍的 是其中最简单的表控输入、输出语句,也就是系统默认的输入输出方式。2.6.3 表控输入语句所谓输入(1)数据按用户规定的格式输入。(2)用自由格式输入,即表控格式输入。(3)无格式输入。表控格式输入一般格式
20、为:READ*,变量表变量之间用逗号隔开,例如:READ*, X, Y, Z其中,READ后面的“*”号表示“表控输入”,语句含义是从系统隐含指定的输入设 备上(一般为键盘)读入3个实型数据分别给X、Y、和Z。表控输入也可以写为:READ (*, *)变量表,其中第一个表示“系统隐含指定的输 入设备”,第二个是指“表控输入”。表控输入语句使用注意:(1)在输入数据时,如果只输入个数据,则直接输入,再按回车键即可。但当输入 多个数据时,数据之间必须分隔,分隔方法有两种:种是每输入个数据,键入个回 车,即个数据作为一行。另种方法是在一行输入数据,但数据之间用分隔符隔开,允 许的分隔符号有空格、逗号
21、和斜杠。两个数据之间空格可以有多个,但逗号只能有一个, 多个逗号意味着对某些变量输入空数据,即不输入数据。例如:READ*, SI, S2, S3输入方式为:1.2 2.5 3.45或1.2, 2.3, 3.45再回车,还可以毎输入个数据个回车。(2)如果输入数据少于变量个数,则计算机将等待继续输入,如果数据多于变量个数, 则多余的数据不起作用。(3)当多个输入语句并列使用时,个READ语句对应一行。(4)如果在输入数据行中出现“/”号,表示READ语句的输入到此结束,未被赋值 的变量将不被赋值。例如:READ*, I, J, X, Y输入数据为:2, 6/14.3, 12.64 回车这时,I
22、为2, J为6,而X、Y将得不到值。(5)特别注意:输入的数据类型应与变量类型尽量保持一致,整型变量不能接受实型 数据,否则运行时将出错,实型变量可以接受整型数据,但最后按实型数据处理。2.6.4 表控输出语句一般格式为:PRINT*,输出项表其中“*”同样代表表控格式,输出项内容可以是常量、变量、表达式或字符串,它们 之间使用逗号隔开。例如PRINT*, XPRINT*, “Y=”,Y, Z=”,ZPRINT*, “最大的数是:”,MAX, “最小的数是:”,MIN注意:(1)每个PRINT语句在新的一行开始显示。(2) PRINT后面字符串里的内容将原样显示。(3)单独个PRINT语句,后
23、面无列表相当于个换行语句。(4) PRINT语句可以进行表达式的运算,例如PRINT*, X*2, Y+3(5)表控格式还可以写成WRITE (*, *)输出列表WRITE (*, *) X, YPRINT*, X, Y例2.1分析下列程序的结果程序见教材例2.2输入三个实数,输出最大值和最小值程序见教材:2.7 程序执行控制语句2.7.1 STOP语句:使程序“终止运行”,个程序可以有多个STOP语句,为了区分,可 以在STOP后面加上标识,其一般格式为:STOP N例如:STOP 150STOP ABC2.7.2 PAUSE 语句PAUSE语句是暂停语句,其使用格式如下:PAUSE N2.
24、7.3 END 语句END语句是个比较重要的语句,它的作用有二点:(1 )结束本程序单位的运行,每个完整的FORTRAN程序,都必须在最后加个END, 以结束程序。(2)在FORTRAN子程序中,同样用END作为该程序单位的结束,但同时兼起返回 的作用:使程序返回到被调用处,即RETURN语句的功能。2.8 程序举例例2.3任意输入两个数,对它们进行加、减、乘、除、乘方运算程序略例2.4输入自变量的值,求出对应的函数值,已知f(x尸xS+siMx+lnK+l)程序略例2.5将两个变量的值互换。程序略例2.6输入个三位整数,将它反向输出,如输入123,输出321。程序略作业:习题二的1、2、6、
25、10第三章选择结构程序设计块IF结构块CASE结构来实现选择结构。3.1 关系运算和逻辑运算3.1.1 关系运算关系表达式是指由一个关系运算符把两个数值表达式或字符表达式连接起来的式子, 用于对两个运算量进行比较。FORTRAN共有6个关系运算符见教材。关系运算表达式书写应注意:(1)当关系运算里包含算术运算时,先算术运算,再作关系运算。为了防止混淆,最好 是给算术运算加上括号。(2)关系运算用于两个不同类型数据比较时,将自动进行数据类型的转化,转化规则同 算术运算。(3)关系表达式计算所得到的结果为个逻辑型(LOGICAL)值,即结果为.TRUE. 或.FALSE.。因此计算结果不能再参与关
26、系运算。例如,(A.GT.B).LT.C这样的表达式是非 法的,因为(A.GT.B)结果为逻辑型值,不能再参与关系运算。(4)在使用.EQ.(=)或.NE.(/=)时,应非常小心,因为实型数据在计算机里存储时是用 近似值表示的,可能存在误差,例如LOGICAL AREALXREAD*,XA=(X*X.EQ.1.44)PRINT*,A=,AEND当输入1.2时,输出结果为A=.F.。即象1.2*1.2.EQ.!这样的表达式,其结果却为假,解决的办法是用 ABS( 1.2*1.2-1,44)5,对应的FORTRAN表达式为:X5.0R.X-5o (3)逻辑非运算,运算符为.NOT.对后面的操作数取
27、反,如果操作数为真,则取假,否 则取真。(4)逻辑等于运算,运算符为.EQV.当连接的两个逻辑值相同(同为真或同为假)时,该 逻辑表达式取真,否则取假。(5)逻辑不等运算,运算符为.NEQV.当连接的两个逻辑操作数取不同的值时,该逻辑 表达式取真,否则为假。(6)逻辑异或运算,运算符为.XOR.当连接的两个逻辑操作数不同时,该逻辑表达式取 真,相同时取假。2.逻辑表达式下面看些逻辑表达式的例子:(1)坐标中,第一象限的点用逻辑表达式可表示为:X.GT.0.AND.Y.GT.0(2)Xe -3, 5对应的逻辑表达式是:X.GE.-3.AND.X.LE.5逻辑运算也有优先级别之分,其中.NOT.的
28、优先级最高,其次是.AND.,然后是.OR., 最后是.EQV.、.NEQV.和.XOR.。3.2块IF选择结构例3.1输入一个学生的成绩,如果成绩少于60分,则输出“不及格”,90及90分以上, 输出“优良”,689输出“通过”。程序见教材:1 .单分支块IF结构格式如下:圧(逻辑表达式1) THEN块ENDIF2 .双分支结构IF (逻辑表达式1) THEN块1ELSE块2END IF3 .多分支结构一般格式如下:IF (逻辑表达式1) THEN块1ELSE IF (逻辑表达式2)THEN块 2.ELSE IF (逻辑表达式N) THEN块NELSE块N+1END IF块IF语句注意:(I
29、)IF(逻辑表达式)THEN语句单独占一行。(2)块语句是前面逻辑表达式为真的情况下所具体执行的内容,可以是一个或多个语 句。(3)每个ELSE圧(逻辑表达式)语句是前面逻辑条件为假,该逻辑条件为真的情况下, 作下面的块语句。这些分支可有,也可没有,这必须根据问题要求定。(4)最后的ELSE语句单独占一行。(5)END IF语句作用为结束整个选择结构,这是为了程序编译而设置的,一定不能少, 否则将产生一个或多个编译错误。例3.2编程求任意一元二次方程AX2+BX+C=0的根,其中A、B、C为任意实数。分析:该问题根据A是否为分为两种情况:程序见教材3.3 块CASE选择结构一般格式为:SELE
30、CT CASE(表达式)CASE(表达式1)块1CASE(表达式2)块2CASE(表达式N)块NCASE DEFAULT默认块END SELECT其中:(l)SELECTCASE后括号里的“表达式”,用来表示待选择的内容,如成绩、资、年 龄等,它一般为变量名,可以是整型、逻辑型、单个字符型变量或者相应的表达式。(2) CASE后面括号里的表达式相当于前面SELECT CASE括号里表达式的具体取值, 每对应不同的取值,所作的处理在其后的块语句中完成。(3)CASEDEFAULT与其后的默认块,是缺省情况,可有可无。如果加入它,则代表前 面所有选择表达式的值皆非的情况下执行该块。(4圧ND SE
31、LECT为CASE结构结束的标志。下面通过实例来加深对该选择结构的理解。例3.3设计程序,完成小学加、减、乘、除四则运算,即输入两个数,再输入个运 算符号,做对应的运算,并显示相应的结果。分析:此问题实际上是根据输入的运算符作出对应的操作,因此,SELECT CASE后 面括号里的变量实际上就是表示运算符的变量,用OP表示,而以后的各个CASE分支, 就是OP的具体取值。程序略:CASE后面括号内表达式的值可以用以下方式确定:(1)用逗号隔开的单个值。例如,CASE(1, 3, 5, 7)这时,选择变量的值只要取其中 之一,就执行下面的块。(2)用冒号分隔的值的范围。一般形式为CASE(A :
32、 B),其中,A为下界,B为上界, 选择变量的值可以取到界限上,即取值相当于数学上的闭区间,界必须小于上界(字母按 ASCII值来决定大小),下界或上界也可以缺省。例如,CASE(2: 8)、CASE(: 10)、 CASE(T:N)、CASE(15:)等都是正确的表示方法。(3)1 和 2 的混合,如:CASE(2: 4, 6, 8:)等。SELECT CASE语句的执行过程:先计算表达式的值,然后在每个CASE语句的表达 式列表中查找与之匹配的值,找到后,就执行对应的CASE块,每执行完一个CASE块, 程序自动跳出CASE选择结构;如果找不到,就执行CASE DEFAULT语句所所对应的
33、块。 如果没有CASE DEFAULT语句,就跳过CASE选择结构,执行CASE结构后面的语句。下面我们再看个实例。例3.4编写程序,输入年月,输出该月所对应的天数。分析:月份对应的天数为I、3、5、7、8、10、12月为31天,4, 6、9、II月为30 天,而2月,一般为28天,闰年为29天,因此,关于闰年的判断,方法如下:年数能被 4整除,但不能被100整除或者年数能被400整除都为闰年。程序见教材:3.4 逻辑圧语句格式:IF (条件表达式)可执行语句其执行过程是:先计算条件表达式的值,当条件表达式为真时,执行可执行语句,执 行后继续执行该逻辑圧语句后面的语句,否则,直接执行该逻辑圧后
34、面的语句。例3.5输入三个数,求出最大和最小的值。例3.6输入X,求出对应的函数值。In(42 +1) x 0sinx3 +|x! 其它3.5 算术IF语句算术圧语句是的格式为:IF(算术表达式)标号I,标号2,标号3该语句也是用来表示选择,其执行过程是:首先计算算术表达式的值,如果值小于, 则执行标号I对应的语句;如果等于,则执行标号2对应的语句;如果大于,则执行标 号3对应的语句。下面看个具体的例子。例3.7输入X,求函数的值。已知函数如下;x2 +1 x 03.6 程序举例例3.8判断个正整数是否被3、5、7中的一个、两个、或者三个整除,并输出对应 的信息,如:输入35,则显示能被5和7
35、整除。例3.9输入个三位自然数,判断它是否为水仙花数,所谓水仙花数,是指各位数字 的立方和等于该数本身的数如153=r+53+33为水仙花数。例3.10将学生成绩分为优(9100分)、良(889)、中(779)、及格(669)、不及格 五个档次,从键盘输入学生的成绩,输出对应的档次。下面用SELECT CASE选择结构来实现。 作业:1、5、9第四章循环结构程序设计在FORTRAN 90中,用于实现循环结构的语句主要有DO语句和DO WHILE语句。木 章介绍这两种语句以及循环结构的程序设计方法。4.1用DO语句实现循环DO循环一般格式DO循环一般格式如下:DO i=el,e2,e3(循环体)
36、END DO例:DO循环的格式说明。(1)当循环变量变化的步长为1时,表达式e3可以省略。(2)如果循环变量和循环参数表达式的类型不一致,其处理办法与赋值语句样,先 将表达式的最后结果转换成循环变量的类型,然后再进行处理。例如INTEGER XDO X=l.2,5.6,2.4PRINT *,XEND DOEND程序执行后的输出结果为:1 3 5(3) DO 循环的执行次数 r=MAX(INT(e2-el+e3)/e3),0)o 例如DO 1=10,1,-2循环次数 r= MAX(INT( 1 -10-2)/(-2),0)=5 又如DO 1=10,1,2循环次数 r= MAX(1NT( 1 -1
37、0+2)/2),0)=0如果循环变量的步长为0,程序在编译和连接时都没有问题,但在执行过程中求循环执 行次数时将出现语法错,即进行了除零运算。这是应当避免的。DO循环执行过程“例4.1求y = 1 + x + + + A + ,其中x和n的值从键盘输入。2!3!n.这是求若干个数之和的累加问题。累加问题可用递推式来描述:Yi=Yz+Fi即第i次的累加和丫等于第i-1次的累加和加上第i次的累加项F。从循环的角度看即本次 循环的累加和丫等于上次循环的累加和加上本次的累加项F,可用赋值语句Y=Y+F来实 现。关于累加项F的递推式为:Fi=Fi.l*X/I可用赋值语句F=F*X/I来实现。用DO循环控
38、制F=F*X/I和Y=Y+F重复执行N次,即可得到Y的值。程序略:例4.2 个整数的因子(不包括该数本身)之和等于它本身,则称该数为完数。例如6 的因子有1,2,3,且1+2+3=6,因此6是完数。输入个整数,判断它是否完数。根据完数的定义,先求整数的因子之和,然后判断该数本身是否等于因子之和,若是 则为完数。程序略:根据素数的定义(参阅例1.8),素数只有1和它本身两个因子。因此,该程序稍加修改 可以判断M是否素数。例4.3 Fibonacci数列定义如下:F(=lF2=lFn=Fn-l+Fn-2 (n2)求Fibonacci数列的前30项。设待求项为F,待求项前面的第1项为F1,待求项前面
39、的第2项为F2。首先根据F1 和F2推出F,再将F1作为F2, F作为fl,为求下项作准备。如此一直递推下去。具体 过程如下:1 12 3 5第次 F2 + F1 - FI I第二次 F2 + F1 f FI I第三次F2 +F1 - F例4.4所谓“水仙花数”是指个三位整数,其各位数字立方和等于该数本身。例如, 153就是个水仙花数。输岀全部“水仙花数”。在100,999范围内,对所有整数逐一验证是否符合的条件,输出符合条件的数。这种方 法称为穷举法。例4.5输入30个学生的成绩,分别统计成绩在85700分、6085分和60分以下各分 数段的人数。4.1.3与循环有关的控制语句在循环体内使用
40、EXIT语句和CYCLE语句,可以改变循环的执行方式。1.1 EXIT 语句:例4.6求两个整数a与b的最大公约数和最小公倍数。1.2 CYCLE 语句CYCLE语句用来结束本次循环,即跳过循环体中尚未执行的语句。1.3 用DO WHILE语句实现循环格式如下:DO WHILE (逻辑表达式)循环体END DODO WHILE循环的执行过程例4.8输入个整数,输岀其位数。输入的整数存入变量N中,用变量K来统计N的位数。程序略:例4.10见教材1.4 几种循环组织方式的比较例4.11输入个整数m,判断是否素数。1.5 循环的嵌套例4.12求100,1000以内的全部素数。可分为两步:(1)判断个
41、数是否素数,这就是例4.11的程序。(2)利用穷举法将判断个数是否素数的程序段,对指定范围内的每个数都执行一遍, 即可求出某个范围内的全部素数。例4.14验证结论:任何个自然数N的立方都等于N个连续奇数之和。例如=1, 23=3+5, 33=7+9+11。要求程序对每个输入的自然数计算并输出相应的连续奇数,直到输入 的自然数等于时为止。例4.16用牛顿迭代法求方程f(x)=2x3-4x2+3x-7=0在x=2.5附近的实根,直到满足为止。例4-17求f(x)在a,b上的定积分Xbf(X)dx。例4.20甲、乙、丙三位球迷分别预测已进入半决赛的四队A,B,C,D的名次。甲预测:A 第一名、B第二
42、名;乙预测:C第一名、D第三名;丙预测:D第二名、A第三名。比赛 结果,甲、乙、丙预测各对一半,试求A,B,C,D四队的名次。作业:实验指导书上相关章节第五章FORTRAN 90数据类型5.1 数据类型的概念(1)类型的名称。(2)允许值的集合。(3)允许值(常量)的表示方法。(4)操作这些值的运算的集合。5.2 整型数据二进制常量的形式是以字母B开头,后跟用对撇号或括号括起来的数字串,而且每 个数字不是。就是1。例如,B,10101101,、B(1011101).进制常量的形式是以字母开头,后跟用对撇号或括号括起来的数字串,而且每 个数字是0到7之间的个数字。例如,0453,、0(376)。
43、十六进制常量的形式是以字母Z开头,后跟用对撇号或括号括起来的数字串,而且 每个数字是0到9或字母A到F之间的个。例如,Z,FFA9 B(9B45)。例5.1求Fibonacci数列前30项之和。Fibonacci数列的递推公式是:Fo=O艮=1Fi=Fi-1 + Fi-25.3 实型数据一般形式为:有效数E指数类别参数REAL (KIND =类别参数值),属性列表:变量列表单精度用REAL(4)定义,双精度用REAL(8)或DOUBLE PRECISION定义。缺省的类 别值为4,即为单精度。下面是些变量说明:REAL:M12,AREA,LENREAL(4): DX,DY 或 REAL*4 :
44、 DX,DYREAL(8): D_PRE,X 或 REAL*8 : D_PRE,X 或 DOUBLE PRECISION : D_PRE,X例5.2利用双精度按下面近似公式求皿。+包+)(-1x1): 直到最后一项的绝对值小于10内为止。In1(x + Vi +*2 )=1 x3 1-3 =x12 32-4 52-4-6 75.4 复型数据5.4.1 复型常量5.4.2 复型变量用于说明复型变量的关键字是COMPLEX。其变量说明的基本格式为: COMPLEX (KIND =类别值),属性列表:变量列表5.4.3 复型数据应用举例例5.3求一元二次方程Ax2+Bx+C=0的根。我们可以用复数进行运算例5.4有一交流电路,如图5.1所示。假设电压V = 220V, r)= 10Q, Lo= 103H, =100 Q, C, = lOOu F, r2=50Q , L2= 10-2H, C2 = 200 u F 求(1)等效电阻Z。(2)流过r,的交流电流I,流过的交流电流,以及流过r2的交流电流12。图5.1 交流电路示意图例5.5有一线段AB, A的坐标为(1, 1), B的 坐标为(4.5, 4.5),如图5.2所示。求AB的长度, 以及黄金分隔点C的坐标。黄金分割点在线段的 0.618 处。分析: