TA的每日心情 | 慵懒 2016-4-21 12:07 |
|---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 累计签到:3 天 连续签到:1 天
|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
暑假的时候买了《C标准库》一书,但因为当时在新东方学GRE,一直没有仔细钻研。新学期开始又因为学SL而无暇顾及,只是平时隔三岔五的看了看。最近,C语言在排行榜上又位居榜首,可见其在编程界中的重要性。于是,决定花出点时间,把以前看过的整理一下,特此作出学习笔记,一是方便自己和观者以后复习,二是见证自己的点滴进步。
. q; |- ?. B# h( ^' D( B3 N' I第一部分是整理自己暑假时看的内容,概括的列出头文件及其包含的成员。第二部分是着重讲几个常用的头文件及其内部实现。第三部分是通过几个小实例来测试所学。
( ?1 W/ i+ ^, Q2 |以下为头文件概述(上), }$ y3 c. K6 o. W* `# W
一、assert.h5 |. D# m, F. V
1、void assert(int expression);
' O. {% K0 {; D) @2 P没有返回值,如果表达式为假则调用中断。
3 }, E$ l" @6 M9 C二、ctype.h
2 w6 B- [1 c. ]7 J! G/ h1、int isalnum(int c);) u+ E1 @! Z8 G4 I) ]4 p5 m
检查指定字符是否为数字或字母8 k. ]8 K# C( t7 v: V
2、int isalpha(int c);0 p) A* t' d) n4 c4 \: V
检查指定字符是否为字母* E4 {9 ?$ e4 s: g9 T+ Y1 |
3、int iscntrl(int c);0 u r) j1 X+ s( F
检查指定字符是否为:换页符、换行符、回车符、水平制表符、垂直制表符、退格符、警报符。7 ~. \+ A5 ?. ~' s. m4 v8 d
4、int isdigit(int c);
( ~; V5 p. X6 L- C. k判断指定字符是否为数字
: a! o! s' `$ V0 S1 B; R5 ~* ^, T5、int isgraph(int c);# M! p9 O; @4 _7 ?7 {
判断指定字符是否为除空格" "以外的所有打印字符。
7 i9 R+ @! p" _6、int islower(int c);
4 {( ^8 k# y2 h判断是否指定字符为小写字符; C! V# n. c. s# R
7、int isprint(int c);
. R* N( }5 W+ q# G判断是否指定字符是包括" "在内的所有可打印的字符
* r8 W+ U N& b: A) v! t8、int isspace(int c);
7 H; Q0 w7 S. W: H$ ~6 h2 i3 a5 Q判断指定字符是否为换页符、换行符、回车符、水平制表符、垂直制表符、空格。
. G P5 X! `1 y4 [9、isupper(int c);; B3 L3 p* u6 e" ^, [
判断指定字符是否为大写字符。 R# H- l `7 f* T( v
10、int isxdigit(int c);
; a' K3 `$ w! L; A可字定义区域设置,默认和isdigit一样。2 [3 t& b6 {1 h- G4 o) K, @2 o
11、int tolower(int c);
; ]$ p* ]. {+ ]: a- ]4 t6 |8 y8 R( p将指定字符转换成小写字符。
* ^3 o9 Q' L! S# I- U8 ^12、int toupper(int c);
}8 ]3 K9 ]) j4 f# O/ t将指定字符转换成大写字符。
. Y2 g& I1 P) q6 g% N6 o2 }1 T0 o. ~; e三、errno.h
* a- Q1 _6 Y/ f7 n& s. {宏部分/ p# n/ c4 e- K9 q/ C/ u8 \$ C. v
四、float.h- h9 x+ n( `$ Y0 h/ R5 S$ H
宏部分,测试上下溢( n8 c. f0 n$ V, q' ~
五、limits.h
. Z* k' D3 B: G) @; a6 D1 F1 W宏部分+ X. s* m! C5 s8 a) ^, ]
六、locale.h
1 y$ `4 k3 f! [, A6 ^两个函数、一种类型(struct lconv)、一些宏。9 n4 A4 W* c7 M8 ^
1、char *setlocale(int category,const char* locale);% a/ L; C2 O- V& \6 S
2、struct lconv *localeconv(void);
- C4 s1 O- J: b* M$ |2 K2 H七、math.h' Q) Y5 F9 n6 X; n( W
三角函数部分:
3 }7 ]( j9 h+ P: ~& ^: r$ o1、double acos(double x);
+ U4 `, ~/ H/ j) w! {: E计算x的三角反余弦,如果x不在[-1,+1]中,则引发错误。返回值范围[0,PI]。8 g) e, j( U3 C1 i
2、double asin(double x);& d) _1 p! R, _
计算x的三角反正弦,如果x不在[-1,+1]中,则引发错误。返回值范围[-PI/2,PI/2]。
5 N% r6 n: j' z1 K9 B3、double atan(double x);+ T( `7 I* H( S/ Y1 j9 F5 {
计算x的三角反正切。返回值范围[-PI/2,PI/2]。$ y3 f' {! z, Y; u8 d+ u1 p4 [
4、double atan2(double y,double x);8 U) Z7 b4 ^1 k% |' R& ~
计算y/x的三角反正切函数主值,如果两个参数都为0,则返回错误。返回值范围[-PI,PI]。+ x( ]* V/ _6 n" q2 ?9 L9 m
5、double cos(double x);, c/ }1 z4 d5 E
计算x(以弧度为单位)的余弦值。
" w" }+ F$ u/ P3 E) L, o6、double sin(double x);
1 P7 c; I# v" R; h, H计算x(以弧度为单位)的正弦值。% i/ H6 f- z& @# {
7、double tan(double x);4 p) |* j) Q' j. j; j+ |' Y
返回x(以弧度为单位)的正切值。
% |' L3 w0 F8 C7 c5 i! y8、double cosh(double x);
8 E- @7 ^/ H! H* l返回x的双曲正弦,若x的值过大,则返回错误。$ j$ N. e: v& B" X; Q( ?
9、double sinh(double x);3 W3 ?8 E6 A; u1 ?% P! A& g$ o4 x& v$ r: }
计算x的双曲正弦,如果x的数值太大,则返回错误。
: W7 i0 s, K! F8 B10、double tanh(double x);% Y$ {" L5 I. d/ `! t' l+ j' D
计算x的双曲正切。
0 s# \9 H; B6 R; H11、double exp(double x);
4 W6 B1 J) C; f计算x的指数函数。# O: U7 |: e) s/ V% I) w
12、double frexp(double value,int *exp);
* y0 Q0 x+ ^- B7 S3 \* c把一个浮点数分为一个小数和一个2的正数幂(两者乘积),整数部分存在exp中,返回小数部分。
% T; `' P7 g6 c: R13、double ldexp(double x,int exp);: E _4 k) ?0 F7 J% U4 F) g
计算x*2^exp的值并返回。* `* b, O" }% v( ?1 d) Q
14、double log(double x);( r: Z* z, ~/ g6 o$ m
计算x的自然对数,如果参数为负,则发生值域错误。
. T' j& y$ @* i9 M* i$ d15、double log10(double x);% c/ c2 }& {/ \" S. Y* W" y
计算x的以10为底的对数。" M; K A) ]; m9 H6 m
16、double modf(double value,double *iptr);7 x9 {- m. K, D! C% h% s! C9 Q& G
将value的整数部分传给iptr,将小数部分返回。 @2 r, {% S5 s0 } k* ?. u
幂函数部分:: H8 ^# O# g# X8 O3 H4 d' o: c
1、double pow(double x,double y);/ C& X" o* `/ {* `$ e1 E0 V" f
函数计算x的y次幂,要防止值域错误。
7 I1 G) X1 U4 u! Q6 _) _2、double sqrt(double x);% J. `: G& |! k' k# K! n0 f
函数计算x的非负平方根,如果参数为负,则发生错误。6 u Q/ d, G8 y0 o+ l) q
取整、绝对值、求模部分:
# c$ a& V' J7 R$ w- Y0 }9 i7 m1、double ceil(double x);
+ |# m$ R" |6 ]' O; ]( M返回不小于x的最小整数。变大取整。6 Z! g) E9 s& O/ K- s1 u7 C
2、double fabs(double x);6 L" w( B) x9 w3 G X
返回x的绝对值。/ h8 x3 @- J: y8 `9 X" p: C
3、double floor(double x);
( B0 k0 `* {3 H: |$ `返回不大于x的最大整数。变小取整。$ s u$ l. n' F3 _# {: b
4、double fmod(double x,double y);; J; Q# g3 r; k3 L
返回x/y的余数。
3 X" b8 \" ^/ n% H. M# w0 l* [八、setjmp.h
! `& X: t5 E1 |定义了一个类型jmp_buf,保存调用环境的宏int setjmp(jmp_buf env);,恢复调用环境函数void longjmp(jmp_buf env,int val);
( g1 u/ U: b4 X" i用途饶过常规的函数调用和返回规则。
! e7 U, w( n+ ?4 I7 p4 i九、signal.h o* }. Y( W( ^1 b' Y/ n
同步信号(一般为程序异常)和异步信号的处理(外部行为传递的信号)。 |5 G- k+ r2 l: q" l3 J1 S
定义了一个类型sig_atomic_t,定义了两个函数和一些宏:$ L, H9 ~4 Z' m3 `9 I
void (*signal(int sig,void (*func) (int) )(int);
2 f- Q G# \+ q+ g通过设置三种方式对信号进行处理。4 }$ w+ Q3 Q& a. N0 Q! {( v* p
int raise(int sig);1 }* d% r4 k* y+ g# P8 @$ @/ H! d+ b
把信号sig发送给正在执行的程序。成功返回0,否则非0。
1 \8 ]% u9 c7 }! q- X十、stdarg.h
) ` A* U! i2 a% {; N" y, y5 w8 B; ]可变参数列表。定义了一个类型va_list。* C1 D0 ~ o0 t% X/ F
宏:' Z) E5 I" _% ?' H9 A8 S A" \; Q: y
1、void va_start(va_list ap,paramN);
1 K5 F( F, E* x- P* }) G7 {8 R对ap进行初始化。
6 T1 ^* I {9 V" a. D% e% a2、type va_arg(va_list ap,type);9 g5 R0 t, R/ j9 t4 C9 i( e! d5 C
3、void va_end(va_list ap);
: x* y' q9 k6 J- s8 C; p% S4 l十一、stddef.h 被放到了stdlib.h
$ B' q5 p" Y7 H2 U' {( z/ A4 O定义了一些类型:
6 W; d7 N3 x" T, q# Rptrdiff_t 两个指针相减的有符号整数类型
2 b# x0 d6 M0 n! \size_t 用sizeof操作符的结果的无符号整数类型
: Y7 {, F7 P0 P* X8 M& Jwchar_t 整值类型
$ n* ~% g1 u( S% c4 [5 Q宏:
- F. U* {+ Y2 b- I; ~9 g6 M. mNULL 展开为实现定义的空指针常量。4 m$ @/ E1 |! x5 _
offsetof(type,member_designator) 展开为一个size_t type指定结构起始位置,member_designator指定便宜量。
8 @! U5 U* w* d' g. B# f待续…… |
|