WL第7章-用函数实现模块化程序设计.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 用函数实现模块化程序设计;程序设计的艺术;?模块化程序设计的核心: 函数设计。 重要概念: ①把解决问题的方案设计成一个个独立的模块。 ②程序通过调用模块功能来解决问题。 ③这些模块通过函数来实现,又称为函数模块。 ④每一个函数具有独立的功能,程序通过各模块之间的协调工作完成复杂的程序功能。;数学函数(1);数学函数(2);程序设计中的函数;用函数解决问题的要点;说明: 一个源程序文件由一个或多个函数组成。 一个C程序由一个或多个源程序文件组成。 C程序的???行从main函数开始,调用其他函数后流程回到main函数,在main函数中结束整个程序运行。 所有函数都是平行的,即函数定义时是互相独立的,一个函数并不从属于另一个函数。;一、C语言中的函数;二、函数的定义;例如,编写自定义函数abs_sum(),求两个任意整数的绝对值的和。 int abs_sum(int m, int n) { if (m0) m=?m; if(n0) n=?n; return (m+n); } 或直接调用系统函数来实现: int abs_sum(int m, int n) { return (abs(m)+abs(n)); } 注意:函数abs()的声明在头文件math.h。 ;三、函数参数和函数的值;三、函数参数和函数的值;四、函数的调用;函数声明(函数原型) ?函数声明语句的形式: [返回值类型符] 函数名([形参说明表]); 如:int abs_sun(int m, int n); ; 例1:编写程序,通过调用函数int abs_sum(int a,int b),求任意两个整数的绝对值的和。;五、函数中的变量;①局部变量:在函数内部或某个控制块的内部定义的变量。 ?局部变量的作用域:函数内部。 ?作用:增强了函数模块的独立性。 ②全局变量:在函数外面定义的变量称为全局变量。 ?全局变量的作用域:从该变量定义的位置开始,直到源文件结束。 ?作用:在同一文件中,所有函数都可以引用全局变量。增强了各函数间数据的联系。;?局部变量和全局变量的作用域如图所示: ; 变量的存储类型 ?变量的存储类型指的是变量的存储属性,它说明变量占用存储空间的区域。 ?在内存中,供用户使用的存储区由程序区、静态存储区和动态存储区3部分组成。 ?变量的存储类型:auto、register、static和extern4种。 ① auto型变量存储在内存的动态存储区; ② register型变量保存在寄存器中; ③ static型和extern变量存储在静态存储器。;?局部变量的存储类型默认值为auto型。 ?全局变量的存储类型默认值为extern型。 注意: ①一般情况下,常用auto型、register型定义局部变量。 ② static型既可作为局部变量,又可作为全局变量。 作为局部变量时,局部变量的值将被保留,若定义时没有赋初值,则系统会自动为其赋0值; 作为全局变量时,其有效范围为它所在的源文件,其他源文件不能使用。 ;六、数组作为函数参数;数组元素作函参;值传递;数组名作函参;地址传递;七、函数的嵌套调用;八、函数的递归调用;求最小公倍数;变量的作用范围(1);例3:设计一个函数:long fac(int n),用来计算正整数的阶乘,编写程序进行测试。 ?算法的核心思想:对于任意正整数n,如果知道(n?1)!,则n!=n×(n?1)!。 可在函数中定义一个static型变量,用来保存每一次阶乘的计算结果。;变量的作用范围(2);函数的声明;不需声明的两种情况(1);不需声明的两种情况(2);1.按值传递;2.地址传递;形参和实参;值传递;函数的定义;对形参的说明;函数定义-----判断正误;主函数和其他函数;库函数和自定义函数;有参函数和无参函数;函数的返回值(1);函数的返回值(2);函数嵌套的形式;递归调用的形式(1);递归调用的形式(2); (1)具备递归出口。递归出口定义了递归的终止条件,当程序的执行使它得到满足时,递归执行过程便终止。有些问题的递归程序可能存在几个递归出口; (2)在不满足递归出口的情况下,根据所求解问题的性质,将原问题分解成若干子问题,这些子问题的结构与原问题的结构相同,但规模较原问题小。子问题的求解通过以一定的方式修改参数进行函数自身调用加以实现,然后将子问题的解组合成原问题的解。递归调用时,参数的修改最终必须保证递归出口得以满足。 ; 算法为: int Fact ( int n )

文档评论(0)

清风老月 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳春市惠兴图文设计有限公司
IP属地广东
统一社会信用代码/组织机构代码
91441781MA53BEWA2D

1亿VIP精品文档

相关文档