C语言读书笔记Word下载.docx

上传人:b****5 文档编号:18783423 上传时间:2023-01-01 格式:DOCX 页数:20 大小:37.71KB
下载 相关 举报
C语言读书笔记Word下载.docx_第1页
第1页 / 共20页
C语言读书笔记Word下载.docx_第2页
第2页 / 共20页
C语言读书笔记Word下载.docx_第3页
第3页 / 共20页
C语言读书笔记Word下载.docx_第4页
第4页 / 共20页
C语言读书笔记Word下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言读书笔记Word下载.docx

《C语言读书笔记Word下载.docx》由会员分享,可在线阅读,更多相关《C语言读书笔记Word下载.docx(20页珍藏版)》请在冰豆网上搜索。

C语言读书笔记Word下载.docx

等。

还有一些是特殊的字符常量,如'

\n'

\t'

分别代表换行和横向跳格。

2e-x+y5{"

U6Vu%F8l/x)a

字符变量以char来定义,一个变量只能存放一个字符常量。

字符串常量是由双引号括起来的字符序列。

这里一定要注意'

和"

a"

的不同,前者为字符常量,后者为字符串常量,c规定:

每个字符串的结尾加一个结束标志'

\0'

,实际上"

包含两个字符:

'

和'

5d4r4g7z(w(g6b-K"

A

6.数值型数据间的混合运算5A:

N/{/d"

f0`(h

整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则:

char,short->

int->

unsigned->

long->

double<

-float3X-w2Y6XQ6k-m3B

7.运算符和表达式7l.I+`6N3c(b.n4z

c运算符包括:

算数运算符( + - * / % )#H8{(s"

C6N*l$T'

`#t;

R

关系运算符(>

<

==>

=<

=!

=))`([a)K/x%m,A6B

逻辑运算符(!

&

&

||)

位运算符(<

<

>

>

~|^&

)4a:

X#Q:

d;

U*v

赋值运算符( =)

条件运算符( ?

:

);

O5E:

j2X5w1Y;

Y3s9Y5|5L

逗号运算符(,)

指针运算符(*&

求字节数(sizeof)

强制类型转换(类型)#R"

O5p!

t;

GQ1n"

g

分量运算符( .->

)"

A/Y2h(O#N)q!

\*p

下标运算符( [])

其它运算符( 如函数调用运算符())1p/@/B.f,M,Qb,R

自增自减运算符( ++--)注意:

++i和i++的不同之处,++i使用i之前先使i加1,i++使用i之后,使i加1。

逗号表达式的求解过程:

先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值。

+v!

k'

}:

r-a$E)X7i

1i\'

F-["

e5{,u

第三章最简单的c程序设计

1.c的9种控制语句:

7F6p9_$K:

f9E#O0h9T%n5a

if()~else~

for()~5\-W4q8G*l)h7b

while()~

do~while()

continue9U&

x"

{1e(X#bi*z

break

switch

goto#O$F/u/Bs!

c:

})T;

X

return)B.a$V"

B.b%c1c,H1w

程序的三种基本结构:

顺序结构,选择结构,循环结构

3?

2x8e:

^w,F|

2.数据输出

c语言不提供输入输出语句,输入输出操作是由c的库函数完成。

但要包含头文件stdio.h。

:

v$}-y(r9Y

putchar()向终端输出一个字符[7O5s6s9A3u4K

printf()的格式字符:

①d格式符 用来输出十进制整数-|3R/Zc0T0l

%d按整型数据的实际长度输出

%md使输出长度为m,如果数据长度小于m,则左补空格,如果大于m,则输出实际长度

%ld输出长整型数据&

G5q&

H%g9j&

p3w5P5L

②o格式符 以八进制形式输出整数

③x格式符 以十六进制形式输出整数

④u格式符 用来输出unsigned型数据,以十进制形式输出7S0A0P$D%n!

W(B

⑤c格式符 用来输出一个字符

⑥s格式符 输出一个字符串

%s 输出实际长度字符串

%ms输出的串占m列,如果串长度小于m,左补空格,如果大于m,实际输出8N3Jw2[;

O"

~"

z0a

%-ms输出的串占m列,如果串长度小于m,右补空格,#C{+Q9j/j2J

%m.ns输出占m列,但只取字符串中左端n个字符并靠右对齐7c.i5~&

d9}1F#h3B&

D'

Y

%-m.nsm、n含义同上,靠左对齐,如果n>

m,则m自动取n值

⑦f格式符 以小数形式输出实数8|+g"

z(z+x)n8^'

J%Z

%f整数部分全部输出,小数部分输出6位

%m.nf输出数据共占m列,其中有n位小数。

如果数值长度小于m,左补空格"

q+K2A%c&

?

2d,`.V)?

#K

%-m.nf同上,右补空格

⑧e格式符 以指数形式输出实数

%e系统指定6位小数,5位指数(e+002)

⑨g格式符 输出实数,根据数值大小,自动选f格式或e格式2J'

So:

q'

T,o!

v9E

3.数据输入8j$Q:

|5@2z-V

getchar()从终端输入一个字符,`!

I0O2_$r4r1T!

f8Q/_&

n

scanf(格式控制,地址列表)标准Cscanf中不使用%u,对于unsigned型数据,以%d或%o或%x输入。

%后的*,用来跳过它相应的数据。

输入数据时不能规定精度如scanf("

%7.2f"

&

a);

是不合法的。

第四章逻辑运算和判断选取控制&

m"

O8n1I*]3y2p6H#r

1.关系运算符:

c提供6种关系运算符(>

=>

===!

=)前四种优先级高于后两种。

t8N7@-~6x2v&

P,b

2.If语句D0G'

d9La.f,^

C提供了三种形式的if语句

If(表达式)语句

If(表达式)语句1else语句2

If(表达式1)语句18B&

|/O+M1o4Z

Elseif(表达式2)语句2

…-J4t3y2m"

L:

@5L0T:

Z5T

else语句n

3.条件运算符&

~8f*q,R'

(a>

b)?

a:

b条件为真,表达式取值a,否则取值b:

v8g;

f)x4]+w/E*s%s

4.Switch语句

Switch(表达式)&

})M'

c$H4F8a

{:

U4?

^+n9A*Q

case常量表达式1:

语句1;

break;

7S*@+F%?

3L&

o0g

case常量表达式2:

语句2;

  …

case常量表达式n:

语句n;

7y9k6z8z7~,O!

Z

  default:

语句n+1;

}&

b;

\0o1y;

y+t

*dJ*D8U;

e;

mx

第五章循环控制

1.几种循环语句)H)_.F/P2f0B,?

