2013C语言学习笔记


第 1 章 程序设计基本概念考点归纳 1.1 C 语言的特点 C 语言是近年来非常流行的语言,很多人宁愿放弃已经熟悉的其他语言而改用 C 语言, 其原因是 C 语言有优于其他语言的一系列特点。下面是 C 语言的主要特点: (1)语言简洁、紧凑,并且使用方便、灵活; (2)运算符丰富; (3)数据结构丰富; (4)具有结构化的控制语句; (5)语法限制不太严格,使程序设计比较自由; (6)C 语言允许用户直接访问物理地址, 能进行位(bit)操作, 可以直接对硬件进行操作。 1.2 源程序的书写规则 C 语言的书写规则。C 语言书写格式自由,一行内可以写几个语句,一个语句也可以分 写在多行上。C 程序没有行号,每个语句和数据定义的最后必须有一个分号。C 语言中分号 是语句中不可少的,即使是程序中的最后一个语句也应该包含分号。C 语言中的注释可以 用″/*″用″*/″结束,注释可以在任何允许插入空格符地方插入。C 语言中注释不允许嵌 套,注释可以用西文,也可以用中文。 1.3 C 语言的风格 由于 C 语言对语法限制不太严格, 为了保证程序的准确性和可读性, 建议在书写程序采 用阶梯缩进格式。也就是按如下格式书写 C 语言程序: **********; *****() { **********; ********;

{ ******; …… } *********; } 概括起来,C 语言程序具有如下的风格: ①C 语言程序的函数具体模块结构风格,使得程序整体结构清晰、层次清楚,为模块化 程序设计提供了强有力的支持。 ②C 语言的源程序的扩展名都是.C。 ③C 语言中的注释格式为: /*注释内容*/ /与*之间不允许有空格,注释部分允许出现在程序中的任何位置。 ④C 语言中的所有语句都必须以分号“;”结束。

第 2 章 C 程序设计的初步知识考点归纳 2.1 程序的构成 尽管 C 程序的内容千变万化, 但是它们的构成都是一致的, 一个完整的 C 源程序的格式 可以如下表示: 编译预处理 主函数() 函数()

从上面中可以看出, 一个 C 源程序实际上就是若干函数的集合, 这些函数中有一个是程 序的主函数,任何 C 的源程序执行时,都是从主函数开始执行的,其它的函数最终必将被这 个主函数所调用。C 语言除了主函数规定必须取名 main 外,其它的函数名可以任取,但是 要符合 C 的标识符取名规则, 另外注意不要与保留字重名, 最好也不可与 C 语言中的库函数 或其它一些命令如编译预处另命令重名。 各个函数在程序中所处的位置并不是固定的, 但要 求一个函数是完整的、独立的。不允许出现在一个函数内部又去定义另一个函数,或是函数 格式不齐全的现象。一个完整的一般意义上的函数有一个固定的框架,编写具体的函数时, 只需在这个框架中填入相应的内容即可。框架如下: 函数类型 函数名(形参) 形参说明 { 内部变量说明; 执行语句部分; } 2.2 C 语言的基本词法 C 语言的基本词法由三部分组成:符号集、关键字、保留字。 符号集就是一门语言中允许出现的字符的集合,C 语言的符号集就是 ASCⅡ码表中的一 些字符,在键盘上不能直接得到(比如说响铃字符),C 语言引入了转义字符的概念,利用反 斜杠符号″\″后加上字母的一个字符组合来表示这些字符, 当在源程序中遇到这类字符组 合时, 虽然这个字符组合是一个字符串的形式, 但 C 语言仍会自动将之理解成某一特定的字 符。比如″\″,C 语言在处理这个字符组合时,会自动理解成回车换行符号。转义字符经 过进一步引申应用,形成了另外两种形式:″\ddd″和″\xnn″,这里″\″后的 ddd 和 xnn 分别代表三位八进制和两位十六进制数(打头的″x″只是标明后面跟着的是十六进 制数),这两种形式不再局限于表示不可打印的字符,它们可以表示 ASCⅡ码表中的任意字 符,只要把所需表示的字符的 ASCII 码转换成八进制数或十六进制数即可。比如说字母″ A″,ASCII 码为 65,65 的八进制和十六进制分别为 101 和 x41,所以,字母 A 可表示为″ \101″或″\x41″,对转义字符应认真理解。 标识符就是用以标识的符号。正如现实生活中给每一个人都取一个名字一样,C 语言中 的每一个对象(如函数、变量等)都必须取一个标识符以和其它对象区别开。在 C 语言中,这

