本文为个人读书笔记,仅供记录学习过程中遇到的日后需要留意的问题,如有相关版权问题请及时通知作者。
整型函数
算数
int abs(int value);
long int labs(long int value);
div_t div(int numerator,int denominator);
ldiv_t ldiv(long int number,long int denom);
abs函数返回绝对值。labs用于长整数。
div函数把第二个参数除以第1个参数,产生商和余数,用一个div_t结构返回。这个结构包含
int quot; //商
int rem; //余数
随机数
下面两个函数合在一起使用能够产生伪随机数pseudo-random number。他们通过计算差生随机数,因此有可能重复出现,并不是真正的随机数。
int rand(void);
void srand(unsigned int seed);
rand返回一个范围在0和RAND_MAX(至少为32767)之间的伪随机数。当它重复调用时,函数返回这个范围内的其他数。为了得到一个更小范围的伪随机数,首先把这个函数的返回值根据所需范围的大小进行取模,然后通过加上或减去一个偏移量对它进行调整。
为了避免程序每次运行时获得相同的随机数序列,可以调用srand函数。它用它的参数值对随机数发生器进行初始化。一个常用的技巧是使用每天的时间作为随机数产生器的种子seed
字符串转换
把字符串转换为数值。atoi和atol执行基数为10的转换。strtol和strtoul允许在转换时指定基数,同时还允许访问字符串的剩余部分。
int atoi(char const *string);
long int atol(char const *string);
long int strtol(char const *string,char **unused,int base);
unsigned long int strtoul(char const *string,char **unused,int base);
如果任何一个上述函数的的第一个参数包含了前导空白字符,他们将被跳过。然后函数把合法的字符转换为指定类型的值。如果存在任何非法缀尾字符,他们也将被忽略。
atoi和atol分别把字符转换为整数和长整数值。strtol和atol同样把参数字符串转换为龙。但是strtol保存一个指向转换至后面第1个字符的指针。如果函数的第二个参数并非NULL,这个指针便保存在第二个参数所指向的位置。这个指针允许字符串的剩余部分进行处理而无需推测转换在字符串的哪个位置终止。strtoul和strtol的执行方式仙童,但它产生一个无符号长整数。
这两个函数的第3个参数是转换苏执行的基数。如果基数为0,任何在程序中用于书写整数字面值的形式豆浆杯接受,包括制定数字基数的形式。否则基数值应该在2到36的范围内——然后转换根据这个给定的基数进行。对于基数11到36,字母A到Z分别被解释为10到35.在这个上下文环境中,小写字母a-z被解释为与对应的大写字母相同的意思。
如果这些函数的string参数中并不包含一个合法的值,函数就返回0.如果被转换的值无法表示,函数便在errno中存储ERANGE这个值,并返回以下一个值。
strtol 返回值如果太大且为负返回LONG_MIN。如果值太大且为正返回LONG_MAX
strtoul如果值太大返回ULONG_MAX
浮点型函数
math.h包含了函数库中剩余的数学函数的声明。
三角函数
double sin(double angle);
double cos(couble angle);
double tan(double angle);
double asin(double value);
double acos(double value);
double atan(couble value);
double atan2(double x,double y);
sin、cos、tan参数是一个用弧度表示的角度,返回正弦余弦正切。
asin、acos、atan返回反正弦、反余弦、反正切。如果asin和acos的参数不位于-1和1之间,就出现一个定义域错误。asin和atan的返回值是在-π/2和π/2之间的一个弧度,acos的返回值是一个返回在0和π之间的弧度。
双曲函数
double sinh(double angle);
double cosh(double angle);
double tanh(double angle);
对数和指数函数
double exp(double x); //e的x次幂
double log(double x); //x的自然对数
double log10(double x); //x以10为低的对数
浮点表示形式
double frexp(double value,int *exponet);
double ledexp(doub fraction,int exponet);
double modf(double value,double *ipart);
幂
double pow(double x,double y);
double sqrt(double x);
底数、顶数、绝对值和余数
double floor(double x);
double ceil(double x);
double fabs(double x);
double fmod(double x,double y);
字符串转换
double atof(char const *string);
double strtod(char const *string,char **unused);
日期和时间函数
time.h
处理器时间
clock_t clock(void);
返回从程序开始执行器处理器所消耗的时间。
当天时间
time_t time(time_t *returned_value);
返回当前的日期和时间
日期和时间的转换
char *ctime(time_t const *time_value);
double difftime(time_t time1,time_t time2);
struct tm *gmtime(time_t const *time)value);
struct tm *localtime(time_t const *time_value);
gmtime把时间值转换为世界协调时间Coordinated Universal Time,UTC。以前被称为格林尼治标准时间Greenwich Mean Time
char *asctime(struct tm const *tm_ptr);
size_t strftime(char *string ,size_t maxsize,char const *format, struct tm const *tm_ptr);
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值
非本地跳转
int setjmp(jmp_buf state);
void longjmp(jum_buf state,int value);
信号
信号名
信号 |
含义 |
SIGABRT |
程序请求异常终止 |
SIGFPE |
发生一个算数错误 |
SIGILL |
检测到非法指令 |
SIGSEGV |
检测到对内存的非法访问 |
SIGINT |
收到一个交互性注意信号 |
SIGTERM |
收到一个中止程序的请求 |
处理信号
int rais(int sig);
void(*signal(int sig,void(*handler)(int)))(int);
打印可变参数列表
int vprintf(char const *frmat,va_list arg);
int vfprintf(FILE *stream,char const *format,va_list arg);
int vsprinf(char *buffer,char const *format,va_list arg);
执行环境
中止执行
void abort(void);
void atexit(void(func)(void));
void exit(int status);
void assert(int expression);
环境
环境environment就是一个由编译器定义的名字/值对的列表,它由操作系统进行维护。getenv函数在这个列表中查找一个特定的名字。
char *getenv(char const *name);
执行系统命令
void system(char const *command);
排序和查找
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);
category指定locale的哪个部分需要修改
值 |
修改 |
LC_ALL |
整个locale |
LC_COLLATE |
对照序列,它将影响strcoll和strxfrm的行为 |
LC_CTYPE |
丁一宇ctype.h中的函数所使用的字符类型分类信息 |
LC_MONETARY |
在格式化货币时使用的字符 |
LC_NUMERIC |
在格式化非货币值时使用的字符。同时修改由格式化输入输出函数和字符串转换函数所使用的小数点符号 |
LC_TIME |
strftime函数的行为 |
数值和货币格式
struct lconv *localeconv(void);
字符串和locale
int strcoll(char const *s1,char const *s2);
size_t strxfrm(char *s1,char const *s2,size_t size);