goto语句(现已很少使用)

while语句 先判断表达式后执行语句

do-while语句 先执行语句后判断表达式!

5V;

Vy3^,d)H

for语句)e9k"

I3e(b8|E$S(K!

9^%K

2.Break语句和continue语句

Break语句用于跳出循环,continue用于结束本次循环。

"

~:

}5P%^&

G"

C9M$F1w

第六章数组6R$[7}.V4N,p(M

1.一维数组3b&

e'

a!

r.A4\)x-M)B

c规定只有静态存储(static)和外部存储(extern)数组才能初始化。

给数组初始化时可以不指定数组长度。

4m1z5C-A9i"

]4i!

P

2.二维数组5q9w3^.Z6^8T$M(p

3.字符数组

部分字符串处理函数1A*`,G)b!

l/[V7e

puts(字符数组) 将一个字符串输出到终端。

(n'

n5a%A'

DU;

y-s'

h8x

gets(字符数组)从终端输入一个字符串到字符数组,并且得到一个函数值,为该字符数组的首地址

strcat(字符数组1,字符数组2) 连接两个字符数组中的字符串,数组1必须足够大。

Strcpy(字符数组1,字符串2)  将字符串2拷贝到字符数组1中。

/j(f!

x%X#f)[0I+l

Strcmp(字符串1,字符串2)比较字符串,相等返回0,字符串1>

字符串2,返回正数,小于返回负数。

Strlen(字符数组)求字符串长度。

3w:

@1Y-M&

r

Strlwr(字符串) 将字符串中的大写字母转换成小写

Strupr(字符串) 将字符串中的小写字母转换成大写

以上是一些比较常用的字符串处理函数。

6k2A.R7E5\9O(_;

`!

j#i&

k%J6C#J9u2w

第七章函数u0G2@!

N;

S

1.关于形参和实参的说明

①在函数被调用之前,形参不占内存

②实参可以是常量、变量或表达式1l4I2|3R$L

③必须指定形参的类型:

_%Z.M)J1v.Q(A5\2V$bI5n4z

④实参与形参类型应一致1n!

z8a&

y-D-|%W-B

⑤实参对形参的数据传递是"

值传递"

,即单向传递4Y+N%h-@;

g"

K,r/a

2.函数返回值

如果想让函数返回一个值,在函数中就要用return语句来获得,在定义函数时也要对函数值指定类型,如果不指定,默认返回整型。

-^#l%q0N4IH

3.函数调用

1)注意在函数调用时实参和形参的个数、类型应一一对应。