个标识符是一个字符串, 这个字符串的选定有一定的规则: 必须是以字母或下划线开头的字 母与数字的序列。 除了这个基本的规则外, C 语言对标识符的命名还有几个限制需加以注意: ①长度最好不要超过八个字符。 因 C 中对标识符只处理前 8 个字符, 超过 8 个长度的部分将 被 C 自动忽略掉。″ABCDEFGH1″和″ABCDEFH2″是同一个标识符;②标识符不要与保留字 同名,最好也不要与 C 提供的标准标识符,如库函数重名;③应注意 C 语言对大小写字母是 敏感的,Abcd 和 abcd 是两个不同的标识符。 关键字实际上就是一些特殊的标识符, 又称保留字, 这些保留字不允许用户对它重新定 义。 2.3 头文件、数据说明、函数的开始和结束标志 1.头文件: 也称为包含文件或标题文件, 一般放在一个 C 语言程序的开头, 用#include″ 文件名″的格式,其中文件名是头文件名,一般用.h 作为扩展名。 2.数据说明:C 语言中的数据分常量和变量两种。 3.常量:有数值常量和符号常量两种。 4.数值常量:可以分为整型常量、实型常量、浮点型常量和字符常量。 5.符号常量:用一个标识符代表的一个常量,又称标识符形式的常量。 6.变量:其值可以改变的量,变量名习惯上用小写字母表示。 7.标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字 符序列。 8.标识符的命名规则:C 语言中标识符只能由字母、数字下划线三种字符组成,且第一 个字符必须为字母或下划线。 C 语言是大小写敏感语言, 即对大小写字母认为是不同的字符。 C 语言中标识符的长度随系统不同而字,如 TURBO C 中取前 8 个字符,8 个字符后面的字符 会自动取消。

第 3 章 顺序结构考点归纳 3.1 表达式语句、函数调用语句和空语句

1.C 语言的语句共分五大类:表达式语句、控制语句、函数调用语句、空语句和复合语 句。 2.表达式语句的一般形式为 表达式; 最典型的表达式语句是由一个赋值表达式加一个分号构成的赋值语句。 3.控制语句是 C 语言程序设计中用来构成分支结构和循环结构的语句。此类语句有 if 语句,for 语句,while 语句,do-while 语句,switch 语句等。 4.函数调用语句的一般形式为 函数名(实参表); 5.空语句的一般形式为 ; 这条语句的含义是什么也不做。 凡是在 C 语句程序中出现语句的地方都可以用一个分号 来代替一条语句。 6.复合语句的一般形式为 {语句 1;语句 2;…;} 复合语句在功能上相当于一条语句。 3.2 数据的输入与输出,输入输出函数的调用 1.C 语言本身没有提供输入、输出操作语句。C 程序的输入和输出完全依靠调用 C 语言 的标准输入、输出函数来完成。四个常用的输入、输出函数是: printf 函数、scanf 函数、putchar 函数、getchar 函数 2.printf 函数是 C 语言提供的标准输出函数,它的作用是在终端设备(或系统隐含指定 的输出设备)上按指定格式进行输出。Printf 函数的一般调用形式如下: printf(格式控制,输出项表)

如果在 printf 函数调用之后加上″;″,就构成了输出语句。 格式控制参数以字符串的形式描述,由两部分组成: ①普通字符:将被简单地显示; ②格式字符:将引起一个输出参数项的转换和显示,由“%”引出并以一个类型描述符 结束的字符串,中间可加一些可选的附加说明项,如下表所示。 附加说明项 附加说明项 说 明 -或+ 用于指定是否对齐输出,具有“-”符号表示左对齐,无“-”或有“+”表示右对 齐 0 用于指定是否填写 0,有此项表示空位用 0 补充,无此项表示以空格补充 m.n 用于指定输出域宽及精度,m 是指域宽,n 为精度,当指定 n 时,隐含的精度为 6 位 L 或 h 用于输出长度修正。其中,l 对于整型是指 long,对实型是 double;h 只用于整 型的格式字符,并修正为 short 型 格式字符用于指定输出项的数据类型及输入格式,如下表所示。 注意:编译程序只是在检查了 printf 函数中的格式参数后,才能确定有几个输出项, 是什么类型、以什么格式输出。在编程序时,应使输出格式与输出项对应。 格式字符 格式字符 说 明 CcD 输出一个字符 d 或 I 输出带符号的十进制整型数

OoO 以八进制无符号形式输出整型数(不带前导 0) x 或 X 以十六进制无符号形式输出整型数(不带前导 0x 或 0X), 对于 x, 用 abcdef 输出 十六进制数码;对于 X,用 ABCDEF 输出十六进制数码 UuU 按无符号的八进制形式输出整型数 FfF 以小数的形式输出单精度或双精度数,小数位由精度指定,隐含的精度为 6;如指 定精度为 0,则小数部分(包含小数点)都不输出 e 或 E 以指数形式输出单精度及双精度数,小数位数由精度指定,隐含的精度为 6;如 指定精度为 0,则小数部分(包含小数点)都不输出 g 或 G 由系统决定是采用%f 不是采用%e 格式,以便使输出宽度最小 SsS 输出字符串中的字符,直到遇到″\0″时为止,或输出指定的字符数 PpP 输出变量的内存地址 % 打印一个% 3.scanf 函数是 C 语言提供的标准输入函数,它的作用是在终端设备(或系统隐含指定 的输入设备)上输入数据。Scanf 函数的一般调用形式是: scanf(格式控制,输入项表) 如果在 scanf 函数调用之后加上″;″,就构成了输入语句。 格式控制是用双引号括起来的字符串, 称为格式控制串。 格式控制串的作用是指定输入 时的数据转换格式,即格式转换说明。格式转换说明是由″%″符号开始,其后是格式描述 符。 输入项表中的各输入项用逗号隔开, 各输入项只能是合法的地址表达式, 即在变量之前 加一个地址符号″&″。 在 scanf 函数中每个格式说明都必须用%开头,以一个″格式字符″结束。 Scanf 函数中的格式控制字符与 printf 函数中的相似,由格式说明项与输入格式符组 成。格式说明项如下表所示。 格式说明项

