实验5 函数
一. 实验目的
(1) 掌握函数的定义及其调用,变量存储特性,作用域。 (2) 掌握函数的定义及其调用。
(3) 掌握C++函数参数的传递的定义和应用。 (4) 掌握自动变量和静态变量的概念。
(5) 掌握函数原型、块、函数和文件作用域的概念。 (6) 掌握全局变量与局部变量的概念。 (7) 了解、掌握多文件程序上机调试的过程。
二. 实验内容及步骤
1. 阅读下列程序,写出执行结果,然后上机调试程序,比较结果的正确性,弄清楚自动变量与静态变量的区别。
#include
cout< int func ( int c ) { int a = 0; static int b = 1; a++ ; b++ ; return a+b+c; } 2. 上机调试下面程序,改正其不合理之处。 #include using namespace std; main() { int x,n,s; s=power(x,n); } power(y) { int i,p=1; for(i=1;i<=n;i++) p=p*y; } 3. 按照要求完成以下程序 1) 计算并输出 500 以内的所有“亲密数”对,并输出所有“完数”之和。 提示:6的因子为2和3。如果自然数M的所有因子(包括1但不包括自身,下同)之和为 N,而N的所有因子之和为 M,则称M与N为一对“亲密数”。例如,220的所有因子之和为:1+2+4+5+10+11+20+22+44+55+110=284,而284的所有因子之和为:1+2+4+71+142=220,因此220与 284 为一对“亲密数”。 如果一个自然数的所有因子之和恰好等于它自身,则称该自然数为“完数”。例如,6不仅 与它自身构成一对“亲密数”,且6 是一个“完数”,即6的所有因子之和为:1+2+3=6。 具体要求: ①编写一个函数 fsum(n),返回给定正整数 n 的所有因子之和。 ②编写一个主函数,调用函数fsum(n),寻找并输出500以内的所有“亲密数”对以及计算所有“完数”之和。 ③在输出每队“亲密数”时,要求小数在前、大数在后,并去掉重复的数对。例如,220和284是一对“亲密数”,而284和220也是一对“亲密数”,此时只需输出220与284这对“亲密数”。 ④输出要有文字说明(英文或汉语拼音)。输出时每对“亲密数”用一对方括号括起来,两数之间用逗号分隔,且所有的“亲密数”对占一行。输出形式为: 各对“亲密数” “完数”之和 ⑤在程序内部添加必要的注释(至少有 3 处)。 ⑥将两个函数放在一个文件中进行编译、连接并运行。 ⑦将两个函数分别在三个文件中进行编译、连接并运行。 实验步骤: ①建立新的项目文件。 ②在项目中建立新的C源程序文件。 ③按要求⑥完成编译和连接。在空白的源程序文件中输入主函数程序代码。程序代码如下所示: #include using namespace std; void main() { int facsum(int); /*函数原型*/ int m,n,s=0; cout<<\ for (m=2;m<=500;m++) { n=facsum(m); /*函数调用*/ if((m==facsum(n))&&(m<=n)) cout<<\ /*按要求输 出亲密数对*/ if(n==m) s=s+m; } cout<<\ } int facsum(int m1) /*函数定义facsum,求m的所有因子之和*/ { int f=1,k; for(k=2;k<=m1/2;k++) if(m1%k==0) f=f+k; return f; } ④按要求⑦完成编译和连接。程序代码如下所示: //mymain.cpp #include #include \ using namespace std; void main() { int m,n,s=0; cout<<\ for (n=2;n<=500;n++) { m=facsum(n); /*函数调用*/ if((n==facsum(m))&&(n<=m)) cout<<\//输出亲密数对 if(m==n) s=s+n; } cout<<\/*按要求输出完数之和*/ } //myheader.h int facsum(int n);/*函数原型*/ //myfac.cpp int facsum(int n) /*定义函数 facsum,求 n 的所有因子之和*/ { int f=1,k; for(k=2;k<=n/2;k++) if(n%k==0) f=f+k; return f; } ⑤源程序编译连接,若有语法错误,则根据提示对程序相应代码进行修改,然后再一次编译连接,重复此过程直到程序无语法错误。 ⑥运行程序,如发现错误进行修改,直到运行出正确结果。 2) 求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一函数根据求出的最大公约数求最小公倍数。 具体要求: ①不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输入,并传给求最大公约数函数,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给求最小公倍数函数,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。 ②用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。需要注意的是,不提倡在程序中过多使用全局变量。 实验步骤: ①建立新的项目文件。 ②在项目中建立新的 C源程序文件。 ③在空白的源程序文件中输入程序代码。程序代码如下所示: a. /*求最大公约数和最小公倍数*/ #include
相关推荐: