C语言函数2.ppt
《C语言函数2.ppt》由会员分享,可在线阅读,更多相关《C语言函数2.ppt(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、上讲回顾上讲回顾结构化程序设计的思想及方法;结构化程序设计的思想及方法;函数的原型声明;函数的原型声明;函数的定义;函数的定义;函数的形参、实参;函数的形参、实参;函数调用;函数调用;1本讲要点本讲要点函数的嵌套;函数的嵌套;函数的递归调用;函数的递归调用;局部变量、全局变量;局部变量、全局变量;变量的存储类别;变量的存储类别;2函数的嵌套调用函数的嵌套调用函数的函数的定义定义互相平行、独立。互相平行、独立。p在定义函数时,一个函数内在定义函数时,一个函数内不能不能包括另一个函数的定包括另一个函数的定义。义。即函数不能嵌套定义!如以下形式:即函数不能嵌套定义!如以下形式:main()int A
2、()/函数函数A的定义的定义 int B()/函数函数B的定义的定义函数不可以嵌函数不可以嵌套定义,即在套定义,即在定义一个函数定义一个函数的时候,不能的时候,不能同时再定义另同时再定义另一个函数!一个函数!3函数的嵌套函数的嵌套函数函数可以可以嵌套嵌套调用,调用,即在定义一个函数时,即在定义一个函数时,可以在函数体中可以在函数体中调用调用另外的函数;另外的函数;4/例例 从键盘输入三个数,求它们中最大数和最小数的差从键盘输入三个数,求它们中最大数和最小数的差#includevoid main()int _max(int,int,int);/原型声明原型声明int _min(int,int,i
3、nt);int _dif(int,int,int);int x,y,z;scanf(%d,%d,%d,&x,&y,&z);printf(%dn,_dif(x,y,z);int _max(int a,int b,int c)/求三个数的最大值求三个数的最大值int max;max=ab?a:b;max=maxc?max:c;return max;(接右上)(接右上)int _min(int a,int b,int c)/求三个数的最小值求三个数的最小值int min;min=ab?b:a;min=minc?c:min;return min;int _dif(int a,int b,int c)/
4、求三个数最大值、最小值之差求三个数最大值、最小值之差return _max(a,b,c)-_min(a,b,c);函数的嵌套调用:在自定义函数函数的嵌套调用:在自定义函数_dif()定义的过程中调用了自定义函数定义的过程中调用了自定义函数_max()和和_min();5函数的递归调用递归调用递归调用:在调用一个函数的过程中又出现了直接或者间接的调用该函数本身。直接调用直接调用:在调用某一函数A时,又出现了嵌套调用该函数本身的情况;(较常见)(较常见)间接调用间接调用:在调用某一函数A的过程中,嵌套调用了另一函数B,在函数B中,又出现了调用函数A的情况;6例:求n!非递归非递归#includev
5、oid main()int n,i,p=1;scanf(%d,&n);/本例未对本例未对n的有效性进行判断的有效性进行判断 for(i=1;i18分析分析如果自定义一个函数如果自定义一个函数fac()来求阶乘,那么来求阶乘,那么fac(n)=fac(n-1)*n,在求,在求n的阶乘时要调用的阶乘时要调用自身函数,即存在递归(直接调用)。自身函数,即存在递归(直接调用)。9自定义求阶乘的函数自定义求阶乘的函数fac()float fac(int n)/自定义自定义fac函数求函数求n的阶乘的阶乘 float f;if(n0)printf(“Error!n”);/x0时,数据无效;时,数据无效;e
6、lse if(n=0|n=1)f=1;/0 or 1的阶乘为的阶乘为1;else f=fac(n-1)*n;/n的阶乘等于的阶乘等于n-1的阶乘乘的阶乘乘n;return f;/返回返回n的阶乘值的阶乘值在在fac函数中出现了调函数中出现了调用自身的情况,(直接用自身的情况,(直接调用)调用)-递归调用递归调用10/完整的递归调用求完整的递归调用求n!源程序!源程序#includevoid main()float fac(int);/原型声明原型声明int n;float f;printf(please input the data:n);scanf(%d,&n);f=fac(n);print
7、f(%fn,f);float fac(int n)/自定义自定义fac函数求函数求n的阶的阶乘乘 float f;if(n0)printf(Error!n);/x0时,数据无效;时,数据无效;else if(n=0|n=1)f=1;/0 or 1的阶乘为的阶乘为1;else f=fac(n-1)*n;/n的阶乘等于的阶乘等于n-1的阶乘乘的阶乘乘n;return f;/返回返回n的阶乘值的阶乘值 11#includevoid main()float fac(int);/原型声原型声明明int n;float f;printf(please input the data:n);scanf(%d,
8、&n);f=fac(n);printf(%fn,f);float fac(int n)/自定义自定义fac函数求函数求n的阶的阶乘乘 float f;if(n0)printf(Error!n);/x0时,数据无效;时,数据无效;else if(n=0|n=1)f=1;/0 or 1的阶乘为的阶乘为1;else f=fac(n-1)*n;/n的阶乘等于的阶乘等于n-1的阶乘乘的阶乘乘n;return f;/返回返回n的阶乘值的阶乘值 问题:问题:两个函数中都有两个函数中都有n,f变量,变量,为什么编译时没有报错,提示变量为什么编译时没有报错,提示变量重复定义?重复定义?12变量的作用域变量的作用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 函数
限制150内