标准函数库
1. 整型函数
1. 算术函数
在标准库stdlib.h中;
1. int abs(int)
取一个数的绝对值;
如果这个数的绝对值不能以整数的形式出现,则会返回一个未定义。
2. long int labs(long int)
同样是取一个数的绝对值,只不过这个函数的作用范围更广。
3. div_t div(int, int)
- 求一个数的商和余数
- 返回一个包含商和余数的结构体。
- 结构体div_t:
- quot:商
- rem:余数
4. ldiv_t ldiv(long int, long int)
作用于long int 类型的除法。
2. 随机数函数
在标准库stdlib.h中;
1. int rand(void)
- 返回一个伪随机数
2. void srand(unsigned int)
- 设置seed(种子),减少随机数生成的重复率。
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int main(void)
{
srand((unsigned int)time(NULL)); // 保证种子每时每刻唯一
for (int i = 0; i < 100; i++) {
printf("%d\t", rand());
}
}
3. 字符串转换
在标准库stdlib.h中;
将字符串转换成整数
1. int atoi(char const*)
将字符串转换成整数,int类型;
会跳过前导的空白字符,忽略所有的非法缀尾字符。
2. long int atol(char const*)
将字符串转换为长整型long int。
3. long int strtol(char const*, char**, int)
可以指定基数,第三个参数;
可以保存第一个不为数字的字符的位置。保存在第二个参数中;
4. unsigned long int strtoul(char const*, char**, int)
以无符号长整型保存结果。
5. 错误返回值
如果以上函数传入的字符串中没有合法的数值,则返回0.如果被转换的值无法表示(如超过当前可表示的范围),函数则会在errno中保存ERANGE这个值,并返回下表中的一个值
函数 | 返回值 |
---|---|
strtol | 如果值太大且为负数,返回LONG_MIN;如果值太大且为正数,则返回LONG_MAX |
strtoul | 如果值太大返回ULONG_MAX |
2. 浮点型函数
- 包含在math.h中;
- 返回值都是double类型;
1. 三角函数
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); // 返回y/x的反正切值
2. 双曲函数
double sinh(double angle); // 双曲正弦
double cosh(double angle); // 双曲余弦
double tanh(double angle); // 双曲正切
3. 对数和指数函数
double exp(double x); // e^x
double log(double x); // 自然对数ln(x)
double log10(double x); // 底数为10的对数,log10(x)
任意数b为底的对数:
l
o
g
b
x
=
l
n
x
/
l
n
b
log_b^x = ln^x / ln^b
logbx=lnx/lnb
4. 浮点表示形式
// 计算一个浮点型的小数(fraction)和指数(exponent)
double frexp(double value, int *exponent);
// 根据小数和指数,计算一个浮点数value
double ldexp(double fraction, int exponent);
// 把一个浮点值分成整数和小数部分,每个部分都和原值有相同的符号。返回小数部分,ipart指向小数部分
double modf(double value, double *ipart);
5. 幂
double pow(double x, double y); // x^y
double sqrt(double x); // 开平方x,√x
6. 底数、顶数、绝对值和余数
double floor(double x); // 向下取整
double ceil(double x); // 向上取整
double fabs(double x); // 绝对值
double fmod(double x, double y); // 取模
7. 字符串转换
double atof(char const* string);
double strtod(char const *string, char **unused);
3. 日期和时间函数
在time.h中
1. 处理器时间
clock_t clock(void); // 返回从程序开始执行起处理器消耗的时间
返回值是处理器时钟滴答的次数,要获得秒数需要除以 CLOCKS_PER_SEC。
2. 当天时间
time_t time(time_t *returned_value); // 返回当前的日期和时间
如果参数不是一个NULL的指针,时间值也将通过这个指针存储。
如果机器无法提供当前时间,或者这个时间值太大无法通过time_t类型存储,则返回-1。
3. 日期和时间的转换
1. ctime和difftime
// 日期转换成字符串
char *ctime(time_t const *time_value); // 返回time_value所对应的时间的字符串形式
double difftime(time_t time1, time_t time2); // 计算时间差,以秒为单位
2. gmtime和localtime
struct tm *gmtime(time_t const *time_value); // 格林时间UTC
struct tm *localtime(time_t const *time_value); // 本地时间
tm 结构体
类型&名称 | 范围 | 含义 |
---|---|---|
int tim_sec; | 0-61 | 分之后的秒数* |
int tm_min; | 0-59 | 小时之后的分数 |
int tm_hour; | 0-23 | 午夜之后的小时数 |
int tm_mday; | 1-31 | 当月的日期 |
int tm_mon; | 1-11 | 1月之后的月数 |
int tm_year; | 0-?? | 1900年之后的年数 |
int tm_wday; | 0-6 | 星期天之后的天数 |
int tm_yday; | 0-365 | 1月1日之后的天数 |
int tm_isdat; | 夏令时的标志 |
tm_year
:在使用时必须加上1900,才能获取到真正的年份
3. asctime和strftime
char *asctime(struct tm const *tm_ptr);
size_t strftime(char *string, size_t maxsize, char const *format, struct tm const *tm_ptr);
- asctime函数:将参数所表示的时间转换成一个以下面格式的字符串:Mon Aug 13 08:23:14 2012
- strftime函数:把一个tm结构转换成一个根据某格式字符串而定的字符串。
说明符 | 替换为 | 实例 |
---|---|---|
%a | 缩写的星期几名称 | Sun |
%A | 完整的星期几名称 | Sunday |
%b | 缩写的月份名称 | Mar |
%B | 完整的月份名称 | March |
%c | 日期和时间表示法 | Sun Aug 19 02:56:02 |
%d | 一月中的第几天(01-31) | 19 |
%H | 24 小时格式的小时(00-23) | 14 |
%I | 12 小时格式的小时(01-12) | 05 |
%j | 一年中的第几天(001-366) 231 | |
%m | 十进制数表示的月份(01-12) | 08 |
%M | 分(00-59) | 55 |
%p | AM 或 PM 名称 | PM |
%S | 秒(00-61) | 02 |
%U | 一年中的第几周,以第一个星期日作为第一周的第一天(00-53) | 33 |
%w | 十进制数表示的星期几,星期日表示为 0(0-6) | 4 |
%W | 一年中的第几周,以第一个星期一作为第一周的第一天(00-53) | 34 |
%x | 日期表示法 | 08/19/12 |
%X | 时间表示法 | 02:50:06 |
%y | 年份,最后两个数字(00-99) | 01 |
%Y | 年份 | 2012 |
%Z | 时区的名称或缩写 | CDT |
%% | 一个 % 符号 | % |
4. mktime
// 将一个tm结构的时间转换成time_t类型
time_t mktime(struct tm *tm_ptr);
4. 非本地跳转函数
在头文件setjump.h中被声明。
int setjump(jump_buf state);
void longjump(jump_buf state, int value);