




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中山大学环境科学与工程学院中山大学环境科学与工程学院陆陆 希希九. 函数和子程序概述概述语句函数语句函数函数子程序(自定义函数)(函数子程序(自定义函数)(funcationfuncation)子例行程序(子例行程序(subroutinesubroutine)实参和虚参之间的数据传送实参和虚参之间的数据传送其它应用其它应用 概述概述使用使用顺序结构、选择结构和循环结构顺序结构、选择结构和循环结构可设计和编写一可设计和编写一些比较复杂的程序;使用函数和子例行程序能编写编些比较复杂的程序;使用函数和子例行程序能编写编写结构清晰、层次分明、短小简洁的好程序,是编写写结构清晰、层次分明、短小简洁的好程
2、序,是编写高质量、高水平、高效率程序的有效手段。高质量、高水平、高效率程序的有效手段。在设计和编写程序时在设计和编写程序时, ,程序中不同部位会多次出现相同程序中不同部位会多次出现相同或相似的运算或处理过程(程序代码)或相似的运算或处理过程(程序代码)例如:求五边形例如:求五边形ABCDEABCDE的面积问题的面积问题, ,如如图所图所示。示。 已知:五边形已知:五边形5 5条边长为:条边长为:a a、b b、c c、d d、e e, ,两条对角线为:两条对角线为:f f、g g。五边形面积计算问题变为。五边形面积计算问题变为3 3个三角形面积计算问题个三角形面积计算问题,3,3个个三角形面积
3、三角形面积area1area1、area2area2、area3area3之和就是五边形面积之和就是五边形面积areaarea。 三角形面积三角形面积A A求解公式:三边长为求解公式:三边长为x,y,zx,y,z。)xp)(yp)(xp(pA2/ )zyx(p A AB BC CD DE Ea ab bc cd de ef fg garea1area1area2area2area3area3如情况如情况1 1:一般方法求解一般方法求解函数方法求解函数方法求解如如情况情况2 2:问题一问题一:某房地产公司买下一块呈三角形形状的地盘准备盖住宅:某房地产公司买下一块呈三角形形状的地盘准备盖住宅小区小
4、区, ,地价为每平方米地价为每平方米10001000元元, ,求这块地的总价。求这块地的总价。 求解问题的核心是计算三角形面积。求解问题的核心是计算三角形面积。问题二问题二:某单位有一个呈三棱台形状的水箱:某单位有一个呈三棱台形状的水箱, ,平均每天消耗平均每天消耗2 2水箱水箱水水, ,水价为每立方米水价为每立方米8 8角钱角钱, ,计算每天需支付的水费。计算每天需支付的水费。 求解问题的核心是计算三角形面积。求解问题的核心是计算三角形面积。用一般方法求解:用一般方法求解:用函数方法求解两问题:用函数方法求解两问题:对于比较复杂的问题对于比较复杂的问题, ,设计和编写程序需要采用科学的程设计
5、和编写程序需要采用科学的程序设计方法。模块化和结构化程序设计方法是常用的程序设计方法。模块化和结构化程序设计方法是常用的程序设计方法序设计方法, ,使用这些方法可大大降低问题的复杂性使用这些方法可大大降低问题的复杂性, ,使使复杂问题的求解变得相对容易。使用函数和子程序可使复杂问题的求解变得相对容易。使用函数和子程序可使用模块化和结构化程序设计方法设计和编写大型、复杂、用模块化和结构化程序设计方法设计和编写大型、复杂、高质量程序。高质量程序。对复杂问题逐层进行任务分解对复杂问题逐层进行任务分解, ,得到问题分层结构图。根得到问题分层结构图。根据分层结构图据分层结构图, , 逐层设计和编写程序。
6、最顶层问题用主逐层设计和编写程序。最顶层问题用主程序实现程序实现, ,其余层子问题用函数或子例行程序实现其余层子问题用函数或子例行程序实现, ,最后最后将主程序和若干函数或子例行程序组装成完整的可运行将主程序和若干函数或子例行程序组装成完整的可运行程序。程序。设计和编写主程序时设计和编写主程序时, ,可假定下一层子问题已经通过函数可假定下一层子问题已经通过函数或子程序实现或子程序实现, ,暂不考虑其具体实现内容暂不考虑其具体实现内容如如情情况况3 3:输入一批测试数据输入一批测试数据(30(30个个),),对其排序对其排序, ,输出排序结果数据。输出排序结果数据。 一一般般方方法法求求解:解:
7、结构化程序设计方法及求解:结构化程序设计方法及求解:问题:将测试数据排序并输出问题:将测试数据排序并输出子问题:排序子问题:排序子问题:输入子问题:输入子问题:输出子问题:输出自自顶顶向向下下自自底底向向上上任务分解及分层结构图任务分解及分层结构图 语句函数语句函数 在求解实际问题时在求解实际问题时, ,特别是在求解有关科学与工程数值特别是在求解有关科学与工程数值计算问题时计算问题时, ,常常会遇到计算一些数学表达式常常会遇到计算一些数学表达式, ,如:如: 这些数学表达式在程序中多次出现这些数学表达式在程序中多次出现, ,需要重复书写它们需要重复书写它们, ,不但浪费了宝贵的时间和精力不但浪
8、费了宝贵的时间和精力, ,而且也容易出错。任何数学而且也容易出错。任何数学表达式实际上都可表示成一元、二元或多元函数关系表达式实际上都可表示成一元、二元或多元函数关系, ,即即F(xF(x1 1,x,x2 2, ,x,xn n) ), ,这些函数关系如果没有对应的标准函数这些函数关系如果没有对应的标准函数, ,则则需要用户设法定义新的函数来实现它们。需要用户设法定义新的函数来实现它们。 FORTRAN 90FORTRAN 90提供了语句函数定义功能来定义一些简单的提供了语句函数定义功能来定义一些简单的函数函数, ,用于实现有关的函数关系。用户自定义语句函数其使用于实现有关的函数关系。用户自定义
9、语句函数其使用方法与标准函数相同用方法与标准函数相同, ,可以作为操作数在表达式中调用。可以作为操作数在表达式中调用。2y2x 2xx212x 1x22x )cp)(bp)(ap(p sinab21 cosab22b2a 例例951951已知角度已知角度A A3636 4343 2727 ,B,B1515 2424 ,C,C8 8 1616 5454 , ,计算计算 : S Scoscos2 2A-4sinBA-4sinBtgCtgC角度角度D Dn nx x1 1 x x2 2 x x3 3 的弧度转换公式的弧度转换公式: : )3600 x60 xx(180D321n 语句函数定义:语句函
10、数定义: 一般形式为:一般形式为:F(x1,x2,F(x1,x2,xn),xn) F F为函数名,为函数名,x x1 1,x,x2 2, ,x,xn n为虚拟参数为虚拟参数( (或称形式参数或哑元或称形式参数或哑元) )。 要求:要求:不能重名不能重名, ,只能为普通变量名。类型可用隐含规则定义只能为普通变量名。类型可用隐含规则定义, ,也可用类型声明语句定义也可用类型声明语句定义, ,但须放在该语句函数定义语句之前。但须放在该语句函数定义语句之前。 下面程序通过语句函数实现下面程序通过语句函数实现 例例951951问题。问题。 调用一般形式为:调用一般形式为: () 说明:说明:l 同语句函
11、数定义语句中的语句函数名相同。同语句函数定义语句中的语句函数名相同。l 为实在参数或实参为实在参数或实参, ,其个数、次序和类型应其个数、次序和类型应与定义语句中形式参数一致。实在参数之间用逗号分隔。与定义语句中形式参数一致。实在参数之间用逗号分隔。l实参可是常数、变量、数组元素、函数名、表达式。实参可是常数、变量、数组元素、函数名、表达式。 当调用语句函数时当调用语句函数时, ,其执行过程如下:其执行过程如下:l首先计算实参表达式的值首先计算实参表达式的值; ;l将实参值赋予对应的形参将实参值赋予对应的形参, ,即形实参结合即形实参结合l用被赋值的形参对语句函数定义语句中的表达式进行求值用被
12、赋值的形参对语句函数定义语句中的表达式进行求值运算运算; ;l将运算后的表达式值转换为函数名类型将运算后的表达式值转换为函数名类型, ,并将其按函数值并将其按函数值返回到调用位置。返回到调用位置。 使用语句函数的一些规定:使用语句函数的一些规定: l一个语句函数只能在一行内定义。如果太长一个语句函数只能在一行内定义。如果太长, ,可续行书写。可续行书写。l语句函数只有一个函数返回值。语句函数只有一个函数返回值。l定义语句函数定义语句函数, ,右端表达式中可调用已定义语句函数或标准函数右端表达式中可调用已定义语句函数或标准函数, ,但不能调用该语句函数自己但不能调用该语句函数自己, ,即不能递归
13、调用。即不能递归调用。 H H(x1,x2)=x1x1,x2)=x1* *x1+x2x1+x2* *x2x2 F F(x1,x2)=SQRT(H(x1,x2)x1,x2)=SQRT(H(x1,x2)l语句函数的形式参数不允许为数组或下标变量。语句函数的形式参数不允许为数组或下标变量。 DIMENSION A(10),B(2,3)DIMENSION A(10),B(2,3) F1(x,y)=x+A(1)+y-B(1,2)F1(x,y)=x+A(1)+y-B(1,2) ! !表达式中可以引用数组元素表达式中可以引用数组元素 F(C)=C+100F(C)=C+100l语句函数的虚参应该是变量名,不能
14、是常量、表达式或数组元素语句函数的虚参应该是变量名,不能是常量、表达式或数组元素l语句函数可无语句函数可无虚虚参参, ,称为无参函数称为无参函数, ,圆括号不能省略圆括号不能省略, ,即:即:F()F()。 l语句函数定义语句是非执行语句,应该放在所有可执行语句之前语句函数定义语句是非执行语句,应该放在所有可执行语句之前和有关的类型说明语句之后和有关的类型说明语句之后l语句函数只在其所在的程序单位中才有意义。语句函数只在其所在的程序单位中才有意义。 例例953953计算空间一点计算空间一点P(x,y,z)P(x,y,z)的方向弦的方向弦, ,其计算公式如下:其计算公式如下:其中其中:、为点为点
15、P P到原点直线与坐标轴到原点直线与坐标轴x x、y y、z z的夹角。的夹角。222zyxxcos 222zyxycos 222zyxzcos 例例954954已知已知=30=30 ,=38,=38 ,=58,=58 , ,编写程序求:编写程序求:)cos1sinsin1cos1sinsin1(cos1sinsin1y222 自定义函数自定义函数 (funcation)函数:内部函数函数:内部函数 语句函数:只能是由一个语句定义的函数,即,必须用一个表达语句函数:只能是由一个语句定义的函数,即,必须用一个表达 式来表示出函数关系。式来表示出函数关系。 如:如: f(x)=xf(x)=x5 5
16、+x+x3 3+2x-7+2x-7 下列函数关系则无法用一个语句函数来表示:下列函数关系则无法用一个语句函数来表示: +1 (x0) y = 0 (x=0) -1 (x0)函数子程序,或称外部函数:函数子程序,或称外部函数:可以用一个函数子程序来定义之:可以用一个函数子程序来定义之:函数子程序的定义函数子程序的定义: 类型说明类型说明 FUNCTION函数函数名名(虚参列表)(虚参列表) . END FUNCTION函数函数名名其中其中函数名的取法函数名的取法与变量名相同。与变量名相同。函数名既是某个函数的名字又代表该函数的函数值,所以函数名既是某个函数的名字又代表该函数的函数值,所以必须有类
17、型说明必须有类型说明。也可以在也可以在FUNCTION语句后进行说明:语句后进行说明: FUNCTION 函数名函数名 (虚拟参数,(虚拟参数,) 类型说明类型说明 函数名函数名虚拟参数之间用逗号隔开,虚拟参数之间用逗号隔开,虚参可以是变量名、数组名、子程序名虚参可以是变量名、数组名、子程序名没有虚参时,一对括号必不可少没有虚参时,一对括号必不可少FUNCTIONEND 其中语句的排列和主程序相同:其中语句的排列和主程序相同: 说明语句在前,执行语句在后说明语句在前,执行语句在后说明语句说明语句包括对虚参变量和虚参数组的说明,也包括对函数中所用变量、包括对虚参变量和虚参数组的说明,也包括对函数
18、中所用变量、数组和符号常量的说明。数组和符号常量的说明。执行语句执行语句用来完成对函数值的运算,在程序的执行流程返回调用单位之用来完成对函数值的运算,在程序的执行流程返回调用单位之前,必须有求得到函数值赋给函数名。给函数赋值时注意:前,必须有求得到函数值赋给函数名。给函数赋值时注意: 函数名函数名 = 表达式表达式函数中当程序执行的流程遇到函数中当程序执行的流程遇到RETURN语句或语句或END语句时,返回调用单语句时,返回调用单位并由函数名把函数值带回位并由函数名把函数值带回。RETURN语句只允许出现在子程序中,其语句只允许出现在子程序中,其与与END的区别在于:子程序中可以有任意多个的区
19、别在于:子程序中可以有任意多个RETRUN语句,可以根据语句,可以根据需要把它放在合适的语句行,程序执行的流程遇到它时就立即返回调用需要把它放在合适的语句行,程序执行的流程遇到它时就立即返回调用单位;而子程序中的单位;而子程序中的END语句只能有一条,而且必须放在子程序的最后,语句只能有一条,而且必须放在子程序的最后,在编译时作为标志通知编译程序:在编译时作为标志通知编译程序:“本程序单位到此结束本程序单位到此结束”,在执行时,在执行时起起RETURN语句的作用。语句的作用。函数是一个独立的编译单位,所以函数体内所用的变量、语句函数是一个独立的编译单位,所以函数体内所用的变量、语句标号等的作用
20、范围仅仅局限于本程序单位内,除了函数名和虚标号等的作用范围仅仅局限于本程序单位内,除了函数名和虚参以外与其它程序单位没有任何联系。所以编写函数子程序时参以外与其它程序单位没有任何联系。所以编写函数子程序时可以不必顾及所用标号可以不必顾及所用标号/名字是否与其他程序单位相重。具有很名字是否与其他程序单位相重。具有很大的独立性和灵活性。大的独立性和灵活性。例:编写一个求实型数绝对值得函数,并由主程序来调用它。例:编写一个求实型数绝对值得函数,并由主程序来调用它。 函数子程序的调用函数子程序的调用与调用内在函数形式一样,在主调程序任何处,作为表达与调用内在函数形式一样,在主调程序任何处,作为表达式的
21、一项写下:式的一项写下:函数名函数名(实在参数,实在参数,) 或或 函数名()函数名() 无参数的情况无参数的情况可以在任何允许函数值出现的表达式中调用函数,也只能在表达式中可以在任何允许函数值出现的表达式中调用函数,也只能在表达式中对函数进行调用对函数进行调用在主程序或子程序中调用一个外部函数时,应在他们的在主程序或子程序中调用一个外部函数时,应在他们的说明部分对函说明部分对函数名的数据类型加以说明数名的数据类型加以说明。必须在必须在调用程序中调用程序中使外部函数名与使外部函数名与函数子程序定义中函数子程序定义中函数名的类型说函数名的类型说明完全一致。明完全一致。实参与形参按照位置一一对应,
22、个数必须相同,类型完全一致实参与形参按照位置一一对应,个数必须相同,类型完全一致练习1: 编写求 的函数子程序,调用此函数求以下表达式的值:练习2:已知 由程序输入X的值,求出sin h(X) 我们已经知道ex可用以下级数近似表示:)9.21 ()8.21 ()6.21 ()54321 ()4321 () 321 (ynii12sinxxeehx0432!.! 4! 3! 21nnxnxxxxxe求解二元一次方程组求解二元一次方程组。 计算:计算:x=cx=cl lb b2 2c c2 2b b1 1 y=ay=al lc c2 2a a2 2c c1 1 = =a al lb b2 2a a2 2b b2 2 编写内部函数编写内部函数deldel求解:求解:x x,y y,参数,参数I=1I=1,求解,求解x x,I=2I=2,求解,求解y y 已知:二元一次方程组。已知:二元一次方程组。 输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《汉语阅读教程》课件-2教学课件:汉语阅读教程L2
- 2025年委托物业管理合同示范文本格式样本协议
- 2025网签租赁合同需要注意哪些事项
- 肌无力危象的临床护理
- 动脉瘤的临床护理
- 紫癜性肾炎的临床护理
- 2025股权转让合同补充协议书范本
- 2025年一级建造师之一建公路工程实务题库与答案
- 解析表达特点洞悉观察秘妙-《蟋蟀的住宅》教学设计
- 乳头状鳞状细胞癌的临床护理
- 完整版高中古诗文必背72篇【原文+注音+翻译】
- 实际控制人股东会决议
- 礼赞白衣天使512国际护士节护士表彰大会PPT课件(带内容)
- 竞争性谈判相关表格模板
- 中考物理“极值”与“取值范围”问题专题训练
- 2009年安徽省中考化学试卷【含答案可编辑】
- 越南工业到2025年发展战略及到2035发展展望(提到钢铁)
- 电梯曳引机减速箱的设计、建模与运动仿真分析机械
- PV-1200-(中文版)气候交变稳定性试验(共4页)
- 淮北市基准地价
- 《给教师的100条建议》电子书
评论
0/150
提交评论