实验四 函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int area(int);
float area(float);
int main()
{
int r1;
cout<<"输入一个整型半径r=:";
cin>>r1;
cout<<"area="<<area(r1)<<endl;
float r2;
cout<<"输入一个实型半径r=:";
cin>>r2;
cout<<"area="<<area(r2)<<endl;
return 0;
}
int area(int x)
{
return PI*x*x;
}
float area(float x)
{
return PI*x*x;
}
思考:
编写重载函数实现对两个整型数、三个整型数、两个实型数、三个实型数等求最小值。
5.使用内联函数计算长方形的面积。
分析:C++编译器在调用遇到内联函数的地方,会用函数体中的代码替换函数。
最小公倍数=m×n/最大公约数。
解:
#include <iostream.h>
int fun1(int c,int d)
{
int r;
r=c%d;
while(r!=0)
{
c=d;Baidu Nhomakorabea
d=r;
r=c%d;
}
return d;
}
int main()
{
int m,n,e,d;
cout<<"m n=";
cin>>m>>n;
goto l1;
}
c= fact(n)/( fact(m)* fact(n-m));
cout<<"c="<<c<<endl; //B
return 0;
}
double fact(int k)
{
int p=1;
if((k==0)||(k==1))
return p;
else
{
for(int i=1;i<=k;i++) p=p*i;
解:
一个完整的内联函数参考程序如下:
#include <iostream.h>
float s(float x,float y);
int main()
{
float a,b;
cout<<"Input two float a,b=";
cin>>a>>b;
cout<<"s="<<s(a,b)<<endl;
return 0;
{
int x,sum;
cout<<"请输入X的值"<<endl;
cin>>x;
sum=fun(x);
cout<<"求和结果为:"<<sum<<endl;
return 0;
}
运行结果:
请输入X的值
10
求和结果为:55
2.编写程序,输入m和n(n>m),求 的值。
分析:已知
根据公式,只要自定义一个函数计算阶乘,即可通过函数调用求出 的值。
int fun1(int c,int d)
{
int r;
r=c%d;
if(r!=0)
{
c=d;
d=r;
fun1(c,d);
}
return d;
}
int main()
{
int m,n,e,d;
cout<<"m n=";
cin>>m>>n;
e=fun1(m,n);
d=m*n/e;
cout<<"最大公约数为:"<<e<<endl;
三、内容和步骤
(一)验证实验程序
1.编写一个函数,用递归的方法求1+2+3+4+…+n的值。在主函数中进行输入输出。
解:
#include <iostream.h>
int fun(int n)
{
int z;
if(n<=0)
z=0;
else
z=n+fun(n-1);
return(z);
}
int main(void)
cout<<"最小公倍数为:"<<d<<endl;
return 0;
}
编写计算三个数最大公约数的程序。
4.分别输入整数半径和实数半径,使用函数重载计算圆的面积。
分析:由于参数只有一个圆的半径,所以只能对不同类型的参数实现重载。
解:程序如下
#include <iostream.h>
#define PI 3.14
int main()
{
int m,n;
double c;
cout<<"please input"<<endl;
l1:cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
if (n<m) {
cout<<"n must bigger than m!,please reinput:"<<endl;
2.设计函数Fri(int M,int n),功能是将M个人围成一圈,编号为1—M,从第1号开始报数,报到n的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号。
3.撰写实验报告。
如果你上机完成得很快,请接着做如下作业:
1、编写一个程序,从键盘输入圆的半径值,调用函数求解圆的面积和周长。
2、编写一个用户自定义函数,该函数有一个整数参数,函数的功能是:判断这个整数是否素数,函数的返回值为判断结果。编写一个程序,从键盘输入任意1个整数,调用用户自定义函数来判断这个整数是否素数。
解:
阶乘函数定义如下:
double fact(int k)
{
int p=1;
if((k==0)||(k==1))
return p;
else
{
for(int i=1;i<=k;i++)
p=p*i;
return p;
}
}
一个完整的参考程序如下:
#include <iostream.h>
double fact(int);
实验四
一、目的和要求
1.了解函数的定义方法,理解函数的调用;
2.初步掌握函数的递归、嵌套调用;
3.了解函数调用的实参与形参的传递,以及参数默认值的设置。
4.学习并了解重载函数、内联函数的基本概念。
二、实验设备及分组
1.Windows XP操作系统;
2.Visual C++6.0语言环境;
3.每人一台PC机。
}
inlinefloat s(float x,float y)
{
return x*y;
}
思考:
将程序中的内联函数进行代码替换,并上机运行,观察结果。
(二)完成实验项目
1.编写函数求:
2.用函数调用方法打印九九表乘法。
3.以下函数是用递归方法计算x的n阶勒让德多项式的值。已有调用语句“p(n,x);”,编写poly函数。递归公式如下:
return p;
}
}
思考:
分别输入n=0,1,3,m=0,1,2测试程序。
试用静态存储变量设计阶乘函数。
3.编写程序,求两个自然数m和n的最大公约数和最小公倍数。
分析:
最大公约数就是能同时整除m和n的最大正整数,可用欧几里德算法(也称辗转相除法)求解。应用欧几里德算法计算两个数的最大公约数的方法是:求两个数(m、n)相除的余数r(r=m/n m>n),当余数不为零时,m取n的值,n取r的值,再求两个数相除的余数,反复进行直到余数为零,除数n是最大公约数。
3、孪生素数是指两个相差为2的素数。例如3和5,5和7,11和13等。编写程序输出m对(m由键盘输入)孪生素数。要求设计函数prime用于判断某整数是否素数。
4、编写一个用户自定义函数,该函数的功能是:输出一个用*号绘制的实心正方形。正方形的边长用整数side指定。编写一个程序,从键盘输入任意1个整数,调用用户自定义函数输出指定边长的正方形图形。如果要用#号绘制图形,程序应该如何修改?
e=fun1(m,n);
d=m*n/e;
cout<<"最大公约数为:"<<e<<endl;
cout<<"最小公倍数为:"<<d<<endl;
return 0;
}
思考:
输入两个数m=36,n=24观察程序运行结果。
用递归调用的方法实现程序编写,参考程序如下:
# include <iostream.h>
5、编写一个用户自定义函数,该函数有一个整数参数,函数的功能是:判断这个整数是否素数,函数的返回值为判断结果。编写一个程序,求3到100之间的所有素数。
4.已知
x的初始值为3.14159/4,用牛顿法求解方程 的近似解,要求精确到 。 的牛顿法为:
四、课后作业
1.已知5个学生4门课的成绩,要求主函数分调用各函数实现:
(1)找出每门课成绩最高的学生序号;
(2)找出课程有不及格的学生的序号及其各门课的全部成绩;
(3)求每门课程的平均分数,并输出;
(4)将学生按总分高低排序。
float area(float);
int main()
{
int r1;
cout<<"输入一个整型半径r=:";
cin>>r1;
cout<<"area="<<area(r1)<<endl;
float r2;
cout<<"输入一个实型半径r=:";
cin>>r2;
cout<<"area="<<area(r2)<<endl;
return 0;
}
int area(int x)
{
return PI*x*x;
}
float area(float x)
{
return PI*x*x;
}
思考:
编写重载函数实现对两个整型数、三个整型数、两个实型数、三个实型数等求最小值。
5.使用内联函数计算长方形的面积。
分析:C++编译器在调用遇到内联函数的地方,会用函数体中的代码替换函数。
最小公倍数=m×n/最大公约数。
解:
#include <iostream.h>
int fun1(int c,int d)
{
int r;
r=c%d;
while(r!=0)
{
c=d;Baidu Nhomakorabea
d=r;
r=c%d;
}
return d;
}
int main()
{
int m,n,e,d;
cout<<"m n=";
cin>>m>>n;
goto l1;
}
c= fact(n)/( fact(m)* fact(n-m));
cout<<"c="<<c<<endl; //B
return 0;
}
double fact(int k)
{
int p=1;
if((k==0)||(k==1))
return p;
else
{
for(int i=1;i<=k;i++) p=p*i;
解:
一个完整的内联函数参考程序如下:
#include <iostream.h>
float s(float x,float y);
int main()
{
float a,b;
cout<<"Input two float a,b=";
cin>>a>>b;
cout<<"s="<<s(a,b)<<endl;
return 0;
{
int x,sum;
cout<<"请输入X的值"<<endl;
cin>>x;
sum=fun(x);
cout<<"求和结果为:"<<sum<<endl;
return 0;
}
运行结果:
请输入X的值
10
求和结果为:55
2.编写程序,输入m和n(n>m),求 的值。
分析:已知
根据公式,只要自定义一个函数计算阶乘,即可通过函数调用求出 的值。
int fun1(int c,int d)
{
int r;
r=c%d;
if(r!=0)
{
c=d;
d=r;
fun1(c,d);
}
return d;
}
int main()
{
int m,n,e,d;
cout<<"m n=";
cin>>m>>n;
e=fun1(m,n);
d=m*n/e;
cout<<"最大公约数为:"<<e<<endl;
三、内容和步骤
(一)验证实验程序
1.编写一个函数,用递归的方法求1+2+3+4+…+n的值。在主函数中进行输入输出。
解:
#include <iostream.h>
int fun(int n)
{
int z;
if(n<=0)
z=0;
else
z=n+fun(n-1);
return(z);
}
int main(void)
cout<<"最小公倍数为:"<<d<<endl;
return 0;
}
编写计算三个数最大公约数的程序。
4.分别输入整数半径和实数半径,使用函数重载计算圆的面积。
分析:由于参数只有一个圆的半径,所以只能对不同类型的参数实现重载。
解:程序如下
#include <iostream.h>
#define PI 3.14
int main()
{
int m,n;
double c;
cout<<"please input"<<endl;
l1:cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
if (n<m) {
cout<<"n must bigger than m!,please reinput:"<<endl;
2.设计函数Fri(int M,int n),功能是将M个人围成一圈,编号为1—M,从第1号开始报数,报到n的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号。
3.撰写实验报告。
如果你上机完成得很快,请接着做如下作业:
1、编写一个程序,从键盘输入圆的半径值,调用函数求解圆的面积和周长。
2、编写一个用户自定义函数,该函数有一个整数参数,函数的功能是:判断这个整数是否素数,函数的返回值为判断结果。编写一个程序,从键盘输入任意1个整数,调用用户自定义函数来判断这个整数是否素数。
解:
阶乘函数定义如下:
double fact(int k)
{
int p=1;
if((k==0)||(k==1))
return p;
else
{
for(int i=1;i<=k;i++)
p=p*i;
return p;
}
}
一个完整的参考程序如下:
#include <iostream.h>
double fact(int);
实验四
一、目的和要求
1.了解函数的定义方法,理解函数的调用;
2.初步掌握函数的递归、嵌套调用;
3.了解函数调用的实参与形参的传递,以及参数默认值的设置。
4.学习并了解重载函数、内联函数的基本概念。
二、实验设备及分组
1.Windows XP操作系统;
2.Visual C++6.0语言环境;
3.每人一台PC机。
}
inlinefloat s(float x,float y)
{
return x*y;
}
思考:
将程序中的内联函数进行代码替换,并上机运行,观察结果。
(二)完成实验项目
1.编写函数求:
2.用函数调用方法打印九九表乘法。
3.以下函数是用递归方法计算x的n阶勒让德多项式的值。已有调用语句“p(n,x);”,编写poly函数。递归公式如下:
return p;
}
}
思考:
分别输入n=0,1,3,m=0,1,2测试程序。
试用静态存储变量设计阶乘函数。
3.编写程序,求两个自然数m和n的最大公约数和最小公倍数。
分析:
最大公约数就是能同时整除m和n的最大正整数,可用欧几里德算法(也称辗转相除法)求解。应用欧几里德算法计算两个数的最大公约数的方法是:求两个数(m、n)相除的余数r(r=m/n m>n),当余数不为零时,m取n的值,n取r的值,再求两个数相除的余数,反复进行直到余数为零,除数n是最大公约数。
3、孪生素数是指两个相差为2的素数。例如3和5,5和7,11和13等。编写程序输出m对(m由键盘输入)孪生素数。要求设计函数prime用于判断某整数是否素数。
4、编写一个用户自定义函数,该函数的功能是:输出一个用*号绘制的实心正方形。正方形的边长用整数side指定。编写一个程序,从键盘输入任意1个整数,调用用户自定义函数输出指定边长的正方形图形。如果要用#号绘制图形,程序应该如何修改?
e=fun1(m,n);
d=m*n/e;
cout<<"最大公约数为:"<<e<<endl;
cout<<"最小公倍数为:"<<d<<endl;
return 0;
}
思考:
输入两个数m=36,n=24观察程序运行结果。
用递归调用的方法实现程序编写,参考程序如下:
# include <iostream.h>
5、编写一个用户自定义函数,该函数有一个整数参数,函数的功能是:判断这个整数是否素数,函数的返回值为判断结果。编写一个程序,求3到100之间的所有素数。
4.已知
x的初始值为3.14159/4,用牛顿法求解方程 的近似解,要求精确到 。 的牛顿法为:
四、课后作业
1.已知5个学生4门课的成绩,要求主函数分调用各函数实现:
(1)找出每门课成绩最高的学生序号;
(2)找出课程有不及格的学生的序号及其各门课的全部成绩;
(3)求每门课程的平均分数,并输出;
(4)将学生按总分高低排序。