收藏 分销(赏)

函数与指针c省公共课一等奖全国赛课获奖课件.pptx

上传人:a199****6536 文档编号:2924387 上传时间:2024-06-11 格式:PPTX 页数:42 大小:743.72KB
下载 相关 举报
函数与指针c省公共课一等奖全国赛课获奖课件.pptx_第1页
第1页 / 共42页
函数与指针c省公共课一等奖全国赛课获奖课件.pptx_第2页
第2页 / 共42页
函数与指针c省公共课一等奖全国赛课获奖课件.pptx_第3页
第3页 / 共42页
函数与指针c省公共课一等奖全国赛课获奖课件.pptx_第4页
第4页 / 共42页
函数与指针c省公共课一等奖全国赛课获奖课件.pptx_第5页
第5页 / 共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函数函数函数函数调调用是以降低效率用是以降低效率用是以降低效率用是以降低效率为为代价。代价。代价。代价。调调用函数用函数用函数用函数时时,需要,需要,需要,需要断点断点断点断点现场现场保保保保护护、数、数、数、

26、数据据据据进栈进栈、执执行函数体、保留返回行函数体、保留返回行函数体、保留返回行函数体、保留返回值值、恢复、恢复、恢复、恢复现场现场和断点和断点和断点和断点,开,开,开,开销销很大。很大。很大。很大。uu有函数体比有函数体比有函数体比有函数体比较简单较简单,假如,假如,假如,假如频频繁被繁被繁被繁被调调用,用,用,用,则则附加附加附加附加时间时间开开开开销销将很大。将很大。将很大。将很大。uu内内内内联联函数机制函数机制函数机制函数机制经过经过将将将将函数体代函数体代函数体代函数体代码码直接插入到函数直接插入到函数直接插入到函数直接插入到函数调调用用用用处处来来来来节约调节约调用函用函用函用函

27、数数数数时间时间开开开开销销(编译编译器直接器直接器直接器直接处处理)理)理)理)uu内内内内联联函数函数函数函数实际实际上是一个用上是一个用上是一个用上是一个用空空空空间换时间间换时间方案,其目方案,其目方案,其目方案,其目标标是是是是为为了提升函数了提升函数了提升函数了提升函数执执行效率。行效率。行效率。行效率。uu要定要定要定要定义义一个内一个内一个内一个内联联函数,只需在定函数,只需在定函数,只需在定函数,只需在定义义函数函数函数函数时时将将将将该该函数用关函数用关函数用关函数用关键键字字字字inlineinline修修修修饰饰即可即可即可即可第20页C+C+程序程序设计设计教教程程7

28、-7将例将例5-8函数函数max()改写成内联函数改写成内联函数/Example/Example 求两数中大数求两数中大数求两数中大数求两数中大数#include#include using namespace std;using namespace std;inline int max(int x,int y)inline int max(int x,int y)return xy?x:y;return xy?x:y;int main()int main()cout Please enter two integers cout a b;cin a b;cout The maximum is

29、max(a,b)endl;cout The maximum is max(a,b)endl;return 0;return 0;第21页C+C+程序程序设计设计教教程程使用内使用内使用内使用内联联函数要注意:函数要注意:函数要注意:函数要注意:1.1.除了含有循除了含有循除了含有循除了含有循环环、switchswitch分支和复分支和复分支和复分支和复杂杂嵌套嵌套嵌套嵌套ifif语语句函数外,全部函数均能句函数外,全部函数均能句函数外,全部函数均能句函数外,全部函数均能够够被被被被说说明明明明为为内内内内联联函数。函数。函数。函数。2.2.内内内内联联函数大多是小函数。函数大多是小函数。函数大

30、多是小函数。函数大多是小函数。3.3.内内内内联联函数定函数定函数定函数定义义必必必必须须出出出出现现在在在在调调用之前。用之前。用之前。用之前。4.4.内内内内联联函数函数函数函数节约节约了程序运行了程序运行了程序运行了程序运行时间时间开开开开销销,却增大了代,却增大了代,却增大了代,却增大了代码码占用内存空占用内存空占用内存空占用内存空间间开开开开销销第22页C+C+程序程序设计设计教教程程7.6 无参函数无参函数 A.A.voidvoid用于函数参数表用于函数参数表用于函数参数表用于函数参数表明确说明该函数不使用参数明确说明该函数不使用参数B.B.voidvoid说说明函数返回明函数返回

31、明函数返回明函数返回值值说明该函数不提供任何返回值说明该函数不提供任何返回值比如:比如:申明函数:申明函数:void func(void)void func(void)/既不需要参数,也不提供返回既不需要参数,也不提供返回既不需要参数,也不提供返回既不需要参数,也不提供返回 调用方式:调用方式:func()func()第23页C+C+程序程序设计设计教教程程7.7 void和和const类型指针类型指针 1 1、指向、指向、指向、指向voidvoid类类型指型指型指型指针针通用型指针通用型指针,能够指向任何类型变量。能够指向任何类型变量。能够对其赋值,不过指针参加运算之前必须能够对其赋值,不过