对实参表求值的顺序是不确定的,有的系统按自左至右,有的系统则按自右至左的顺序。

这一点要注意。

x+s!

s4R4~+c

2)函数调用的方式:

函数语句,函数表达式,函数参数

3)如果主调函数和被调函数在同一文件中,并且主调函数在前,那么一般要在主调函数中对被调函数进行说明。

除非:

(1)被调函数的返回值类型为整型或字符型

(2)被调函数出现在主调函数之前。

%C-_'

m(`,y"

L

4)对函数的说明和定义是不同的,定义是指对函数功能的确立,包括指定函数名,函数值类型,形参及其类型、函数体等。

说明则只是对已定义的函数返回值类型进行说明,只包括函数名、函数类型以及一个空的括弧,不包括形参和函数体。

3e"

X/l$l$t-t)q3O1t(O

5)c语言允许函数的递归调用(在调用一个函数的过程中又出现直接或间接的调用该函数本身)。

4.数组作为函数参数

1)数组元素作为函数参数 和一般变量相同

2)数组名作参数应该在主调和被调函数分别定义数组,形参数组的大小可以不定义。

注意:

数组名作参数,不是单向传递。

N6Y%Z/L4X7g$T8~!

p8k

3)多维数组作参数,在被调函数中对形参数组定义时可以省略第一维的大小说明,但不能省略第二维或更高维的说明。

5.局部变量和全局变量

从变量作用域角度分,变量可分为局部变量和全局变量。

2k6v0O9g/]8e.]/~

1)内部变量(局部变量)

在一个函数内定义,只在函数范围内有效的变量。

3k9d3@/W#S!

|&

N

  2)外部变量(全局变量)

在函数外定义,可以为本文件其它函数所共用,有效范围从定义变量的位置开始9y-u/q9R%X"

]!

M"

D

     到本文件结束。

建议尽量少使用全局变量,因为它在程序全部执行过程中都占用1`'

S.j$R6z!

m$^8N

     资源,而且使函数的通用性降低了。

如果在定义外部变量之前的函数要想使用该

     外部变量,则应在该函数中用extern作外部变量说明。

*x(_6u"

}/i$b%F7x0]

6.动态存储变量与静态存储变量

从变量值存在的时间(生存期)角度来分,可分为静态存储变量和动态存储变量。

静态存储指在程序运行期间给变量分配固定的存储空间,动态存储指程序运行期间根据需要动态的给变量分配存储空间。

