【考点1】C语言的构成

1.源程序由函数构成,每个函数完成相对独立的功能。

2.每个源程序中必须有且只能有一个主函数,可以放在任何位置,但程序总是从主函数开始执行。

3.函数体:在函数后面用一对花括号括起来的部分。

4.每个语句以分号结束,但预处理命令,函数头之后不能加分号。

5.注释:括在“/*”与“*/”之间,没有空格,允许出现在程序的任意位置。

【考点2】C程序的生成过程

(1)C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。

(2)源程序的扩展名为.c,目标程序的扩展名为.obj,可执行程序的扩展名为.exe

【考点3】标识符

(1)标识符的命名规则

①标识符只能由字母,数字或下划线组成

②第一个字符必须是字母或下划线,不能是数字

③区分字母的大小写

(2)标识符的分类

①关键字:C语言规定专用的标识符,它们有固定的含义,不能更改

②预定义标识符:和关键字一样也有特定的含义

③用户标识符:由用户根据需要定义的标识符,命名应注意做到“见名知意”且不能与关键字相同。

【考点4】常量

(1)整型常量

①表示形式:十进制整型常量、八进制整型常量、十六进制整型常量

②书写形式:

<1>十进制整型常量:基本数字范围为0~9

<2>八进制整型常量:以0开头,基本数字范围为0~7

<3>十六进制整型常量:以0x开头,基本数字范围为0~15,其中10~15写为A~F或a~f

(2)实型常量

①表示形式:小数形式、指数形式

②书写形式:

<!>十进制小数形式:小数点两边必须有数字

<2>指数形式:e前必须有数字,e后必须为整数

(3)字符常量

一个字符常量代表ASCII码字符集里的一个字符,在程序中用单撇号括起来,区分大小写。

特殊的字符常量:即转义字符。其中“”是转义的意思,后面跟不同的字符表示不同的意思。

<1> :换行

<2>\:反斜杠字符“”

<3>ddd:1~3位八进制数所代表的一个ASCII字符

<4>\xhh:1~2位十六进制数所代表的一个ASCII字符

(4)字符串常量

字符串常量是用双撇号括起来的一个或一串字符

(5)符号常量

符号常量是由预处理命令“#define”定义的常量,在C程序中可用标识符代表一个常量

【考点5】变量

定义:值可以改变的量

·变量要有变量名,在使用前必须先定义

·在内存中占据一定的存储单元,不同类型的变量其存储单元的大小不同。

·存储单元里存放的是该变量的值

(1)整型变量

基本型: int

短整型: short int 或 short

长整型: long int 或 long

无符号型: unsigned int,unsigned short,unsigned long

(2)实型变量

①分类:单精度型(float)和双精度类型(double)

②定义方法:float a;double m

③所占字节:float型在内存中占4个字节(32位),double型占8个字节(64位)

。单精度实数提供7位有效数字,双精度实数提供15~16位有效数字

④实型常量:不分float型和double型,一个实型常量可以赋给一个float型或double型变量,但变量根据其自身类型截取实型常数中相应的有效数字。

(3)字符变量

作用:用来存放字符常量

定义:用关键字char定义,每个字符变量中只能存放一个字符

定义形式:char cr1,cr2;

赋值:cr1='m',cr2='n';

存储方法:存储字符对应的ASCII码到内存单元中

【考点6】类型的自动转换和强制转换

(1)类型的自动转换

①当同一表达式中各数据的类型不同时,编译程序会自动把它们转变成同一类型后再进行计算。

②转换优先级为char<int<float<double,即左边级别低的类型向右边转换

③在做赋值运算时,若赋值号左右两边的类型不同,则赋值号右边的类型向左边的类型转换;当右边的类型高于左边的类型时,则在转换时对右边的数据进行截取。

(2)类型的强制转换

表示形式:(类型)(表达式)

【考点7】逗号运算和逗号表达式

逗号表达式:用逗号运算符将几个表达式连接起来

一般形式:表达式1,表达式2,表达式3,……,表达式n

求解过程:先求解表达式1,然后依求解表达式2,直至表达式n的值。表达式n的值就是整个逗号表达式的值。

