math.h
库宏
宏 |
说明 |
HUGE_VAL |
当函数的结果不可以表示为浮点数时。如果是因为结果的幅度太大以致于无法表示,则函数会设置 errno 为 ERANGE 来表示范围错误,并返回一个由宏 HUGE_VAL 或者它的否定(- HUGE_VAL)命名的一个特定的很大的值。如果结果的幅度太小,则会返回零值。在这种情况下,error 可能会被设置为 ERANGE,也有可能不会被设置为 ERANGE。 |
三角函数
函数 |
说明 |
double sin(double angle) |
返回弧度角 angle 的正弦。 |
double cos(double angle) |
返回弧度角 angle 的余弦。 |
double tan(double angle) |
返回弧度角 angle 的正切。 |
double asin(double value) |
返回以弧度表示的 value 的反正弦。 |
double acos(double value) |
返回以弧度表示的 value 的反余弦。 |
double atan(double value) |
返回以弧度表示的 value 的反正切。 |
double atan2(double y, double x) |
返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。 |
注意:
sin
、cos
、tan
输入参数的角度都是弧度值。
asin
、acos
的参数如果不是-1~1
之间,就出现一个定义域错误。
asin
、atan
的返回值范围是:-pi/2~pi/2
之间的弧度。
acos
的返回值范围是:-pi~pi
之间的弧度。
双曲函数
函数 |
说明 |
double sinh(double angle) |
返回弧度角 angle 的双曲正弦。 |
double cosh(double angle) |
返回弧度角 angle 的双曲余弦。 |
double tanh(double angle) |
返回弧度角 angle 的双曲正切。 |
对数和指数函数
函数 |
说明 |
double exp(double x) |
返回 e 的 x 次幂的值。 |
double log(double x) |
返回 x 的自然对数(基数为 e 的对数)。 |
double log10(double x) |
返回 x 的常用对数(基数为 10 的对数)。 |
浮点表示形式
函数 |
说明 |
double frexp(double x, int *exponent) |
把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent,mantissa是函数的返回值。 |
double ldexp(double x, int exponent) |
返回 x 乘以 2 的 exponent 次幂。 |
double modf(double x, double *integer) |
返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。 |
幂
函数 |
说明 |
double pow(double x, double y) |
返回 x 的 y 次幂。 |
double sqrt(double x) |
返回 x 的平方根。 |
底数、顶数、绝对值、余数
函数 |
说明 |
double ceil(double x) |
返回大于或等于 x 的最小的整数值。 |
double floor(double x) |
返回小于或等于 x 的最大的整数值。 |
double fabs(double x) |
返回 x 的绝对值。 |
double fmod(double x, double y) |
返回 x 除以 y 的余数。 |
time.h
库宏
宏 |
说明 |
NULL |
是一个空指针常量的值。 |
CLOCKS_PER_SEC |
表示每秒的处理器时钟个数。 |
库变量
变量 |
说明 |
size_t |
是无符号整数类型,它是 sizeof 关键字的结果。 |
clock_t |
是一个适合存储处理器时间的类型。 |
time_t |
是一个适合存储日历时间类型。 |
struct tm |
是一个用来保存时间和日期的结构。 |
tm
结构的定义如下:
struct tm {
int tm_sec; /* 秒,范围从 0 到 59 */
int tm_min; /* 分,范围从 0 到 59 */
int tm_hour; /* 小时,范围从 0 到 23 */
int tm_mday; /* 一月中的第几天,范围从 1 到 31 */
int tm_mon; /* 月,范围从 0 到 11 */
int tm_year; /* 自 1900 年起的年数 */
int tm_wday; /* 一周中的第几天,范围从 0 到 6 */
int tm_yday; /* 一年中的第几天,范围从 0 到 365 */
int tm_isdst; /* 夏令时 */
};
处理器时间
函数 |
说明 |
clock_t clock(void) |
返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。返回值通常是处理器时钟滴答的次数,为了把这个数值转换成秒,需要除以CLOCKS_PER_SEC。 |
当天时间
函数 |
说明 |
time_t time(time_t *timer) |
计算当前日历时间,并把它编码成 time_t 格式。 |
说明:
- 如果参数是非NULL值,时间值也将通过这个这个指针进行存储。
- 如果机器无法提供当前的日期和时间,或者时间值太大,无法使用
time_t
变量表示,函数返回-1
。
- 在MS-DOS和UNIX系统中,时刻开始流失的时刻是1970年1月1日00:00:00 。
日期和时间转换
函数 |
说明 |
char *ctime(const time_t *timer) |
返回一个表示当地时间的字符串,当地时间是基于参数 timer。 |
double difftime(time_t time1, time_t time2) |
返回 time1 和 time2 之间相差的秒数 (time1-time2)。 |
struct tm *gmtime(const time_t *timer) |
timer 的值被分解为 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。 |
struct tm *localtime(const time_t *timer) |
timer 的值被分解为 tm 结构,并用本地时区表示。 |
char *asctime(const struct tm *timeptr) |
返回一个指向字符串的指针,它代表了结构 timeptr 的日期和时间。 |
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) |
根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。 |
time_t mktime(struct tm *timeptr) |
把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。 |
注意:
代码 |
说明 |
%% |
百分号 |
%a |
星期几的简写 |
%A |
星期几的全称 |
%b |
月份的简写 |
%B |
月份的全称 |
%c |
日期和时间 |
%d |
一个月的第几天(01-31) |
%H |
24小时制的小时(00-23) |
%I |
12小时制的小时(00-12) |
%J |
一年的第几天 |
%m |
月数(01-12) |
%M |
分钟(00-59) |
%p |
本地的AM或PM的等价显示 |
%S |
秒(00-59) |
%U |
一年的第几周,把星期日做为第一天(值从0到53) |
%w |
一星期的第几天,星期日为第0天 |
%W |
一年的地基星期(值从0到53),星期一为第一天 |
%x |
使用本地的日期格式 |
%X |
使用本地的时间格式 |
%y |
当前世纪的年份(00-99) |
%Y |
年份的全写形式 |
%Z |
时区名称,如果不能得到时区名称则返回空字符。 |
assert.h
宏 |
说明 |
void assert(int expression) |
这实际上是一个宏,不是一个函数,可用于在 C 程序中添加诊断。 |
说明:
- 如果宏对表达式测试的结果为假,它就向标准错误打印一条诊断信息并终止程序。
- 当程序被完整测试完毕之后,可以在编译时通过定义
NDEBUG
消除所有的断言。当NDEBUG
被定义后,预处理器将丢弃所有的断言,而不必在程序中把所有的断言实际删除。
ctype.h
函数 |
说明 |
int isalnum(int c) |
该函数检查所传的字符是否是字母和数字。 |
int isalpha(int c) |
该函数检查所传的字符是否是字母。 |
int iscntrl(int c) |
该函数检查所传的字符是否是控制字符。 |
int isdigit(int c) |
该函数检查所传的字符是否是十进制数字。 |
int isgraph(int c) |
该函数检查所传的字符是否有图形表示法。 |
int islower(int c) |
该函数检查所传的字符是否是小写字母。 |
int isprint(int c) |
该函数检查所传的字符是否是可打印的。 |
int ispunct(int c) |
该函数检查所传的字符是否是标点符号字符。 |
int isspace(int c) |
该函数检查所传的字符是否是空白字符。 |
int isupper(int c) |
该函数检查所传的字符是否是大写字母。 |
int isxdigit(int c) |
该函数检查所传的字符是否是十六进制数字。 |
int tolower(int c) |
该函数把大写字母转换为小写字母。 |
int toupper(int c) |
该函数把小写字母转换为大写字母。 |
说明:
- 图形字符:字母、数字字符和标点符号字符的集合。
- 可打印字符:字母、数字字符、标点符号字符和空格字符的集合。
- 控制字符:在 ASCII 编码中,这些字符的八进制代码是从 000 到 037,以及 177(DEL)。
- 空格字符:制表符、换行符、垂直制表符、换页符、回车符、空格符的集合。
- 空白字符:包括空格符和制表符。
string.h
库变量
变量 |
说明 |
size_t |
无符号整数类型,它是 sizeof 关键字的结果。 |
库宏
字符串长度
函数 |
说明 |
size_t strlen(const char *str) |
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。 |
不受限制的字符串函数
函数 |
说明 |
char *strcpy(char *dest, const char *src) |
把 src 所指向的字符串复制到 dest。 |
char *strcat(char *dest, const char *src) |
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。 |
int strcmp(const char *str1, const char *str2) |
把 str1 所指向的字符串和 str2 所指向的字符串进行比较。 |
长度受限的字符串函数
函数 |
说明 |
char *strncpy(char *dest, const char *src, size_t n) |
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。 |
char *strncat(char *dest, const char *src, size_t n) |
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。 |
int strncmp(const char *str1, const char *str2, size_t n) |
把 str1 和 str2 进行比较,最多比较前 n 个字节。 |
字符串查找
函数 |
说明 |
char *strchr(const char *str, int c) |
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。 |
char *strrchr(const char *str, int c) |
在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。 |
char *strpbrk(const char *str1, const char *str2) |
检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。 |
char *strstr(const char *haystack, const char *needle) |
在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。 |
size_t strspn(const char *str1, const char *str2) |
检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。 |
size_t strcspn(const char *str1, const char *str2) |
检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。 |
char *strtok(char *str, const char *delim) |
分解字符串 str 为一组字符串,delim 为分隔符。 |
内存操作
函数 |
说明 |
void *memchr(const void *str, int c, size_t n) |
在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。 |
int memcmp(const void *str1, const void *str2, size_t n) |
把 str1 和 str2 的前 n 个字节进行比较。 |
void *memcpy(void *dest, const void *src, size_t n) |
从 src 复制 n 个字符到 dest。 |
void *memmove(void *dest, const void *src, size_t n) |
另一个用于从 src 复制 n 个字符到 dest 的函数。 |
void *memset(void *str, int c, size_t n) |
复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。 |
错误信息
函数 |
说明 |
char *strerror(int errnum) |
从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。 |
其它
函数 |
说明 |
int strcoll(const char *str1, const char *str2) |
把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。 |
size_t strxfrm(char *dest, const char *src, size_t n) |
根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。 |