整型函数:这组函数返回整型值。这些函数分为三类:算术,随机数和字符串转换。
算术”stdlib.h”
int abs(int value);
绝对值,整数
long int labs(long int value);
绝对值,长整数
div_t div(int numerator,int denominator);
div函数把第二个参数除以第一个参数,产生商和余数,用一个div_t结构体返回。
int quot;//商
int rem;//余数
int a = 5;
int b = 3;
printf(“%d,%d”, div(a, b).quot, div(a, b).rem);
ldiv_t ldiv(long int numer,long int denom);
随机数
字符串转换”stdlib.h”
int atoi(char const *string);
说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。
long int atol(char const *string);
long int strtol(char const *string,char **unused,int base);
strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。
参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。
可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;base为8时,合法字符为‘0’,‘1’,……‘7’;base为10时,合法字符为‘0’,‘1’,……‘9’;base 为16时,合法字符为‘0’,‘1’,……‘9’,‘a’,……‘f’;base为24时,合法字符为‘0’,……‘9’,‘a’,……‘n’,base为36时,合法字符为‘0’,……‘9’,‘a’,……‘z’;等等。其中,不区分大小写,比如,‘A’和‘a’会都会被转化为10。
当字符合法时,‘0’,……‘9’依次被转换为十进制的0~9,‘a’,……‘z’一次北转换为十进制的10~35。
strtol()函数检测到第一个非法字符时,立即停止检测,其后的所有字符都会被当作非法字符处理。合法字符串会被转换为long int, 作为函数的返回值。非法字符串,即从第一个非法字符的地址,被赋给*endptr。**endptr是个双重指针,即指针的指针。strtol()函数就是通过它改变*endptr的值,即把第一个非法字符的地址传给endptr。
char buffer[20] = “590bear”;
char *stop;
printf(“%d\n”, strtol(buffer, &stop, 12));
printf(“%s\n”, stop);
输出:9947
ear
unsigned long int strtoul(char const *string,char **unused,int base);
浮点型函数
三角函数”math.h”
double sin/cos/tan(double angle);
const double pi =3.14159;
double x = 90;
printf(“%f”, sin(x*pi/180));
double asin/acos/atan(double value);
double atan2(double x,double y);
双曲函数”math.h”
double sinh/cosh,tanh(double angle);
对数和指数函数”math.h”
double exp(double x);
e的x幂
double log(double x );
double log10(double x);
浮点表示形式
幂”math.h”
double pow(double x,double y);
x的y方
double sqrt(double x);
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 );
返回从程序开始执行起处理器所消耗的时间。
要转换为秒,除以CLOCKS_PER_SEC;
当天时间”time.h”
time_t time(time_t *returned_value);
功能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。
int seconds = time((time_t*)NULL);
printf(“%d\n”, seconds);
日期和时间的转换”time.h”
char *ctime(time_t const *time_value);
char *asctime(struct tm const *tm_ptr);
void main() {
time_t timep;
time(&timep);/返回当天的日期和时间/
printf(“%s”, ctime(&timep));
}
double difftime(time_t time1,time_t time2);
计算time1-time2,并把结果值转换为秒。
把time_t值转换为一个tm结构
struct tm*gmtime(time_t const *time_value);
把时间值转换为世界协调时间
定义函数:struct tm *gmtime(const time_t *timep);
函数说明:gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。
struct tm{
int tm_sec; //代表目前秒数, 正常范围为0-59, 但允许至61 秒
int tm_min; //代表目前分数, 范围0-59
int tm_hour; //从午夜算起的时数, 范围为0-23
int tm_mday; //目前月份的日数, 范围01-31
int tm_mon; //代表目前月份, 从一月算起, 范围从0-11
int tm_year; //从1900 年算起至今的年数
int tm_wday; //一星期的日数, 从星期一算起, 范围为0-6
int tm_yday; //从今年1 月1 日算起至今的天数, 范围为0-365
int tm_isdst; //日光节约时间的旗标
};
char *wday[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
time_t timep;
struct tm *p;
time(&timep);
p = gmtime(&timep);
printf("%d %d %d", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday);
printf("%s %d;%d;%d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
输出:2018 8 9Thu 8;24;2
struct tm *localtime(time_t const *time_value);
转换为当地时间
localtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。结构tm 的定义请参考gmtime()。此函数返回的时间日期已经转换成当地时区。
char *wday[] = {“Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”};
time_t timep;
struct tm *p;
time(&timep);
p = localtime(&timep); //取得当地时间
printf (“%d%d%d “, (1900+p->tm_year), (l+p->tm_mon), p->tm_mday);
printf(“%s%d:%d:%d\n”, wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
size_t strftime(char *string,size_t maxsize,char const *format,struct tm const *tm_ptr);
把一个tm结构转换为一个根据某个格式的字符串。
格式代码:
%a 区域设置的缩写星期名
%A 区域设置的完整星期名
%b 区域设置的缩写月份名
%B 区域设置的完整月份名
%c 区域设置的适当的日期和时间表示
%d 表示为一个十进制数(01-31)的当月的第几天
%H 表示为一个十进制数(00-23)的小时时间(24小时制)
%I 表示为一个十进制数(01-12)的小时时间(12小时制)
%j 表示为一个十进制数(001-366)的当年的第几天
%m 表示为一个十进制数(01-12)的月份
%M 表示为一个十进制数(00-59)的分钟数
%p 区域设置的、与12小时制相关的AM/PM指示符等价的东西
%S 表示为一个十进制数(00-61)的秒数
%U 表示为一个十进制数(00-53)的当年的第几周(第一个星期日是第一个星期的第一天)
%w 表示为一个十进制数(0-6)的星期几,星期日表示0
%W 表示为一个十进制数(00-53)的当年的第几周(第一个星期一是第一个星期的第一天)
%x 区域设置的适当的日期表示
%X 区域设置的适当的时间表示
%y 表示为一个十进制(00-99)的不带世纪的年份
%Y 表示为一个十进制的带世纪的年份
%Z 时区名字或者它的缩写取代,如果不能确定时区,则不能被字符
%% 表示%
time_t rawtime;
struct tm *info;
char buffer[80];
time(&rawtime);
info = localtime(&rawtime);
strftime(buffer, 80, "%I - %x:%M%p", info);
printf("格式化的日期 & 时间 : |%s|\n", buffer);