【考点8】自加,自减运算符

++i:在i使用前,先使i的值加1,再使用此时的表达式的值参加运算;

--i:在i使用前,先使i的值减1,再使用此时的表达式的值参加运算;

i++:i的值先参与表达式运算,再执行自增1;

i--:i的值先参与表达式运算,再执行自减1

【考点9】赋值运算符合赋值表达式

“=”称作fu赋值运算符,作用是将一个数值赋给一个变量,或将一个变量的值赋给另一个变量。由赋值运算符组成的表达式称为赋值表达式。

一般形式:变量名=表达式

注意:

①赋值运算符的优先级高于逗号运算符

②赋值运算符“=”和等于运算符“==”有很大的差别,二者不能混为一谈

③赋值运算符的左侧只能是变量,而不能是常量或表达式,右侧可以是表达式,包括赋值表达式

④规定最左边变量所得到的新值就是某个赋值表达式的值

【考点10】C语言提供的6种位运算符

1.按位与“&”:若两个相应的二进制数都为1,则按位的结果为1(有0出0,全1出1)

2.按位或“|”:有1出1,全0出0

3.按位异或“^”:若两个二进制位相同,则结果为0,否则为1

4.按位求反“~”:0变1,1变0

5.左移“<<”:将一个数的二进制位全部左移若干位

6.右移“>>”:将一个数的二进制位全部右移若干位

【考点11】单个字符的输入与输出

1)字符输入函数getchar()

getchar()函数的作用是接收终端输入一个字符

geichar()函数没有参数,函数值就是从输入设备得到的字符

2)字符输出函数putchar()

putchar()函数的作用是向终端输出一个字符

【考点12】格式化输出函数printf()

printf()函数是C语言提供的标准输出函数,它的作用是向终端按指定格式输出若干个数据。

(1)printf()函数的一般形式:printf(格式控制,输出表列);

<1>“格式控制”:用双引号括起来的字符串是“格式控制”字符串,它包括两种信息:

①格式转换说明,由“%”和格式字符组成

②需要原样输出的字符也写在格式控制内

<2>输出表列:需要输出的一些数据,可以是常量,变量或表达式。输出表列中的各输出项用逗号隔开。

(2)格式字符

可在“%”与格式字符之间插入“宽度说明”,左对齐符号“-”,前导零符号“0”等

d:用来对十进制数进行输入输出

o:以八进制数形式输出整数

x:以十六进制数形式输出整数

u:输出unsigned型数据,即输出无符号的十进制数

c:输出一个字符

s:输出一个字符串

f:输出实数,以小数形式输出,使整数部分全部输出

e:以指数形式输出实数

g:输出实数

(3)使用printf()函数时的注意事项

①在格式控制串中,格式说明与输出项从左到右在类型上必须一一匹配

②在格式控制串中,格式说明与输出项个数要相等

③在格式控制穿中,可以包含任意的合法字符,这些字符在输出时将被“原样输出”

④如果要输出“%”,则应该在格式控制串中用两个连续的百分号“%%”来表示

【考点13】格式化输入函数scanf()

(1)scanf()函数的一般形式

scanf(格式控制,地址表列)

其中scanf是函数名,“格式控制”的含义同printf()函数,“地址表列”由若干个变量地址组成,既可以是变量的地址,也可以是字符串的首地址。

(2)格式说明

scanf()函数中的格式说明也是以%开始,以一个格式字符结束,中间可以加入附加的字符。

①对unsigned型变量的数据,可以用%d,%o,%x格式输入

②在scanf()函数中格式字符前可以用一个整数指定输入数据所占宽度,但对于输入实型数则不能指定其小数位的宽度

③在格式控制串中,格式说明的个数应该与输入项的个数相等,且要类型匹配。

(3)使用scanf()函数时的注意事项

①scanf()函数中的输入项只能是地址表达式,而不能是变量名或其他内容

②如果在“格式控制”字串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符

③在用“%c”格式输入字符时,空格字符和转义字符都可作为有效字符输入

④在输入数据时,若实际输入数据少于输入项个数,scanf()函数会等待输入,直到满足条件或遇到非法字符才结束;若实际输入数据多余输入项个数,多余的数据将留在缓冲区备用,作为下一次输入操作的数据。

⑤在输入数据时,遇到以下情况时认为输入结束:空格,“回车”或“跳格”(“TAB”),上述字符统一可称为“间隔符”

【考点14】关系表达式

(1)定义:由关系运算符连城的表达式。关系运算符的两边可以是C语言中任意合法的表达式。

(2)关系运算符的结果是一个整数值——“0或者非零”,用非零值来表示“真”,用零值来表示“假”

【考点15】if语句的几种形式

(1)if(表达式)语句

if是C语言的关键字

表达式两侧的括号不可少,并且只能是圆括号

紧跟着的语句称为if子句,如果在if子句中需要多个语句,则应该使用大括号{ }把一组语句括起来构成复合语句。

(2)if(表达式) 语句1

else 语句2

(3)if(表达式1) 语句1

else if(表达式2) 语句2

……

else if(表达式m) 语句m

else 语句n

【考点16】条件运算符构成的选择结构

(1)条件运算符:?:

(2)条件表达式的一般形式:表达式1?表达式2:表达式3

(3)求解过程:先求解表达式1的值,当表达式1的值是非0时,以表达式2的值作为整个条件表达式的值;当表达式1的值是0时,以表达式3的值作为整个条件表达式的值。

【考点17】switch语句

switch语句是C语言提供的多分支选择语句,用来实现多分支选择结构。

一般形式:

switch(表达式)

{

case 常量表达式1:语句1

case 常量表达式2:语句2

……

case 常量表达式n:语句n

default:语句n+1

}

switch后面用花括号括起来的部分是switch语句体

switch后面括号内的“表达式”,可以是C语言中任意合法表达式,但表达式两侧的括号不能省略

default也是关键字,起标号的作用,代表除了以上所有case标号之外的那些标号,default标号可以出现在语句体中的任何标号位置上。当然,也可以没有。

【考点18】while循环语句

(1)一般形式

while(表达式) 循环体

while是c语言的关键字

循环体只能是一条可执行语句,当多项造作需要多次重复做时,可以使用复合语句

(2)执行过程

第一步:计算紧跟while后括号中表达式的值,当表达式的值为非时,则接着执行while语句中的内嵌语句;当表达式的值为时,则跳过该while语句,执行该while结构后的其他语句。

第二步:执行循环体内嵌语句

第三步:返回去去执行步骤(1),直到条件不满足,即表达式的值为0时,退出循环,while结构结束

(3)特点

先对表达式进行条件判断,后执行语句

【考点19】do……while语句

(1)一般形式

do{

循环体语句

}while(表达式);

do是C语言的关键字,必须和while联合使用

do···while循环由do开始,用while结束

while(表达式)后面的分号不能丢

(2)执行过程

先执行一次指定的循环体语句

执行完后,判别while后面的表达式的值,当表达式的值为真(非零)时,程序流程返回,去重新执行循环体语句。

如此反复,直到表达式的值等于零为止,此时循环结束

【考点20】for语句

(1)一般形式

for(表达式1;表达式2;表达式3)

各个表达式之间要用";"隔开,且圆括号不可省略

(2)执行过程

①求表达式1的值

②求表达式2的值,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行③;若其值为假,则退出循环,执行for语句以下的其他语句。

③求表达式3的值

④重复执行②

【考点21】break语句

在break后面加上分号就可以构成break语句,break语句还可用于从循环体内跳出,即提前结束循环。

break语句只能出现在循环体内及switch语句内,不能用于其他语句。

当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。

当break出现在循环体中,但并不在switch语句体内时时,则在执行break后,跳出本层循环,当然也不再去进行条件判断。

【考点22】continue语句

(1)一般形式为:continue

(2)左永刚:结束本次循环,即跳过循环体中下面尚未执行的语句,而转去重新判定循环条件是否成立,从而确定下一次循环体是否继续执行

【考点23】一维数组的定义

一维数组是指数组中的每个元素只带有一个下标的数组。

定义方式为:

类型说明符 数组名[常量表达式];

【考点24】一维数组元素的引用

数组元素的引用形式为:数组名[下标表达式];

一个数组元素实质上是一个变量名,代表内存中的一个存储单元,一个数组占据的是一连串连续的存储单元

数组必须先定义后使用

只能逐个引用数组元素而不能一次引用整个数组

【考点25】一维数组的初始化

当数组定义后,系统会为该数组在内存中开辟一串连续的存储单元,但这些存储单元中并没有确定的值。可以在定义数组时为所包含的数组元素赋初值。

例如:int a[6]={0,1,2,3,4,5};

所赋初值放在一对花括号中,数值类型必须与所说明类型一致

所赋初值之间用逗号隔开,系统将按这些数值的排列顺序,从a[0]元素开始依次给数组a中的元素赋值

不能跳过前面的元素给后面的元素赋初值,但是允许为前面元素赋值为0

当所赋初值个数少于所定义数组的元素个数时,将自动给后面的其他元素补处置0

可以通过赋初值来定义一维数组的大小,定义数组时的一对方括号中可以不指定数组的大小。

【考点26】二维数组的定义

在C语言中,二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。二维数组元素的存储总是占用一块连续的内存单元。

一般形式为:

类型说明符 数组名[常量表达式1][常量表达式2];

数组的下标可以是整型表达式

数组元素可以出现在表达式中,也可以被赋值

【考点27】二维数组的初始化

可以在定义二维数组的同时给二维数组的各元素赋初值

全部初值放在一对花括号中,每一行的初值又分别括在一对花括号中,之间用逗号隔开

当某行一对花括号内的初值个数少于改行中元素的个数时,系统将自动地给后面的元素赋初值0

不能跳过每行前面的元素而给后面的元素赋初值

【考点28】字符串和字符串结束标志

在C语言中,将字符串作为字符数组来处理。为了测定字符串的实际长度,C语言规定了一个字符串结束标志,以字符“”代表。

【考点29】字符数组的输入输出

字符数组的输入输出有以下两种方法:

用“%c”格式符,将字符逐个输入或输出

用“%s”格式符,将整个字符串一次输入或输出

【考点30】形式参数

在定义函数时,函数名后面括号中的变量称为形式参数

【考点31】实际参数

在主调函数中,函数名后面括号中的参数称为“实际参数”

【考点32】函数的返回值

(1)定义:函数的返回值就是通过函数调用使主函数能得到一个确定的值

(2)表达形式:return 表达式;

或return(表达式)

或return

(3)说明

return语句中的表达式值的类型必须与函数首部所说明的类型一致。若类型不一致,则以函数值的类型为准,由系统自动进行强制转换。

【考点33】函数调用的一般形式

函数名(实参表列)

函数的调用可分为调用无参函数和调用有参函数两种

调用无参函数:不用“实参表列”,但括号不能省略

调用有参函数:若实参表列中有多个实参,各参数间用逗号隔开。实参与形参要求类型一致。

【考点34】指针变量的定义

定义指针变量的一般形式:

类型名 *指针变量名1,*指针变量名2,···;

例如:int *p,*t;

【考点35】指针变量的引用

指针变量中只能存放地址(指针),与指针相关的两个运算符是“&”(取地址运算)和“*”(指针运算符)

【考点36】指针变量作为函数参数

指针类型数据可以作为函数参数来进行传递

作用:将一个变量的地址传送到另一个函数中,参与该函数的运算。

【考点37】指向数组元素的指针

C语言规定数组名代表数组的首地址,也就是数组中第0号元素的地址

定义指向数组元素的指针变量的方法与定义指向变量的指针变量相同

【考点38】通过指针引用数组元素

如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。

【考点39】指向函数的指针

指针变量可以指向一个函数,编译时,一个函数将被分配给一个入口地址,这个入口地址就称为该函数的指针。因此,可以通过使用一个指向函数的指针变量调用此函数。

说明:

1.指向函数的指针变量的一般定义形式为:数据类型(*指针变量名)()

2.在给函数指针变量赋值时,只需给出函数名而不必给出参数用函数指针变量调用函数时,只需将(*s)代替函数名即可,在(*s)之后的括号中根据需要写上实参

