该系列为C++初学者设计
编写不易,希望获得收藏,关注和转发的支持,谢谢。
constexpr函数
constexpr函数语法规定
constexpr修饰的函数,在其所有参数都是constexpr时一定返回constexpr
constexpr函数举例:
constexpr int get_size()(return 20;) //可以看出constexpr写在函数的类型前
constexpr int too= get_size();
//正确:foo是一个常量表达式
带默认参数值的函数
预先给形参给默认的值,如果调用实参,则以实参为主。
可以预先设置默认的参数值,调用时如给出实参,则采用实参值,
否则采用预先设置的默认参数值。
例:
int add(int x = 5,int y = 6){
return x + y;
}
int main(){
add(10.20);//10+20
add(10); //10+6
add(); //5+6
}
默认参数值的说明次序
有默认参数的形参必须列在形参列表的最右,即默认参数值的右面不能有无默认值的参数;
调用时实参与形参的结合次序是从左向右。
例:
int add(int x, int y = 5, int z = 6);//正确
int add(int x = 1, int y = 5, int z);//错误
int add(int x = 1, int y, int z = 6);//错误
切记默认值只用给一次就好了。默认参数值与函数的调用位置
如果一个函数有原型声明,且原型声明在定义之前,则默认参数值
应在函数原型声明中给出;
如果只有函数的定义,或函数定义在前,
则默认参数值可以在函数定义中给出。
例:int add(int x= 5,int y = 6); int add(int x = 5,int y = 6){
//原型声明在前 //定义在调用之前
int main(){ return x+y;
add(); }
} int main(){
int add(int x,int y){ add();
//此处不能再指定默认值 }
returnx+ y;
}
默认参数值例3-15
例3-15计算长方体的体积
函数getVolume计算体积
.有三个形参:length(长)、width(宽)、height(高)
其中width和height带有默认值2和3
主函数中以不同形式调用getVolume函数
函数的重载
求绝对值函数。底下一个是整数型的另外一个是实数型的。虽然由于他们的参数表不同,所以我们要写两个函数,但我们希望他们用同一个名字。
原因是:
函数重载
C++允许功能相近的函数在相同的作用域内以相同函数名声明,
从而形成重载。方便使用,便于记忆。
int abs(int x){
returnx<0?-x:x;
}
double abs(double x){
returnx<0?-x :x;
}
参数表不同的几种情况。
c++系统函数
C++的系统库中提供了几百个函数可供程序员使用,例如:
求平方根函数(sprt)
求绝对值函数 (abs)
使用系统函数时要包含相应的头文件,例如:
例3-17 系统函数应用举例
题目:
从键盘输入一个角度值,求出该角度的正弦值、余弦值和正切值。
分析:
系统函数中提供了求正弦值、余弦值和正切值的函数:sin()、cos().
tan(),函数的声明在头文件cmath中。
#include
#include
using namespace std;
const double PI=3.14159265358979;
int main() {
double angle;
cout << “Please enter an angle:”;
cin>> angle; //输入角度值
double radian = angle * PI/180;//转为弧度
cout <<“sin(” << angle << text-align: justify>cout <<"cos("<< angle << text-align: justify>cout << “tan("<< angle << text-align: justify>return 0;
}
运行结果:
30
sin(30)=0.5
cos(30)=0.866025
tan(30)=0.57735
章末例题
例题一
编写函数float Convert(float TempFer),
参数和返回值都为float类型。
实现算法:C=(F-32)*5/9.
#include
using namespace std
float Convert(float F)
float C
C=(F- 32)*5/9
return C;
}
int main() {
float F;
cout<<"please input the temperatur in fahrenheit: \n";
cin>>F;
cout<<"Conver the temperatur in celsius:\n
cout<<Convert(F);
例题二
编写递归函数int fib (int n),在主程序中输入n的值,
调用fib函数计算Fibonacci级数。
公式为:
fib(n)=fib(n-1)+ fib(n-2),n>2;
fib(1)=fib(2)=1。
由于这段程序函数体在函数调用之后,所以需要给出函数声明。
#include"stdafx.h" //是预编译处理器把stdafx.h文件中的bai内容加载到程序来。
#include
using namespace std;
int fib(int n);
int main(){
int n, answer;
cout << "Enter number; ”
cin >> n
cout << "\n\n";
answer = fib(n);
cout << answer << ” is the ” << n << "th Fibonacci number\n"
return 0;
}
int fib (int n)
{
cout<< "Processing fib(” <<n<< “)... ";
if (n <3)
{
cout << "Return 1!\n";
return (1);
}
else
{
cout << "Call fib("<< n-2 << ") and fib(" << n-1 <<").\n"; //反复运用的结构,可以类比之前汉诺塔问题。
return( fib(n-2) + fib(n-1);
}
从这个题中还可以看出所调用函数值的形参名。可以和主函数中的实参名一致。
例题三
分别编写四个同名函数max1,实现函数重载;
可分别求取两个整数,三个整数,两个双精度数,
三个双精度数的最大值。
在main()函数中测试函数功能。
#include
#include
using namespace std;
int max1(int xint y); //两个整数的最大值
int max1(int xint y,int z);://三个整数的最大值
double max1(double x,double y);//两个双精度数的最大值
double max1(double x,double y,double z)://三个双精度数的最大值
int max1(int x,int y) //两个整数的最大值
if (x= =y) return x;
else if (x>=y)
return X;
else
return y;
int max1(int x,int y,int z)//三个整数的最大值
{
return max1(max1(xy),z); //巧妙地运用了已经定义好的函数,这也是之后学习需要培养的一个能力和意识。
}
double max1(double x,double y)//两个双精度数的最大值
{
if (abs(x-y)<1e-10) return x;//判断两浮点数是否相等的常见处理方式 以上abs这个函数是系统库自带的一个函数,用于求绝对值。需要在include指令中把cmath包含出来。
else if (x>=y)
return x;
else
return y;
}
在此函数中可以发现输入ABC3个整数值,但是当函数调用时,如果只调用两个,则从左到又开始调用。
例题四
在main()函数中提示输入两个整数x、y,
使用cin语句得到x、y的值,
调用pow(x,y)函数计算x的y次幂的结果,再显示出来。
注意:包含cmath库
#include
#include
using namespace std;
int main()
int x,y;
cout<< "Enter int x;
cin >>X;
cout << "Enter int y:
cout<<"\n";
cout<<"x="<<X<<"\t";
cout<<"y= "<<y<<"\n";
cout<<"pow(x,y)="<<pow(x,y);</p><p style="text-align: justify">return 0;