格式说明项 说 明 % 起始符 * 赋值抑制符,用于按格式说明读入数据,但不送给任何变量 MmM 域宽说明 l 或 h 长度修正说明符 scanf 中的格式字符如下表所示。 格式说明项 说 明 CcC 输入一个字符 DdD 输入十进制整型数 IiI 输入整型数,整数可以是带前导 0 的八进制数,带前导 0x(或 0X)的十六进制数 OoO 以八进制形式输入整型数(可为带前导 0,也可不带前导 0) XxX 以十六进制形式输入整型数(可带前导 0x 或 0X,也可不带) UuU 无符号十进制整数 FfF 以带小数点形式或指数形式输入实型数 EeE 与 f 的作用相同 SsS 输入字符串 4.putchar 函数的作用是把一个字符输出到标准输出设备(常指显示器或打印机)上。一 般调用形式为 putchar(ch) ; 其中 ch 代表一个字符变量或一个整型变量,ch 也可以代表一个字符常量(包括转义字 符常量)。 5.getchar 函数的作用是标准输入设备(通常指键盘)上读入一个字符。一般调用形式为

getchar(); getchar 函数本身没有参数,其函数值就是从输入设备得到的字符。

第 4 章 选择结构考点归纳 4.1 用 if 语句实现选择结构 1.在 C 语言中,if 语句有两种形式: 形式 1:if(表达式) 语句 形式 2:if(表达式) 语句 1 else 语句 2 2.if 语句执行时,首先计算紧跟在 if 后面一对圆括号中的表达式的值,如果表达式的 值为非零(″真″),则执行 if 后的″语句″,然后去执行 if 语句后的下一个语句。如果表 达式的值为零(″假″),直接执行 if 语句后的下一个语句。 3.if 语句后面的表达式并不限于是关系表达式或逻辑表达式,而可以是任意表达式。 If 语句中可以再嵌套 if 语句。C 语言规定,在嵌套的 if 语句中,else 子句总是与前面最 近的不带 else 的 if 相结合。 4.2 用 switch 语句实现多分支选择结构 1.switch 语句是用来处理多分支选择的一种语句。它的一般形式如下: switch(表达式) { case 常量表达式 1:语句 1 case 常量表达式 2:语句 2 : : case 常量表达式 n:语句 n

default :语句 n+1 } 2.switch 语句的执行过程是: 首先计算紧跟 switch 后面的一对圆括号中的表达式的值, 当表达式的值与某一个 case 后面的常量表达式的值相等时, 就执行此 case 后面的语句体并 将流程转移到下一个 case 继续执行,直至 switch 语句的结束;若所有的 case 中的常量表 达式的值都没有与表达式值匹配, 又存在 default,则执行 default 后面的语句, 直至 switch 语句结束;如果不存在 default,则跳过 switch 语句体,什么也不做。 4.3 选择结构的嵌套 if 语句和 switch 语句都可以嵌套使用,特别要注意,对于构成嵌套的 if 语句,else 子句总是和离它最近的、不带 else 的 if 子句相匹配,不能弄混;在一个 switch 语句中的 case 后面又嵌套了一个 switch 语句,在执行内嵌的 switch 语句后还要执行一条 break 语 句才跳出外层的 switch 语句。 第 5 章 循环结构考点归纳 5.1 for 循环结构 1.for 循环语句的一般表达式是: for(表达式 1;表达式 2;表达式 3) 语句 2.C 语言语法规定:循环体语句只能包含一条语句,若需多条语句,应使用复合语句。 5.2 while 和 do while 循环结构 1.while 语句用来实现″当型″循环结构,它的一般形式如下: while(表达式)语句 当表达式为非 0 值时执行 while 语句中内嵌的语句;当表达式的值为 0 时,直接跳过 while 语句后面的语句,执行下一条语句。 2.while 语句执行的特点是:先判断表达式,后执行语句。 3.do while 用来实现″直到型″循环结构,它的一般形式为: do 语句

while(表达式); 这个语句执行时,先执行一次指定的内嵌的语句,然后判别表达式,当表达式的值为非 0 时,返回重新执行该语句,如此反复,直到表达式的值为等于 0 为止,此时循环结束。 4.do while 语句执行的特点是:先执行语句,后判断表达式。 5.3 continue 语句和 break 语句 1.break 语句有两个用途:①在 switch 语句中用来使流程跳出 switch 结构,继续执行 switch 语句后面的语句;②用在循环体内,迫使所在循环立即终止,即跳出所在循环体, 继续执行循环体后面的第一条语句。 2.continue 语句结束本次循环, 即跳过循环体中尚未执行的语句。 在 while 和 do while 语句中,continue 语句将使控制直接转向条件测试部分,从而决定是否继续转向循环。在 for 循环中,遇到 continue 语句后,首先计算 for 语句表达式 3 的值,然后再执行条件测 试(表达式 2),最后根据测试结果来决定是否继续转向 for 循环。 5.4 循环的嵌套 1.一个循环体内又包含另一个完整的循环结构, 称为循环的嵌套。 内嵌的循环中还可以 嵌套循环,这就是多层循环。 2.三种循环(while 循环、do while 循环和 for 循环)可以互相嵌套。

