一些常见的预定义函数
cmath(C语言中的math.h)
- sqrt() 平方根
- pow() 乘方
- abs() int类型取绝对值
- labs() long类型取绝对值
- fabs() double类型取绝对值
- ceil() 向上取整
- floor() 向下取整
四舍五入程序举例
int round(double number)
{
return static_cast<int>(floor(number+0.5));
}
cstdlib(c语言中stdlib.h)
- exit() 结束程序
- rand() 随机数(可用srand()函数设定rand函数的seed)
随机数生成举例
int getRound()
{
srand(static_cast<int>(time(NULL)));
return rand()%10;
}
函数的两种声明方法
第一种,是常见的:
int add(int x,int y);
第二中:(仅限于声明函数时,定义是必须给出形参)
int add(int,int);
参数的值传递和引用传递
值传递
仅仅传递了实参的值。实际上是一个局部变量,调用函数时,首先计算出,实参的值然后该值成为传值惨数(实际上就是一个局部变量)的初始值。不能通过调用函数改变实参的值。
int add(int x,int y);
引用传递
引用本身就是变量的别名。函数调用时使用引用传递,是用实参变量(不是值)来代替形参。实参变量直接被带入函数,这样就可以通过改变参数变量改变实参的值。
定义函数式,在形参变量名前加“&”。
int add(int &x,int &y);
函数的重载
C++允许两个函数具有相同的函数名,这就叫做函数的重载。(但是这些函数的定义必须具有不同的参数数目,或者不同的参数类型)
关于根据const和非const特性进行重载的情况,一些编译器支持,但是C++标准是不予许这种做法的。
举例:
int add(int x,int y);//两个int值相加是调用这个函数
{
return x+y;
}
int add(int x,int y,int z);//三个int值相加是调用这个函数
{
return x+y+z;
}
有一点要注意,尽量不要让两个毫无关系的函数使用同一个函数名,这样容易造成混淆。
函数的测试与调试
assert宏
assertion(断言)是一个或者为true或者为false的语句。assertion同来检验程序的正确性。
原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
然后通过调用 abort 来终止程序运行。
举例:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main( void )
{
FILE *fp;
fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
assert( fp ); //所以这里不会出错
fclose( fp );
fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败
assert( fp ); //所以这里出错
fclose( fp ); //程序永远都执行不到这里来
return 0;
}
可以使用
#define NDEGUG
来禁用assert宏。