预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共37页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第五章C++函数5.1函数的定义有返回值函数无返回值函数5.2函数的调用函数定义为 doublesqare(doublen){returnn*n} voidHi(){cout<<“Hi!”<<endl;} 则调用为 result=sqare(5.0); 函数调用时,实参5.0传递给n,返回5.0乘5.0的值。 Hi() 函数调用时,没有参数,因此不传递参数,函数调用的结果是输出Hi!作为表达式的函数调用和作为语句的函数调用函数的递归调用一般递归算法都必须满足三个条件: 要有明确的结束递归的条件:如n=0,n=1,此条件可以直接得出结果 要解决的问题可以转化为相对简单的同类型的问题:如n!可转化为n*(n-1)!,(n-1)!就是比n!稍简单的同类型的问题 随着问题的逐次转换,最终能达到结束递归的条件:算法中的参数n在递归过程中的逐次减少,必然会到达n=0或n=1的时候。递归算法实现如下: #include<iostream.h> Longfact(longn) { if(n<=1L)return1L; returnn*fact(n-1L);//n!=n*(n-1)! } Voidmain() { cout<<fact(4); }5.3函数原形与头文件函数必须先说明后使用 函数定义是一种定义性说明,函数原形是一种参考性说明 在典型的应用系统中,函数定义与函数原形的分工被明确化,提供接口信息的任务由函数原形专门担任,即无论函数定义是否已出现在函数调用处之前,都在程序的前部给出函数原形。头文件5.4函数调用中的参数传递C++参数传递的基本方式——传值例:数组参数例:设计函数sum,它计算并返回参数数组中所有元素的合计值。设计函数sumAll,计算5列二维数组data第一行元素的合计,并把结果存入一维数组result的对应元素中。可选参数例:5.5内联函数5.6函数重载与名字混成判断多个同名函数是否允许重载若函数原形为: intf(intk,intm=0,doubled=0.0); 则它不能与以下任一同名函数重载: intf(int); intf(int,int); intf(int,int,double); intf(int,double=0.0); 因为去掉某些可选参数后,参数与上述函数的参数在数量和类型上都相同 函数原形为 intfp(charc,intk=0,doubled=100.0) 它可以与同名函数intfp()重载 不能与voidfp(charc)、intfp(char,int)及voidfp(char,int,int)函数重载5.7函数和变量的作用域变量的作用域和生存期1、全局变量全局变量定义时不加static,则具有跨文件作用域 全局变量定义时加static,则具有文件作用域 跨文件作用域的变量在被同一系统的其他程序文件访问前,须用extern对该变量进行说明,即外部说明(extern说明) 如externintvar; 2、局部变量三种局部变量例5.9设计一个计数器counter,每调用一次,计数器增1,并返回计数器的值;若调用时给出参数RESET,则计数器归0。 #include<iostream.h> #defineRESETtrue unsignedcounter(boolreset=!RESET){ staticunsignedcnt=0; if(reset)returncnt=0; return++cnt; }voidmain(){ cout<<‘‘<<counter();//第一次调用后cnt值为1 cout<<‘‘<<counter();//第二次调用前cnt值为1,再 次调用,继续加1 cout<<‘‘<<counter(); cout<<‘‘<<counter(RESET); cout<<‘‘<<counter(); cout<<‘‘<<counter(); cout<<‘‘<<counter(); } 程序的输出是: 12301235.8函数模板函数模板的实例化