第 6 章 字符型数据考点归纳 6.1 字符常量 有两种形式:一是用单引号括起来的一个单字符,如′a′,′?′,′=′;二是″转 义字符″,即以″\″开头的字符序列。常用的转义字符见下表。 字符形式 功 能 \n 换行 \t 横向跳格(即跳到下一个输出区) \v 竖向跳格

\b 退格 \r 回车 \f 走纸换页 \\ 反斜杠字符″\″ \′ 单引号(撇号)字符 \″ 双引号(″)字符 \ddd 1 到 3 位 8 进制数所代表的字符,如\123,表示 8 进制数 123 \xhh 1 到 2 位 16 进制数所代表的字符,如\x21,表示 16 进制数 23 在转义字符赋给字符变量时,也需要在其二侧加单引号,如: char c=′\n′; 字符串常量是用一对双引号括起的字符序列,如″abc\n″。 请区别字符变量和字符串常量。′a′是字符常量,″a″是字符串常量。在内存中,字 符常量占一个字节,而对字符串常量,则在字符串的后面加一个″字符串结束标志″,以便 系统据此判断字符串是否结束。用′\0′(即 ASCII 代码为 0 的字符,即″空字符″)作为 字符串结束的标志。例如,′a′内存占两个字节,即:a \0 。 6.2 字符变量 字符变量用来存放一个字符常量,字符变量用 char 来定义。如: char a,b; a=′0′;b=′k′; printf(″%c %c \n″,a,b); 将输出两个字符 ok。 不能将一个字符串常量赋给一个字符变量,如: a=″0″;b=″k″;

是错误的。 给字符变量赋值可以采用如下三种方法: (1)直接赋以字符常量,如 char=′A′; (2)赋以″转义字符″,如: char c=′\\′; printf(″%c″,c); 输出一个字符″\″。 (3)赋以一个字符的 ASCII 代码,如字符′a′的 ASCII 代码为 97,则 char c=97; printf(″%c″,c); 将输出一个字符″a″。实际上,字符数据在内存中是以整数形式(字符 ASCII 代码)存 放的,例如,字符′a′的 ASCII 码为 97,在内存字节中的存放形式为: 01 10 00 01 在输出时,如果指定输出字符的格式符″%c″输出,则输出字符′a′(在输出时先将 ASCII 码转换为字符)。如果指定按输出整数的格式″%d″输出(如 printf(″%d″,c)),则 输出一个整数 97。 应记住,字符数据与整型数据二者间是通用的,可以互相赋值和运算,如: int a=′A′; char c=97; print(″%d\n″,c-a); 将输出一个整数 32,因为′A′的 ASCII 码为 65。

第 7 章 函数考点归纳

7.1 库函数的正确调用 1.C 语言提供了丰富的库函数,包括常用数学函数、对字符和字符串处理函数、输入输 出处理函数等。在调用库函数时要注意以下几点: (1)调用 C 语言标准库函数时必须在源程序中用 include 命令,include 命令的格式是: #include″头文件名″ include 命令必须以#号开头,系统提供的头文件名都以.h 作为后缀,头文件名用一对 双引号″″或一对尖括号〈〉括起来。 (2)标准库函数的调用形式: 函数名(参数表) 2.在 C 语言中库函数的调用可以以两种形式出现: 出现在表达式中; 作为独立的语句完 成某种操作。 7.2 函数的定义方法 1.C 语言函数的一般形式为: 函数返回值的类型名 函数名(类型名 形参 1,类型名 形参 2,…) { 说明部分 语句部分 } 定义的第一行是函数的首部,{}中的是函数体。 2.在老的 C 语言版本中,函数的首部用以下形式: 函数返回值的类型名 函数名(形参 1,形参 2…) 形参类型说明; 新的 ANSI 标准 C 兼容这种形式的函数首部说明。

3.函数名和形参名是由用户命名的标识符。在同一程序中,函数名必须唯一。形式参数 名只要在同一函数中唯一即可,可以与函数中的变量同名。 4.C 语言规定不能在一个函数内部再定义函数。 5.若在函数的首部省略了函数返回值的类型名,把函数的首部写成: 函数名(类型名 形参 1,类型名 形参 2,…) 则 C 默认函数返回值的类型为 int 类型。 6.当没有形参时,函数名后面的一对圆括号不能省略。 7.3 函数的类型和返回值 1.函数的类型由函数定义中的函数返回值的类型名确定, 函数的类型可以是任何简单类 型,如整型、字符型、指针型、双精度型等,它指出了函数返回值的具体类型。当函数返回 的是整型值时,可以省略函数类型名。当函数只完成特定的操作而没有或不需要返回值时, 可用类型名 void(空类型)。 2.函数返回值就是 return 语句中表达式的值。 当程序执行到 return 语句时, 程序的流 程就返回到调用该函数的地方(通常称为退出调用函数),并带回函数值。 7.4 形式参数与实际参数,参数值的传递 1.在函数定义中,出现的参数名称为形参(形式参数),在调用函数时,使用的参数值称 为实参(实际参数)。 2.调用函数和被调用函数之间的参数值的传递是″按值″进行的, 即数据只能从实参单 向传递给形参。也就是说,当简单变量作为实参时,用户不能在函数中改变对应实参的值。

