函数的定义语法形式:
类型说明符 函数名(含类型说明符的形参表){ 程序语句 }
调用其他函数的函数被称为主调函数,被其他函数调用的函数被称为被调函数。但如果希望在一个函数定义前调用它,则需要在函数调用前添加该函数的函数原型声明。函数原型声明的形式如下:
类型说明符 函数名 (含类型说明的形参表);
与变量的生命和定义类似,声明一个函数只是将函数的有关信息(函数名、返回值类型、参数表等)告诉编译器。声明函数时,形参表只要包含完整的类型信息即可,形参名可以省略(并不推荐,只是可以存在这种情况)。同时函数又可分为自定义函数和系统函数。
1、系统函数
充分利用系统函数,可以大大减少编程的工作量,提高程序的运行效率和可靠性。编译环境提供的系统函数分为两类,一类是标准c++的函数,另一类是非标准的c++函数,它是当前操作系统或编译环境中所特有的系统函数。例如,cmath中所声明的sin、cos、tan等函数都是标准函数。
具体常用的函数:(转载自)
数学:1 三角函数double sin (double);double cos (double);double tan (double);2 反三角函数double asin (double); 结果介于[-PI/2, PI/2]double acos (double); 结果介于[0, PI]double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]double atan2 (double, double); 反正切(整圆值), 结果介于[-PI/2, PI/2]3 双曲三角函数double sinh (double);double cosh (double);double tanh (double);4 指数与对数double exp (double x); e的x次幂double pow (double x, double y); x的y次幂double sqrt (double);double log (double x); 以e为底的对数,即ln xdouble log10 (double x);log10(x) 以10为底。没有以2为底的函数但是可以用换底公式解 决:log2(N)=log10(N)/log10(2)5 取整double ceil (double); 不小于x的最小整数double floor (double); 不大于x的最大整数6 绝对值int abs(int);整型long labs(long);长整型double fabs (double);浮点型7 标准化浮点数double frexp (double f, int p); 标准化浮点数, f = x 2^p, 已知f求x, p ( x介于[0.5, 1] )double ldexp (double x, int p); 与frexp相反, 已知x, p求f8 取整与取余double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分double fmod (double, double); 返回两参数相除的余数9.平方根double sqrt(double x);字符 :int isalpha(int c);c是否为字母int isdigit(int c);c是否为数字int tolower(int c);将c转换为小写字母int toupper(int c);将c转换为大写字母字符串 :char strcpy(char sl,char s2);将字符串s2复制给s1,即覆盖unsigned strlen(char sr);求字符串str长度内存操作 :void memcpy(void d,void *s,int c);将s指向的内存区域的c个字节复制到d指向的区域类型转换 :int atoi(char s);将字符串转化为整数char itoa(int v,char *s,int x);将整数v按x进制转成字符串s时间 :time_t time(time_t *timer);返回1970/1/1零点到目前的秒数其他 :srand(unsigned seed);设置随机数的种子int rand();产生0-RAND_MAX的随机数exit(int);终止正在执行的程序
2、递归调用
函数可以直接或间接的调用自身,称为递归调用。对同一个函数的多次不同调用,编译器会为函数的形参和局部变量分配不同的内存空间,它梦互不影响。
# includeusing namespace std;// 计算n的阶乘int fun(int n){ int d; if (n==0) d=1; else f = fun(n-1)*n; return f; }int main (){ int n,y; cout<<"请输入参数:" < >n; y = fun(n); cout< <<"的阶乘结果为:"<
3、函数的参数传递
参数传递大致为两类:值传递、引用传递。值传递是指发生函数调用时,给形参分配内存空间,并用实参来初始化形参。这一过程是参数的单向传递,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。引用是一种特殊的变量,可以被认为是另一个变量的别名。也就是说,一个引用,从它诞生之时起,就必须确定是那个变量的别名,而却始终只能作为这一个变量的别名,
4、函数重载
两个以上的的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数重载。重载函数的形参必须不同,可以个数不同或者类型不同。