- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 子程序 程序的设计语言原理课件.ppt
第9章 子程序 苏松志 ssz@xmu.edu.cn 主要内容 9.1 概述 9.2 子程序的基本原理 9.3 子程序的设计问题 9.4 局部引用环境 9.5 参数传递方法 9.6 子程序名作为参数 9.7 重载子程序 9.8泛型子程序 9.9 函数的设计问题 作业(NULL) 9.1 概述 子程序 任何一个大程序均可分解为许多相互独立的小程序段,这些小程序段称为程序模块。 可以将其中重复的或者功能相同的程序模块设计成规定格式的独立程序段,这些程序段可提供给其他程序在不同的地方调用,从而可避免编制程序的重复劳动。 这种可以多次反复调用的,能完成指定操作功能的特殊程序段称为“子程序”。 相对而言就把调用子程序的程序称为“主程序”,把主程序调用子程序的过程称为“调用子程序”。 9.2 子程序的基本概念 9.2.1 子程序的性质 入口个数:1 被调执行,主调暂停; 被调结束,控制权交给主调函数; 9.2.2 子程序的定义 Fortran subroutine adder(parameter) Ada procedure adder(parameter) Python def adder(parameter) C/C++ void adder(parameter) 9.2.3 参数C# C#中的param提示编译器对参数进行数组封装,可变数目的控制由编译器来完成 C#允许它的方法接受不同数目的参数,只要这些参数都具有相同的 使用param时注意: [1] param修饰的参数必须是一维数组; [2] param修饰的参数数组可以是任意类型的; [3] parma必须是参数列表的最后一个,并且只能使用一次. 【程序演示】 9.2.5 过程和函数 【程序示例:Fortran-90】 9.3 子程序的设计问题 局部变量的分配:动态 or 静态 子程序的定义能否嵌套 选择何种参数传递方式 是否对参数类型进行检查 如果子程序可以当做参数传递,可以嵌套,那么应该怎样引用被当做参数传递的子程序? 子程序能否被重载 子程序可以通用化吗? 9.4 局部引用环境 9.4.1 局部变量 子程序可以定义自己的变量,从而确定局部引用环境; 子程序内部定义的变量称为局部变量,作用域为所在的子程序体; 局部变量可以是静态的 or 栈动态的 比较分析 内存共享 历史敏感 内存分配和释放 9.4 局部引用环境 9.4.2 嵌套子程序 来源于Algol 60 (Algol 68, PASCAL, Ada); 目的:过程隐藏 一些新的语言如Javascript, Python, Ruby等也支持嵌套子程序 【思考】 比较分析嵌套子程序和C中的static inline(静态内联)函数. Java中的内部类与匿名类 9.5 参数传递方法 9.5.1 参数传递的语义模型 【程序示例C++】 caller callee 输入型 输出型 输入/出型 9.5 参数传递方法 9.5.2 参数传递的实现方式 按“值”传递 按“结果”传递 按“值-结果”传递 按“引用”传递 按“名字”传递 9.5.2 参数传递的实现方式 9.5.2.1 按“值”传递 实参将值拷贝给形参 形参相当于子程序中的局部变量 优点 实参被保护起来;若是标量,速度快; 缺点 需要为形参分配额外的存储空间,若参数很大,则存储和拷贝都很浪费时间 【程序示例C++】 9.5.2 参数传递的实现方式 9.5.2.2 按“结果”传递 按结果传递是参数传递中的输出模式; 当一个参数以结果的形式传递时,没有值传递给子程序 按值传递存在两个问题 实参冲突:实际参数的拷贝顺序决定着他们的值; 实参的地址是在调用时,还是在返回时绑定。绑定时间不同,运行结果不一样。 9.5.2 参数传递的实现方式 9.5.2.3 按“值-结果”传递 参数输入输出型的第一种实现 也称按拷贝传递; 调用时,实参的值拷贝到形参; 返回时,形参的值拷贝到实参; 需要成倍的空间来存储参数; 优点同按“引用”传递 9.5.2 参数传递的实现方式 9.5.2.4按“引用”传递 参数输入输出模型的第二种实现;仅传递数据的地址给子程序; 被调用的程序可以访问到实参的存储单元,即实参被子程序和调用程序共用; 优点 不需要额外的时间和空间来拷贝数据,高效。 缺点 间接寻址,对形参的调用相对值传递而言会比较慢; 子程序对形参的改动会影响到实参的值,可读性可靠性降低. 很多引用参数的方式会造成别名; 9.5.2 参数传递的实现方式 9.5.2.4按“引用”传递 缺点: 很多引用参数的方式会造成别名 同一个实参传递两次; 数组成员之间的冲突 一个子程序中的两个形参,一个是数组元素,一个是整个的数组
您可能关注的文档
- 第7课 汉字和 与书法 书法史.ppt
- 第8-14章 环保与可持续的发展课件.ppt
- 第8.1章 三菱PLC的特殊模块《电气控制和 与PLC系统》课件.ppt
- 第8章 IS09000质量保证标准体系与ISOl4000环境相关管理体系 食品质量安全相关管理和监督 .ppt
- 第8章 专用夹具的设计基本方法 机床夹具设计课件.ppt
- 第8章 交流异步电动机 《电工电子技术知识(上、下册)》课件.ppt
- 第8章 利用框架技术知识制作网页 《网页设计与制作实用技术知识》(第二版)电子教案.ppt
- 第8章 国际市场营与销调研 国际市场营与销(第二版)课件.ppt
- 第8章 图形相关管理员 ——对象的组织与安排 coreldraw x3 教案PPT .ppt
- 第8章 备份和 与恢复 SQL Server(第3版)课件.ppt
文档评论(0)