第 8 章 指针考点归纳 8.1 指针与指针变量的概念,指针与地址运算符 1.在 C 语言中, 指针是指一个变量的地址, 通过变量的地址″指向″的位置找到变量的 值,这种″指向″变量地址可形象地看作″指针″。用来存放指针的变量称为指针变量,它 是一种特殊的变量,它存放的是地址值。

2.定义指针变量的一般形式为: 类型名 *指针变量 1,*指针变量 2,…; ″类型名″称为″基类型″它规定了后面的指针变量中存放的数据类型,″*″号表明 后面的″指针变量 1″,″指针变量 2″等是指针变量,″*″号在定义时不能省略,否则就 会变成一般变量的定义了。″指针变量 1″,″指针变量 2″等称为指针变量名。 3.一个指针变量只能指向同一类型的变量。 4.与指针和指针变量有关的两个运算符: (1)*:指针运算符(或称″间接访问″运算符) (2)&:取地址运算符 通过*号可以引用一个存储单元,如有如下定义: int i=123,*p,k; 则 p=&I;或 k=*p;或 k=*&I;都将变量 i 中的值赋给 k。 *p=10;或*&i=10;都能把整数 10 赋给变量 i。这里,等号左边的表达式*p 和*&i 都代表 变量 i 的存储单元。 8.2 变量、数组、字符串、函数、结构体的指针以及指向它们的指针变量 1.变量的指针和指向变量的指针变量。 2.数组的指针和指向数组的指针变量。 所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。 C 语言规定数组名代表数组的首地址,也就是第一个元素的地址。 3.字符串的指针和指向字符串的指针变量。 我们可以通过定义说明一个指针指向一个字符串。

C 语言将字符串隐含处理成一维字符数组,但数组的每个元素没有具体的名字,这一点 跟字符数组不一样。要引用字符串中的某个字符,只能通过指针来引用: *(s+0),*(s+1),…,*(s+n)。 4.函数的指针和指向函数的指针变量。 指向函数的指针变量的一般形式为 : 数据类型标识符 (*指针变量名)(); 这里的″数据类型标识符″是指函数返回值的类型。 函数的调用可以通过函数名调用,也可以通过函数指针调用(即用指向函数的指针变量 调用)。 指向函数的指针变量表示定义了一个指向函数的指针变量,它不是固定指向哪一个函 数,而只是定义了这样的一个类型变量,它专门用来存放函数的入口地址。在程序中把哪一 个函数的地址赋给它,它就指向哪一个函数。在一个程序中,一个指针变量可以先后指向不 同的函数。 在给函数指针变量赋值时, 只需给出函数名而不必给出参数。 因为函数指针赋的值仅是 函数的入口地址,而不涉及到实参与形参的结合问题。 对指向函数的指针变量,表达式 p+n,p++,p--等都无意义。 5.结构体的指针与指向结构体的指针变量 一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量, 用来指向一个结构体变量, 此时该指针变量的值是结构体变量的起始地址。 指针变量也可以 用来指向结构体数组中的元素。

第 9 章 数组考点归纳 9.1 一维数组的定义、初始化和引用 1.一维数组的定义方式为: 类型说明符 数组名[常量表达式]

(1)数组名的命名方法与变量名相同,遵循标识符命名规则; (2)数组是用方括号括起来的常量表达式,不能用圆括号; (3)常量表达式表示数组元素的个数,即数组的长度,数组的下标从 0 开始,下标的最 大值为:常量表达式-1; (4)常量表达式中可以包括常量和符号常量,不能包括变量。 可以用赋值语句或输入语句使数组中的元素得到值, 但要占用运行时间。 可以使数组在 运行之前初始化,即在编译阶段使之得到初值。 2.对数组初始化可以用以下方法实现: (1)在定义数组时对数组元素赋以初值。如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始化后,a[0]=0,a[1]=1,…,a[9]=9。 (2)初始化时可以只对一部分元素赋初值。例如: static int a[10]={0,1,2,3,4}; 定义的数组有 10 个元素,但只对其中前 5 个元素赋了初值,后 5 个元素初值为 0。 (3)如果想使一个数组的元素值全部为 0,可以用下面的方法: static int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能用: static int a[10]={0*10}; 如果对 static 型数组不赋初值,系统会对定义的所有数组元素自动赋以 0 值。 (4)在对全部数组元素赋初值时,可以不指定数组长度。 3.一维数组的引用方法是: C 语言规定不能一次引用整个数组, 引用时只能逐个元素引用, 数组元素的表示形式为:

数组名[下标] 下标可以是整型常量或整型表达式。如: a[0]=a[5]+a[7]-a[2*3]; 9.2 二维数组的定义、初始化和引用 1.二维数组定义的一般形式为 类型说明符 数组名[常量表达式][常量表达式] C 语言采用上述定义方法,我们可以把二维数组看做是一种特殊的一维数组:它的元素 又是一维数组。在 C 语言中,二维数组中元素的排列顺序是:先按行存放,再按列存放,即 在内存中先顺序存放第一行的元素,再存放第二行的元素。 2.二维数组的初始化:二维数组可以用下面的方法初始化: (1)分行给二维数组赋初值。如: static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 以上赋值把第一个花括号内的数据赋给第一行元素,第二个花括号内数据赋给第二元 素…,即按行赋值。 (2)可以将所有的数据写在一个花括号内,按数组排列的顺序对各元素赋值。 (3)可以对数组的部分元素赋初值。如: static int a[3][4]={{1},{5},{9}}; 以上赋值的结果是:数组第一列的元素分别赋了初值 1,5,9,其余元素的值都是 0。 (4)如果对二维数组的全部元素都赋初值,则定义数组时对第一维的长度可以不指定, 但第二维的长度不能省。 3.二维数组的引用:二维数组的元素可以表示为: 数组[下标][下标]

在引用二维数组时,必须是单个元素,不能是整个数组名。下标可以是一个表达式,但 不能是变量。如果下标是一个表达式,注意表达式的值不能超出数组定义的上、下限。

第 10 章 字符串考点归纳 10.1 字符串与字符数组 1.字符数组的定义 定义方法与前面介绍的类似,只是将数组定义为字符型即可。例如: char c[10]; 这里定义了一个包含 10 个元素的字符数组 c。 2.字符数组的初始化 对字符数组初始化,可以采用以下方法: (1)逐个字符赋给数组中各元素; (2)用字符串常量使字符数组初始化。 3.字符串 在 C 语言中,字符串是作为字符数组来处理的,字符串可以存放在字符型一维数组中, 故可以把字符型一维数组作为字符串变量。 字符串常量是用双引号括起来的一串字符。 C 语言中约定用′\0′作为字符串的结束标志, 它占内存空间, 但不计入串的长度, ′ \0′的代码值为 0。 系统对字符串常量也自动加一个′\0′作为结束符。例如″c language″共有 10 个字 符,但在内存中占 11 个字节,最后一个字节存放′\0′。 4.字符数组的输入输出 (1)逐个字符输入和输出

①在标准输入输出 printf 和 scanf 中使用%c 格式描述符; ②使用 getchar 和 putchar 函数。例如: for(i=0;i<10;i++) scanf(″%c″,&str[i]); /*或 str[i]=getchar();*/ str[i]=′\0′;/*人为加上串结束标志*/ for(i=0;i<10;i++) printf(″%c″,str[i]);/*或 putchar(str[i]);*/ (2)字符串整体输入输出 ①在标准输入输出函数 printf 和 scanf 中使用%s 格式描述符; 输入形式: char str[6]; scanf(″%s″,str); 其中 str 为字符数组名,代表着 str 字符数组的起始地址,输入时系统自动在每个字 符串后加入结束符′\0′。若同时输入多个字符串,则以空格或回车符分隔。 输入形式: printf(″%s″,str); 输字符串时,遇第一个′\0′即结束。但可人为控制输出串所占的域宽如: printf(″%6s″,str);/*若字符串中字符多于 6 个,仍将全部输出*/ printf(″%-6s″,str);/*只输出前 6 个字符,多余的不输出*/ ②使用 gets 和 puts 函数输入输出一行 gets 函数用来从终端键盘读字符,直到遇换行符为止,换行符不属字符串的内容。 调用形式:

gets(str); str 为字符数组名或字符指针,字符串输入后,系统自动将′\0′置于串尾代替换行 符。若输入串长超出数组定义长度时,系统报错。 Puts 函数用来把字符串的内容显示在屏幕上。 调用形式: puts(str); str 的含义同上。输出时,遇到第一个′\0′结束并自动换行,字符串中可以含转义 字符。

第 11 章 对函数的进一步讨论考点归纳 11.1 传给 main 函数的参数 在此之前,我们在编写 main 函数时,其后一对圆括号是空的,没参数。其实,在支持 C 的环境中,可以在运行 C 程序时,通过运行 C 程序的命令行,把参数传送给 C 程序。 11.2 通过实参向函数传递函数名或指向函数的指针变量 1.指向函数的指针变量的定义 在 C 语言中函数名代表该函数的入口地址,因此可以定义一种指向函数地址的指针变 量。 2.函数名或指向函数的指针变量作为参考 函数名或指向函数的指针变量可以作为实参传送给函数。 这时, 对应的形参是类型相同 的指针变量。 11.3 函数的递归调用 C 语言中的函数可以递归调用, 即: 可以直接或间接地自己调用自己。 前者称简单递归, 后者称间接递归。

