第3章 函数
3-8 编写函数把华氏温度转换为摄氏温度,公式为:C = (F - 32) * 5/9 在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。
#include<iostream>
using namespace std;
double CF(double F) //华氏温度转换为摄氏温度
{
return 1.0*5/9*(F-32);
}
int main()
{
double F;
cout<<"请输入华氏温度:";
cin>>F;
cout<<CF(F)<<endl;
return 0;
}
3-9 编写函数判别一个数是否是一个质数,在主程序中实现输入输出。
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int x)
{
if(x<=1) return false;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0)
return false;
}
return true;
}
int main()
{
int x;
cout<<"请输入一个数:";
cin>>x;
if(isprime(x)) cout<<x<<"是质数。"<<endl;
else cout<<x<<"不是质数。"<<endl;
return 0;
}
3-10 编写函数求两个整数的最大公约数和最小公倍数。
#include<iostream>
#include<cmath>
using namespace std;
int gcd(int a,int b) //求最大公约数
{
int t;
if(a<b){
t=a;
a=b;
b=t;
}
while(b!=0){
t=a%b;
a=b;
b=t;
}
return a;
}
int main()
{
int x,y;
cout<<"请输入两个整数:";
cin>>x>>y;
int g=gcd(x,y),l=x*y/g;
cout<<x<<"和"<<y<<"的最大公约数是:"<<g<<endl;
cout<<x<<"和"<<y<<"的最小公倍数是:"<<l<<endl;
return 0;
}
3-13 用递归的方法编写函数求Fibonacci级数,公式为Fn = Fn-1+Fn-2(N>2),F1 = F2 = 1,观察递归调用的过程。
#include<iostream>
using namespace std;
int fib(int n)
{
if(n==1||n==2)
return 1;
else
return fib(n-1)+fib(n-2);
}
int main()
{
int n;
cout<<"请输入一个大于2的整数:";
cin>>n;
cout<<fib(n)<<endl;
return 0;
}
3-14 用递归的方法编写函数求n阶勒让德多项式的值,在主函数中实现输入输出。递归公式为
#include<iostream>
using namespace std;
float p(int n,int x)
{
if(n==0)
return 1;
else if(n==1)
return x;
else
return ((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;
}
int main()
{
int n,x;
cout<<"请输入正整数n、x:";
cin>>n>>x;
cout<<n<<"阶勒让德多项式:"<<"P"<<n<<"("<<x<<")"<<"="<<p(n,x)<<endl;
return 0;
}
3-15 编写递归函数getPower计算x的平方,在同一个程序中针对整型和实型实现两个重载的函数:
int getPower(int x,int y); //整型形式,当y<0时,返回0
double getPower(double x,int y); //实型形式
在主程序中实现输入输出,分别输入一个整数a和一个实数b作为底数,在输入一个整数m作为指数,输出a的m次方和b的m次方。另外请读者思考,如果在调用getPower函数计算a的m次方时希望得到一个实型的结果(实型结果表示范围更大,而且可以准确表示m<0时的结果),该如何调用?
#include<iostream>
using namespace std;
int getPower(int x,int y)
{
if(y==0)
return 1;
else if(y==1)
return x;
else if(y<0)
return 0;
else
return x*getPower(x,y-1);
}
double getPower(double x,int y)
{
if(y==0)
return 1;
else if(y==1)
return x;
else if(y<0)
return 1.0/x*getPower(x,y+1); //表示负次幂时出现的结果
else
return x*getPower(x,y-1);
}
int main()
{
int a,m;
double b;
cout<<"请输入一个整数和一个实数作为底数:";
cin>>a>>b;
cout<<"请输入一个整数作为指数:";
cin>>m;
cout<<"a^m="<<getPower(a,m)<<endl;
cout<<"b^m="<<getPower(b,m)<<endl;
return 0;
}
3-17 編写一個可以计算梯形面积的重载函数,格式为trapezoid(upper,base,height),upper、base与height可同为int或double,传回值的型态皆为double。(梯形面积=(upper+base)*height/2)。
#include<iostream>
using namespace std;
double trapezoid(int upper,int base,int height)
{
return (double)(upper+base)*height/2; //转换为double型数据
}
double trapezoid(double upper,double base,double height)
{
return (upper+base)*height/2;
}
int main()
{
int x,y,z;
double u,b,h;
cout<<"请输入整型的上底、下底、高:";
cin>>x>>y>>z;
cout<<"该梯形面积为:"<<trapezoid(x,y,z)<<endl;
cout<<"请输入实型的上底、下底、高:";
cin>>u>>b>>h;
cout<<"该梯形面积为:"<<trapezoid(u,b,h)<<endl;
return 0;
}
注:第一个trapezoid函数的形参都为int整数型,计算出的梯形面积也会保持int型,故要进行一下类型转换,转为double型,从而符合该函数的返回类型。
本专栏为本人大二C++课程的习题作业和一些学习经验的分享,供大家参考学习。如有侵权请立即与我联系,我将及时处理。
参考书籍为:C++语言程序设计 第五版 -清华大学出版社- 郑莉,董渊、C++语言程序设计 第五版 -清华大学出版社- 郑莉,董渊(学生用书)
编译环境:Visual Studio 2019、Dev-C++
欢迎关注我的微信公众号,分享一些有趣的知识:程序猿的茶水间