- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
函数调用函数原型
第5章 函数-1 内容提要 函数定义、函数调用、函数原型、函数返回值 难点:函数的参数传递与返回值 程序调试 代码风格 变量的作用域与存储类型 模块化程序设计 Skill: 用函数编程求解问题的能力 程序排错与调试的能力 数学中的函数 程序设计中的函数不局限于计算 计算类,如打印阶乘表的程序…… 判断推理类,如排序、查找…… 程序设计的艺术 “事无巨细”,“事必躬亲” 管理学的观点是极其排斥这种做法的,认为工作必须分工,各司其职 其中的思想,在程序设计里也适用 分而治之(Divide and Conquer,Wirth, 1971) 函数把较大的任务分解成若干个较小的任务,并提炼出公用任务 程序设计的艺术 信息隐藏(Information Hiding, Parnas, 1972) 设计得当的函数可以把具体操作细节对程序中不需要知道它们的那些部分隐藏掉,从而使整个程序结构清楚 使用函数时,不用知道这个函数内部是如何运作的,只按照我们的需要和它的参数形式调用它即可 函数是C语言中模块化编程的最小单位 可以把每个函数看作一个模块 如把编程比做制造一台机器,函数就好比其零部件 可将这些“零部件”单独设计、调试、测试好,用时拿出来装配,再总体调试。 这些“零部件”可以是自己设计制造/别人设计制造/现成的标准产品 例5.1a 计算两个整数的平均数 /* 函数功能: 计算平均数 函数入口参数: 整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值: 平均数 */ int Average(int x, int y) { int result; result = (x + y) / 2; return result; } 函数调用(Function call) 函数名(表达式1, 表达式2, ……); 调用函数时,提供的表达式叫实际参数(argument) 有返回值时 放到一个数值表达式中 c = max(a,b); 作为另一个函数调用的参数 c = max(max(a,b),c); printf(%d\n, max(a,b)); 无返回值时 函数调用表达式 display(a,b); 函数参数传递 从实参到形参是单向值传递 形参值的改变不会影响对应的实参 实参和形参必须匹配 数目一致 类型一一对应(会发生自动类型转换) 递归(Recursion) 函数直接或间接调用自己为递归 unsigned long func(unsigned int n) { if (n == 0) return 1; else return n * func(n-1); } 递归与迭代 迭代即循环方法来编写的阶乘函数 unsigned long factorial(unsigned int n) { unsigned long fact = 1 ; unsigned int i ; for (i = 1; i = n ; i++) fact *= i ; return fact ; } 递归程序遵循了数学中对阶乘的定义 因此递归方法编写程序具有更清晰、可读性更好的优点 递归与迭代 优点: 从编程角度来看,比较直观、精炼,逻辑清楚 符合人的思维习惯,逼近数学公式的表示 尤其适合非数值计算领域 hanoi塔,骑士游历、八皇后问题(回溯法) 缺点: 增加了函数调用的开销,每次调用都需要进行参数传递、现场保护等 从程序运行效率来看,大量重复计算,时空效率低 应尽量用迭代形式替代递归形式 函数原型(Function prototype) 在调用一个函数之前 要先对其返回值类型、函数名和参数进行声明(declaration) 函数声明,也称函数原型 有助于编译器进行类型检查 不对函数进行声明是非常危险的 例5.1b 使用了Average函数的main() #include stdio.h int Average(int x, int y); main() { int a = 12; int b = 24; int ave; ave = Average(a, b); printf(Average of %d and %d is %d.\n, a, b, ave); } 例5.1 #include stdio.h /* 函数功能: 计算平均数 函数入口参数: 整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值: 平均数 */ in
原创力文档


文档评论(0)