- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机程序设计 顾 刚 计算机教学实验中心 第8章 函数与指针 递归函数定义与使用 函数重载定义与使用 指针和函数的关系 带参数的main()函数 什么是递归函数 如果某个函数的函数体内有调用其自身的语句,则该函数称为递归函数 int abc(float a,float b,float c) { float x,y,z; int s; …… s=abc(x,y,z); …… } 递归函数运行现象 递归函数运行有两种现象: 一种是永无休止地调用自身,形成永久运行的现象,如同“死循环” 另一种是加以控制,使函数经过有限次数的调用,程序便停止运行 永无休止运行的递归函数 有限次数地运行递归函数 采用递归函数求n! 算法分析:由阶乘的概念可以写出其递归定义 0! = 1 n! = n*(n-1)! 程 序: int fac(int n) { if(n0) // 不能求负数的阶乘 return ?1; else if(n==0) // 0的阶乘为1 return 1; else return n*fac(n-1);// n!为(n-1)!乘以n } 递归函数求N! 递归函数运行分析 求整型数组中的最大元素 设在A[I],A[I+1],A[I+2]……A[J]中寻找 可以采用递归思路寻找最大数 设函数MAX(A,I,J)能求出最大数: 如果I==J,则A[I]为最大元素,否则 A[I]与MAX(A,I+1,J)比较大小来确定 运用递归方法的条件 必须包含一种递归的一般形式 例如:N!=N*(N-1)! 例如:N个元素的最大值=第一个元素与N-1个元素最大值比较 必须包含一种以上的非递归的基本形式 0!=1或1!=1 一个元素的最大值等于本身 基本形式能够结束递归 梵塔(hanoi塔)问题 理想的移动方法 递归算法分析 如果只有1片金片时,只要直接将金片从A针移到C针上即可 当n1时,就需要借助另外一个针来移动。将n片金片由A移到C上可以分解为以下几个步骤: (1)将A上的n?1片金片借助C针移到B针上; (2)把A针上剩下的一片金片由A针移到C针上; (3)最后将剩下的n?1个金片借助A针由B针移到C针上 步骤(1)和(3)与整个任务类似,但涉及的金片只有n?1个了。这是一个典型递归算法 实现程序 函数重载 函数重载: 一组参数和返回值不同的函数共用一个函数名。 重载函数之间必须在参数的类型或个数方面有所不同。只有返回值类型不同的几个函数不能重载。 重载绝对值函数 重载寻找最大元素 指针和函数 指针作为函数的参数 返回指针的函数 指向函数的指针 指针作为函数的参数 函数的参数不仅可以是基本数据类型的变量、对象名、数组名或函数名,而且可以是指针 通过使实参与形参指针指向共同的内存空间,达到了参数双向传递的目的 或者说被调函数可以修改主调函数中的变量 应用指针将三整数排序 返回指针的函数 函数返回值类型不仅可以是int、double之类的简单类型,也可以将一个地址 (如变量、数组和函数的地址,指针变量的值等)作为函数的返回值 在说明返回值为地址的函数时,要使用指针类型说明符,例如: char *strchr(char *string, int c); 返回c字符的指针位置 char *strstr(char *string1, char *string2); 返回串2的指针位置 将月份数值转换英文名称 指向函数的指针 任何函数在内存中存放都有首地址(第一字节地址) 首地址是函数的入口地址。主函数在调用子函数时,就是让程序转移到函数的入口地址开始执行 指向函数的指针:就是指针的值为该函数的入口地址 指向函数的指针变量的说明格式为: 函数返回值类型说明符 (*指针变量名)(参数说明表); int(*p)(); // p为指向返回值为整型的函数的指针 float(*q)(float,int); // q为指向返回值为浮点型函数的指针 注意指针变量名前后的圆扩号不能少 int *p();//与函数原型混淆,二义性 float *q (float,int); //与函数原型混淆,二义性 通用数值积分函数 带参数的main() 函数原型为: int main(int argc, char *argv[]) 第一个整型参数指明在以命令行方式执行本程序时所带的参数个数(包
您可能关注的文档
- (139)韶关学院信息化建设《十二五》规划.doc
- [天涯杂谈]这是今年台湾历史高考题你能做出多少?.doc
- [线上徵文评比]高中组9月份得奖作品.doc
- ¢x8.5机立窑治理方案.doc
- 《标日》中级动词自他性.doc
- 《红楼梦林黛玉与北静王》游戏攻略.docx
- 《湖南战略性新兴产业关键共性技术发展导向目录(2015)》.doc
- 《老僧与蝎子》作文讲评.doc
- 《蒙代尔不可能三角》运用和滥用.doc
- 《四个愿望》教学设计.doc
- 某某单位2024年党建工作总结及2025年工作计划.doc
- 某某市发改委关于2024年度落实党风廉政建设工作责任制情况的报告.doc
- 某某局2024年全面从严治党和党风廉政建设工作总结.doc
- 某某区财政局2024年法治政府建设总结及2025年工作谋划.doc
- 2024年党管武装工作述职报告2篇.doc
- 2024年度国企党委书记抓基层党建工作述职报告3篇.doc
- 公司党委书记2024年述职述廉报告.docx
- 2024年度乡镇党委领导班子民主生活会(四个带头)对照检查材料.doc
- 市医疗保障局关于2024年法治政府建设工作情况的报告.docx
- 市民政局党组2024年巡察整改工作情况报告.docx
文档评论(0)