第 12 章 C 语言中用户标识符的作用域和存储类考点归纳 12.1 局部变量和全局变量 在函数内部或复合语句内部定义的变量称为局部变量。 函数的形参属于局部变量。 在函 数外部定义的变量称为全局变量。有时,局部变量也称为内部变量,全局变量也称为外部变 量。 12.2 变量的存储属性(自动、静态、寄存器、外部),变量的作用域和生存期 C 语言中来说明变量存储属性的关键字有四个:auto(自动)、static(静态)、 register(寄存器)、extern(外部)。 1.局部变量的存储属性 局部变量可以是自动类别(用 auto,register 说明),也可以是静态类别(用 static 说 明)。形参只能是自动存储类别,不允许是 static 类别。 当局部变量未指明类别时, 被自动说明成自动(auto)变量。 这类局部变量称为自动变量。 其值存放在内存的动态存储区,因此在退出作用域后,变量被自动释放,其值不予保留。 当局部变量说明成寄存器(register)类型时, 与自动(auto)变量一样属于自动类别, 所 不同的是此时变量的值保留在 CPU 中的寄存器中。 当变量说明成 static(静态)类型时,称这样的变量为静态局部变量。在程序运行期间, 它占据一个永久的存储单元,在函数退出后,变量的值仍旧保留。 2.全局变量的存储属性 全局变量都属于静态存储类别,可以用 extern 和 static 对它们进行说明。 当一个文件中要引用另一文件中的全局变量或在全局变量定义前要引用它时,可用 extern 说明。相当于扩大全局变量的作用域。 用 static(静态)说明的全局变量称为静态全局变量,它仅能由本文件引用,即使在其 文件中用 extern 说明也不能使用,它相当于限制了全局变量作用域的扩展。 12.3 内部函数和外部函数 1.在 C 语言中,所有的函数在本质上都是外部函数。

2.函数定义时用 extern 进行说明称为外部函数。函数的隐含类别为外部函数,外部函 数可以被其他文件调用。 3.定义函数时用 static 进行说明称为静态函数,也称内部函数。静态函数也是外部函 数,只是它仅局限于它所在的文件,其他文件不能调用。

第 13 章 编译预处理和动态存储分配考点归纳 13.1 宏定义(不带参数的宏定义,带参数的宏定义) 1.编译预处理就是对 C 源程序进行编译前, 由″编译预处理程序″对预处理命令行进行 处理的过程。 2.C 语言中,凡是以″#″开头的行,都称为″编译预处理″命令行。C 语言中的编译预 处命令有: #define,#undef,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#line,#pragma,#er ror。 这些预处理命令组成的预处理命令行必须在一行的开头以″#″号开始, 每行的未尾不 得加″;″号,以区别于 C 语句、定义和说明语句。 3.不带参数的宏定义:命令的一般形式为: #define 标识符 字符串 定义中的″标识符″为用户定义的标识符,称为宏名。在预编译时,C 预编译程序将出 现的宏名替换成″字符串″的内容,这一过程也称为宏展开。 4.带参数的宏定义:命令的一般形式为 #define 宏名(形式参数) 字符串 定义中的″字符串″应包含括号中所指定的形式参数。注意宏名与括号之间不要加空 格,否则就成为不带参数的宏定义了。 5.预编译时,遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换,原则 是:遇到实参则以实参代替,非形参字符原样保留,从而成展开后的内容。 13.2 “文件包含”处理 1.文件包含的一般形式为:

#include″头文件名″ #include<头文件名> 头文件名一般由 C 语言提供,也可以是用户自己编写的,头文件通常用.h 作为后缀。 2.当头文件名用双引号括起来时, 系统首先在使用此命令的文件所在的目录中查找被包 含的文件,找不到时,再按系统指定的标准方式检索其它目录;当头文件名用尖括号括起来 时,则直接按系统指定的标准检索方式查找被包含的文件。 3.预编译时,将被包含文件的内容全部复制到包含文件中,这就是文件″包含处理″。 13.3 条件编译 C 语言中的条件编译命令可对源程序代码的各部分有选择地进行编译。条件编译主要有 如下 3 种使用格式: 使用格式 1: #ifdef 标识符 程序段 1 #else 程序段 2 #endif 使用格式 2: #ifndef 标识符 程序段 1 #else 程序段 2 #endif 使用格式 3:

#if 表达式 程序段 1 #else 程序段 2 #endif 使用格式 1 表示如果已定义了“标识符”,则编译“程序段 1”,否则编译“程序段 2” ; 使用格式 2 表示如没有定义了“标识符”,则编译“程序段 1”,否则编译“程序段 2”; 使用格式 3 表示如“表达式”的值为“真”时,则编译“程序段 1”,否则编译“程序段 2” 。

第 14 章 结构体、共同体和用户定义类型考点归纳 14.1 结构体与共用体类型数据的定义方法和引用方法 1.结构体类型数据的定义方法:可以采用下面三种方法来定义: (1)先定义结构体类型再定义变量名 先定义一个结构体类型,一般形式为: struct 结构体名 {成员列表}; (2)在定义类型的同时定义变量:一般形式为: struct 结构体名 { 成员列表 }变量名列表; (3)直接定义结构类型变量:一般形式: struct

