TA的每日心情 | 慵懒 2016-4-21 12:07 |
---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 累计签到:3 天 连续签到:1 天
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
暑假的时候买了《C标准库》一书,但因为当时在新东方学GRE,一直没有仔细钻研。新学期开始又因为学SL而无暇顾及,只是平时隔三岔五的看了看。最近,C语言在排行榜上又位居榜首,可见其在编程界中的重要性。于是,决定花出点时间,把以前看过的整理一下,特此作出学习笔记,一是方便自己和观者以后复习,二是见证自己的点滴进步。
. S7 a3 O& n9 Z* r; U+ R9 f; d第一部分是整理自己暑假时看的内容,概括的列出头文件及其包含的成员。第二部分是着重讲几个常用的头文件及其内部实现。第三部分是通过几个小实例来测试所学。% c8 W7 S9 U, Y' \5 Z* i
以下为头文件概述(上), c) g/ E% V/ N% w% N, @- c
一、assert.h4 w# Q2 U. o8 A2 R/ |
1、void assert(int expression);
0 `5 X" b4 Y x没有返回值,如果表达式为假则调用中断。: `6 B. D4 f3 l; t! h* x3 e
二、ctype.h" a" i3 @4 }0 h$ N- y+ M5 {
1、int isalnum(int c);
* h: t8 @+ ?. U" r+ L* C$ P检查指定字符是否为数字或字母% s$ i2 D9 T# V1 S8 G; ] W! g
2、int isalpha(int c); g4 [2 a1 p) ~2 [6 y' }
检查指定字符是否为字母
8 c' D5 l5 {& j7 j. E5 p3、int iscntrl(int c);- Q, \7 x2 p# }
检查指定字符是否为:换页符、换行符、回车符、水平制表符、垂直制表符、退格符、警报符。
8 I) ` t: {" ?0 y* F0 y4 _4、int isdigit(int c);% k3 n/ `4 [2 m) |$ x* a, g' q, M
判断指定字符是否为数字+ J2 ?- j: W, X9 C( P
5、int isgraph(int c);
. B- {; u3 g8 Q9 F判断指定字符是否为除空格" "以外的所有打印字符。4 ?( ~; R1 @& F |
6、int islower(int c);1 r4 r7 y$ @( y- b3 R5 Q
判断是否指定字符为小写字符
) z: }9 I* ] w5 O! b2 @7、int isprint(int c);1 w/ m3 m! n( H# U h2 Q9 H6 X
判断是否指定字符是包括" "在内的所有可打印的字符
! L3 x. D# {4 Z8 w) T& D- G8、int isspace(int c);' V$ a' _5 j# q. ] J c; x
判断指定字符是否为换页符、换行符、回车符、水平制表符、垂直制表符、空格。/ v( U7 X* }' i5 ?
9、isupper(int c);
$ j+ A2 t7 F! x. L( q1 l" }* o# i$ X判断指定字符是否为大写字符。
! e/ q" z( s' t0 j: Z10、int isxdigit(int c);" Z/ V* j/ J V9 i8 m6 w6 Z
可字定义区域设置,默认和isdigit一样。
3 _! y* ?, ~, H5 N11、int tolower(int c);
; F" q( H1 ^( c- g将指定字符转换成小写字符。+ _7 O0 Q+ T9 A% O* a3 x6 S
12、int toupper(int c);
' i5 }) p( X, C$ G- M8 U) Q3 Y; w( R将指定字符转换成大写字符。
Y% {) Q9 Z6 f5 [! J+ W2 S三、errno.h5 q+ R% t5 [; o% n f3 a
宏部分
8 B6 Q9 J' r& M2 b* g% v7 L& E% Q四、float.h+ `1 @1 u- `4 O! ?' f" u
宏部分,测试上下溢! D" i+ H! ?8 P1 `) x0 l
五、limits.h
1 @4 s6 o! w* |6 o宏部分
% u# @0 D1 y( M( \" P六、locale.h! O- L! J( K+ g
两个函数、一种类型(struct lconv)、一些宏。7 y) z7 G3 a M/ R% |" @
1、char *setlocale(int category,const char* locale);0 z- y: ~' m$ W3 h
2、struct lconv *localeconv(void);8 E& A# c% u5 I8 O' I, a
七、math.h
9 _( {; L% Q- G. j2 X* Q6 |三角函数部分:
* c( d \' x0 [* R# s$ U1、double acos(double x);
; M6 c3 p6 v+ p% C3 O- L计算x的三角反余弦,如果x不在[-1,+1]中,则引发错误。返回值范围[0,PI]。
+ G) [( M& n B# I0 Z7 z2、double asin(double x);5 R1 d3 f0 C, `% \ c( O
计算x的三角反正弦,如果x不在[-1,+1]中,则引发错误。返回值范围[-PI/2,PI/2]。5 R! `, I: Q u& D! v9 W, X' K: T
3、double atan(double x);
. S! ~8 m' G1 \; X" ?7 W4 B) @计算x的三角反正切。返回值范围[-PI/2,PI/2]。5 z' g$ F; V) J- K# u
4、double atan2(double y,double x);; b* J3 a9 U/ C, N
计算y/x的三角反正切函数主值,如果两个参数都为0,则返回错误。返回值范围[-PI,PI]。% ]! o& r6 U* e, Y4 G5 m
5、double cos(double x);
; L1 H+ m: [ ]8 m! P计算x(以弧度为单位)的余弦值。3 L8 B& r- Y! i* _7 {! Q# n
6、double sin(double x);
" ~' H0 Q7 [- M4 a% s& r4 ^计算x(以弧度为单位)的正弦值。
' _& I, }! ? k3 W7、double tan(double x);( ^1 P+ F, Q% e* p2 w5 [7 ?3 w- B
返回x(以弧度为单位)的正切值。
" i. a: C4 J" I* [4 g8、double cosh(double x);
' Y' j6 y( p/ x7 d, u P返回x的双曲正弦,若x的值过大,则返回错误。
$ R6 X: [; `! U; `; |( \9、double sinh(double x);+ [$ C# j; p1 A+ c$ w4 d( [6 H
计算x的双曲正弦,如果x的数值太大,则返回错误。3 i4 ~& @8 J7 W5 [3 N+ [( A' t1 X
10、double tanh(double x);
* f& R+ T/ F9 k0 x( p2 ? C计算x的双曲正切。
4 U( o9 i, e8 a11、double exp(double x);
. L2 d8 I/ \5 g/ P. u8 ]计算x的指数函数。
7 ?2 m9 j6 Z+ o( ~+ s12、double frexp(double value,int *exp);
, z: N( p$ A, R, ]+ V; Z把一个浮点数分为一个小数和一个2的正数幂(两者乘积),整数部分存在exp中,返回小数部分。" f- d1 U/ k$ o1 T x0 E5 g
13、double ldexp(double x,int exp);; ]5 h' G I: y& ]
计算x*2^exp的值并返回。
9 ?/ V" m" L! N5 |+ P14、double log(double x);* ?4 M8 g4 C- l- j& g* O. n. G# A
计算x的自然对数,如果参数为负,则发生值域错误。
; y/ S! z2 L% R) m6 ]+ _/ @15、double log10(double x);
, k$ z# i9 p2 O5 [& C3 v1 m V O计算x的以10为底的对数。
9 K$ \+ c& }* }: V16、double modf(double value,double *iptr);
; U; v# a3 y. R6 k' ?将value的整数部分传给iptr,将小数部分返回。5 \4 T# d) p3 I. F I- `
幂函数部分:
) r9 ^$ k) ^; c' \1 u! \7 v1、double pow(double x,double y);
" D1 j) L; ^3 g7 V, x$ _6 f) W$ @2 g! o函数计算x的y次幂,要防止值域错误。) s$ _7 b8 \- t# J5 Z' T% s9 S
2、double sqrt(double x);
3 [% @+ Z, y) i) Q+ a/ a" n# W' Y函数计算x的非负平方根,如果参数为负,则发生错误。1 e/ _2 c! |2 \$ h4 Z1 f/ o
取整、绝对值、求模部分:
1 Z: t2 x0 t6 v8 W1、double ceil(double x);' y2 m& i4 b; ~+ n
返回不小于x的最小整数。变大取整。4 C3 V- Q: o u# P9 ^9 t t T* k9 h
2、double fabs(double x);9 r0 P4 R6 J: i8 y' G9 Q
返回x的绝对值。
) D2 t9 |+ A/ z7 ^1 {6 c: X3、double floor(double x);* ^' I1 u _* o5 q7 L$ W& k
返回不大于x的最大整数。变小取整。
2 V( X6 u; ~3 p( L4、double fmod(double x,double y);
1 ?: q2 Y' q7 E: H! N返回x/y的余数。
! O& V: o7 f: U8 d0 r八、setjmp.h
- V4 p- z: `* @! L& j. L$ z8 |定义了一个类型jmp_buf,保存调用环境的宏int setjmp(jmp_buf env);,恢复调用环境函数void longjmp(jmp_buf env,int val);
, v# O4 @# _6 o& h% Q. G6 \, ^" W用途饶过常规的函数调用和返回规则。' h* n6 _+ n* l& L+ a ~' t1 `2 D
九、signal.h7 a4 ?% I& v" B$ l2 g! x, |
同步信号(一般为程序异常)和异步信号的处理(外部行为传递的信号)。& Z7 m" C9 b# _ \0 _/ @
定义了一个类型sig_atomic_t,定义了两个函数和一些宏:
$ y9 g" {' r8 J* V! bvoid (*signal(int sig,void (*func) (int) )(int);
! n( j7 O" J5 f1 Q通过设置三种方式对信号进行处理。
2 }+ D% F+ ?+ J6 B& X0 m, g1 Cint raise(int sig);
2 v( d* e' I7 v Z ?把信号sig发送给正在执行的程序。成功返回0,否则非0。
& F" z) J0 ]/ j( ^6 f/ Z# |十、stdarg.h
' G, |/ r9 G4 u' ]1 C) J可变参数列表。定义了一个类型va_list。
3 x$ C; V8 j6 F7 a. q& M宏:
4 m6 F) D& {' G4 g* A9 H; \2 {1 y$ Y) ?1、void va_start(va_list ap,paramN);
$ e. }. {9 z. U Q对ap进行初始化。
+ { |1 [' C; }# q( A2、type va_arg(va_list ap,type);5 b2 |3 ~* |1 j# F1 V8 s E4 x
3、void va_end(va_list ap);
* Y$ K; v/ u' O, _十一、stddef.h 被放到了stdlib.h4 ]) P9 N( ^5 {- E3 x
定义了一些类型:5 L( D- ~' V6 W" ?# {7 i* u+ \: D
ptrdiff_t 两个指针相减的有符号整数类型
& z, o; C" i* Bsize_t 用sizeof操作符的结果的无符号整数类型
" P. T" G9 O1 @5 w) l6 G- ]% K7 R) {wchar_t 整值类型
% [. D! ?' ~) K4 q4 `宏:8 b2 Q- Y C2 n' w3 _, _
NULL 展开为实现定义的空指针常量。% d D% c- u2 c& W2 N
offsetof(type,member_designator) 展开为一个size_t type指定结构起始位置,member_designator指定便宜量。8 s9 k: s* K1 I v1 L
待续…… |
|