整型函数

算数 <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);
ctime 函数的参数是一个指向 time_t 的指针, 并返回一个指向 字符串的指针, 字符串格式如下所示:

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);
asctime 函数把参数所表示的时间转换为下面格式表示字符串:

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);