{ 成员列表 }变量名列表; 即不出现结构体名。 2.结构体类型变量的引用: 在定义了结构体变量后, 可以采用下列方法引用结构体类型 的变量: 结构体变量名.成员名 这里″.″是成员(分量)运算符,它在所有的运算符中优先级最高。 3.共用体类型变量的定义形式为: union 共用体名 {成员列表 }变量列表; 4.共用体变量的引用:可以用下面的形式引用共用体变量: 共用体变量名.成员名 14.2 用指针和结构体构成链表,单向链表的建立、输出、删除与插入 1.链表是一种常用的重要的数据结构,它是动态地进行存储分配的一种结构。 2.所谓建立链表是指从无到有地建立起一个链表, 即一个一个地输入各结点数据, 并建 立起前后相链的关系。 3.所谓输出链表就是将链表各结点的数据依次输出。 4.所谓删除链表事实上就是删除链表中的某个结点。 5.所谓插入链表就是在链表中某个位置插入一个或几个结点。

第 15 章 位运算考点归纳 15.1 位运算的含义及应用 1.位的概念 大多数计算机系统的内存储器是由众多的存储单元构成的。 在微机中, 每个存储单元是 1 个字节,它由 8 位二进制数构成,可以表示 28=256 种信息,各位的编号从 0~7,最左边 的位(第 7 位)是最高位,最右边的位(第 0 位)是最低位。由于二进制本身的特点,各位上的 数字不是 1,就是 0。 本章中的位就是指上述提到的二进制位, 本章中的位运算就是指对这些二进制的位进行 逻辑运算、移位运算等操作。 2.数的编码 数在计算机中是以二进制表示的, 但是它并不是简单地以它本身的数值的二进制形式来 直接表示,而要进行一定的编码,以方便计算机进行处理。常用的编码有原码、反码、补码 三种。 3.真值与原码 我们将一个十进制数的二进制表示称为这个十进制数的真值, 它代表了这个十进制数本 身的数值。下表列出了一些数的真值。 真值举例 数 二进制表示 真值(16 位) 0 1? 7 0 1? 111 0000000000000000 0000000000000001?

0000000000000111 ? 15? ? 1111? ? 0000000000001111? 255? 4095? 65535 11111111? 111111111111? 1111111111111111 0000000011111111? 0000111111111111? 1111111111111111 用真值表示的数只能是正数,对于负数,要用“一”号标明,例如: -7 的真值为-0000000000000111 -65535 的真值为-1111111111111111 这势必造成用计算机表示数时的不便,故引入了原码表示法。 在原码表示法中,最高位代表符号位,用“1”表示负数,“0”表示正数;余下的数位 用来表示真值的绝对值。 数字零存在着两种表示方法:+0 与-0。 4.反码 若采用反码表示,则对应的原码应按照以下方法进行转换: (1)如果真值为正,则它的反码与原码相同; (2)如果真值为负, 则反码的符号位为 1, 其余各位就是对原码取反(即原码的 1 变为 0, 原码的 0 变为 1)。

5.补码 (1)为什么要引入补码 补码具有许多独特的优点:首先它可以变减法运算为加法运算,使得计算时步骤统一, 速度提高;其次,在这种系统下的“0”只有惟一的一种表示方法,这就是现代的计算机系 统中大多采用补码的原因。 (2)补码的规定 ①正数的原码、补码、反码均相同; ②计算负数的补码时,先置符号位为 1,再对剩余原码的位数逐位取反,最后对整个数 加 1。 在微机上以 8 位二进制数为一字节的存储单元中采用补码系统, 它可以存放的最小整数 为-128, 最大整数为+127。 若采用两个字节来表示一个整数, 则可表示的最小整数为-32768, 最大整数为+32767。 15.2 简单的位运算 C 语言提供了位(bit)运算的功能,这使它像汇编语言一样用来编写系统程序。位运算 符共有六种; 位运算符 位运算符 含义 & 位与 ︳ 位或 ∧ 位异或 ~ 位取反 << 位左移 >> 位右移 第 16 章 文件考点归纳

16.1 文件类型指针(FILE 类型指针) C 语言中的文件分缓冲型文件和非缓冲型文件两种,此处只讨论缓冲型文件。对于缓冲 型文件, 每个被使用的文件都在内存中开辟一个区, 用来存放文件的有关信息(如文件名字、 文件状态及文件当前位置等)。这些信息保存在有关结构体类型的变量中。该结构体类型由 系统定义,取名为 FILE。 16.2 文件的打开与关闭(fopen,fclose) 1.和其他高级语言一样,C 语言对文件读写之前应该″打开″该文件,在使用结束之后 应″关闭″该文件。 2.C 语言中打开文件用 fopen()函数,fopen()函数的调用方式通常为: FILE *fp; fp=fopen(文件名,使用文件方式); 文件的操作方式如下所示: 文件操作方式 操作方式 属性 操作方式的功能 rrr 只读 为输入打开一个字符文件


相关文档

更多相关文档

C#语言学习笔记
关于 C 语言学习笔记
C语言学习(复习)笔记
C 语言学习笔记第三部分:系统
1-C语言学习笔记-C语言概述
C 语言学习笔记第四部分:工具
关于C语言学习笔记
c语言学习笔记
C语言学习笔记7
C 语言学习笔记第一部分:语言
Java学习笔记(必看经典)
C语言学习笔记2
C语言学习笔记(1)
c语言学习笔记(数组、函数)
c语言学习笔记(结合教程《c和指针》)
电脑版