C语言中,变量的存储方法分为两大类:

静态存储类和动态存储类,具体包括:

自动的(auto),静态的(static),寄存器的(register),外部的(extern)。

0N&

B7H)q9G(S4aq

1)局部变量的存储方式2g!

|(B,Ir

函数中的局部变量如不作专门说明,都之auto的,即动态存储的,auto可以省略。

局部变量也可以定义为static的,这时它在函数内值是不变的。

静态局部变量如不赋初值,编译时系统自动赋值为0,动态局部变量如不赋初值,则它的值是个不确定的值。

C规定,只有在定义全局变量和局部静态变量时才能对数组赋初值。

为提高执行效率,c允许将局部变量值放在寄存器中,这种变量叫register变量,要用register说明。

但只有局部动态变量和形式参数可以作为register变量,其它不行。

3q6`A.z&

U

2)全局变量的存储方式

全局变量在函数外部定义,编译时分配在静态存储区,可以在程序中各个函数所引用。

多个文件的情况如何引用全局变量呢?

假如在一个文件定义全局变量,在别的文件引用,就要在此文件中用extern对全局变量说明,但如果全局变量定义时用static的话,此全局变量就只能在本文件中引用了,而不能被其它文件引用。

3)存储类别小结7r5M4i%@"

r.l6J&

从作用域角度分,有局部变量和全局变量

局部变量:

自动变量,即动态局部变量(离开函数,值就消失)8_0e/}6_"

J

     静态局部变量(离开函数,值仍保留)

 寄存器变量(离开函数,值就消失)(h7})s4S1t:

X;

Y#D)Q/q

 (形参可定义为自动变量和寄存器变量)

全局变量:

静态全局变量(只限本文件引用)1Q)j)d/k*I4P

 全局变量(允许其它文件引用)

从存在的时间分,有静态存储和动态存储0|4u#U(W&

d4Yc$S

动态存储:

自动变量(本函数内有效)$W0o!

U&

_-nb:

h2V"

|

 寄存器变量(本函数内有效)

 形参)}3I"

@+g3j.w5W

静态存储:

静态局部变量(函数内有效)

 静态全局变量(本文件内有效)

 全局变量(其它文件可引用)9|,B7h*P1w*T;

N/M3N0b3t

从变量值存放的位置分

静态存储区:

静态局部变量

  静态全局变量({3k7n3t)n

全局变量

动态存储区:

自动变量和形参$]&

H1Q-V5D3Q!

z

寄存器内:

寄存器变量

7.内部函数和外部函数

内部函数:

只能被本文件中的其它函数调用,定义时前加static,内部函数又称静态函数。

3X$o;

z;

2E1Dj#A:

B

外部函数:

可以被其它文件调用,定义时前加extern,如果省略,则隐含为外部函数,在需要调用此函数的文件中,一般要用extern说明。

第八章预编译处理

c编译系统在对程序进行通常的编译之前,先进行预处理。

c提供的预处理功能主要有以下三种:

1)宏定义 2)文件包含 3)条件编译!

p&

b7R-r2V.l3j+Y&

1.宏定义6m4D(@:

N/A1{

不带参数的宏定义

用一个指定的标识符来代表一个字符串,形式:

#define标识符字符串!

y)G3e6F+E"

j

几点说明:

4?

4R.R2R3w4w

1)宏名一般用大写

2)宏定义不作语法检查,只有在编译被宏展开后的源程序时才会报错:

j(Z5d'

E*B5f5^6s9e3p

3)宏定义不是c语句,不在行末加分号

4)宏名有效范围为定义到本源文件结束

5)可以用#undef命令终止宏定义的作用域`/~,p#D4c

6)在宏定义时,可以引用已定义的宏名#e;

C%d+]&

带参数的宏定义

定义形式:

#define宏名(参数表) 字符串:

q8r1B'

s$e'

B;

nX"

M

这和函数有些类似,但他们是不同的:

@0t$T1j9g

1)函数调用时,先求实参表达式值,再代入形参,而宏只是简单替换,并不求值5[(q1l"

P'

k:

E*v-b)T

2)函数调用是在程序运行时分配内存的,而宏展开时并不分配内存,也没有返回值的概念0C#]&

D6M#j.r;

_

3)对函数中的实参和形参都要定义类型,而且要求一致,宏名无类型,其参数也没有类型。

.F/a!

h(f"

4)函数只有一个返回值,而宏可以得到几个结果4G'

{$g5U)g0M1?

f

5)宏替换不占运行时间,只占编译时间,而函数调用占运行时间

2.文件包含处理&

s4c(H6C9m

#include"

文件1"

就是将文件1的全部内容复制插入到#include位置,作为一个源文件进行编译。

@8Y9L$Z%M$n8o7J-Q+M

在#include命令中,文件名可以用"

也可以用<

,假如现在file1.c中包含file2.h文件,"

表示系统先在file1.c所在目录中找file2.h,如果找不到,再按系统指定的标准方式检索目录,<

表示系统直接按指定的标准方式检索目录。

所以用"

保险一点。

3.条件编译

条件编译指不对整个程序都编译,而是编译满足条件的那部分。

条件编译有以下几种形式:

1)#ifdef标识符&

}$d'

I%|7t5r+y5v3e

 程序段1

 #else

程序段2

#endif

它的作用:

当标识符在前面已经被定义过(一般用#define),则对程序段1编译,否则对程序段2编译。

$\%i*o:

y1[/j-R9r9|3q"

2)#ifndef标识符U&

]5E'

{1W"

R3V$\+[#H+E

程序段1${*i-`(i*r0G(l

#else'

H*H6}/Y%V#n6`.u*D4F!

s

程序段2#X2Z;

{*o-m1R%H`]u%T

它的作用和#ifdef相反,当标识符没被定义过,对程序段1编译,否则对程序段2编译。

3)#if表达式{5U+O9Q%^.]+n3`

程序段1+H%b+x3R6w;

T.a)@2W9w7w

  #else

 程序段2)v#P7J+t;

P;

y#F!

i

当表达式值为真(非0)时,对程序段1编译,否则对程序段2编译。

*U$T)r/Y,Z#F-E

"

^,{9R)v'

Q$O)}3\

0r*N2I2^:

o;

^(p-e(~

第九章指针

  指针说白了就是地址。

指针变量就是用来存放指针(地址)的变量。

6D4q,h^:

g,U8~+S#^

1.变量的指针和指向变量的指针变量&

h8W'

h1}8w

读起来很拗口,说白了就是变量的地址和用来存放变量地址的地址变量。

因为一个变量在编译的时候系统要为它分配一个地址,假如再用一个变量来存放这个地址,那么这个变量就叫做指向变量的指针变量,也就是用来存放变量地址的这么一个变量。

所谓"

指向"

就是指存放×

×

的地址,如指向变量的指针变量,"

就是指用来存放变量的地址,再如指向数组的指针变量,"

就是指存放数组的地址。

只要理解了这个,指针也就不难了。

另外,还有指向字符串的指针变量,指向函数的指针变量,指向指针的指针变量等。

1)指针变量的定义

形式:

类型标识符 *标识符 如:

int*pointer;

/U(["

v6p%L9f

要注意两点:

*表示pointer是个指针变量,在用这个变量的时候不能写成*pointer,*pointer是pointer指向的变量。

一个指针变量只能指向同一个类型的变量。

如上面

pointer只能指向int型变量。

4]!

o%]%L*e!

g1W9?

2)指针变量的引用

两个有关的运算符:

取地址运算符&

a就代表变量a的地址

*指针运算符  *a 就代表变量a的值6C.M%K$d(X:

b0@

2.数组的指针和指向数组的指针变量

数组的指针指数组的起始地

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1