c语言程序设计谭浩强 ch6-13函数.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 Outline 函数定义 函数调用 递归函数 变量与函数 编译预处理 所谓函数的调用,是指一个函数(调用函数)暂时中断本函数的运行,转去执行另一个函数(被调函数)的过程。被调函数执行完后,返回到调用函数中断处继续执行调用函数剩余指令的过程。被调函数执行完毕后一定要返回调用函数,在函数的调用和返回两个过程中,两个函数之间发生数据的交换。 形式参数:定义函数时函数名后面括号中的变量名,用于接收从调用函数传递来的数据 实际参数:调用函数时函数名后面括号中的表达式,即在函数调用时,所传递的参数。 6.2.4 参数传递方式 (1)值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值 特点:形参与实参占用不同的内存单元单向传递 (2)地址传递 地址传递指的是调用函数时,实参将某些变量、字符串、或数组等的地址传递给形参。这样实参和形参指向同一个内存空间,在执行被调用函数的过程中,对形参所指向空间中内容的变化,能够直接影响到调用函数中对应的量。 在地址传递方式下,形参和实参可以是指针变量或数组名,实参还可以是变量的地址。 嵌套调用含义 C规定:函数定义不可嵌套,但可以嵌套调用 6.2.7 函数声明 对被调用函数要求: 必须是已存在的函数 库函数: #include *.h 用户自定义函数: 函数声明 函数声明 一般形式: 函数类型 函数名(形参类型 [形参名],….. ); 或 函数类型 函数名(形参类型,….. ); 作用:告诉编译系统函数类型、参数个数及类型,以便检验 函数定义与函数声明不同 函数声明位置:程序的数据说明部分(函数内或外) 下列情况下,可不作函数声明 若函数返值是char或int型,系统自动按int型处理 被调用函数定义出现在主调函数之前 有些系统(如Borland C++)要求函数说明指出函数返值类型和形参类型,并且对void 和 int 型函数也要进行函数声明 递归的基本原理 ①每一级函数调用都有自己的变量 ②每一次函数调用都会有一次返回 ③递归函数的执行顺序 ④递归函数必须包含可以终止递归调用的语句 递归设计的步骤: Step1:对原问题f(s)进行分析,假设合理的较小问题f(s’); Step2:假设f(s’)是可解的,在此基础上确定f(s)的解; Step3:确定一个特定情况的(如f(1)或f(0))解,作为递归出口。 练习: 分析以下程序的执行结果 #include stdio.h void updown(int); void main( ) { updown(1); } void updown(int n) { printf(“Level %d: n location %x\n”,n,n); if(n4) updown(n+1); printf(“Level %d: n location %p\n”,n,n); } Void main() { float x1,x2,f1,f2,x; do { printf(Input x1,x2:\n); scanf(%f,%f,x1,x2); f1=f(x1); f2=f(x2); }while(f1*f2=0); x=root(x1,x2); printf(A root of equation is %8.4f,x); } 嵌套调用实例2: 用弦截法求方程根 main( ) 调用函数root 输出根 x 结束 root函数 xpoint函数 调用函数xpoint 调用函数f f函数 (续) 例:函数声明举例 main() { float a,b; int c; scanf(%f,%f,a,b); c=max(a,b); printf(Max is %d\n,c); } max(float x, float y) { float z; z=xy?x:y; return(z); } int型函数可不作函数声明 (TC,Borland C++不行) float add(float x, float y) { float z; z=x+y; return(z); } main() { float a,b,c; scanf(%f,%f,a,b); c=add(a,b); printf(sum is %f,c); } 被调函数出现在主调函数 之前,不必函数声明 Void ma

文档评论(0)

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

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

1亿VIP精品文档

相关文档