实验8-函数(2)(1)

2019-09-01 19:08

实验8 函数嵌套调用及函数重载与带默认参数值的函数

【实验目的】

1: 掌握函数嵌套的概念及嵌套中的相互调用关系。

2:理解并掌握函数递归调用的方法,学会用递归调用的方法解决实际问题。 3:了解内联函数,函数重载及带默认参数值的函数用法。

二、实验内容-上机调试理解

例1.编写函数求代数式1+2+3+4+5的值。

分析:本题采用函数嵌套来解决,在主函数中调用了sum求和函数,在sum函数中又调用了power函数求幂。

源程序:

#include

int sum(int); //函数原型声明,因为函数先被主函数main中调用使用,后定义其功能。 int power(int); void main() {

int n;

1

2

3

4

5

n=5;

cout<

int sum(int x) //函数定义,功能是求各数字的幂和,这里x为形参 {

int i,s=0; for(i=1;i<=x;i++) s+=power(i);

//循环5次,每次调用power()函数,这里i为power函数形参对应的实参,传值调用 }

int power(int y) //函数定义,功能是求各数字的幂,这里y为形参 {

int i,p=1; for(i=1;i<=y;i++) p*=y;

return p; //将每次的函数值返回到sum()函数

return s; //将最后累加求和的结果值作为函数值返回到main()主调函数

}

例2.分别用用递归算法和非递归算法实现1!+2!+3!+?+n! 非递归算法-源程序:

分析:求阶乘的函数需要一个整型形参,函数类型为double,由于在主函数中要求1!+2!+?+n!,因此要循环调用该函数求累加和。

#include

double fa(int n); //函数原型说明 void main() { int n;

cin>>n; double s=0.0; for(int i=1;i<=n;i++)

s+=fa(i);

//在循环体多次中调用fa()函数,这里i为实参,传值调用 }

double fa(int n) //函数定义,功能是求每个数的阶乘 {

double m=1;

for(int i=1;i<=n;i++)

m*=i;

cout<

return m;

}//将函数值返回主函数调用处

递归算法-源程序: 知识点:

递归函数又叫自调用函数,其特点是在函数体内部直接或间接地自己调用自己。

利用函数的递归调用,可将一个复杂问题分解为一个相对简单且可直接求解的子问题;然后将这个子问题的结果逐层进行回代求值,最终求得原来复杂问题的解。包括两个阶段:

(1)递推阶段:将原问题不断分解成为新问题,逐渐从未知方向向已知方向推测,最终达到已知的条件,即递归结束条件。如: if (n==1) return 1;

(2)回归阶段:从已知条件出发,逐一求值回归,最后达到递推开始处,结束回归阶段。 如: return fac(n-1)*n;

使用这种算法会使程序简洁明了,可读性好。这种算法也会增加运行中的时间和空间的开销,因为它需要足够的内存存放中间结果。建议在内存小速度慢的机器上不使用这种方法。

例3.编写两个名为add的重载函数,分别实现两个整数相加和和两实数相加的功能。 知识点:

所谓函数重载,就是赋予同一函数名但多个含义。具体地说,C++中允许在相同的作用域内,为了编程方便,以相同的名称定义几个不同函数的实现,只是处理对象(参数)不同。

定义重载函数时,要求同名函数的参数表必须有差异,而对返回值的类型没有要求。 重载函数的参数表差异可以是:要么参数的个数不同;要么至少有一个参数的类型不同。编译器便知道在什么情况下该调用哪个函数。

源程序:

#include

int add(int,int); //函数原型说明 double add(double,double); void main() { int m,n;

double x,y;

cin>>m>>n;

cout<<”两整数和:”<>x>>y;

cout<<”两实数和:”<

int add(int m,int n) //定义函数add(),实现整数求和

{return m+n;} //返回主函数调用处

double add(double x,double y) //定义函数add(),实现实数求和 {return x+y;} //将函数值返回主函数调用处

例4.带默认形参值的函数应用. 知识点:

C++语言允许在函数原型/定义说明中给参数设置默认值,这样做可省略与形参默认值相同的实参值,会使书写更简炼,给程序带来安全。

使用原则:(1)当有实参则不用默认值(2)当某个参数有默认值,其后的参数必须有默认值

说明:下列程序的功能是计算长方体的体积。函数v是计算体积的函数,有三个形参,len,width,height,其中width,height带有默认值。在主函数中分别以不同形式调用v函数。

源程序: #include

int v(int len,int width=2,int height=3);

void main() { }

int v(int len,int width,int height) //定义函数v(),实现计算体积 {

cout<<'\\t'<

return len*width*height; //将函数值返回主函数调用处 int x=8,y=10,z=12;

cout<

}

例5.内联函数应用. 知识点:

内联函数是指:编译时将所调用的函数代码直接嵌入到主函数中,而不是将流程转出去。这样就可以节省调用时参数传递、系统栈的保护与恢复等开销,提高程序的执行效率。 用法:在函数声明前加inline关键字 inline 返回值类型 函数名(形参表) {

函数体 }

(1)内联函数体<=5行,不允许出现循环和开关语句,不允许出现递归,不能含有静态数据和数组申明;

(2)定义必须出现在第一次被调用前; (3)不能进行异常接口申明; (4)适合被频繁调用的小函数


实验8-函数(2)(1).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:动名词和分词

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: