概述
C语言函数手册也称为C标准库。C标准库由在15个头文件中声明的函数、类型定义和宏组成,每个头文件都代表了一定范围的编程功能。有人说,C标准库可以分为 3 组,如何正确并熟练的使用它们,可以相应的可区分出 3 个层次的程序员:
合格程序员:、、、
熟练程序员:、、、
优秀程序员:、、、、、、
一,里的数学计算公式介绍
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, PI] (y/x的反正切值)
3 、双曲三角函数
double sinh (double);
double cosh (double);
double tanh (double);
4 、指数与对数
double exp (double);求取自然数e的幂 (以e为底的x次方值)
double sqrt (double);开平方
double log (double); 以e为底的对数
double log10 (double);以10为底的对数
double pow(double x, double y);计算以x为底数的y次幂
float powf(float x, float y); 功能与pow一致,只是输入与输出皆为浮点数
double pow10(double x, double y);求10的x次方(次幂)
5 、取整
double ceil (double); 取上整 (即求不小于某个数的最小整数)
double floor (double); 取下整 (即求不大于某个数的最大整数)
6、绝对值
double fabs (double);求绝对值
double cabs(struct complex znum) ;求复数的绝对值
int abs(int); 求整数的绝对值
long labs(long); 取长整型绝对值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求f
7 、取整与取余
double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分
double fmod (double, double); 返回两参数相除的余数 (对浮点数取模)
8 、其他
double hypot(double x, double y);已知直角三角形两个直角边长度,求斜边长度
double ldexp(double x, int exponent);计算x*(2的exponent次幂)
double poly(double x, int degree, double coeffs [] );计算多项式
double round( double); 四舍五入取整
double fmax(double, double);求最大值
double min(double,double);求最小值
int rand(void); 求随机数
注意事项:
没有现成的cot三角函数,可以使用tan(PI/2-x)来实现
强调一点,1-3类 传参都是针对以弧度表示的数值,非角度表示的数值。
对于一般的对数求解,考虑利用数学上的对数转换来实现。
关于fmod:考虑到%只适用与整型数据,这里提出一个专门针对实型数据的取余运算的函数。
int rand(void) 用这函数的时候记得要给随机种子哦,要不得出的不是真正的随机数.产生随机种子可以用srand((unsigned int)time(NULL));这就是由时间产生的随机种子了。
二,函数
assert.h C标准库的头文件中提供了一个宏称为断言可以用于验证程序的假设,如果这个假设是错误的,并打印诊断消息。
以下是唯一的函数定义在头assert.h:
void assert(int expression)
这实际上是一个宏,而不是一个函数,它可以被用来添加在C程序诊断。expression 相当于 if里面的表达式
示例:
- - (void)viewDidLoad {
- [super viewDidLoad];
- int i =1;
- assert(i>1);
- NSLog(@"打印出i的值是:%d",i);
打印结果:
- Assertion failed: (i>1), function -[ViewController viewDidLoad], file /Users/admin/Desktop/xcodeCode/math.h/math.h/ViewController.m, line 20.
注意:
* assert是一个宏,只在debug版本中起作用,在release版本中,该语句是不起任何作用的。()
* 当assert诊断失败后,assert会向stderr打印消息。从图1可以看出,assert诊断信息的表达形式是:Assertion failed: 表达式(expression),程序(file) 出错的文件名(file name), 行号(line nnn)。然后,asset会调用abort中断函数的执行,源代码的文件名(The Source filename)和行号(line number)定义在预处理宏(preprocessor macros)__FILE__ 和 __LINE__中
*在调试结束后,可以通过在包含#include 的语句之前插入 #define NDEBUG 来禁用assert调用,
示例代码如下:
- "font-size:12px;"> #include .h>
- #define NDEBUG
- #include
*NSAssert 在 Objective - c 里面也是宏,他的做用跟 assert()几乎一样 ,release 模式下就 什么也不执行 ,debug 就会 断言 。(release模式下 xcode定义了一个宏 NS_BLOCK_ASSERTIONS ,这个 宏 跟 c 里面的 NDEBUG 异曲同工)
NSAssert(condition,desc) , 在 debug模式下 被翻译成
- "font-size:12px;"> if (!(condition)) {
- [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd
- object:self file:[NSString stringWithUTF8String:__FILE__]
- lineNumber:__LINE__ description:(desc), ##__VA_ARGS__];
- }
参数:condition是条件表达式,值为YES或NO;