资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/10/3,#,C+,+,语言程,序,设,计,第,九,讲,函,数,、递推、递归,第1页,第,九讲,函数,、,递推,、,递归,递推,递,推,是,计,算机数,值,计算中,一个重,要,算法。,大连理,工大学,盘锦校,区基础教学部,2,思,路,:,通,过数学,推,导,将,复,杂运,算,化解为,若,干重复,简,单,运,算,以,充,分发挥,计,算机长,于,重复运,算,特点;,递,推,法,特,点,:,从,一,个已知,事实出,发,,按一,定,规律推,出,下,一,个,事实,,再,从这个,新,已知,事,实出发,,,再向下,推,出,一,个,新事,实,。,第2页,第,九讲,函数,、,递推,、,递归,递推举例(,1,),大连理,工大学,盘锦校,区基础教学部,3,例,:,(,猴,子,吃桃问,题,),猴子,第,1,天,摘,下,若,干桃子,,,当即吃,了,二分之一,,还,不过瘾,,又,多吃了,一,个。,第,2,天,早,上,又,将剩下,桃子吃,掉,二分之一,,又,多吃了,一,个。以,后,天天早,上,都吃了,前,一天剩,下,一,半,另加一,个,。到,第,1,0,天早上,想,再吃时,,,就只剩,下,一个,桃,子了。,问,第,1,天,猴,子共摘,了,多少桃,子,?,第3页,第,九讲,函数,、,递推,、,递归,解,题思绪,:,大连理,工大学,盘锦校,区基础教学部,4,假,设,用,S,(,i)表示第,i天没吃之前桃子数目;,则,S(1),即为第,1天所摘桃子数;,S(10)=S(9)*1/2,1第10 天没吃之前桃子数,S(2),=,S(1),*1/2,1,第,2,天没吃之前桃子数,S(3),=,S(2),*1/2,-1,第,3,天没吃之前桃子数,S(9),=,S(8),*1/2,-,1,第,9,天没吃之前桃子数,第4页,第,九讲,函数,、,递推,、,递归,一,般形,式,:,S,(i),=,S,(,i-1),*,1,/,2,1,大连理,工大学,盘锦校,区基础教学部,5,i,=,2,3,10;,这,个,公式可用,于,知,第,1,天没吃之前桃子数推算,第,2,天,没吃之前,,再推算,第,3,天没吃之前,,,.,。现在要求,是,第,1,天没吃之前,。能否倒过来,先,知,第,1,0,天没吃之前 再,反,推,第,9,天没吃之,,,,,直到,第,1,天没吃之前,。为 此将上式改写,为:,S(,i,-1)=,2*,(,S,(,i)+1),i=,10,9,8,2,第5页,第,九讲,函数,、,递推,、,递归,程,序:,大连理,工大学,盘锦校,区基础教学部,6,第6页,第,九讲,函数,、,递推,、,递归,分析:,普通形式,:,S(,i,-1)=,2*,(,S,(,i)+1),i=,10,9,8,2,;,初始:,s2=1;/,S(10)=,1,大连理,工大学,盘锦校,区基础教学部,7,i,=9,s1=2*(s2,+1);,s2=s1;,s1=2*(s2,+1);,s2=s1;,s1=2*(s2,+1);,s2=s1;,/,S(9)=,2*(S(10)+1),/s2=s1=,S,(9),/,S(8)=,2*(S(9)+1),/s2=s1=S(8),/,S(7)=,2*(S(8)+,1),/s2=s1=,S,(7),i,=8,i,=7,i,=6,s1=2*(s2,+1);,s2=s1;,/,S(6)=,2*(S(7)+1),/s2=s1=,S,(6),第7页,第,九讲,函数,、,递推,、,递归,i,=,5,大连理,工大学,盘锦校,区基础教学部,8,s1=2*(s2,+1);,s2=s1;,/,S(5)=,2*(S(6)+1),/s2=s1=,S,(5),/,S(4)=,2*(S(5)+1),/s2=s1=,S,(4),/,S(3)=,2*(S(4)+1),/s2=s1=,S,(3),/,S(2)=,2*(S(3)+,1),/s2=s1=,S,(2),/,S(1)=,2*(S(2)+1),/s2=s1=,S(1),i,=4,s1=2*(s2,+1);,s2=s1;,s1=2*(s2,+1);,s2=s1;,s1=2*(s2,+1);,s2=s1;,s1=2*(s2,+1);,s2=s1;,i,=3,i,=2,i,=1,第8页,第,九讲,函数,、,递推,、,递归,递推举例(,2,),大连理,工大学,盘锦校,区基础教学部,9,递,推数列,一个数列从某一项起,它任何一项都能够用它前面若干项 来确定,这么数列称,为,递推数,列,,表示某项与其前面若干 项关系就称,为,递推公,式,。比如自然数,1,2,,,n,阶乘就可 以形成以下数列:,1,!,,2,!,,,3,!,,,(,n,-1)!,n!,另,fact(n),为,n,阶乘,依据后项与前项关系能够写出递推公,式:,fact(n,),=,n,*,fact(,n,-1,),(,通项公,式,),fact(1,),=,1,(边界条件),第9页,第,九讲,函数,、,递推,、,递归,递推算例(,3,),大连理,工大学,盘锦校,区基础教学部,10,递推算法程序实现:,有了通项公式和边界条件后,采取循环结构,从边界条件出 发,利用通项公式经过若干步递推过程就能够求出结果;,例:,王小二自称刀工不错,有些人放一张大煎饼在砧板上,问他:,“饼不许离开砧板,切,100,刀最多能分成多少块?”,第10页,第,九讲,函数,、,递推,、,递归,分,析:,切一刀,大连理,工大学,盘锦校,区基础教学部,11,切二刀,切三,刀,切四刀,令,q(n),表,示切,n,刀,能,分,成,块数,,,由上图,可,知,q(1),=1+1=,2,q(2)=1+,1+2=,4,q(3)=1+,1+2+,3=,7,q(4)=,1+1+,2+3+4=,1,1,第11页,第,九讲,函数,、,递推,、,递归,分,析:,切一刀,大连理,工大学,盘锦校,区基础教学部,12,切二刀,切三,刀,切四刀,在,切法上,是,让每两,条,线都有,交,点。用,归,纳法可,得,出,q,(,n),=,q,(n-,1),+,n,q,(,0),=,1,(,边界条,件,),第12页,第,九讲,函数,、,递推,、,递归,递推算例(3,),参,考程序:,大连理,工大学,盘锦校,区基础教学部,13,第13页,第,九讲,函数,、,递推,、,递归,递归,递归算,法,在可计算理论中占有主要地位,它是算法设计有,力工具,对于拓展编程思绪非常有用。,就,递归算,法,而言不包括高深数学知识,只不过初学者建立起递 归概念不太轻易。,看一个简单例子:,大连理,工大学,盘锦校,区基础教学部,14,第14页,第,九讲,函数,、,递推,、,递归,递归,有5 个人坐在一起,问第 5 个人多少岁?他说比第 4个人,大两岁。问,第4,个人岁数,他说比,第 3,个人大两岁。问,第 3,个人,又说比第 2个人大两岁。问第 2个人,说比第,1个人,大两岁。最终问第 1个人,他说是 10岁。请问第 5 个人多,大?,解题思绪:假设用 age(i)表示第 i个人岁数,则,大连理,工大学,盘锦校,区基础教学部,15,借助循环结构采取递推方法求解!,age(5),=,age(4),+,2;,age(4),age(3),=,=,age(3),age(2),+,+,2;,2;,age(2),=,age(1),+,2;,age(1),=,10;,第15页,第,九讲,函数,、,递推,、,递归,普通形式:,age(n)=10,age(n)=age(,n,-1)+2,(n=1),(n 2),大连理,工大学,盘锦校,区基础教学部,16,第16页,第,九讲,函数,、,递推,、,递归,分,析:,上述求解是从求解目标出发,即将第,n 个人年纪表示第(n-1),个人年纪,再回溯到第,(n-2)个人年纪,直 到第 1,个人年纪;,(,回溯,阶段),然后,采取递推方法,从第,1,个人已知年纪推算第,2,个,人年纪,在推算第,3个人年纪,直到推算出第,5个人 年纪;,(,递推,阶段),这是一个递归问题,对它求解能够分成,回溯,和,递推,两 个阶段;显而易见,,,假如不希望递归过程无限制进行下,去,,,必须,有一,个,结束递归过,程,条,件,;如,:,age(1)=10,大连理,工大学,盘锦校,区基础教学部,17,第17页,第,九讲,函数,、,递推,、,递归,计,算年纪,函,数:,int,age,(,int,n),大连理,工大学,盘锦校,区基础教学部,18,int,c;,if(n=,1)c,=,1,0,;,el,s,e c,=,a,g,e,(,n,-,1),+2;r,e,tu,r,n,c;,第18页,第,九讲,函数,、,递推,、,递归,递归调用,大连理,工大学,盘锦校,区基础教学部,19,在,调用一,个,函数,过,程中又,出,现直接,或,间接地,调,用该,函,数本身,,,称为函,数,递归,(,r,e,c,ur,s,i,v,e),调,用,;,C+,+,允,许,函,数递,归,调,用,;,例:,int,f,(int,x),int,y,z,;z,=,f,(,y),;,ret,u,rn,2,*,z;,第19页,第,九讲,函数,、,递推,、,递归,递归调用,直接调用,大连理,工大学,盘锦校,区基础教学部,20,间接调用,注意,:上述两种情况都是,无终,止,本身,调,用;,显,然,,程序中不应该出现这种无终止调,用,,而,只,应出现,有限次,有终止递归调用,;,可,以,用,i,f,语,句,控制,,,实现递归调用结,束,;,第20页,第,九讲,函数,、,递推,、,递归,递归函数,包,含,递归,调,用,函,数,,称,为,递,归函,数,;,计,算年纪,函,数,:,int,age,(,int,n),int,c;,if(n=,1)c,=,1,0,;,el,s,e,c,=,a,g,e,(,n,-,1),+2;,return,c;,大连理,工大学,盘锦校,区基础教学部,21,第21页,第,九讲,函数,、,递推,、,递归,递归函数,大连理,工大学,盘锦校,区基础教学部,22,计,算年纪,递,归函数,执,行过程:,ag,e(,5,),=,a,ge,(,4),+,2,/,/,c,=,ag,e(,4,),+2,=,a,ge,(,3),+,2,+,2,/,/,c,=,ag,e(,3,),+2,=,ag,e,(2),+,2,+,2,+,2,/,c,=,a,ge(2),+,2,=,a,ge,(,1),+,2,+,2,+,2,+,2,;,/,/,c,=,10,;,第22页,第,九讲,函数,、,递推,、,递归,计算年纪程序,大连理,工大学,盘锦校,区基础教学部,23,第23页,第,九讲,函数,、,递推,、,递归,递归算例(,2,),大连理,工大学,盘锦校,区基础教学部,24,用,递归方,法,计算,n!,算,法思绪:,若,n=,10,则,n,!,=,10,*,9!,定义函数,fa,c,t,(,n),表,示,计,算,n,!,函数,,则,有,fa,c,t(n),=,n,*,f,a,ct,(,n,-,1),n,1,f,ac,t,(n),=,1,n,=,0,n,=,1;,第24页,第,九讲,函数,、,递推,、,递归,递归算例(,2,),大连理,工大学,盘锦校,区基础教学部,25,阶,乘计算,递,归函数:,i,i,n,n,t,t,f,f,a,a,c,c,t,t,(,(,i,i,n,n,t,t,n,n,),),int,c;,if,(,c,n,=,=,n,=,*,0,f,|,|,a,n,c,t,=,(,n,=,-,1,1,),),;,c,=,1;,r,e,e,l,s,t,u,e,r,n,c;,c,=,n,*,fact(,n-,1,),;,retu,r,n c;,结束递归条件,第25页,第,九讲,函数,、,递推,、,递归,递归算例(,3,),大连理,工大学,盘锦校,区基础教学部,26,用,递归函,数,计算组,合,数:,C,(m,n,),,即从,m,个,数,中取,n,个,数,组合,数,;,C,(m,n,),=,C,(,m,-,1,n,),+,C(,m,-1,n,-,1);,C,(,m,n),=,0,m,0,n,10,),retu,rn,-1;,i,f,(n,=,10),c,=,1,;,else,c,=,2,*,(,co,u,nt(n,+1),+,1,),;ret,u,rn,c;,大连理,工大学,盘锦校,区基础教学部,33,第33页,第,九讲,函数,、,递推,、,递归,递归方法,大连理,工大学,盘锦校,区基础教学部,34,递,归实现:,在,时,间,和空间,上,开销,比,较大;,但,符合人,们,思绪,,程,序,容,易了解;,递,归函数:,只,须,写,出,递归,公,式,和,递,归,结束条,件,(即边,界,条,件,),即,可,很轻易,写,出递归,函,数;,第34页,第,九讲,函数,、,递推,、,递归,局部变量和,全局,变,量,大连理,工大学,盘锦校,区基础教学部,35,一,个,程,序,可,以包含,若,干,个,源,程,序文,件,(,文件模,块,);,每,个源程,序,文件又,包,括若干,个,函数,;,在,每个函,数,中和函,数,外都可,以,定,义,变,量,。,这,些在不,同,地方定,义,变量,是,否都在,程,序全,部,范围,内,有效?,如,果不是,,,他们,有,效范,围,是,什么呢?,第35页,第,九讲,函数,、,递推,、,递归,局部变量和,全局,变,量,大连理,工大学,盘锦校,区基础教学部,36,局,部变,量,在一,个,函数内,部,定义,变,量是内,部,变量,,它,只在,本,函数范,围,内有效,,,换句话,说,只有在,本,函数内,才,能使,用,它们,,在,此函数,之,外是不,能,使用这,些,变量,。,一样,,在复,合,语句中,定,义变,量,只在复,合,语句内,范,围内,有,效。,第36页,第,九讲,函数,、,递推,、,递归,fl,o,at,f1,(,int,a),/,函数,f1,int,b,c,;,char,f,2(int,in,t i,j,;,int m,a,in(),in,t m,n,;,int,p,q,;,b,、,c,有效,a,有效,x,in,t y),i,、,j,有效,/,/,函数,f2,x,、,y,有效,/,/,主函数,p,、,q,在复,合,语句中,有,效,m,、,n,有效,大连理,工大学,盘锦校,区基础教学部,37,第37页,第,九讲,函数,、,递推,、,递归,a,也,只,在,f,1,函,数,中,有,效。其,他,函数不,能,调用。,大连理,工大学,盘锦校,区基础教学部,38,说,明:,(1,),主函,数,m,ai,n,中,定,义变,量,(,m,n,),也,只在主,函,数,中,有,效,不,会因为,在,主函数,中,定义而,在,整个文,件,或,程,序中有,效,。主函,数,也不能,使,用其它,函,数中定,义,变,量。,(2,),不一样,函,数中可,以,使用同,名,变,量,它,们,代,表,不,同,对象,互,不,干,扰,。例,如,在f,1,函,数,中定义,了,变量,b,和c,倘,若,在,f,2,函,数,中也定,义,变,量b,和,c,它们,在,内存,中,占不一样,单,元,不,会混同。,(3,),能够,在,一个函,数,内复,合,语句中,定,义变,量,这,些,变量只,在,本复合,语,句中有效,这,种,复,合语句,也,称,为,分程序,或,程序块。,(4,),形式,参,数也是,局,部变量,。,比如,f,1,函,数中,形,参,第38页,第,九讲,函数,、,递推,、,递归,大连理,工大学,盘锦校,区基础教学部,39,(5,),在函,数,申明中,出,现参,数,名,其,作,用范围,只,在,本,行,括号,内,。实际,上,,编译,系,统对函,数,申明中,变量,名,是忽略,即使在调用函数时也没,有,为它们分配存,储,单元。,比如,in,t,max(in,t,a,in,t,b);,int max,(,int x,inty),coutxy,endl,;,coutabendl;,/,/,函数申明中出,现,a、,b,/函数定义,形参,是,x、y,/,/,正当,,,x、y在函数体中有效,/,非法,,,a,、,b,在函数体中无效,编,译时认,为,ma,x,函,数,体中,a,和,b,未经,定,义。,第39页,第,九讲,函数,、,递推,、,递归,全局变量,大连理,工大学,盘锦校,区基础教学部,40,程序,编,译单位,是,源程序,文,件,(,.,c,p,p,),一,个,源文,件,能够包,含,一个或,若,干,个,函,数,。,在函数,内,定义,变,量,是,局,部,变,量,而,在函数,之,外定,义,变量是外部变量,称,为,全,局变,量,(g,l,obal v,a,ria,b,l,e,也,称,全,程,变,量,),。,全局变,量,有效,范,围为从,定,义变量,位置开,始,到,本,源文件,结,束。,如,第40页,第,九讲,函数,、,递推,、,递归,int,p=,1,q,=5,;,/全局,变,量,float,f/,/,定义函,数,f1,1(a),int,a;,围,全局,变,量,c1,、,c2,作用,范,围,(int a),大连理,工大学,盘锦校,区基础教学部,41,int,b,c,;,char,c,1,c2;,ch,a,r,f,2,(,int,x,int,y,),/,定义函数,f2,int,i,j,;,main,(,)/,/,主函数,int,m,n,;,第41页,第,九讲,函数,、,递推,、,递归,大连理,工大学,盘锦校,区基础教学部,42,p,、,q、c1、,c,2,都是全局变量,但它们,作用范围不,同,,,在m,a,i,n,函数和,f2,函数中,可,以使用,全,局变,量,p,、,q、,c1,、,c,2,,,但,在函,数,f1,中只能,使,用全局,变,量,p,、,q,,,而,不,能使,用,c1,和,c,2,。,在,一个函,数,中既可,以,使用本,函,数中,局,部变量,,,又,可,以使用,有,效全,局,变量。,说,明:,(1,),设全,局,变量,作,用是增,加,函数间,数,据联络,渠,道。,(2,),提议,不,在必要,时,不要使,用,全局变,量,,因为:,全,局,变,量在程,序,全部,执,行过程,中,都占用,存,储单,元,,而不是仅在需要时才开辟单元。,第42页,第,九讲,函数,、,递推,、,递归,大连理,工大学,盘锦校,区基础教学部,43,在,程,序,设计中,,,在划分,模,块时要,求,模块,内,聚,性,强、与,其,他模块,耦合性,弱,。,即,模,块,功效,要,单,一,(不要,把,许多互,不,相干,功,能放到,一,个模块,中,),,与,其它模,块,相互,影,响要尽,量,少,而,用,全局变,量,是,不,符合这,个,标准。,普通,要,求把程,序,中,函,数,做成一,个,封闭体,,,除,了能够通,过,“实,参,形,参,”,渠道,与,外界,发,生联,系,外,没,有,其它渠,道,。这么,程序移,植,性好,,可,读,性,强。,第43页,第,九讲,函数,、,递推,、,递归,大连理,工大学,盘锦校,区基础教学部,44,使,用全局变量,过,多,会降低程序清楚性。在各,个,函数执,行,时都可,能,改变全,局,变量,值,,程序,容,易,出,错。因,此,,要限,制,使用全,局,变量。,(3,),假如,在,同一个,源,文件中,,,全局变,量,与局部,变,量,同,名,则,在,局部变,量,作用,范,围内,,全,局变量,被,屏,蔽,,即它,不,起作用,。,变,量有,效,范围称,为,变量,作,用,域,(,sco,p,e),。,归,纳起,来,,变量,有4种,不一样作用,域:,文件作用,域,(,file s,c,ope,),、,函,数作用,域,(,function,scope,),、,块作,用,域,(b,l,ock,s,c,o,pe,),和,函,数原型作用,域,(,functi,o,n,p,r,oto,t,y,p,e,sco,p,e,),。,文件作,用,域是全,局,,其,他,三,者,是局部,。,第44页,第,九讲,函数,、,递推,、,递归,变量存放,类别,大连理,工大学,盘锦校,区基础教学部,45,已介绍了变,量,一,种属,性,作,用,域,,,作用,域,是从,空,间角,度,来分析,,分,为,全,局变,量,和,局部变,量,。,变量还有另,一个属,性,存放,期,(,storage d,u,rat,i,o,n,,,也称,生,命,期,),。,存,储期是,指,变量在,内,存中,存在时,间,。这是从变量值存在,时,间,角,度,来分析,。存放,期,能够分,为,静态存,储,期,(,static,storage d,u,rat,i,o,n,),和,动,态,存,储,期,(,dyn,a,mic,sto,r,age d,u,ration),。,这,是由变量,静,态存,储,方,式,和,动,态,存,储,方,式决定,。,第45页,第,九讲,函数,、,递推,、,递归,存放方式,大连理,工大学,盘锦校,区基础教学部,46,静,态存,储,方,式是指,在,程序运,行,期间,,系,统对变,量,分,配,固定存放空间。,动,态存,储,方,式则是,在,程序运,行,期间,,系,统对变,量,动,态,地分配,存,储空间。,第46页,第,九讲,函数,、,递推,、,递归,存放方式,先,看一下,内,存中,供,用户使,用,存放,空,间情,况,。这,个,存放空间能够分为三部分,即:,(1,),程序区,(2,),静态,存,储区,(3,),动态,存,储区,大连理,工大学,盘锦校,区基础教学部,47,第47页,第,九讲,函数,、,递推,、,递归,静态存放区,大连理,工大学,盘锦校,区基础教学部,48,数,据分别,存,放,在,静,态,存放区,和,动态,存,储,区中。,全,局变,量,全,部存放,在,静态存,储,区,中,,在,程序开,始,执行,时,给全局,变,量分配,存,储单元,,,程序执,行,完成就,释,放这,些,空间。,在,程序执,行,过程中,它,们占据,固,定存,储,单元,,而,不是,动,态地进,行,分配和,释,放。,第48页,第,九讲,函数,、,递推,、,递归,动态存放区,大连理,工大学,盘锦校,区基础教学部,49,在,动态存,储,区中存,放,以下数,据,:,函数形式参数,。在调用函,数,时给形参分配存放空间。,函数中,自动变,量,(未加,s,t,atic,声,明,局部,变,量,,详,见后面,介绍,),。,函数调,用,时现,场,保护和,返,回地,址,等。,对,以上这,些,数据,,在,函数调,用,开,始,时,分,配动态,存,储空,间,,函数结束时释放这些空间。在程,序,执行过程中,,这,种分配,和,释放是,动,态,,如,果在一,个,程序,中,两,次,调,用,同一函数,则要进,行,两次,分,配和释,放,,而两次分配,给,此函数,中,局部变,量,存放,空,间地址,可,能,是,不,相同,。,第49页,第,九讲,函数,、,递推,、,递归,50,大连理,工大学,盘锦校,区基础教学部,如,果在一个程,序,中包含若干个函数,每个函数中,局,部变量,存放期,并,不等于,整,个程序,执行周,期,,它,只,是整个,程,序执行,周,期一,部,分。根,据,函数调,用,情,况,,系统对局部变量动态地分配和释,放,存放空间。,在,C+,+,中,变,量,除,了,有,数,据,类,型,属,性之外,,,还,有,存,储,类,别,(,storage,c,l,a,ss),属性。存,储,类别指是数,据,在内存,中,存放,方,法。存,储,方法分,为,静态存,储,和,动,态,存,储,两,大,类。具,体,包,含,4,种,:,自动,(,auto,),、,静态,(s,t,atic,)、,存放,器,(regi,s,t,e,r),和,外,部,(ex,t,e,r,n),。,根,据变量,存放类,别,,能够,知,道变量,作用域,和,存放,期。,第50页,第,九讲,函数,、,递推,、,递归,自动变量,大连理,工大学,盘锦校,区基础教学部,51,函,数,中,局部,变,量,如,果,不用关,键,字sta,t,i,c,加,以,声,明,,编译,系,统对它,们,是动态,地,分配存,储,空间,。,函,数,形参,和,在,函数中,定,义变,量,(,包,括,在,复合语,句,中定义,变,量,),都,属这类。,在,调,用,该函数,时,,系统,给,形参和,函,数中定,义,变量,分,配存放,空,间,数,据,存放在,动,态存放,区,中。在,函,数调,用,结束时,就,自动释,放,这些空,间,。假如,是,在复合,语,句中,定,义变,量,,则在,变,量定义,时,分配存,储,空间,,在,复合,语,句结束,时,自动释,放,空间。,因,此这,类,局,部变,量,称,为自,动,变,量,(,au,t,o,v,a,ria,bl,e,),。,第51页,第,九讲,函数,、,递推,、,递归,用,r,egis,te,r,申明,寄,存器,变,量,一,般,情,况下,,变,量值,是,存放在,内,存中,。,当程序,中,用到哪,一,个变量,值时,,由,控制器,发,出指令,将,内存中,该,变量,值,送,到CP,U,中,运,算,器。经,过,运算器,进,行运算,,如,果需要,存,数,再,从,运算器,将,数据送,到,内存存,放,。,如,图,所,示,。,为,提,高,执行效,率,,,C+,+允,许将,局,部,变,量,放,在,CP,U,中,存放,器,中,需,要,用时直,接,从,寄,存,器取出,参,加运算,,,无须再,到,内存中,去,存,取,。这种,变,量叫做,寄,存器变,量,,,用,关,键,字,regi,s,t,e,r,作,申明。,但,是,是,建,议性,;,值,大连理,工大学,盘锦校,区基础教学部,52,第52页,第,九讲,函数,、,递推,、,递归,用,s,t,a,ti,c,声,明静,态,局部,变,量,大连理,工大学,盘锦校,区基础教学部,53,有,时希望,函,数中,局,部变量,值在函,数,调用结,束,后不,消,失而保留原值,即其占用存放单,元,不释放,在下,一,次该函,数,调用时,,,该变量,保,留上一,次,函数调,用,结束,时,值。,这,时就应,该,指定该,局,部变量,为,静态局,部,变,量,(,st,a,t,i,c,l,oca,l,v,a,r,iab,l,e,),。,第53页,第,九讲,函数,、,递推,、,递归,大连理,工大学,盘锦校,区基础教学部,54,第54页,第,九讲,函数,、,递推,、,递归,先,后,3,次,调,用,f,函,数,时,,,b,和,c,值,如,书,中表,所,示。,大连理,工大学,盘锦校,区基础教学部,55,第55页,第,九讲,函数,、,递推,、,递归,静态局部变,量说明,(1,),静态,局,部变,量,在,静态存,储,区,内,分,配,存放单,元,。,在,程序整,个,运行期,间,都不释,放,。,而,自,动,变,量,(,即,动,态,局部变,量,)属,于,动,态存放,类别,,存,储,在动态,存,储,区,空,间,(,而,不是静,态,存放区,空,间,),,,函,数调用,结,束后,即,释放。,(2,),为,静,态,局部变,量,赋初值,是,在,编译,时,进行值,,,即,只赋初,值,一次,,在,程序运,行,时它已,有,初值。,以,后,每,次调用,函,数时不,再,重新赋,初,值而只,是,保留上,次,函,数,调用结,束,时值,。,而,为,自,动,变量赋,初值,,,不,是,在,编,译时进,行,,而,是,在函数,调,用时进,行,,每调,用,一,次,函数重,新,给一次,初,值,大,连,,,理,工,相,大,学,当,盘锦,校,于,区,基,执,础,教,行,学,部,一,次赋值,语,句。,56,第56页,第,九讲,函数,、,递推,、,递归,(3,),假如,在,定义局,部,变量时,不,赋初值,话,,对,静态,局,部变,量,来,说,编,译,时自动,赋,初,值,0(对,数值型,变量,),或,空字,符,(,对,字,符,型,变,量,)。,而对,自,动,变,量,来,说,,如,果,不赋初值,则它值是一,个,不确定,值,。这是由,于,每次函,数,调用结,束,后存放,单,元已释,放,,下次,调,用,时,又重新,另,分配存,储,单元,,而,所分配,单元中,值,是,不确定,。,大连理,工大学,盘锦校,区基础教学部,57,(4,),虽,然,静,态局部,变,量,在函,数,调用结,束,后依然,存,在,,但,其它函数是不能引用它,也就是,说,,在其它函,数,中它,是,“,不可见,”,。,第57页,第,九讲,函数,、,递推,、,递归,静态局部变,量使用,大连理,工大学,盘锦校,区基础教学部,58,在,什么情,况,下需要,用,局部静,态,变量,呢,?,1,.,需,要,保,留函数,上,一次调,用,结束时,值,。比如能够,用,下例中,方法求,!,。,如:,int,fa,c(,int,n),sta,t,ic,in,t,f=1;,/,/,f,为,静,态局部,变,量,函,数,结束,/,时,f,值,不,释,放,/,/,在,f原,值基础,上,乘,以,n,f=f,*,n;ret,u,rn,f,;,第58页,第,九讲,函数,、,递推,、,递归,静态局部变,量使用,大连理,工大学,盘锦校,区基础教学部,59,2,.,如,果,初,始化后,,,变量只,被,引用而,不,改变其,值,,则这,时,用静态局部变量比较方便,以免每,次,调用时重新赋值。,第59页,第,九讲,函数,、,递推,、,递归,用,e,x,t,e,rn,声,明外,部,变量,大连理,工大学,盘锦校,区基础教学部,60,全,局,变,量,(,外,部,变,量,)是,在函数,外部定,义,,,它,作用域,为,从变量,定义处,开,始,到,本,程序文,件,末,尾,。,在此,作,用域内,,,全局变,量,能够为,本,文件中,各,个函,数,所引用,。,编译,时,将,全局变,量,分配在,静,态存放,区,。,有,时,需,要用,ext,e,r,n,来,声,明,全,局变量,,,以扩展,全,局,变,量,作用,域,。,第60页,第,九讲,函数,、,递推,、,递归,在一个文件,内声,明,全局,变,量,提,前引用,声,明,大连理,工大学,盘锦校,区基础教学部,61,第61页,第,九讲,函数,、,递推,、,递归,在多文件程,序中,声,明外,部,变量,大连理,工大学,盘锦校,区基础教学部,62,外,部变量,声,明,分,析下例:,file1.cpp,extern inta,b;,in,t,main,(,),couta,bendl;return0;,注意:,file2.cpp,inta=3,b=4;,extern,是用作,变量申明,,而不是,变量定,义,。它只是对一 个已定义外部变,量,作申明,以扩展其作用,域,。,第62页,第,九讲,函数,、,递推,、,递归,用,extern,扩,展,全,局变量,作用域,,,即使能,为,程序设,计,带来方,便,,但应,十,分慎重,,,因为在,执,行一个,文,件中,大连理,工大学,盘锦校,区基础教学部,63,函,数时,,,可,能会改,变,了该全,局,变量,值,,从而,会,影响到,另,一文件,中,函数,执,行结果。,第63页,第,九讲,函数,、,递推,、,递归,用,s,t,a,ti,c,声,明静,态,外部,变,量,大连理,工大学,盘锦校,区基础教学部,64,有,时在程,序,设计中,希,望一些,外,部变,量,只,限于被,本,文,件,引用,,而,不能被,其,他文件,引,用,。这时能够在定义,外,部变量,时,加一,个,stat,i,c,声,明,。比如:,file1.cpp,stati,c,in,t,a=3;in,t,mai,n,(,),file2.cpp,exter,n,in,t,a;,in,t,fu,n,(in,t,n),a=a*n;,第64页,第,九讲,函数,、,递推,、,递归,这,种,加,上,s,t,a,t,i,c,申明、,只,能用于,本,文件,外,部变量,(,全局变,量,)称,为,静,态外部,变量,。这,就,为程序,模块化、,通,用性提,供,了方便,。,假如已,知,道其它,文,件不需,要,引用本,文,件全,局,变量,,可,以对本,文,件中,全,局变量,都,加上,s,t,atic,,,成,为静态,外,部变量,,,以免被,其,他文件,误,用。,大连理,工大学,盘锦校,区基础教学部,65,需,要,指,出,不,要,误认为,用,sta,t,i,c,声,明外,部,变量才采,用,静态存,储,方式(,存,放在静,态,存放区,中,),而,不,加,s,t,atic,是,动态存,储,(存放,在,动态存,储,区)。,实,际上,,两,种形式,外部变,量,都用静,态,存放方,式,,只是,作,用范围,不,同而已,,,都是在,编,译时分,配,内存。,第65页,第,九讲,函数,、,递推,、,递归,存放期和作,用域,大连理,工大学,盘锦校,区基础教学部,66,第66页,第,九讲,函数,、,递推,、,递归,变量申明,和定义,大连理,工大学,盘锦校,区基础教学部,67,关,于申明,和,定义:,针,对函数,而,言,,,函,数,申明,是,函数,原,型,而,函,数,定,义是函,数,功效,建,立;,在,申明部,分,出现,变,量有两,种,情况:,一,种是需,要,建立,存,储空间,(如,i,n,t,a,),;,另一个,是,不需要,建,立存放,空,间,(,e,xter,n,i,n,t,a,),;,前,者称为,定,义性声,明,,或简,称,定义;,后,者称为,引,用性声,明,;,第67页,第,九讲,函数,、,递推,、,递归,为,叙述方,便,,把建,立,存放空,间,申明,称,为定义;,大连理,工大学,盘锦校,区基础教学部,68,如,:,in,t,a;,而,把不需,要,建立存,储,空间,声,明称为,声,明;,如:,ext,ern,int,a;,第68页,第,九讲,函数,、,递推,、,递归,外部,变,量定,义,和,外部变,量,声,明,含,义是不,同,。外,大连理,工大学,盘锦校,区基础教学部,69,部,变量定义只能有一次,它位置,在,全部函数之外,,而,同一文,件,中,外,部,变量,声,明,能够,有,屡次,,它,位置,可,以在函,数,之内,,也,能够在,函,数之外,。,系统根,据,外部变,量,定义,分,配存放,单,元。对,外,部变量,初始化,只,能在,定,义,时进,行,,,而不能,在,申明中,进,行。所,谓,申明,,其,作用是,向,编译系统发出一个信息,申明该变,量,是一个在后面定,义,外部,变,量,仅,仅,是为了,提,前引用,该,变量而,作,申明。,exte,r,n,只,用,作申明,,,而不用,于,定义,。,第69页,第,九讲,函数,、,递推,、,递归,用,s,t,a,t,ic,来申明一个变量作用有,二,:,大连理,工大学,盘锦校,区基础教学部,70,(1),对局部变量用,static,申明,使该变量在本函数调用结,束后不释放,整个程序执行期间始,终,存在,,,使其,存,储 期为程序全过程。,(2),全局变量用,stati,c,申明,则该变量作用域只限于本,文件模块,(,即被申明文件中,),。,第70页,第,九讲,函数,、,递推,、,递归,内部函数和,外部,函,数,大连理,工大学,盘锦校,区基础教学部,71,函,数本质,上,是全局,因,为,一,个函数,要,被另外,函,数,调,用,但,是,也能够指定,函,数只能被本文件调用,,而,不能被,其,他文件,调,用。,根,据函数能否被其它源文件调,用,将函数区分,为,内,部,函,数,和,外,部函,数,。,第71页,第,九讲,函数,、,递推,、,递归,内部函数,大连理,工大学,盘锦校,区基础教学部,72,如,果一个,函,数只能,被,本文件,中,其它函,数,所调,用,它,称,为,内,部函,数,。,在定义内部函数,时,在,函数名和函,数,类型,前,面,加s,t,a,t,i,c,。函,数,首部,一,般格式为,stat,ic,类,型标识,符,函,数,名,(形,参,表,),如,static intfun(inta,int b),内,部函数,又,称静,态,(,s,t,atic,),函,数。使,用,内部函,数,能够,使,函数只,局,限于所,在,文件,
展开阅读全文