1、函数原型:
如果使用函数时,函数还没有被声明过,那么,可以在文件头写一个函数原型,例如:
int square(int);
括号中不必写参数名字,只需参数类型,并且后面一定要加上";"
2、常用数学库函数:
常用数学库函数 | ||
函数 | 说明 | 示例 |
ceil | 取整数部分,使其不小于x | ceil( 9.2 ) = 10.0 |
cos | 余弦 | cos( 0 ) = 1 |
exp | e的x次方 | exp( 1 ) = 2.71828 |
abs | 绝对值 | abs( 1.2 ) = 1.2, abs( - 2.3 ) = 2.3 |
floor | 取整数部分,使其不大于x | floor( 9.2 ) = 9.0 |
fmod | x/y的浮点数余数 | fmod( 13.657, 2.333 ) = 1.992 |
ln | 以e为底,求x的自然对数 | ln( 2.71828) = 1 |
lg10 | 以10为底,求x的自然对数 | lg10 ( 10.0 ) = 1.0 |
pow | x的y次方 | pow( 2, 7 ) = 128 |
sin | 正弦 | sin ( 0 ) = 0 |
sqrt | 平方根 | sqrt( 4 ) = 2 |
tan | 正切 | tan ( 0.0 ) = 0 |
3、随机数
函数rand() 用来生成0-RAND_MAX的一个无符号整数,如果想得到范围是 x - y (包括x、y)的数,可以用 x + rand()%y
但是注意:仅仅用rand的话,一旦程序编译通过,那么每次输出的随机数是一样的,想要程序每次都输出不同的随机值,我们可以人工的种植一个种子。
int main()
{
int i;
for(i=1;i<=20;i++)
cout<<(1 + rand()%6);
if(i % 5 = 0)
cout << endl;
}
/*这个例子中虽然在for循环里面的数是随即产生的,但是当我们重复运行程序时,它所产生的结果是重复的*/
int main()
{
srand(time(0));//我们人工的种植一个种子,这个种子是计算机自己的时钟值
int i;
for(i=1;i<=20;i++)
cout<<(1 + rand()%6);
if(i % 5 = 0)
cout << endl;
}
/*这个例子中,当我们重复运行程序时,结果会不同*/
4、内联函数
在函数定义中,函数返回类型之前的限定符 inline “建议”编译器在适当的程序部分生成函数的副本,以避免频繁的函数调用。这样做的结果是程序中插入多个函数代码的副本(因而使程序增大),而不是一个函数的副本(每次调用函数时,控制都会传递到函数中)。
inline double cube(const double s) ...{ return s*s*s;}
int mian()
{
int i, j;
for( i = 1; i < 5; i++)
return j *= cube(i);
}
注意:虽然内联函数可以提高性能,但是对内联函数的任何更改都需要重新编译该函数的所有客户。这会大大影响欧些程序的开发和维护。
5、引用和引用参数
许多编程语言中调用函数都有两种形式:“传值调用”、“引用调用”。
int s(int);//传值调用
int s2(int & );//引用调用
int mian()
{
int x=3;
s(x);
cout<<x<<endl;
s2(x);
cout<<x<<endl;
return 1;
}
int s(int x)
{
x =2;
}
int s2(int &x)
{
x=2;
}
/*
3
2
*/
传值调用时,优点是会产生改参数的副本并将该副本传递给被调用函数,因此对副本的更改不会影响原始变量,从而避免数据被更改。缺点是如果传递的是大型数据项目,那么复制该数据会花费较长的时间。
引用调用时,优点是可以避免复制大量数据。缺点是安全性差,因为被调用函数可以直接修改调用者的数据。
但是我们可以在参数类型前面加上"const"来是参数变为常量参数,从而提高安全性。
int s2(const int&);
6、别名
利用引用可以声明一个变量的“别名”,例如:
int x=1;
int &ref=x;//正确
int &ref2;//错误,必须初始化引用
引用变量必须在声明中得以初始化,一旦引用被声明为另一个变量的别名,那他将与那个变量拥有相等的地位,仅仅是名称的不同。
7、函数返回引用
函数返回引用是一件非常危险的事情,因为函数在终止时会删除自动化变量,此时返回的引用时“悬挂应用”。如果非要返回引用,那么请把变量声明为static。
8、默认实参
函数调用通常传递参数的特定值,程序员可以指定此类参数是“默认实参”,可以为此类参数提供默认值。但默认实参必须是参数列表中最右边的那个/那几个参数,如果不是,那么它右边的所有参数也必须省略。默认实参应该在函数名首次出现的时候指定——通常是在函数原型中。
int f(int , int length=0,int width=0);
int mian()
{
f( 1 );
f( 1, 1 );
f( 1, 1, 1 );
return 1;
}
f(int x, int length = 0, int width = 0 )
{
cout<<x<<' '<<length<<' '<<width<<endl;
}
/*
1 0 0
1 1 0
1 1 1
*/
——总结自c++编程金典