计算机二级C语言核心知识点总结
二级C语言考试主要分为两大块:公共基础知识(约占20%)和C语言程序设计(约占80%)。
第一部分:公共基础知识
通常以选择题的形式出现,考察对基本概念的理解。
数据结构与算法
- 基本概念:
- 算法:五个基本特征(有穷性、确定性、可行性、输入、输出)。
- 数据结构:数据的逻辑结构(线性结构、非线性结构)和物理结构(顺序存储、链式存储)。
- 线性表:
- 定义:零个或多个数据元素的有限序列。
- 顺序存储:一段连续的内存空间,通过下标随机访问,插入/删除需要移动大量元素。
- 链式存储:通过指针链接,不要求连续内存空间,插入/删除效率高,但访问需要遍历。
- 栈和队列:
- 栈:后进先出,只允许在一端(栈顶)进行插入和删除操作。
- 队列:先进先出,允许在一端(队尾)插入,在另一端(队头)删除。
- 树与二叉树:
- 树:一个无环的连通图,有根节点、父节点、子节点、叶子节点等概念。
- 二叉树:每个节点最多有两个子节点(左子树、右子树)。
- 遍历:
- 前序遍历:根 -> 左 -> 右
- 中序遍历:左 -> 根 -> 右
- 后序遍历:左 -> 右 -> 根
- 满二叉树:所有节点都有0或2个子节点,且所有叶子都在同一层。
- 完全二叉树:除最后一层外,其他层节点数都达到最大,且最后一层节点从左到右连续排列。
- 查找:
- 顺序查找:从表头开始逐个比较,平均时间复杂度 O(n)。
- 二分查找:要求数据有序,每次查找范围减半,平均时间复杂度 O(log n)。
- 排序:
- 插入排序:将一个记录插入到已排好序的有序表中。
- 选择排序:每次从未排序序列中找到最小(大)元素,放到已排序序列的末尾。
- 冒泡排序:相邻元素比较,逆序则交换,每趟将最大(小)元素“冒泡”到末尾。
- 快速排序:通过一趟排序将待排记录分割成独立的两部分,一部分比另一部分的所有关键字都小,然后对这两部分分别进行排序。
程序设计基础
- 程序设计风格:清晰、可读性好。
- 结构化程序设计:顺序、选择、循环三种基本结构,避免使用
goto语句。
软件工程基础
- 软件生命周期:定义、需求分析、设计、编码、测试、维护。
- 软件开发模型:瀑布模型、螺旋模型、增量模型等。
- 需求分析:形成需求规格说明书。
- 软件设计:概要设计(模块结构图)、详细设计(伪代码、流程图)。
- 软件测试:
- 目的:发现错误,证明程序有错。
- 方法:
- 白盒测试:基于内部代码逻辑,覆盖路径(语句覆盖、判定覆盖、条件覆盖等)。
- 黑盒测试:基于外部功能需求,不考虑内部代码(等价类划分法、边界值分析法)。
- 测试阶段:单元测试、集成测试、确认测试、系统测试。
数据库设计基础
- 数据库模型:概念模型(E-R图)、逻辑模型(关系模型)、物理模型。
- 关系代数:选择(σ)、投影(π)、连接(⋈)等运算。
- 数据库关系模型:
- 关系:一张二维表。
- 元组:表中的一行。
- 属性:表中的一列。
- 键:唯一标识一个元组的属性或属性组。
- 范式:规范化的程度,如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。
第二部分:C语言程序设计
这是考试的核心,包括选择题和操作题(编程题)。
C语言基本概念
- 程序结构:
main函数是程序的入口。 - 标识符:由字母、数字、下划线组成,不能以数字开头,不能是关键字。
- 关键字:
auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,while。 - 常量与变量:
- 常量:整型、实型(浮点型)、字符型、字符串型、符号常量(
#define或const)。 - 变量:先定义,后使用,数据类型决定内存占用和取值范围。
- 常量:整型、实型(浮点型)、字符型、字符串型、符号常量(
- 基本数据类型:
int: 整型char: 字符型float: 单精度浮点型double: 双精度浮点型long,short,signed,unsigned: 修饰符。
运算符与表达式
- 算术运算符:, , , , (取模),注意 对于整数是整除, 只能用于整数。
- 关系运算符:
>,<,>=,<=, , ,结果是逻辑值(真/假,在C语言中用1/0表示)。 - 逻辑运算符:
&&(与), (或), (非),短路特性:a && ba为假,则b不再计算;a || ba为真,则b不再计算。 - 赋值运算符:, , , , , 等。
- 条件运算符(三元运算符):
表达式1 ? 表达式2 : 表达式3。表达式1为真,则整个表达式值为表达式2,否则为表达式3。 - 逗号运算符:,从左到右依次计算,整个表达式的值是最后一个表达式的值。
- 位运算符:
&(按位与), (按位或),^(按位异或), (按位取反),<<(左移),>>(右移)。 - 数据类型转换:
- 隐式转换:不同类型数据混合运算时,自动将低类型转换为高类型。
- 显式转换(强制类型转换):
(类型名)表达式。
基本语句
- 表达式语句:表达式后加分号,如
a = 10;。 - 空语句:只有一个分号 。
- 复合语句(块语句):用 括起来的一组语句。
- 输入输出函数:
printf():格式化输出,格式控制符:%d(int),%c(char),%f(float),%lf(double),%s(字符串), (输出%)。scanf():格式化输入,注意:变量前要加&(地址符),%c会读取空格和回车,%s遇到空格、回车、Tab会停止。
- 分支语句:
if-else:实现单分支、双分支、多分支结构。switch:实现多分支结构,注意case后的值必须为常量,break的作用是跳出switch。
- 循环语句:
for:最灵活的循环,通常用于循环次数已知的情况。while:当循环条件满足时执行循环体,循环次数不确定时常用。do-while:先执行一次循环体,再判断条件,至少执行一次。break:跳出当前循环或switch。continue:结束本次循环,进入下一次循环。
数组
- 一维数组:
- 定义:
类型 数组名[长度];。 - 初始化:
int a[5] = {1, 2, 3, 4, 5};或int a[] = {1, 2, 3, 4, 5};。 - 引用:
数组名[下标],下标从0开始。
- 定义:
- 二维数组:
- 定义:
类型 数组名[行数][列数];。 - 初始化:
int a[2][3] = {{1,2,3}, {4,5,6}};。 - 引用:
数组名[行下标][列下标]。
- 定义:
- 字符数组与字符串:
- 字符数组:
char str[10] = {'H', 'e', 'l', 'l', 'o'};。 - 字符串:以
'\0'(空字符) 结尾的字符数组。char str[] = "Hello";等价于char str[] = {'H', 'e', 'l', 'l', 'o', '\0'};。 - 常用字符串处理函数:
strlen()(求长度),strcpy()(拷贝),strcat()(连接),strcmp()(比较)。
- 字符数组:
函数
- 定义:
返回值类型 函数名(形参列表) { 函数体 }。 - 声明:
返回值类型 函数名(形参列表);,在调用前声明。 - 调用:
函数名(实参列表);,实参与形参个数、类型、顺序要一致。 - 参数传递:
- 值传递:单向传递,函数内部修改不会影响实参的值(基本数据类型)。
- 地址传递:传递变量的地址,函数可以通过指针修改实参的值(数组、指针)。
- 递归:函数直接或间接调用自身,必须有明确的递归终止条件。
- 变量存储类别:
- 局部变量:在函数内部定义,作用域仅限于该函数。
- 全局变量:在所有函数外部定义,作用域是整个程序。
static:静态局部变量(生命周期延长到整个程序),静态全局变量(作用域限制在本文件)。extern:声明外部全局变量。
指针
- 定义:指针是一个变量,其值为另一个变量的地址。
int *p;// 定义一个指向整型数据的指针p。int a = 10; p = &a;// 将变量a的地址赋给指针p。
- 指针运算:
- (解引用/间接访问运算符):
*p访问指针p所指向地址的值。 &(取地址运算符):&a获取变量a的地址。- , :指针可以加减一个整数,指向下一个/上一个同类型元素。
- (解引用/间接访问运算符):
- 指针与数组:
- 数组名
a代表数组首元素的地址&a[0]。 a[i]等价于*(a+i)。p[i]等价于*(p+i)。
- 数组名
- 指针与函数:
- 指针作为函数参数:实现地址传递,修改实参。
- 函数指针:指向函数的指针。
int (*p)(int, int);。 - 指针函数:返回指针的函数。
int* func();。
结构体与共用体
- 结构体 (struct):将不同类型的数据组合成一个整体。
- 定义:
struct 结构体名 { 成员列表 };。 - 引用:
结构体变量名.成员名。 - 指针引用结构体:
结构体指针->成员名或(*结构体指针).成员名。
- 定义:
- 共用体 (union):所有成员共享同一段内存空间,大小最大的成员决定共用体的大小。
- 定义:
union 共用体名 { 成员列表 };。 - 特点:同一时间只能存储一个成员的值。
- 定义:
文件操作
- 文件指针:
FILE *fp;。 - 打开文件:
fopen()。"r"(只读),"w"(只写,覆盖),"a"(追加),"rb","wb","ab"(二进制模式)。
- 关闭文件:
fclose()。 - 读写文件:
fgetc()/fputc()(字符读写)fgets()/fputs()(字符串读写)fread()/fwrite()(块读写,用于二进制文件)fprintf()/fscanf()(格式化读写)
- 文件定位:
rewind(fp):文件指针回到文件开头。fseek(fp, offset, whence):移动文件指针。whence可为SEEK_SET(文件头),SEEK_CUR(当前位置),SEEK_END(文件尾)。
考试备考建议
- 熟悉考试环境:考试通常使用 Visual C++ 6.0 或 Dev-C++ 等环境,提前熟悉其调试功能(设置断点、单步执行、查看变量值)。
- 多动手写代码:二级C语言是上机考试,编程题占大头,光看不练是假把式,一定要亲手敲代码,并运行调试。
- 掌握基础,理解原理:特别是指针、数组、函数传参等核心概念,务必理解其底层原理,而不是死记硬背。
- 刷真题,总结规律:历年真题是最好的复习资料,通过做题,了解考试题型、重点、难点和高频考点。
- 注意细节:C语言对语法要求严格,注意分号、大括号的匹配、变量定义的位置、
scanf的&、指针的初始化等细节。 - 调试能力:遇到错误时,要学会看编译错误信息,并利用调试工具定位问题,这是编程能力的核心体现。
祝你考试顺利,取得好成绩!
