函数与指针c省公共课一等奖全国赛课获奖课件.pptx
《函数与指针c省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《函数与指针c省公共课一等奖全国赛课获奖课件.pptx(42页珍藏版)》请在咨信网上搜索。
1、C+C+程序程序设计设计教教程程第第7章章 函数与指针函数与指针7.1 7.1 递归递归函数函数函数函数7.2 7.2 函数重函数重函数重函数重载载7.3 7.3 指指指指针针和函数和函数和函数和函数7.4 7.4 带带参数参数参数参数main()main()函数函数函数函数7.5 7.5 内内内内联联函数函数函数函数7.6 7.6 无参函数无参函数无参函数无参函数7.7 void7.7 void和和和和constconst类类型指型指型指型指针针第1页C+C+程序程序设计设计教教程程7.1 递归函数递归函数1 1、递归调递归调用用用用一个函数自己调用自己,这种调用称为递归调用。一个函数自己调
2、用自己,这种调用称为递归调用。2 2、递归调递归调用方式用方式用方式用方式(1 1)直接调用其本身,称为直接递归调用)直接调用其本身,称为直接递归调用(2 2)经过其它函数间接地调用,称为间接递归调用)经过其它函数间接地调用,称为间接递归调用3 3、一个、一个、一个、一个问题问题是否能是否能是否能是否能够转换为递归够转换为递归来来来来处处理必理必理必理必须满须满足以下条件:足以下条件:足以下条件:足以下条件:(1 1)必须包含一个或各种)必须包含一个或各种非递归非递归基本形式基本形式;(2 2)普通形式普通形式必须能最终转换到必须能最终转换到基本形式基本形式;(3 3)由)由基本形式基本形式来
3、结束递归。(不会造成死循环)来结束递归。(不会造成死循环)注意:注意:注意:注意:递归递归程序程序程序程序结结构清楚、构清楚、构清楚、构清楚、简单简单、轻轻易易易易阅读阅读和了解。和了解。和了解。和了解。不不不不过递归调过递归调用在用在用在用在堆堆堆堆栈栈中中中中暂时暂时占据存放区域是占据存放区域是占据存放区域是占据存放区域是较较多,在多,在多,在多,在实际实际运行运行运行运行时递归调时递归调用用用用时间时间效率效率效率效率较较差。差。差。差。许许多多多多问题问题能能能能够够用用用用递归递归方法求解,也能方法求解,也能方法求解,也能方法求解,也能够够用普通循用普通循用普通循用普通循环结环结构求
4、解。构求解。构求解。构求解。第2页C+C+程序程序设计设计教教程程例例7-1 采取递归算法求阶乘采取递归算法求阶乘n!int int fac(int n)fac(int n)if(n0)if(n1n1时,时,就需要借助另外一个针来移动。就需要借助另外一个针来移动。将将n n片金片由片金片由A A移到移到C C上能够分解为以下几个上能够分解为以下几个步骤:步骤:(1)(1)将将A A上上n n 1 1片金片片金片借助借助C C针移到针移到B B针上针上;(2)(2)把把A A针上剩下一片金片由针上剩下一片金片由A A针移到针移到C C针上针上;(3)(3)最终将剩下最终将剩下n n 1 1个金片
5、个金片借助借助A A针由针由B B针移到针移到C C针上针上。步骤步骤(1)(1)和和(3)(3)与整个任务类似,但包括金片只有与整个任务类似,但包括金片只有n n 1 1个了。个了。这是一个经典递归算法。这是一个经典递归算法。用字符用字符A,B,CA,B,C表示表示3 3根针根针第4页C+C+程序程序设计设计教教程程第5页C+C+程序程序设计设计教教程程例例8-2 梵塔梵塔(hanoi塔塔)问题问题#include#include using namespace std;using namespace std;const int N=3;const int N=3;/考查当金片数为考查当金片
6、数为3 3个时情况个时情况/函数函数move()move():将金片由一根针移到另一根针上:将金片由一根针移到另一根针上void move(char from,char to)void move(char from,char to)cout From from to to endl;cout From from to to endl;/函数函数 hanoi()hanoi():将:将n n片金片由片金片由p1p1借助借助p2p2移到移到p3p3上上void void hanoi(int n,char p1,char p2,char p3)hanoi(int n,char p1,char p2,c
7、har p3)if(n=1)move(p1,p3);if(n=1)move(p1,p3);else else hanoi(n-1,p1,p3,p2);hanoi(n-1,p1,p3,p2);move(p1,p3);move(p1,p3);hanoi(n-1,p2,p1,p3);hanoi(n-1,p2,p1,p3);第6页C+C+程序程序设计设计教教程程/测试主函数测试主函数测试主函数测试主函数int main()int main()hanoi(N,A,B,C);hanoi(N,A,B,C);return 0;return 0;第7页C+C+程序程序设计设计教教程程7.2 函数重载函数重载函数
8、重函数重函数重函数重载载一组一组参数参数参数参数和和返回值不一样返回值不一样函数共用函数共用同一个函数名同一个函数名。函数重函数重函数重函数重载载:a)a)使一个函数名含有各种功效,即含有使一个函数名含有各种功效,即含有使一个函数名含有各种功效,即含有使一个函数名含有各种功效,即含有“各种形各种形各种形各种形态态”,称,称,称,称这这种形种形种形种形态为态为多多多多态态性(性(性(性(面向面向面向面向对对象主要特征象主要特征象主要特征象主要特征)。)。)。)。b)b)面向面向面向面向对对象理象理象理象理论论中中中中类类结结构函数构函数构函数构函数需要重需要重需要重需要重载载机制机制机制机制当某
9、个函数中当某个函数中当某个函数中当某个函数中调调用到重用到重用到重用到重载载函数函数函数函数时时,编译编译器会依据参数不一器会依据参数不一器会依据参数不一器会依据参数不一样样(包含(包含(包含(包含类类型、型、型、型、个数和次序)去个数和次序)去个数和次序)去个数和次序)去对应对应地地地地调调用用用用对应对应函数。只有返回函数。只有返回函数。只有返回函数。只有返回值类值类型不一型不一型不一型不一样样几个函数几个函数几个函数几个函数不能重不能重不能重不能重载载!匹配匹配匹配匹配过过程以下:程以下:程以下:程以下:1 1)假如有)假如有)假如有)假如有严严格匹配函数,就格匹配函数,就格匹配函数,就
10、格匹配函数,就调调用用用用该该函数;函数;函数;函数;2 2)参数内部)参数内部)参数内部)参数内部转换转换后假如匹配,后假如匹配,后假如匹配,后假如匹配,调调用用用用该该函数;函数;函数;函数;3 3)经过经过用用用用户户定定定定义转换寻义转换寻求匹配。求匹配。求匹配。求匹配。第8页C+C+程序程序设计设计教教程程例例7-3 重载绝对值函数重载绝对值函数#include#include using namespace std;using namespace std;int abs(int x)int abs(int x)return x=0?x:-x;return x=0?x:-x;doub
11、le abs(double x)double abs(double x)return x=0?x:-x;return x=0?x:-x;long abs(long x)long abs(long x)return x=0?x:-x;return x=0?x:-x;第9页C+C+程序程序设计设计教教程程int main()int main()int x1=1;int x1=1;double x2=-2.5;double x2=-2.5;long x3=3L;long x3=3L;cout|x1|=cout|x1|=absabs(x1)endl;(x1)endl;cout|x2|=cout|x2|
12、=absabs(x2)endl;(x2)endl;cout|x3|=cout|x3|=absabs(x3)endl;(x3)endl;return 0;return 0;第10页C+C+程序程序设计设计教教程程7.3 指针和函数指针和函数一一一一.指指指指针针作作作作为为函数参数函数参数函数参数函数参数二二二二.返回指返回指返回指返回指针针函数函数函数函数三三三三.指向函数指指向函数指指向函数指指向函数指针针第11页C+C+程序程序设计设计教教程程一一.指针作为函数参数指针作为函数参数函数参数不但能函数参数不但能函数参数不但能函数参数不但能够够是基本数据是基本数据是基本数据是基本数据类类型型型
13、型变变量、量、量、量、对对象名、数象名、数象名、数象名、数组组名或函数名,名或函数名,名或函数名,名或函数名,而且能而且能而且能而且能够够是是是是指指指指针针。当以指当以指当以指当以指针针作作作作为为形参形参形参形参时时,在函数,在函数,在函数,在函数调调用用用用过过程中程中程中程中实实参将参将参将参将地址地址地址地址值值传递给传递给形参,形参,形参,形参,经过经过使使使使实实参加形参指参加形参指参加形参指参加形参指针针指向指向指向指向共同内存空共同内存空共同内存空共同内存空间间,对对形参指形参指形参指形参指针针所指所指所指所指变变量量量量值值改改改改变变也也也也一一一一样样影响影响影响影响着
14、着着着实实参指参指参指参指针针所指向所指向所指向所指向变变量量量量值值,到达了参数双向,到达了参数双向,到达了参数双向,到达了参数双向传递传递目目目目标标第12页C+C+程序程序设计设计教教程程二二.返回指针函数返回指针函数函数返回函数返回函数返回函数返回值值也能也能也能也能够够是一个地址是一个地址是一个地址是一个地址(如如如如变变量、数量、数量、数量、数组组和函数地址,指和函数地址,指和函数地址,指和函数地址,指针变针变量量量量值值等等等等)。在在在在说说明返回明返回明返回明返回值为值为地址地址地址地址函数函数函数函数时时,要使用,要使用,要使用,要使用指指指指针类针类型型型型说说明符明符明
15、符明符。比如:比如:比如:比如:/查找字符查找字符查找字符查找字符c c,返回字符,返回字符,返回字符,返回字符c c地址地址地址地址 char*strchr(char*string,int c);char*strchr(char*string,int c);/在在在在string1string1中中中中查查找子字符串找子字符串找子字符串找子字符串string2string2,返回,返回,返回,返回string2string2地址地址地址地址 char*strstr(char*string1,char*string2);char*strstr(char*string1,char*string2
16、);第13页C+C+程序程序设计设计教教程程例例7-4 将月份数值转换为对应英文名称将月份数值转换为对应英文名称#include#include char*month_name(int n)char*month_name(int n)static char*month=static char*month=/字符型指针数组字符型指针数组字符型指针数组字符型指针数组 Illegal month,January,February,Illegal month,January,February,March,April,May,June,July,March,April,May,June,July,Aug
17、ust,September,October,August,September,October,November,DecemberNovember,December ;/monthi/monthi指向第指向第指向第指向第i i个字符串个字符串个字符串个字符串 return return(n=1&n=1&n=12)?monthn:month0;void main()void main()coutendl;coutendl;coutmonth_name(3);coutmonth_name(3);coutendl coutendl;第14页C+C+程序程序设计设计教教程程三三.指向函数指针指向函数指针
18、函数代函数代函数代函数代码码在内存中占有一片存放区域在内存中占有一片存放区域在内存中占有一片存放区域在内存中占有一片存放区域,第一个代,第一个代,第一个代,第一个代码码所在内存地址称所在内存地址称所在内存地址称所在内存地址称为为首首首首地址。地址。地址。地址。首地址是函数入口地址首地址是函数入口地址首地址是函数入口地址首地址是函数入口地址。主函数在。主函数在。主函数在。主函数在调调用子函数用子函数用子函数用子函数时时,就是,就是,就是,就是让让程序程序程序程序转转移到函数入口地址开始移到函数入口地址开始移到函数入口地址开始移到函数入口地址开始执执行。行。行。行。指向函数指指向函数指指向函数指指
19、向函数指针针:就是指就是指就是指就是指针值为该针值为该函数函数函数函数入口地址入口地址入口地址入口地址。说说明格式明格式明格式明格式为为:(*(*)()(););比如比如比如比如:intint(*p*p)();();/p/p为指向返回值为整型函数为指向返回值为整型函数指针指针floatfloat(*q*q)(float,int);(float,int);/q/q为指向返回值为浮点型函数为指向返回值为浮点型函数指针指针第15页C+C+程序程序设计设计教教程程假如将函数地址赋给一个指向函数指针变量,就能够经过该指针变量调假如将函数地址赋给一个指向函数指针变量,就能够经过该指针变量调假如将函数地址赋
20、给一个指向函数指针变量,就能够经过该指针变量调假如将函数地址赋给一个指向函数指针变量,就能够经过该指针变量调用函数。用函数。用函数。用函数。/函数名即为函数入口地址函数名即为函数入口地址,func,func为函数指针为函数指针double(*func)(double)=cos;double(*func)(double)=cos;double y,x;double y,x;x=3.14159;x=3.14159;y=(*func)(x);y=(*func)(x);第16页C+C+程序程序设计设计教教程程例例7-5 通用数值积分函数(梯形积分公式)通用数值积分函数(梯形积分公式)double in
21、tegral(double a,double b,double integral(double a,double b,double(*fun)(double),double(*fun)(double),int n)int n)double h =(b-a)/n;double h =(b-a)/n;double sum=(double sum=(*fun)(a)(*fun)(a)+(*fun)(b)(*fun)(b)/2;)/2;int i;int i;for(i=1;in;i+)for(i=1;in;i+)sum+=sum+=(*fun)(a+i*h)(*fun)(a+i*h);sum*=h;
22、sum*=h;return sum;return sum;/将被积函数调用地址传递给积分函数将被积函数调用地址传递给积分函数将被积函数调用地址传递给积分函数将被积函数调用地址传递给积分函数第17页C+C+程序程序设计设计教教程程7.4 带参数带参数main()函数函数函数原型函数原型函数原型函数原型为为:int main(int argc,char*argv)int main(int argc,char*argv)第一个整型参数第一个整型参数第一个整型参数第一个整型参数指明在以命令行方式执行本程序时所带参数个数(包含程序名本身,故指明在以命令行方式执行本程序时所带参数个数(包含程序名本身,故指
23、明在以命令行方式执行本程序时所带参数个数(包含程序名本身,故指明在以命令行方式执行本程序时所带参数个数(包含程序名本身,故argcargc值至值至值至值至少为少为少为少为1 1)第二个参数第二个参数第二个参数第二个参数为一个字符型指针数组(其中第为一个字符型指针数组(其中第为一个字符型指针数组(其中第为一个字符型指针数组(其中第1 1个下标变量个下标变量个下标变量个下标变量argv0argv0指向本程序名,接下来下标变指向本程序名,接下来下标变指向本程序名,接下来下标变指向本程序名,接下来下标变量量量量argv1argv1,argv2.argv2.等分别指向命令行传递给程序各个参数),用来存放
24、命令等分别指向命令行传递给程序各个参数),用来存放命令等分别指向命令行传递给程序各个参数),用来存放命令等分别指向命令行传递给程序各个参数),用来存放命令行中命令字及各个参数字符串。行中命令字及各个参数字符串。行中命令字及各个参数字符串。行中命令字及各个参数字符串。第18页C+C+程序程序设计设计教教程程例例7-6 带参数带参数main函数函数#include#includeint mainint main(int a,char*ar)(int a,char*ar)if(a!=2)if(a!=2)coutError!endl;coutError!endl;coutUsage:ProgramNa
25、me sbs coutUsage:ProgramName endl;return 1;return 1;coutHello,coutHello,ar1ar1.Welcome to the world.Welcome to the world of C+!endl;of C+!endl;return 0;return 0;第19页C+C+程序程序设计设计教教程程7.5 内联函数内联函数uu函数函数函数函数调调用是以降低效率用是以降低效率用是以降低效率用是以降低效率为为代价。代价。代价。代价。调调用函数用函数用函数用函数时时,需要,需要,需要,需要断点断点断点断点现场现场保保保保护护、数、数、数、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 指针 公共课 一等奖 全国 获奖 课件
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。