欢迎来到天天文库
浏览记录
ID:52471946
大小:212.51 KB
页数:30页
时间:2020-04-08
《c8函数嵌套递归变量作用域存储类别.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八讲主讲内容:第四章函数4.4函数的嵌套调用与递归调用4.5变量的作用域4.6变量的存储类别4.7内部函数与外部函数1教学安排【教学目的】1、函数的嵌套调用和递归调用,基本理解函数递归调用。2、掌握局部变量的概念和作用域,全局变量的概念和作用域;3、掌握变量的存储方式和存储类别4、基本掌握内部函数与外部函数的概念、定义和使用。【教学重点】函数的嵌套调用和递归调用;局部变量及全局变量的概念和作用域;变量的存储方式;变量的存储类别。【教学难点】递归调用,全局变量,静态变量。【教学时数】2学时。24.4函数的嵌套调用与递归调用4.4.1函数的嵌套调用函数的嵌套调用是指,在执行被调用函数时,被调用函
2、数又调用了其它函数。34.4.1函数的嵌套调用【例4.3】求两个正整数的最小公倍数。分析:设两个整数分别为m和n,根据最小公倍数的数学定义,m和n的最小公倍数=(m*n)/(m和n的最大公约数)。m和n的最大公约数可用辗转相除法求得。因此,我们可以用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。4#include#includeintdivisor(intm,intn);intmultiple(intm,intn);voidmain(){intm,n,result;printf("inputmn:");scanf("%d%d",&m,&n)
3、;result=multiple(m,n);printf("theresult=%d",result);}intmultiple(intm,intn)/*根据求出的最大公约数求最小公倍数的函数*/{inttemp;temp=m*n/divisor(m,n);return(temp);}intdivisor(intm,intn)/*求最大公约数的函数*/{inttemp;if(m4、递归调用是指,一个函数在它的函数体内,直接或间接地调用它自身。C语言允许函数的递归调用。在递归调用中,调用函数又是被调用函数,执行递归函数将反复调用其自身。每调用一次就进入新的一层。为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。函数递归调用的说明7函数的递归调用举例合理的递归调用应该是有限的,是在一定条件下能终止的递归调用,即要有递归终止条件。【例4.4】用递归法求n!。n由用户输入,且满足0≤n≤16。8#includelongfac(intn);voidmain(){intn;long5、result;printf("inputainteagernumber(0<=n<=16):");scanf("%d",&n);result=fac(n);printf("%d!=%ld",n,result);}longfac(intn)/*递归函数,求n!*/{longtemp;if(n<06、7、n>16)printf("n<0,inputerror!");elseif(n==08、9、n==1)temp=1;/*递归终止条件*/elsetemp=fac(n-1)*n;/*递归调用*/return(temp);}94.5变量的作用域在讨论函数的参数传递时曾提到,形参变量只有在被调用时才分配内存10、单元,在调用结束时,即刻释放所分配的内存单元。这一点说明形参变量只有在函数内才有效。这种变量有效性的范围称作变量的作用域。不仅对于形参变量,C语言中所有的变量都有它的作用域。变量说明的方式不同,其作用域也不相同。变量只能在它的作用域内使用,即变量在它的作用域外不能被引用。在C语言中,按变量的作用域范围可分为两种,即局部变量(LocalVariable)和全局变量(GlobalVariable)。104.5.1局部变量在一个函数内部定义的变量被称作局部变量,也称为内部变量。这种变量的作用域是在本函数内。通俗地说,局部变量只能在定义它的函数内部使用,而不能在本函数外部使用。11局部变量举例#inc11、ludemain()/*a,b,c只在main函数中有效*/{inta,b,c;intmax(intx,inty);scanf("%d,%d",&a,&b);c=max(a,b);printf("max(%d,%d)value=%d",a,b,c);}intmax(intx,inty)/*x,y,z只在max函数中有效*/{intz;if(x
4、递归调用是指,一个函数在它的函数体内,直接或间接地调用它自身。C语言允许函数的递归调用。在递归调用中,调用函数又是被调用函数,执行递归函数将反复调用其自身。每调用一次就进入新的一层。为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。函数递归调用的说明7函数的递归调用举例合理的递归调用应该是有限的,是在一定条件下能终止的递归调用,即要有递归终止条件。【例4.4】用递归法求n!。n由用户输入,且满足0≤n≤16。8#includelongfac(intn);voidmain(){intn;long
5、result;printf("inputainteagernumber(0<=n<=16):");scanf("%d",&n);result=fac(n);printf("%d!=%ld",n,result);}longfac(intn)/*递归函数,求n!*/{longtemp;if(n<0
6、
7、n>16)printf("n<0,inputerror!");elseif(n==0
8、
9、n==1)temp=1;/*递归终止条件*/elsetemp=fac(n-1)*n;/*递归调用*/return(temp);}94.5变量的作用域在讨论函数的参数传递时曾提到,形参变量只有在被调用时才分配内存
10、单元,在调用结束时,即刻释放所分配的内存单元。这一点说明形参变量只有在函数内才有效。这种变量有效性的范围称作变量的作用域。不仅对于形参变量,C语言中所有的变量都有它的作用域。变量说明的方式不同,其作用域也不相同。变量只能在它的作用域内使用,即变量在它的作用域外不能被引用。在C语言中,按变量的作用域范围可分为两种,即局部变量(LocalVariable)和全局变量(GlobalVariable)。104.5.1局部变量在一个函数内部定义的变量被称作局部变量,也称为内部变量。这种变量的作用域是在本函数内。通俗地说,局部变量只能在定义它的函数内部使用,而不能在本函数外部使用。11局部变量举例#inc
11、ludemain()/*a,b,c只在main函数中有效*/{inta,b,c;intmax(intx,inty);scanf("%d,%d",&a,&b);c=max(a,b);printf("max(%d,%d)value=%d",a,b,c);}intmax(intx,inty)/*x,y,z只在max函数中有效*/{intz;if(x
此文档下载收益归作者所有