二级c语言文化基础考点.docx
- 文档编号:17784175
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:19
- 大小:23.47KB
二级c语言文化基础考点.docx
《二级c语言文化基础考点.docx》由会员分享,可在线阅读,更多相关《二级c语言文化基础考点.docx(19页珍藏版)》请在冰点文库上搜索。
二级c语言文化基础考点
函数:
考点1:
库函数
1.库函数的概念
(1)#include命令行
注意:
是C语言的预处理命令,所以不用加;
2.函数定义的语法
函数类型函数名(数据类型参数[,数据类型参数2……])
{说明语句部分;
可执行语句部分;
}
(1)在同一程序中,函数名必须唯一,形式参数名只要在同一函数中唯一即可,与其他函数中的变量可以同名。
(2)不能在函数的内部再定义函数,函数定义不可嵌套
(3)可以省略函数类型,则默认为int型
(4)函数必须先定义(或说明)后调用。
如果未先定义,则必须在前面进行函数原型声明
(5)若函数没有返回值,则必须把函数定义成void类型。
3.函数的返回值
return表达式;
(1)return语句中表达式的值就是所求的函数值,此表达式值的类型必须与函数首部所说明的类型一致。
若类型不一致,则以函数值的类型为准,由系统自动进行转换。
(2)return语句中也可以没有表达式,但此时必须将函数定义为void类型。
Return语句的作用只是使返回到调用函数,并没有确定的函数值。
(3)函数内可以没有return语句,但此时也必须定义函数为void类型,程序的流程执行到函数末尾“}”后返回调用函数,也没有确定的函数值带回。
应用:
函数的返回值经常考查
考点2:
函数的调用
1.函数的两种调用形式
函数名(实参表);
(1)调用函数可用两种方式:
可以作为表达式(有返回值);可以作为一条独立的语句(无返回值)
(2)实参的个数、类型必须与形参一一对应
应用:
实参和形参
2.调用函数时的语法要求(4个)
(1)调用函数时,函数名必须与所调用的函数名字完全一致
(2)实参的个数、类型必须与形参的个数类型一致。
(3)函数必须先定义后调用
(4)函数可以直接或间接地调用自己,称为递归调用
3.函数的说明
(1)函数说明的形式
【格式一】类型名函数名(参数类型1,参数类型2,…);
【格式二】类型名函数名(参数类型1参数名1,参数类型2参数名2,…);
(2)函数说明的位置
当在所有函数的外部,被调用之前说明函数时,在对函数进行说明的语句后面所有位置上都可以对该函数进行调用。
函数说明也可以放在调用函数内部,则只有该函数可以调用。
4.调用函数和被调用函数之间的数据传递
可以通过三种方式进行传递:
(1)实参和形参之间进行数据传递;
(2)通过return语句把函数值返回调用函数
(3)通过全局变量。
(不提倡)
在C语言中,数据只能从实参单向传递给形参,称为“单向值传递”。
也就是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。
应用:
函数的实参和形参是考查的重点。
考点3参数传递
1.传给main函数的参数
2.通过实参向函数传递函数名指向指针的变量
(1)指向函数的指针变量的定义
数据类型(*标识符)(参数1,参数2,…)
数据类型*标识符(参数1,参数2,…)——返回值为指针类型的函数
(2)函数名或指向函数的指针变量作为实参
应用:
考查的难点,容易混淆,注意区分
考点4函数的递归调用
直接递归,间接递归
必须在函数内有终止递归调用的条件。
递推和回归
考点5局部变量、全局变量和存储分类
1.局部变量及其作用域和生存期
函数内部或复合语句内部
4种存储类型:
自动(初值不确定)、寄存器型、静态型(初值为0)、外部参照型
2.全局变量及其作用域和生存期
在函数外部定义,从定义位置开始有效,生存期是整个程序的运行期间
如果要使用在后面定义的全局变量,应使用extern进行说明
静态全局变量只限于本文件内使用
3.外部函数与静态函数
分别用extern和static声明的函数。
外部函数可以被其他文件中的函数调用,而静态函数不可以
地址与指针
考点1变量的地址和指针
1.地址和指针的定义
(1)内存地址
程序中对变量进行存取操作,实际上也就是对某个地址的存储单元进行操作。
这种直接按变量的地址存取变量值的方式称为直接存取方式。
(2)指针变量
用来存放地址的变量称为指针变量。
2.指针变量的定义和指针变量的基类型
(1)指针变量的定义
类型名*指针变量名1,*指针变量名2,…
(2)指针变量的基类型
一个指针变量中存放的是一个存储单元的地址值。
这里“一个存储单元”中的“一”所代表的字节数是和指针变量的基类型有关的。
对于基类型不同的指针变量不能混合使用。
考点2指针变量的操作
1.给指针变量赋地址值
3种方式:
(1)通过求地址运算符(&)获得地址值
提示:
求地址运算符(&)只能应用于变量和数组元素。
而且运算对象的类型必须与指针变量的基类型相同。
(2)通过指针变量获得地址值
通过赋值运算,把一个指针变量中的地址值赋给另一个指针变量,从而使两个指针指向同一地址。
提示:
赋值号两边的指针变量的类型必须相同。
(3)通过标准函数获得地址值
可以通过调用库函数malloc和calloc在内存中开辟动态存储单元,并把所开辟的动态存储单元的地址赋给指针变量。
2.给指针变量赋“空”值
P=NULL;等价与p=0;或p=’\0’;
3.对指针变量的操作
(1)通过指针来引用一个存储单元
取内容运算符(*),又称间接访问运算赋,间接运算符。
(2)移动指针
p+n;p-n;++p;--p;p++;p--;
p1-p2(设p,p1,p2是指针)
(3)指针比较
通常两个或多个指针指向同一数组元素时,比较才有意义。
考点3函数之间地址的传递
1.形参为指针变量时实参和形参之间的数据传递
若函数的形参为指针类型,调用该函数时,对应的实参必须是基类型相同的地址值或者是已指向某个存储单元的指针变量。
通过改变形参所指向存储单元的值,对应实参所指向存储单元的值会发生变化。
应用:
指针变量作为形参在历年考试中常常出现。
2.通过传送地址值改变变量值
通过传送地址值,可以在被调用函数中对调用函数中的变量进行引用,利用此种形式可以把两个或两个以上的数据从被调用函数返回到调用函数。
如交换两个变量的值的函数。
经常考。
3.函数返回地址值
定义函数的类型为指针类型,这时函数返回地址值。
函数类型*函数名(形参表)
数组
考点1一维数组
1.一维数组的定义
类型说明符数组名[整型常量表达式],….;
(1)数组名的定义和变量名相同;
(2)数组名后是方括号;
(3)常量表达式表示元素的个数,即数组长度
(4)常量表达式中可以包含常量和符号常量,不能包含变量。
2.一维数组的初始化
在定义数组的同时给各个元素赋初值。
(1)所赋初值放在等号后的一对花括号中
(2)数值类型必须与所说明的类型一致
(3)所赋初值之间用逗号隔开
(4)系统将按这些数值的排列数序给元素赋值
(5)在指定初值时,不可能跳过前面的元素给后面的元素赋初值
(6)当所赋初值少于所定义数组的元素个数时,将自动给后面的元素补初值0,字符数组补’\0’
(7)当所赋初值多于所定义数组的元素个数时,在编译时将给出出错信息。
3.通过赋初值定义数组的大小
如果对数组初始化时,给数组中所有元素赋初值,则可以省略[]中的常量表达式。
4.一维数组和指针
(1)一维数组和数组元素的地址
1数组首地址:
数组名代表数组的首地址,是地址常量,不可以改变。
2数组元素地址的表示方式
可以对数组名加一个整数的方法,来一次表达该数组中不同的元素的地址。
如a,a+1等
(2)通过数组元素的地址引用数组元素
可以用*a,*(a+1)等来引用数组元素
(3)通过指针引用一维数组
若定义:
floata[10],*p,k.;则执行语句p=a;或p=&a[0];后,即可使用指针来引用数组元素。
*p,*(p+1)等
应用:
一对圆括号不可少,不能写成*p+1。
这样含有就变了。
数组和指针是考查的难点。
考点2函数中的数组
1.数组元素做实参
数组元素做实参时,对应的形参必须是类型相同的变量。
应用:
数组元素做实参的时候,不能在函数中改变对应的数组元素的值。
2.数组名做实参
数组名做实参时,对应的形参应当是一个指针变量,此指针变量的基类型必须与数组的类型一致。
(1)在函数中,可以通过指针变量来引用调用函数中对应的数组元素,从而达到改变调用函数中对应数组元素的值。
(2)当传送数组名时,在被调用函数中也同样可用数组元素的形式来引用调用函数中对应的数组元素。
注意:
这只是形式的相似,不要误以为整个数组可以传送给被调用函数。
在被调用函数中,并没有为与数组名对应的形参另外开辟一串连续的存储单元,而只是开辟了一个指针变量的存储单元。
在被调用函数中所引用的数组元素就是实参数组中的元素。
调用函数只是把数组的首地址传送给形参指针,仍是遵循按“值”传送的机制。
3.数组元素地址作为实参
当用数组元素地址作为实参时,因为是地址值,所以对应的形参应当也是基类型相同的指针变量。
4.函数指针形参和函数体中数组的区别
(1)在函数fun中,数组做形参时,可以写作a[N],也可以写作a[]或*a。
(2)若在函数fun的函数体中定义一个b数组,在调用fun函数时,系统为b数组开辟一串连续的存储单元,b是一个地址常量,不可以对它重新赋值
要注意b数组和形参a都是局部变量,但他们具有不同的含义
(3)在函数fun执行完毕,返回主函数时,系统将释放a和b所占存储单元,指针变量a和数组b将不再存在。
因此函数fun不能把b作为函数值返回。
这样做,主函数中的指针变量p将不指向任何对象而成为“悬空指针”
考点3二维数组的定义和初始化
1.二维数组的定义
类型名数组名[常量表达式1][常量表达式2]
二维数组元素在内存中按行存放
可以把一个二维数组看成一个特殊的一维数组,每个数组元素又是包含有若干个元素的一维数组。
2.二维数组的初始化
注意4点要求
(1)所赋初值个数与数组元素的个数相同
可以省略第一个方括号中的常量表达式
(2)每行所赋初值个数与数组元素的个数可以不同
系统自动给该行后面的元素补初值0
(3)所赋初值函数少于数组行数
(4)系统自动给后面的各行的元素补初值0
(5)赋初值时省略花括号对
可以不用行花括号对,则系统自动按元素在内存中的顺序将花括号内的数据一一对应地赋给各个元素。
考点4二维数组的引用
1.二维数组和数组元素的地址
(1)二维数组a由若干个一维数组组成
如:
inta[3][4];
a[0]、a[1]、a[2]都是一维数组名,代表一个不可变的地址常量,其值依次为二维数组每行第一个元素的地址。
(2)二维数组名也是一个地址常量
二维数组名也是一个存放地址常量的指针,其值为二维数组中第一个元素的地址。
如数组名a的值与a[0]的值相同,但其基类型为具有4个整型元素的数组类型。
二维数组名是一个行指针。
a+0第0行的首地址与a[0]相同
a+1第1行的首地址与a[1]相同
(3)二维数组元素的地址
二维数组元素的地址可以由表达式&a[i][j]求得,也可以通过每行的首地址来表示。
inta[3][4];则有5种表达方式:
【表达1】&a[i][j]
【表达2】a[i]+j
【表达3】*(a+i)+j
【表达4】&a[0][0]+4*i+j
【表达5】a[0]+4*i+j
熟记:
a[0]和a的基类型的区别
2.通过地址引用二维数组
inta[3][4];则有5种表达方式引用a的数组元素:
【表达1】a[i][j]
【表达2】*(a[i]+j)
【表达3】*(*(a+i)+j)
【表达4】(*(a+i))[j]
【表达5】*(&a[0][0]+4*i+j)
3.通过建立一个指针数组引用二维数组元素
int*p[3],a[3][2],i,j;
p就是一个指针数组。
p[i]和a[i]的基类型相同
若有循环:
for(i=0;i<3;i++)p[i]=a[i];
p[i]分别指向数组a每行的开头。
通过指针数组p来引用a数组元素,它们的等价形式如下:
【形式一】*(p[i]+j)*(a[i]+j)
【形式二】*(*(p+i)+j)*(*(a+i)+j)
【形式三】(*(p+i))[j](*(a+i))[j]
【形式四】p[i][j]a[i][j]
注意:
a数组元素的引用是考查的重点和难点
考点5二维数组与函数
1.二维数组名作为实参时实参和形参之间的数据传递
当二维数组名作为实参时,对应的形参必须是一个行指针变量。
有3种形式:
【形式一】fun(double*a[N])
【形式二】fun(doublea[][N])
【形式三】fun(doublea[M][N])
二维数组的列下标不可缺少。
无论是哪种形式,系统都将把a处理成一个行指针。
2.指针数组作为实参时实参和形参之间的数据传递
当指针数组名作为实参时,对应的形参应当是一个指向指针的指针。
有3种形式:
【形式一】fun(double(*a)[N])
【形式二】fun(double*a[N])
【形式三】fun(double**a])
应用:
以上两个考点中的函数实参的区别和联系,是考查的重点。
字符串
考点1用一维字符数组存放字符串
1.字符串常量
(1)表示字符串常量的约定:
‘\0’作串尾标记
(2)字符串常量给出的是地址值:
字符串常量是字符串在内存中所占的一串连续存储单元的首地址
2.用一维字符数组存放字符串
(1)通过赋初值的方式给一维字符数组赋字符串
①使用单个字符给字符数组赋值,应该有一个“\0”
②在赋初值时直接赋字符串常量
(2)在C程序执行过程中给一维字符数组赋字符串
①不可以用赋值语句给字符数组整体赋字符串
②给数组元素逐个赋字符值,最后人为加入’\0’
考点2使指针指向字符串
(1)通过赋初值的方式使指针指向一个字符串
(2)通过赋值运算使指针指向一个字符串
考点3字符串的输入和输出
1.输入和输出字符串时的必要条件
3个:
(1)当对字符串进行输出时,输出项既可以是字符串常量或字符数组名,也可以是已指向字符串的字符指针变量。
(2)当对字符串进行输入时,输入项可以是字符数组名,也可以是字符指针变量。
(3)当用指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间,一边使字符串能存放在其所指的具体的内存单元中
2.用格式说明符%s进行整串输入和输出
(1)用scanf进行格式输入
当输入字符串时,空格和回车符都作为输入数据的分隔符而不能被读入
(2)用printf进行格式输出
3.调用gets、puts函数在终端输入或输出一行字符串
读入整行字符串,遇到换行符为止
考点4字符串数组
字符串数组就是数组中每个元素又都是一个存放字符串的一维数组。
2种形式:
(1)二维字符数组构成一个字符串数组
(2)字符型指针数组
考点5用于字符串处理的函数
1.字符串复制函数strcpy
2.字符串连接函数strcat
3.求字符串长度函数strlen
4.字符串比较函数strcmp
编译预处理和动态存储分配
考点1编译预处理
#开头,末尾没有;
编译预处理就是在C编译程序对源程序进行编译前,由编译预处理程序对这些编译预处理命令行进行处理的过程
考点2宏替换
1.不带参数的宏定义
#define宏名替换文本
2.带参数的宏定义
#define宏名(形参表)替换文本
注意事项:
(1)不带参数的宏定义可以嵌套,即在替换文本中可以包含已定义过的宏名
(2)同一个宏名不能重复定义
(3)替换文本不能替换双引号中的字符串
(4)宏名通常用大写字母表示
(5)在调用带参数的宏名时,一对圆括号必不可少。
实参与形参对应。
在预编译时,编译预处理程序用“替换文本”来替换宏,并用对应的实参来替换形参
(6)“替换文本”的形参和整个表达式应该用括号括起来。
如果没有加括号,在预编译时,系统不会自动添加
(7)在宏替换是对参数没有类型要求
(8)宏替换是在编译前由预处理程序完成的,因此宏替换不占运行的时间
(9)宏替换中,实参不能替换括在双引号中的形参
3.终止宏定义
考点3文件包含处理
考点4动态存储分配
malloc函数
calloc函数
free函数
结构体、共用体和用户定义类型
考点1结构体
1.用typedef说明一个新类型
仅仅是给已有的类型起一个别名,并未产生新的数据类型,原有类型名依然有效
2.结构体类型数据的定义
strcut
定义结构体类型的变量、数组和指针变量可以用4种方式:
(1)紧跟在结构体类型说明之后定义
(2)在说明一个无名结构体类型的同时,直接进行定义
(3)先说明结构体类型,再单独进行变量定义
(4)使用typedef说明一个结构体类型名,再用新类型名来定义变量
3.结构体类型数据成员的引用
若已定义了一个结构体变量和基类型为同一结构体类型的指针变量,并使该指针指向同类型的变量,则引用结构体变量中的成员有3种形式:
【形式一】结构体变量名.成员名
【形式二】指针变量名->成员名
【形式三】(*指针变量名).成员名
考点2共用体
1.共用体类型数据的定义
注意:
(1)共用体变量在定义的同时只能用第一个成员的类型的值进行初始化
(2)共用体变量与结构体变量的本质区别:
结构体变量中的每个成员分别占有独立的存储空间,因此结构体变量所占字节数是其成员所占字节数的总和;而共用体变量中的所有成员共享一段公共存储区,所以共用体变量所占内存字节数与其成员中占字节数最多的那个成员相等
(3)由于共用体变量中的所有成员共享存储空间,因此变量中的所有成员的首地址相同,而且变量的地址也就是该变量成员的地址
2.共用体类型数据的引用
也是3种形式,同结构体
考点3链表
1.通过结构体构成链表
当一个结构体中有一个或多个成员的基类型就是本结构体类型时,通常把这种结构体称为“可以引用自身的结构体”。
当有一个指针类型的成员时,则构成链表的结点
2.单向链表的建立
3.结点数据的输出、删除与插入
(1)结点数据的输出
利用一个工作指针p,(有头结点head,则应该从下一个结点开始,即p=head->next)从头到尾依次指向链表中的每个结点;当指针指向某个结点时,就输出该结点数据域中的内容,直到遇到链表结束标志为止。
如果是空链表,就只输出有关信息并返回调用函数。
(2)结点数据的删除
为了删除单向链表中的某个结点,首先要找到待删除结点的前驱结点,然后将此前驱结点的指针指向待删除结点的后继结点,最后释放被删除结点所占存储空间(free)
(3)结点数据的插入
在单向链表中插入结点,首先要确定插入的位置。
当待插入结点插在指针p所指结点之前称为“前插”,当待插结点插在指针p所指结点之后称为“后插”。
一般先找到待插位置的前一个结点,之后再完成插入操作。
文件
考点1文件指针
1.文件类型指针
FILE*指针变量名
2.文件的打开与关闭
(1)文件的打开(fopen)
fopen(文件名,文件使用方式)
注意文件使用方式及其含义
(2)文件的关闭(fclose)
fclose(文件指针)
文件使用之后必须关闭。
用一种方式打开文件进行操作后,想使用另外一种方式再次打开,必须先关闭。
考点2文件的读写
1.调用getc(fgetc)和putc(fputc)函数进行输入和输出
ch=fgetc(fp);
fp是文件指针,从pf指定的文件中读入一个字符送给变量ch。
fputc(ch,fp);
将字符ch写到文件指针fp所指的文件中去。
2.fgets和fputs函数的应用
fgets(str,n,fp);
fp是一个文件指针,str是存放字符串的起始地址。
从fp所指文件中读入n-1个字符放入以str为起始地址的空间内。
读入结束后,自动在最后加’\0’
fputs(str,fp);
将字符串str写到fp所指的文件中。
用此函数输出时,字符串后的’\0’并不输出,也不自动加’\n’。
所以必要的时候需要编写代码另外写入
3.fscanf和fprintf函数的应用
fscanf(文件指针,格式控制字符串,输入项表);
格式控制字符串和输入项表与scanf中完全一样
fscanf函数只能从文本文件中按格式输入。
Fscanf函数输入的对象是磁盘上文本文件中的数据
fprintf(文件指针,格式控制字符串,输出项表);
按格式将内存将内存中的数据转换成对应的字符,并以ASCII代码形式输出到文本文件中
4.fread和fwrite函数的应用
用来读写二进制文件
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer是数据块的指针
size表示每个数据块的字节数
count用来指定每次读、写的数据块的个数
fp是文件指针
每当进行文件读写之后,文件之后就会自动向后移动一个数据块的字节数,从而指向下一个数据块的位置
5.文件定位函数rewind和fseek
(1)rewind函数
使位置指针重新返回文件的开头
(2)fseek函数
移动文件位置指针到指定的位置,接着的读或写操作将从此位置开始
fseek(fp,offset,origin);
fp是文件指针;offset为以字节为单位的位移量
origin是起始点,有3个:
SEEK_SET(0)——文件开头
SEEK_END
(2):
文件末尾
SEEK_CUR
(1):
当前位置
位移量为正数时,向后移动;为负数时,向前移动
6.判断文件结束函数feof
用来判读文件是否结束
feof(fp)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 文化 基础 考点