C语言-11-函数的调用-PPT课件

上传人:文**** 文档编号:179004910 上传时间:2021-04-06 格式:PPT 页数:26 大小:916.50KB
返回 下载 相关 举报
C语言-11-函数的调用-PPT课件_第1页
第1页 / 共26页
C语言-11-函数的调用-PPT课件_第2页
第2页 / 共26页
C语言-11-函数的调用-PPT课件_第3页
第3页 / 共26页
C语言-11-函数的调用-PPT课件_第4页
第4页 / 共26页
C语言-11-函数的调用-PPT课件_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《C语言-11-函数的调用-PPT课件》由会员分享,可在线阅读,更多相关《C语言-11-函数的调用-PPT课件(26页珍藏版)》请在金锄头文库上搜索。

1、函数的嵌套调用,P167,函数定义是相互平行的,独立的,即函数不可嵌套定义(在一个函数体内不可定义另一个函数),但函数可以嵌套调用(在调用一个函数的过程中又调用另一个函数,例 : 阅读下列程序,写出其执行结果,include func1(int a , int b) int c; a+=a; b+=b; c=func2(a,b); return(c*c); func2(int a,int b) int c; c=a*b%3; return(c);,void main() int x=7,y=17; printf(%dn,func1(x,y);,4,main(,func1(x,y,func1,a

2、=7 b=17,func2(a,b,func2,a=14 b=34,a= 14,b= 34,c= 2,return(c,c= 2,return(c*c,结束,x=7 y=17,定义:在调用一个函数的过程中,出现直接或间接调用该函数本身,直接调用:在调用f 函数的过程中,又要调用f函数自身,main 函数,调用f函数,f函数,间接调用:在调用f1函数的过程中要调用f2函数,而在调用f2函数的过程中又要调用f1函数,main 函数,f1函数,调用f2函数,f2函数,调用f1函数,P171,函数的递归调用,P171,一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一

3、个与原问题相似的规模较小的问题来解决,递归分为两个阶段: 递归前进段(递推):把复杂问题的求解推到比原问题简单一些的问题的求解; 递归返回段(回归):当获得最简单的解后,逐步返回,依次得到复杂的解。 使用递归时,必须有一个明确的递归结束条件,称为递归出口。当条件不满足时,递归前进;当条件满足时,递归返回。 因此,在考虑使用递归算法编写程序时,应满足两点: 1、该问题能够被递归形式描述; 2、是否存在递归结束的条件,递 归,P172 例8.7 有5 个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人多少岁?他说比第3个人大2岁。问第3个人多少岁?他说比第2个人大2岁。问第2个人多少

4、岁?他说比第1个人大2岁。最后问第一个人,他说是10岁。请问第5个人多大,f(n)=f(n-1)+2 n1 f(1)=10 n=1,void main() int n=5; printf(age(%d)=%dn,n,fun(n);,int fun(int n) if(n=1) return 10; else return fun(n-1)+2;,include int fun(int n) int m ; if(n=1) m =10; else m =fun(n-1)+2; return m;,例:下列程序计算 请填空,int sum(int n) if(n=1) _; else _ ; vo

5、id main() int n; scanf(%d,return 1,return sum(n-1)+n,sum(n,include long fun(int n) long f; if(n0) printf(n0,data error); exit(0); else if(n=0|n=1) f=1; else f=fun(n-1)*n; return(f); void main ( ) int n;long y; scanf(%d,P173.例8.8 用递归的方法求n,main,fun(4,n=4,f=1,f=1*2,f=2*3,f=6*4,fun(n,y=24,if(n0) printf(

6、n0,data error); exit(0); if(n=0|n=1) return 1; return fun(n-1)*n;,include void main (void) int i=5; printf(“%d”,sub(i);,int sub (int n ) int a; if (n= =1) return 1; a=n+sub(n-1); return a;,sub (5,n=5,a=5+sub (4,sub (4,n=4,a=4+sub (3,sub (3,n=3,a=3+sub (2,sub (2,n=2,a=2+sub (1,sub (1,n=1,return 1,ret

7、urn a,a=3,return a,a=6,return a,a=10,return a,a=15,算法相同,层层调用,每层函数的变量所占内存单元不同,include int fib(int n) if(n=0) return 0; else if(n=1) return 1; else if(n1) return fib(n-1)+fib(n-2); void main() int i,n; scanf(%d,阅读下列程序,写出其函数的功能,P202.8.13.用递归方法求n阶勒让德多项式的值,递归公式为,include stdio.h double P(double x, int n)

8、if(n=0) return 1; if(n=1) return x; if(n1) return (2*n-1)*x-P(x,n-1)-(n-1)*P(x,n-2)/n; void main() double x; int n; double P(double x, int n); scanf(%lf%d,include void main() int fun(); printf(n%dn,fun(567);,例:下列程序输出结果为,567 1,int fun(int n) if(n10) fun(n/10); printf(%d,n%10); return(1);,main,fun(567

9、,fun(,n=567,n10,fun(567/10,fun(,n=56,n10,fun(56/10,fun(,n=5,n10,Y,Y,N,printf(%d,n%10,return(1,printf(%d,n%10,return(1,printf(%d,n%10,return(1,变量的属性 数据类型(操作属性) 变量所持有的数据的性质 存储属性(在内存中存储方式) 存储器类型:寄存器、静态存储区、动态存储区 生存期:变量在某一时刻存在-静态变量与动态变量 作用域:变量在某区域内有效-局部变量与全局变量,变量是对程序中数据的存储空间的抽象,P188,变量概述,变量定义格式: 存储类型 数据类

10、型 变量表,变量的存储类型 auto -自动型 register-寄存器型 static -静态型 extern -外部型,如: int sum; auto int a,b,c; register int i; static float x,y; extern int j,变量是对程序中数据的存储空间的抽象,变量概述,变量定义格式: 存储类型 数据类型 变量表,局部变量内部变量 定义:在函数模块内定义的,且只在本函数模块内有效。 说明: 1、main中定义的变量只在main中有效 2、不同函数中同名变量,占不同内存单元 3、形参属于局部变量 4、在复合语句中定义的有效变量 5、局部变量可用存储

11、类型: auto register static (默认为auto,P184,include void main() int a=1,b=2,c=3; +a; c+=+b; int b=4,c; c=b*3; a+=c; printf(first:%d,%d,%dn,a,b,c); b+=a+c; printf(second:%d,%d,%dn,a,b,c); printf(third:%d,%d,%dn,a,b,c,1 2 3,1 2 3 4 5,2,3 6,12,14,14,4,12,30,14,30,12,14,3,6,写出下列程序的运行结果,在复合语句中可以重新对变量进行数据类型的定义

12、,复合语句,first:14,4,12 second:14,30,12 third:14,3,6,include void main() int i=1,j=3; printf(%d,i+); int i=0; i+=j*2; printf(%d,%d,i,j); printf(%d,%dn,i,j);,复合语句,int i=0,1,6,3,2,3,写出下列程序的运行结果,全局变量-外部变量 定义:在函数外定义,可为本文件所有函数共用 变量的作用域(有效范围):从定义变量的位置开始到本源文件结束为止,全局变量的作用域的特点: 在全局变量与局部变量不同名时,其作用域是整个程序。 在全局变量和局部

13、变量同名时,在同名局部变量的作用域内,全局变量不起作用。 全局变量存放在静态存储区,P185,include int a=3,b=6; void main() int c; c=+a+b+; func(c); printf(a=%d,b=%dn,a,b); func(int a) b=a%b; printf(a=%d,b=%dn,a,b);,当外部变量与局部变量同名,则在局部变量的作用域内,外部变量不起作用,全局变量的定义,局部变量,a=10,b=3 a=4,b=3,int m=13; int fun(int x,int y) int m=3; return(x*y-m); void main

14、() int a=7,b=5; printf(%dn,fun(a,b)/m);,全局变量,局部变量,2,1,写出下列程序的运行结果,int p=1,q=5; float f1(int a) int b,c; . int f3() . char c1,c2; char f2(int x,int y) int i,j; main() int m,n; .,c1,c2的作用范围,p,q的作用范围,extern char c1,c2,extern char c1,c2,若外部变量与局部变量同名,局部变量优先,外部变量说明(P209): extern 数据类型 变量表,对静态存储变量,若定义时赋初值,则

15、程序运行中仅在第一次调用时赋初值,下一次调用不再赋初值,而是使用上一次调用的值(即只赋一次值,对静态存储变量,若定义时不赋初值,则系统自动赋0,而动态变量不赋初值则值不确定,include void main() int a=2,j; for(j=0;j3;j+) printf (%d,f(a); int f(int a) int b=0; static int c=0; b+;+c; return(a+b+c);,读下列程序,写出其运行结果,4,static int c=0,a j,2,for,0,j3,a b,2,0,0,1,1,4,1,2,0,1,2,5,2,2,0,1,3,6,3,5,

16、6,456,有以下程序,程序运行后的输出结果是 #include int c=-2; main() int j; for(j=0;j=1;j+) fun(j,c); printf(c=%dn,c); fun(int a,int b) static int c=2; c=a+b+c; printf(c=%dn,c);,include int k=1; main() int i=4; fun(i); printf(%d,%dn,i,k); int fun(int m) m+=k; k+=m; char k=B; printf(%dn,k-A); printf(%d,%dn,m,k,1 5,6 4,6,下面程序的运行结果为

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号