32、指针参加运算之前必须能够对其赋值,不过指针参加运算之前必须能够对其赋值,不过指针参加运算之前必须强制类型转换。强制类型转换。强制类型转换。强制类型转换。int x,y;int x,y;void*ptr;void*ptr;ptr=&x;/ptr=&x;/任何类型变量地址均可存入任何类型变量地址均可存入任何类型变量地址均可存入任何类型变量地址均可存入voidvoid类型指针类型指针类型指针类型指针y=*(int*)ptr);/y=*(int*)ptr);/强制类型转换强制类型转换强制类型转换强制类型转换2 2、用关、用关、用关、用关键键字字字字constconst修修修修饰饰一个指一个指一个指一个

33、指针针修饰符修饰符constconst多用于修饰函数指针或引用参数,以预防在编程中无意识地改变多用于修饰函数指针或引用参数,以预防在编程中无意识地改变其值依据其位置不一样有不一样含义。其值依据其位置不一样有不一样含义。比如比如比如比如:(1 1)const char*ptr=“Point to constant string”;const char*ptr=“Point to constant string”;/定义了一个指向常量字符串指针定义了一个指向常量字符串指针定义了一个指向常量字符串指针定义了一个指向常量字符串指针 *ptr=Q;/*ptr=Q;/非法非法 ptr+;/ptr+;/正当

34、正当 ,指针是变量,指针是变量(2 2)char*const qtr=“A constant pointer”;char*const qtr=“A constant pointer”;/定义了一个常量指针。指针是常量,指向对象是变量定义了一个常量指针。指针是常量,指向对象是变量定义了一个常量指针。指针是常量,指向对象是变量定义了一个常量指针。指针是常量,指向对象是变量 第24页C+C+程序程序设计设计教教程程程序设计举例程序设计举例例例例例7-8 7-8 改改改改进进模模模模拟拟梵塔梵塔梵塔梵塔问题递归问题递归程序,打印更多信息。程序,打印更多信息。程序,打印更多信息。程序,打印更多信息。例例

35、例例7-9 7-9 采取采取采取采取递归递归算法算法算法算法寻寻找一个整型数找一个整型数找一个整型数找一个整型数组组中最大元素。中最大元素。中最大元素。中最大元素。例例例例7-10 7-10 重重重重载载上例求最大元素函数。上例求最大元素函数。上例求最大元素函数。上例求最大元素函数。例例例例7-11 7-11 编编写一个用于在字符串中写一个用于在字符串中写一个用于在字符串中写一个用于在字符串中查查找某字符函数。找某字符函数。找某字符函数。找某字符函数。例例例例7-12 7-12 编编写一个用于三个整型写一个用于三个整型写一个用于三个整型写一个用于三个整型变变量排序程序。量排序程序。量排序程序。

36、量排序程序。第25页C+C+程序程序设计设计教教程程例7-8:改进梵塔问题模拟程序:改进梵塔问题模拟程序#include#include using namespace std;using namespace std;const intconst intN=3;N=3;/函数函数函数函数move()move():将金片由一根:将金片由一根:将金片由一根:将金片由一根针针移到另一根移到另一根移到另一根移到另一根针针上上上上void move(char from,char to)void move(char from,char to)staticstatic long no=0;long no=0

37、;/局部静局部静局部静局部静态变态变量,用于量,用于量,用于量,用于统计调统计调用本函数次数用本函数次数用本函数次数用本函数次数staticstatic int pillar3=N,0,0;int pillar3=N,0,0;/局部静局部静局部静局部静态态数数数数组组,用于,用于,用于,用于统计统计每根每根每根每根针针上金片数目上金片数目上金片数目上金片数目no+;no+;/移移移移动动金片次数加金片次数加金片次数加金片次数加1 1(pillarfrom-A)-;(pillarfrom-A)-;/from/from针针上金片数目减上金片数目减上金片数目减上金片数目减1 1(pillarto-A

38、)+;(pillarto-A)+;/to/to 针针上金片数目加上金片数目加上金片数目加上金片数目加1 1cout Step no cout Step no :From from to to;From from to to;cout ,(A:pillar0 B:pillar1 C:pillar2)endl;cout ,(A:pillar0 B:pillar1 C:pillar2)endl;/函数函数函数函数 hanoi()hanoi():将:将:将:将n n片金片由片金片由片金片由片金片由p1p1借助借助借助借助p2p2移到移到移到移到p3p3上上上上void hanoi(int n,char

39、 p1,char p2,char p3)void hanoi(int n,char p1,char p2,char p3)if(n=1)if(n=1)move(p1,p3);move(p1,p3);elseelse 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);第26页C+C+程序程序设计设计教教程程/测试用主函数测试用主函数int main()int main()cout Simulation of hanoi tower.endl

40、;cout Simulation of hanoi tower.endl;cout Step 0:(A:N B:0 C:0)cout Step 0:(A:N B:0 C:0)endl;endl;hanoi(N,A,B,C);hanoi(N,A,B,C);return 0;return 0;第27页C+C+程序程序设计设计教教程程程序运行结果:程序运行结果:第28页C+C+程序程序设计设计教教程程例例 7-9:采取递归算法寻找一个整型数组中最大元素:采取递归算法寻找一个整型数组中最大元素#include#include using namespace std;using namespace st

41、d;int int max_element(const int array,int lower,int upper)max_element(const int array,int lower,int upper)int maximum;int maximum;if(lower=upper)if(lower=upper)return arraylower;return arraylower;elseelse maximum=maximum=max_element(array,lower+1,upper)max_element(array,lower+1,upper);if(arraylower=

42、maximum)if(arraylower=maximum)return arraylower;return arraylower;elseelse return maximum;return maximum;第29页C+C+程序程序设计设计教教程程/测试递归函数主函数测试递归函数主函数int main()int main()int A=19,33,69,55,77,12,52;int A=19,33,69,55,77,12,52;coutThe maximum element of the array is:coutThe maximum element of the array is:ma

43、x_element(A,0,6)endl;max_element(A,0,6)endl;return 0;return 0;第30页C+C+程序程序设计设计教教程程程序运行结果:程序运行结果:第31页C+C+程序程序设计设计教教程程例例 7-10:重载重载采取采取递归算法递归算法寻找数组最大元素函数寻找数组最大元素函数#include#include using namespace std;using namespace std;/采取采取采取采取递归递归算法算法算法算法寻寻找整型数找整型数找整型数找整型数组组中最大元素函数中最大元素函数中最大元素函数中最大元素函数intint max_ele

44、ment(const max_element(const intint array,array,intint lower,lower,intint upper)upper)int maximum;int maximum;if(lower=upper)if(lower=upper)return arraylower;return arraylower;elseelse maximum=max_element(array,lower+1,upper);maximum=max_element(array,lower+1,upper);if(arraylower=maximum)if(arraylow

45、er=maximum)return arraylower;return arraylower;elseelsereturn maximum;return maximum;第32页C+C+程序程序设计设计教教程程/采取采取采取采取递归递归算法算法算法算法寻寻找双精度型数找双精度型数找双精度型数找双精度型数组组中最大元素函数中最大元素函数中最大元素函数中最大元素函数doubledouble max_element(const max_element(const doubledouble array,int lower,int upper)array,int lower,int upper)doub

46、ledouble maximum;maximum;if(lower=upper)if(lower=upper)return arraylower;return arraylower;elseelse maximum=max_element(array,lower+1,upper);maximum=max_element(array,lower+1,upper);if(arraylower=maximum)if(arraylower=maximum)return arraylower;return arraylower;elseelsereturn maximum;return maximum;

47、第33页C+C+程序程序设计设计教教程程/测试递归函数主函数测试递归函数主函数int main()int main()int A=19,33,69,55,77,12,52;int A=19,33,69,55,77,12,52;double B=10.1,21.3,12.4,321.42,5.2,7.1,8.3,12.31,double B=10.1,21.3,12.4,321.42,5.2,7.1,8.3,12.31,70.0;70.0;coutThe maximum element of the array A is:coutThe maximum element of the array

48、A is:max_elementmax_element(A,0,6)endl;(A,0,6)endl;coutThe maximum element of the array B is:coutThe maximum element of the array B is:max_elementmax_element(B,0,8)endl;(B,0,8)endl;return 0;return 0;第34页C+C+程序程序设计设计教教程程程序运行结果:程序运行结果:第35页C+C+程序程序设计设计教教程程例例 7-11:函数:函数strchr():在字符串中查找指定字在字符串中查找指定字符符 ch

49、ar*strchr(char*string,char c)char*strchr(char*string,char c)while(*string!=c&*string!=0)while(*string!=c&*string!=0)string+;string+;if(*string=c)/if(*string=c)/查查找成功找成功找成功找成功 return string;/return string;/返回返回返回返回第一个待第一个待第一个待第一个待查查字符地址字符地址字符地址字符地址 else else /string=0(/string=0(字符串字符串字符串字符串结结束符束符束符束符

50、),),字符串中没有字符串中没有字符串中没有字符串中没有c c return NULL;return NULL;第36页C+C+程序程序设计设计教教程程例例7-12:三个整型变量排序:三个整型变量排序#include#include using namespace std;using namespace std;/函数函数函数函数 swap():swap():交交交交换换两个整型两个整型两个整型两个整型变变量量量量值值void swap(int*void swap(int*xpxp,int*,int*ypyp)int tmp;int tmp;tmp=*xp;tmp=*xp;*xp=*yp;*x

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服