整型函数
算数 <stdlib.h>
int abs(int value); // 返回它参数的绝对值 long labs(long val); // 和 abs 一样, 但作用对象是长整数 div_t div(int numerator, int denominator); // 把第二个参数(分母)除以第1个参数(分子), 产生上合余数, 用一个 div_t 结构返回. ldiv_t div(long numer, long denom);
div_t 结构 :
int quot; // 商 int rem; // 余数
随机数 <stdlib.h>
下面两个函数合在一起能够产生 伪随机数(pseudo-random number). 因为 它们是通过计算产生的随机数, 因此有可能重复出现.
int rand(void); void srand(unsigned int seed);
rand 返回一个范围在 0 和 RAND_MAX(至少 32767) 之间的伪随机数.
可以把这个函数的返回值根据所需范围的大小进行取模, 然后通过加上或减去 一个偏移量对它进行调整来获得一个更小范围的随机数.
字符串转换 <stdlib.h>
int atoi(char const *string); // 将字符串转换为整型 long atol(char const *string); // 将字符串转换为长整型 long strtol(char const *string char **unused, int base); unsigned long strtoul(char const *string , char **unused, int base);
strol 保存一个指向转换值后面第1个字符的指针. 如果第二个参数非NULL, 这个指针便保存在第2个参数所指向的位置. 这个指针允许字符串剩余部分 进行处理而无需推测转换在在付出的那个位置终止. 第三个参数是转换所执行的基数, 如果基数为0, 任何程序中用于书写整数 字面值的形式都将被接收, 包括指定数字基数的形式. 如 0x2af4 和 0377.
计数值应该在 2 到 36. 11 到 36 A到Z分别被解释为 10到35.
浮点型函数
头文件 math.h 包含了函数库中剩余的数学函数的声明. 这些函数的返回值以及 绝大多数参数都是 double 类型.
无法用一个 double 表示, 函数将返回 0.
三角函数
double sin(double angle); double cos(double angle); double tan(double angle); double asin(double value); double acos(double value); double atan(double value); double atan2(double x, double y);
sin, cos 和 tan 函数的参数是一个用弧度表示的角度, 这些函数分别返回这个 角度的正弦,余弦和正切值.
asin, acos和atan函数分别返回他们的参数的反正弦, 反余弦和反正切值.
atan2 函数返回表达式 x/y 的反正切值.
双曲函数 <math.h>
double sinh(double argle); double cosh(double angle); double tanh(double angle);
这些函数分别返回它们参数的双曲正弦, 双曲余弦和双曲正切值. 每个函数的参数都是一个以弧度表示的角度.
对数和指数函数 <math.h>
double exp(double x); double log(double x); double log10(double x);
exp 函数返回 e 值的 x 次幂
log 函数返回 x 以 e 为底的对数, 也就是常说的自然对数.
log10 返回 x 以 10 为底数的对数.
浮点表示形式 <math.h>
double frexp(double value, int *exponent); double ldexp(double fraction, int exponent); double modf(double value, double *ipart);
幂 <math.h>
double pow(double x, double y); double sqrt(double x);
底数,顶数,绝对值和余数<math.h>
double floor(double x); double ceil(double x); double fabs(double x); double fmod(double x, double y);
字符串转换 <stdlib.h>
double atof(char const *string); double strtod(char const *string, char **unused);
日期和时间函数
处理时间 <time.h>
clock_t clock(void); // 返回从程序开始执行起处理器所消耗的时间.
clock 函数返回一个数字, 它是由编译器定义的额. 通常它是处理器时钟滴答的次数. 为了把这个值转换成秒, 你应该把它除以常量 CLOCKS_PER_SEC.
当天时间 <time.h>
time_t time(time_t *returned_value); // 返回当前的日期和时间
如果参数是一个非NULL的指针, 时间值也将通过这个指针进行存储. 如果无法正常发那会, 函数返回 -1.
日期和时间的转换 <time.h>
下面的函数用于操纵 time_t 值
char *ctime(time_t const *time_value); double difftime(time_t time1, time_t time2);
Sun Jul 4 04:02:48 1976\n\0
ctime返回的字符串在下次调用时将会改变
difftime 函数计算 time1-time2 的差, 并把结果值转换为秒.
接下来的两个函数把一个 time_t 转换为一个 tm 结构
struct tm *gmtime(time_t const *time_value); struct tm *localtime(time_t const *time_value);
gmtime 函数把时间转换为 世界协调时间(Coordinated Universal Time, UTC). UTC 以前被称为 格林尼治标准时间(Greenwich Mean Time).
localtime 函数把一个函数转换为当地时间.
tm结构字段
类型 & 名称 | 范围 | 含义 |
---|---|---|
int tm_sec; | 0-61 | 分之后的秒数 |
int tm_min | 0-59 | 小时后的分数 |
int tm_hour | 0-23 | 午夜之后的小时数 |
int tm_mday | 1-31 | 当月的日期 |
int tm_mon | 0-11 | 1月之后的月数 |
int tm_year | 0-?? | 1900之后的年数 |
int tm_wday | 0-7 | 星期天之后的天数 |
int tm_yday | 0-365 | 1月1日后的天数 |
int tm_isdat; | 夏令时标识 |
下面函数用于处理 tm 结构
char *asctime(struct tm const *tm_ptr); size_t strftime(char *string, size_t maxsize, char const *format, struct tm const *tmp_ptr);
Sun Jul 4 04:02:48 1976\n\0
strftime 函数把一个 tm 结构转换为一个根据某个格式字符串而 定的字符串.
stftime 函数返回字符串的长度, 否则返回 -1
stftime 格式代码
代码 | 被...代替 |
---|---|
%% | % |
%a | 一星期的某天, 简写 |
%A | 一星期的某天, 全写 |
%b | 月份, 简写 |
%B | 月份, 全写 |
%c | 日期和时间, %x %X |
%d | 一个月的第几天 |
%H | 小时, 24 |
%I | 小时, 12 |
%J | 一年的第几天 |
%m | 月 |
%M | 分钟 |
%P | AM/PM |
%S | 秒 |
%U | 一年的第几个星期 |
%w | 一星期的第几天, 星期日为第0天 |
%W | 一年的第几个星期, 以星期一为第一天 |
%x | 日期, 本地 |
%X | 时间, 本地 |
%y | 当前世纪的年份 |
%Y | 年份 |
%Z | 时区的简写 |
time_t mktime(struct tm *tm_ptr); // 把一个 tm 结构转换为一个 time_t 值.
非本地跳转 <setjmp.h>
setjmp 和 longjmp 函数提供了一种类似 goto 语句的机制, 但它并不局限 于一个函数的作用域之内.
int setjum(jmp_buf state); void longjmp(jmp_buf state, int value);
信号
信号(signal)表示一种时间, 它
信号名 <signal.h>
信号 | 含义 |
---|---|
SIGABRT | 程序请求异常终止 |
SIGFPE | 发生一个算术错误 |
SIGILL | 检测到非法指令 |
SIGSEGV | 检测到对内存的非法访问 |
SIGINT | 收到一个交互性注意信号 |
SIGTERM | 收到一个终止程序请求 |
处理信号 <signal.h>
raise 函数用于显示的引发一个信号
int raise(int sig);
打印可变参数列表 <stdarg.h>
int vprintf(char const *formt, va_list arg); int vfprintf(FILE *stream, char const *format, va_list arg); int vsprintf(char *buffer, char const *format, va_list arg);
执行环境
终止执行 <stdlib.h>
这三个函数正常或不正常程序终止有关
void abort(void); // 不正常终止一个程序, 触发 SIGABRT 信号 void atexit(void (func) (void)); // 注册一个退出函数 void exit(int status);
断言 <assert.h>
void assert(int expression);
如果参数值为0, 则想标准错误打印一条诊断信息并终止程序.
环境 <stdlib.h>
char *getenv(char const *name);
执行系统命令 <stdlib.h>
void system(char const *command);
排序和查找 <stdlib.h>
void qsort(void *base, size_t n_elements, size_t el_size, int (*compare) (void const *, void const *));
locale
char *setlocale(int category, char const *locale);