实验报告封面课程名称:C++程序设计课程代码:SS1023任课老师:吴爱华实验指导老师:吴爱华实验报告名称:lab9函数(2)学生姓名:陈业鑫__学号:1440112144教学班:JP01递交日期:2014.12.26签收人:我申明,本报告内的实验已按要求完成,报告完全是由我个人完成,并没有抄袭行为。我已经保留了这份实验报告的副本。申明人(签名):王嘉炜实验报告评语与评分:1评阅老师签名:1一、实验名称:函数(2)二、实验日期:2014.三、实验目的:1、熟悉函数的嵌套调用;2、熟悉函数的递归调用,能根据具体情况编写递归函数。3、能正确区分局部变量和全局变量的定义、作用域的不同,并能正确使用这两类不同变量;4、理解生存期的概念,区分静态存储方式、动态存储方式的不同,熟悉局部变量的几种存储方式和全局变量作用域扩展、限制的方法;5、熟悉外部函数跨文件的使用;6、VC++调试入门。四、实验用的仪器和材料:1.电脑五、实验的步骤和方法:1、计算s=22!+32!,要求:编写两个函数,一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用f2计算其阶乘值,然后返回f1,再返回主函数,在循环程序中计算累加和.程序代码:#includeiostreamusingnamespacestd;intmain(){intf1(intx,inty);inte,f,s;cinef;s=f1(e,f);couts=e^2!+f^2!=sendl;return0;}intf1(intx,inty){intf2(intm);inta,b,s;a=x*x;b=y*y;a=f2(a);b=f2(b);s=a+b;returns;}intf2(intm){inti=1,c;c=m;do{m=m*(c-i);i++;}while(ci);returnm;}2、(基础题)Fibonacci数列的规律是:第1、2项均为1,之后每项都是前两项之和,具体如下:1、1、2、3、5、…,用公式表示为:f(n)=1(n=1和n=2时),f(n)=f(n-1)+f(n-2)(n=3)。请编写一个递归函数intfibo(intn)函数得到它的第n项,之后在主函数中调用fibo()输出它的前30项值,每行输出5个数据。程序代码:#includeiostream#includeiomanipusingnamespacestd;intfibo(int);intmain(){intn=30,i,j;Cout”Fibonacci数列的前30项”;for(i=29;i=0;i--){coutsetw(12)fibo(n-i);if(i%5==0)coutendl;}coutendl;return0;}intfibo(intn){inti,f;if(n=0){coutn0,dataerror!endl;f=-1;}elseif(n==1||n==2)f=1;elsef=fibo(n-1)+fibo(n-2);returnf;}3、(基础题)比较全局变量与局部变量:问题:(1)哪些是局部变量?哪些是全局变量?它们的值如何变化?回答:①局部变量是指在函数内部定义的变量,作用域为定义局部变量的函数,也就是说他只能在定义他的函数中使用,其他函数不能使用该变量;只有在程序执行到定义他的模块时才能生成,一旦执行退出该模块则变量消失。②而全局变量则是在整个程序执行的过程中一直有效,除非整个程序退出才会消失。(2)这些变量的作用域如何确定?回答:看变量是否在函数内部定义的变量,如果是在函数内部定义的,则为局部变量。如果是在函数之外定义的,则为全局变量。4、(基础题)理解块作用域:问题:(1)x和y值是如何变化的?回答:x由一个任意的整数变为5;y由一个任意的整数变为2;(2)块内的x与块外的x是同一变量吗?回答:不是同一个变量,运行结果是不一样的。(3)如何理解“内层变量屏蔽外层同名变量”?回答:5、(基础题)掌握静态局部变量的用法:问题:(1)func()的a、b、c三个变量中,哪些是自动变量?哪些是静态局部变量?回答:自动变量是a,c;静态局部变量是b。(2)为什么两次调用函数的结果不同?回答:因为变量c定义了,没有给它初始化,计算机在每一次调用变量时,会给它一个任意值,使得每次运算结果不同。(3)静态局部变量如何初始化?不赋值可以吗?回答:静态局部变量赋初值是在编译时进行值的,即只赋初值一次。可以不赋初值,静态局部变量在编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。5、(基础题)熟悉全局变量在多文件中的使用:(1)file2.cpp是如何引用全局变量N的?回答:用extern来声明全局变量,以扩展全局变量的作用域,从而能够引用全局变量。(2)file1.cpp是如何声明、调用函数func()的?能否去掉extern关键字?回答:是通过预处理命令来调用外部文件,从而调用函数func()。如果把“extern”去掉,程序依然可以正常运行。“extern”在函数声明中可有可无,只是用来标志该函数在本文件中定义,还是在别的文件中定义。(3)file2.cpp中定义func()时,如果在void之前加上static关键字后,func()能否在file1.cpp中调用?为什么?回答:可以的。六、数据记录和计算:如上七、实验结果或结论:本次实验通过实验理解软中断信号机制以及如何通过软中断实现父子进程同步通过实验理解无名管道通信八、备注或说明:可写上实验成功或失败的原因,实验后的心得体会、建议等。九、引用参考文献:即在本实验中所引用的之資料。例如:1.王月云、陈是莹、童武夫。1994。植物生理学实验。艺軒图书出版社。286頁。八、备注或说明:可写上实验成功或失败的原因,实验后的心得体会、建议等。九、引用参考文献:即在本实验中所引用的之資料。例如:1.王月云、陈是莹、童武夫。1994。植物生理学实验。艺軒图书出版社。286頁。