【C语言】标准函数库

标准函数库

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-111月之后的月数
int tm_year;0-??1900年之后的年数
int tm_wday;0-6星期天之后的天数
int tm_yday;0-3651月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
%H24 小时格式的小时(00-23)14
%I12 小时格式的小时(01-12)05
%j一年中的第几天(001-366) 231
%m十进制数表示的月份(01-12)08
%M分(00-59)55
%pAM 或 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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值