凯里学院信息工程学院高级程序设计语言课件第八章 函数.ppt

凯里学院信息工程学院高级程序设计语言课件第八章 函数.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块。 特点: 各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩充 开发方法: 自上向下,逐步分解,分而治之 函数分类 从用户角度 标准函数(库函数):由系统提供 用户自定义函数 从函数形式 无参函数:一般用来指定一组操作,可以带回或不带回函数值,但一般不带回函数值。 有参函数 一般定义格式 8.3 函数参数和函数的值 形式参数和实际参数 1、形式参数(形参):函数定义时设定的参数。 下例中,函数头int max(int x,int y)中x,y就是形参,它们的类型都是整型。? 2、实际参数(实参):调用函数时所使用的实际的参数。 下例中,主函数中调用max函数的语句是: nmax=max(a,b); 其中a,b就是实参,它们的类型都是整型。 参数传递方式 值传递方式 方式:函数调用时,为形参分配单元并将实参的值复制到形参中;调用结束时,形参单元被释放,实参单元仍保留并维持原值 特点: 形参与实参占用不同的内存单元 单向传递 关于形参和实参的说明 (1) 只用在发生函数调用时,形参才被分配内存单元.在调用结束后,形参所占的内存单元也被释放; (2)实参可以是常量,变量或表达式,如: max(3,a+b) 但要求它们有确定的值.在调用时将实参的值赋给形参. (3)在被定义的函数中,必须指定形参的类型. (4)实参和形参的类型应相同或赋值兼容,否则会出错; (5)C语言规定,实参对形参变量的数据传递是“值传递”,即单向传递,只能由实参传给形参,而不能由形参传回来. 函数的返回值 返回语句形式: return(表达式); 或 return 表达式; 或 return; 功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数 说明: 函数中可有多个return语句,但每次只能有一条被执行。 若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换---函数调用转换void型函数 调用形式 函数名(实参表); 说明: 实参与形参个数相等,类型一致,按顺序一一对应 实参表求值顺序,因系统而定(Turbo C 自右向左) 对被调用函数要求: 必须是已存在的函数 库函数: #include *.h 用户自定义函数: 函数说明 函数说明 一般形式:函数类型 函数名(形参类型 形参名1,…. ); 或 函数类型 函数名(形参类型 ,….. ); 作用:告诉编译器函数类型、参数个数及类型,以便检验 函数定义与函数说明不同 函数说明位置:函数内或外 下列情况下,可不作函数说明 若函数返值是char或int型,系统自动按int型处理 被调用函数定义出现在主调函数之前 8.5 函数的嵌套调用 C语言的函数定义都是互相平行、独立的。C语句不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。 下图表示的是两层嵌套,其执行过程见图。 8.6函数的递归调用 在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。C语言的特点之一就在于允许函数的递归调用。例如: int f(int x) { int y,z; z=f(y); return(2*z); } 在调用函数f 的过程中,又要调用f 函数,这是直接调用本函数.见图。 8.6函数的递归调用 在调用 f1 函数过程中要调用 f2 函数,而在调用f2函数过程中又要调用 f1 函数。 从图上可以看到,这两种递归调用都是无终止的自身调用。可以用if语句来控 制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。 8.6函数的递归调用 例8.7 有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁。问第2个人,说比 第1个人大 2岁。最后问第1个人,他说是10岁。请问第5个人多大。 显然,这是一个递归问题。每一个年龄都比其前1个人的年龄大2岁.即 8.6函数的递归调用 执行过程如下: 8.6函数的递归调用 int age(int n) /*递归函数*/ { int c; if(n==1) c=10; else c=age(n-1)+2; return(c); } main ( ) /*主函数*/ { printf(“%d”,age(5)) }

文档评论(0)

ormition + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档