3.对指向函数的指针变量,有些运算,如++s,--s,s++等都是没有意义的

【考点40】指针数组的概念

若在一个数组中,其元素均为指针类型数据,这样的数组称为指针数组

一维指针数组的定义形式为:

类型名 *数组名[数组长度]

【考点41】指向指针的指针

指向指针数据的指针变量,简称为指向指针的指针,通常称为二级指针。

定义一个指向指针数据的指针变量的形式:

类型名 **a;

【考点42】不带参数的宏定义

(1)定义形式:

#define 宏名 替换文本

或#define 宏名

(2)说明

1.在define宏名和宏替换文本之间要用空格隔开

2.在进行宏定义时,可以引用已定义的宏名

3.同一个宏名不能重复定义

【考点43】带参数的宏定义

(1)定义形式:

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

宏定义不只进行简单的字符串替换,还可进行参数替换

(2)执行过程

如果程序中有带实参的宏,则按#define 命令行中指定的字符串从左到右进行置换

如果字符串中包含宏中的形参,则将程序语句中相应的实参代替形参

如果宏定义中的字符串中的字符不是参数字符,则保留

【考点44】malloc()函数

函数原型为:

void * malloc(unsigned int size);

函数的作用:

系统自动在内存的动态存储区中,分配长度为size的一段连续空间。若此函数执行成功,则函数返回值为指向被分配域的起始地址的指针。若该函数执行失败,则函数返回值为空指针(NULL)

【考点45】结构体数据类型

(1)声明一个结构体类型的一般形式为

struct 结构体名

{成员表列};

(2)结构体类型可以用以下形式说明:

struct 结构体标识名

{

类型名1 结构体成员名表1;

类型名2 结构体成员名表2;

···

类型名3 结构体成员名表3;

};

【考点46】结构体数组

(1)一般形式

struct 结构体变量名 {成员表列} 数组名{常量表达式};

(2)结构体数组的初始值应顺序地放在一对花括号中

【考点47】指向结构体变量的指针

“->”称为指向运算符

“结构体变量,成员名”

等价于

“(*结构体指针变量名).成员名”

等价于

“结构体指针变量名->成员名”

【考点48】链表的概念

(1)定义:链表是一种常见的重要的数据结构,它是动态地进行存储单元分配的一种结构。

(2)说明:

链表中的各元素在内存中不一定是连续存放的;

一个节点中应包含一个指针变量,用它存放下一节点的地址

链表最后一个节点的指针域置成‘’(NULL)值,标志着链表的结束

每一个链表都用一个“头指针”变量来指向链表的开始,称为head指针。在head指针中存放了链表第一个节点的地址。

【考点49】C语言文件的概念

C程序把文件分为ASCII文件和二进制文件。ASCII文件又称为文本文件

在C语言中,文件是一个字节流或二进制流,也就是说,对于输入输出的数据都按“数据流”的形式进行处理

文件输入输出方式也称“存取方式”。C语言中,文件有两种存取方式:顺序存取和直接存取。

【考点50】文件类型指针

可以用该结构体类型来定义文件类型的指针变量,一般形式为:

FILE *fp

fp是一个指向FILE结构体类型的指针变量

【考点51】fopen()函数

(1)调用形式

fopen(文件名,文件使用方式);

(2)常用文件使用方式

“r”:为读而打开文本文件

"rb":为读而打开一个二进制文件

"w":为写而打开文本文件

"wb":为写而打开一个二进制文件

"a":为在文件后面添加数据而打开文本文件

"ab":为在文件后面添加数据而打开一个二进制文件

"r+":为读和写而打开文本文件

"rb+":为读和写而打开一个二进制文件

【考点52】fcolse()函数

调用形式:fclose(文件指针)

当执行了关闭操作后,成功则函数返回0,否则返回非0

【考点53】文件的定位

rewind(fp)

该函数的功能是使文件的位置指针重新返回到文件的开头,其中fp为文件指针,且该函数没有返回值。

国家计算机二级考试C语言选择题高频考点汇总