
1. 公共基础知识整体认知与复习策略1.1 这门课到底考什么计算机二级C语言考试中的“公共基础知识”部分是很多考生最容易忽略、也最容易丢分的一块。它不像C语言程序题那样需要写代码而是以选择题形式出现在前10题左右涵盖数据结构与算法、程序设计基础、软件工程基础、数据库设计基础四大板块。别看它只占10分左右这10分却是整张试卷里“性价比”最高的部分——考点极其固定出题范围就那么多背熟、练透之后基本就是送分题。我第一次备考二级的时候把精力几乎全砸在C语言程序题上公共基础部分只考前翻了翻结果考试时那10道选择题有7道是靠感觉蒙的。后来第二次备考我花了三天时间把所有公共基础考点系统过了一遍再做两套真题这部分的正确率基本能稳定在9题以上。所以我想先跟各位说清楚公共基础知识不是“玄学”它是有明确考纲、明确题型、明确套路的一块内容值得你花专门的时间去攻。1.2 四大板块的分数分布与学习优先级根据近几年的真题统计公共基础知识部分的10道选择题大致分布如下板块出题数量学习难度投入产出比数据结构与算法4题左右高中等理解了就不容易忘程序设计基础1-2题低极高背完就能拿分软件工程基础2题左右中高概念题为主记关键词就行数据库设计基础2-3题中高掌握关系模型和SQL基本概念即可这里面的优先级我个人建议是程序设计基础 软件工程基础 数据库基础 数据结构与算法。为什么把数据结构排在最后不是说它不重要而是它的题目往往是计算题和逻辑分析题需要真正理解而前三块背下核心概念就能拿分。备考时间紧张的话先把好拿的分拿稳再去啃硬骨头。提示这个分值分布是我的个人统计不同年份、不同批次可能略有差异但大体方向是一致的。建议你复习时以近年真题为准不用过分纠结某年是否多考了一题。2. 数据结构与算法核心考点精讲2.1 算法的基本概念与复杂度计算算法这一块考试最爱考的就两件事一是算法的特征二是时间复杂度和空间复杂度。算法的五个基本特征——有穷性、确定性、可行性、有输入、有输出——这个一定要背牢。真题里经常给出一个描述问属于算法的哪个特征或者反过来问你“算法具有哪五个特征”。这属于纯记忆题是送分中的送分。时间复杂度是重头戏。很多人一看到复杂度就头大觉得要算数学题其实二级考的复杂度计算非常基础说白了就是看程序里主要操作的执行次数跟问题规模n是什么关系。常见的时间复杂度从低到高排列是O(1)常数阶跟n无关比如直接返回数组第一个元素O(log₂n)对数阶比如二分查找每次都把范围砍一半O(n)线性阶比如单层for循环遍历数组O(nlog₂n)比如快速排序、归并排序的平均时间复杂度O(n²)平方阶比如双层嵌套循环我教大家一个快速判断的方法看到循环嵌套就数层数。一层循环基本是O(n)两层嵌套循环基本是O(n²)三层就是O(n³)。如果循环里每次变量翻倍或减半比如i i * 2这种那就是O(log₂n)。这样判断虽然不够严谨但应付二级选择题足够了。空间复杂度考得相对少就记住一个原则如果算法里额外开辟的存储空间跟n无关那就是O(1)空间复杂度如果开辟了一个大小为n的辅助数组那就是O(n)。2.2 数据结构基础栈、队列、链表、二叉树这四种数据结构是选择题的“常客”几乎每次考试必出2-3题。栈和队列要放在一起对比记忆。栈是先进后出FILO队列是先进先出FIFO。真题最经典考法是给你一串元素按顺序入栈问可能的出栈顺序是什么或者给你入队出队的顺序问队头队尾指针的变化。这里有一个常见的易错点栈的操作是在栈顶进行的栈底不能操作队列是在队尾入队、队头出队。另外要记住循环队列中计算元素个数用公式(rear - front maxsize) % maxsize当front等于rear时队列为空当(rear1) % maxsize等于front时队列为满。这些细节一定不能记混。链表的考点集中在链表相比顺序存储的优点插入删除不需要移动其他元素存储空间可以不连续、链表的分类单链表、双链表、循环链表、以及链表节点的操作。真题常给一个简单的删除或插入节点的操作步骤问某个节点的指针怎么改。比如在p节点后面插入s节点顺序一定是s-next p-next; p-next s;这两步顺序不能反。如果先执行p-next s那p后面的节点就丢了。二叉树是数据结构里考点最密集的部分。你需要掌握二叉树的性质第k层最多有2^(k-1)个节点深度为m的二叉树最多有2^m-1个节点叶子节点数等于度为2的节点数加1即n₀ n₂ 1度为0的节点比度为2的节点多一个满二叉树和完全二叉树的定义与区别二叉树的遍历前序根左右、中序左根右、后序左右根已知两种遍历序列推第三种遍历序列真题里出现频率最高的是“已知前序和中序求后序”这种题以及算二叉树节点数。算节点数有一个非常实用的技巧知道了任意一棵二叉树的节点总数以及度为2的节点数和度为1的节点数中的任意两个就能用n₀ n₂ 1推出叶子节点数。因为节点总数n n₀ n₁ n₂度数关系是n - 1 n₁ 2n₂联立就能求。2.3 查找与排序查找部分顺序查找的时间复杂度是O(n)二分查找的时间复杂度是O(log₂n)。但一定注意二分查找的前提是线性表必须有序而且只能用顺序存储结构不能用链式存储。这个“前提条件”是出题人最爱挖的坑经常问“以下哪种情况下不能使用二分查找”。排序部分你要记住各种排序算法的基本思想、时间复杂度和稳定性。我整理了一个速查表强烈建议各位考前看一遍排序方法平均时间复杂度最坏情况稳定性冒泡排序O(n²)O(n²)稳定简单插入排序O(n²)O(n²)稳定简单选择排序O(n²)O(n²)不稳定快速排序O(nlog₂n)O(n²)不稳定堆排序O(nlog₂n)O(nlog₂n)不稳定归并排序O(nlog₂n)O(nlog₂n)稳定这里的稳定性是指如果两个相等的元素在排序前后的相对位置不变就是稳定排序。真题经常直接问“以下哪个排序算法是稳定的”这种题就是考记忆。另外快速排序在最坏情况下退化为O(n²)通常发生在原序列本身就有序或基本有序时这是一个高频考点。3. 程序设计基础与软件工程基础3.1 程序设计方法与风格这部分内容在公共基础里算最简单的几乎就是概念题。核心考点包括结构化程序设计的基本原则——自顶向下、逐步求精、模块化、限制使用goto语句。这个“限制使用goto语句”特别好记很多教材都会强调真题也经常拿它做选项。结构化程序的三种基本结构是顺序、选择、循环。这三种结构都有且只有一个入口和一个出口这是结构化设计的关键特征。真题经常给出几个选项问哪个不属于三种基本结构常见干扰项有“跳转”“分支”“递归”等。注意“分支”这个说法它有时候会被当作“选择”结构的另一种叫法来混淆你要仔细辨认。面向对象的程序设计方法也是常考点。需要记住几个核心概念对象、类、实例、消息、继承、多态。这里有一个高频判断题类是对象的抽象对象是类的实例。另外继承是类之间共享属性和操作的机制分为单继承和多继承多态是指同一个操作作用于不同对象时可以有不同的解释产生不同的执行结果。3.2 软件工程核心概念与生命周期软件工程部分考得相对细但也逃不出几个固定方向。首先是软件生命周期的三个阶段软件定义、软件开发、软件维护。其中软件定义阶段又包括可行性研究和需求分析开发阶段包括概要设计、详细设计、实现和测试维护阶段包括各种维护活动。这里的常考点是区分“需求分析”和“概要设计”各自要做什么需求分析阶段确定系统“做什么”产出需求规格说明书概要设计阶段确定系统的模块结构和接口也就是“怎么做”的总体框架详细设计阶段确定每个模块内部的算法和数据结构软件工程的基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。其中模块化和信息隐蔽是重点。信息隐蔽是指模块内部的数据和操作对不需要知道这些信息的其他模块来说是隐蔽的这能提高模块的独立性。软件测试是这部分的重头戏。你需要分清白盒测试和黑盒测试白盒测试把程序看成一个透明的盒子依据程序内部逻辑结构来设计测试用例比如语句覆盖、路径覆盖、分支覆盖等黑盒测试把程序看成一个不透明的黑盒子只依据规格说明书来测试功能比如等价类划分、边界值分析、错误推测等还有一个高频考点是程序调试和软件测试的区别软件测试的目的是发现错误而程序调试排错的目的是定位并改正错误。这两个概念经常放在一起考一定不要搞混。3.3 软件测试的常见技术要点在测试相关的题目里最常考的是几种测试方法的使用场景和目的单元测试是对软件中的最小可测试单元进行检查和验证通常在编码阶段完成集成测试是在单元测试之后把各模块组装起来进行测试确认测试是验证软件是否满足需求规格说明书中规定的各项需求系统测试是把软件放在实际的运行环境中与系统的其他部分一起测试。这里面“单元测试通常在编码阶段进行”是一个容易被忽略的细节很多考生以为单元测试是开发完整体软件后才做的。实际上单元测试是边写代码边测每个函数写完了就可以测一个。真题如果问“以下哪个测试在编码阶段进行”答案就是单元测试。边界值分析是黑盒测试里最有实用价值的技巧。写测试用例时最容易出错的就是边界条件比如一个接收int类型输入的函数你至少应该测它的最大值、最小值、最大值加一、最小值减一这些边界情况。考试可能会问“等价类划分和边界值分析属于哪种测试方法”记住它们都属于黑盒测试就行。4. 数据库基础考点整理4.1 数据模型与数据库系统结构数据库基础部分第一个重点概念是数据模型。考试需要掌握三种常用数据模型层次模型、网状模型、关系模型。其中关系模型是重点中的重点二级考试里的数据库题几乎都是围绕关系模型出的。关系模型中的几个术语要记牢在二级题里数据库系统三个阶段中最常被拿来对比记忆的是文件系统和数据库系统。文件系统阶段数据冗余大、数据一致性差、数据独立性差数据库系统阶段实现了数据共享、减少了数据冗余、具有较高的数据独立性。真题常让你判断“以下哪个是数据库系统的特点”选“数据共享”、“数据独立性高”这些就对了。4.2 关系运算选择、投影、连接关系代数的三类基本运算是二级的必考点我给你做一个尽量好懂的类比说明选择σ从行的角度取数据选出满足条件的元组。投影π从列的角度取数据选出某些属性列去掉重复行。连接⋈把两个关系按照一定条件拼接起来生成一个新的关系表。用一个实际例子帮助理解。假设有一张学生表学号、姓名、年龄、专业选择运算就是“挑出专业为计算机的学生”操作结果是整行整行地筛选投影运算就是“只要姓名和专业这两列”操作结果是把其他列去掉连接运算就是把学生表和选课表通过学号关联起来看到每个学生选了哪些课。真题最常见的考法是给你一个关系代数表达式问你它执行的结果是什么。这时候你只需要拆解每一步先看有没有选择条件再看投影了哪些列最后看连接条件是什么按照行筛选→列筛选→拼接的顺序去推结果就行。4.3 SQL基本操作与三级模式结构SQL的语言分类是必背内容数据定义语言DDLCREATE、ALTER、DROP负责建立和修改数据库结构数据操纵语言DMLSELECT、INSERT、UPDATE、DELETE负责操作数据数据控制语言DCLGRANT、REVOKE负责权限管理二级公共基础里最常考的就是SELECT语句的各个子句作用SELECT是查哪些列FROM是从哪张表查WHERE是行级过滤条件GROUP BY是分组HAVING是分组后的过滤条件ORDER BY是排序。有一个经典易错点是WHERE不能和聚合函数一起用HAVING可以。如果你想筛选“平均分大于80的专业”一定要用HAVING AVG(score) 80不能写成WHERE AVG(score) 80。数据库系统的三级模式结构——外模式、概念模式、内模式——也是常考点。简单理解内模式存储模式数据在存储介质上的物理存储方式概念模式模式数据库整体的逻辑结构是所有用户的公共数据视图外模式子模式/用户模式某个用户或应用所看到的那部分数据的逻辑结构对应关系是外模式对应视图概念模式对应基本表内模式对应存储文件。真题经常反向考你“视图对应的是数据库系统的哪一级模式”答案是外模式。5. 习题精讲典型真题与解题技巧5.1 数据结构类真题实战这一节我选了近几年最有代表性的几道真题带大家一步步分析解题思路。例题1设一棵二叉树的度为2的节点数为7度为1的节点数为5求该二叉树的节点总数。解题思路根据二叉树性质度为0的节点数n₀ n₂ 1 8。节点总数n n₀ n₁ n₂ 8 5 7 20。这道题的关键是灵活运用n₀ n₂ 1这个性质把叶子节点数先算出来再求和。这类题还有一个变体就是不给度为1的节点数而是问叶子节点数那就直接用n₀ n₂ 1。如果连度为2的节点数也没给而是给了总节点数那就要利用n - 1 n₁ 2n₂和n₀ n₂ 1联立求解。保证考试时无论怎么变换条件都能应对。例题2已知二叉树的前序遍历序列为ABDCEF中序遍历序列为DBAECF求后序遍历序列。解题思路分三步走前序遍历的第一个节点A是根节点在中序遍历中找到AA左边的是左子树DB右边的是右子树ECF递归处理左子树和右子树左子树的中序是DB前序中紧跟A后面的B是左子树的根B在中序中位于D的左边说明D是B的左孩子。右子树的中序是ECF前序中C是右子树的根E在C的左边F在C的右边所以E是C的左孩子F是C的右孩子。最终二叉树结构确定后后序遍历左右根的结果是D B E F C A。这类题的关键是熟练运用“前序定根、中序分左右”的口诀。做多了你会发现这类题本质上就是递归地切分序列每一步只需要看当前子树对应的序列片段。5.2 软件工程与数据库类真题实战例题3在软件生命周期中确定系统“做什么”的阶段是 。A. 可行性研究 B. 需求分析 C. 概要设计 D. 详细设计这道题答案是B。需求分析阶段的核心任务是确定系统必须做什么输出需求规格说明书。概要设计回答“怎么做”的总体框架问题详细设计回答“每个模块具体怎么做”的问题可行性研究是判断项目是否值得做。这类题就是考概念边界把“做什么”和“怎么做”对应到生命周期各阶段一分都不该丢。例题4设有学生表S学号姓名年龄和选课表SC学号课程号成绩查询选课成绩大于90分的学生姓名和年龄用关系代数表示。解题思路题目要求输出“姓名”和“年龄”所以最后一定要有投影操作π条件是“成绩大于90”一定有选择操作σ涉及两张表需要通过公共属性“学号”做连接运算⋈。标准表达式π(姓名, 年龄)(σ(成绩 90)(S ⋈ SC))。做这类题要养成“先连接、再选择、后投影”的思维习惯。虽然有些情况下选择操作可以提前做来减少中间结果但考试中你按标准顺序写答案一定是正确的。5.3 公共基础高频易错点速查表把历年真题中考生最常错的点集中整理在这里考前过一遍比刷十道新题都管用算法的五个特征有穷性、确定性、可行性、有输入、有输出注意不是“可读性”栈和队列的共同点是只允许在端点处插入和删除元素循环队列的队满条件、队空条件不要混淆队满条件是(rear1) % maxsize front队空条件是rear front二分查找只能用于顺序存储的有序线性表快速排序和冒泡排序在序列基本有序时快速排序效率反而低最坏O(n²)而冒泡排序此时效率较高稳定排序记住“插冒归”三个字插入排序、冒泡排序、归并排序是稳定的对象是属性和方法的封装体类是对象的抽象白盒测试依据程序内部逻辑黑盒测试依据需求规格说明书软件测试的目的是发现错误程序调试的目的是改正错误需求分析阶段产生需求规格说明书概要设计阶段产生概要设计说明书数据库系统的核心是数据库管理系统DBMS不是数据库本身关系模型中二维表的行称为元组列称为属性主键是能唯一标识一条记录的属性或属性组视图对应外模式基本表对应概念模式存储文件对应内模式SQL中GRANT和REVOKE属于数据控制功能这些易错点我建议你按自己的方式整理成卡片每天花十分钟过一遍考前再重点扫一遍。公共基础部分的题目很多就是“见过就能答对没见过就瞎猜”的类型。6. 程序填空与程序改错专项解析6.1 一二级C语言考试中的程序填空常见套路除了选择题里的公共基础知识C语言上机题中的程序填空和程序改错也值得在这里一并说清楚因为它们的解题思路和公共基础里的数据结构、算法知识是相通的。程序填空最常见的出题方式是在代码里挖掉几个关键表达式或语句让你补全。我做了几套真题后发现挖空的位置其实非常集中第一类循环边界条件。比如数组遍历时for(i 0; i n; i)中的i n经常被挖掉。做题时先看数组长度再看循环变量初始值基本就能确定边界。第二类指针操作。链表节点的定位、字符串处理时的指针移动是填空中最让人头疼的部分。解题时要记住“指针指向当前操作位置用完要移动”的原则。比如字符串拷贝函数里一定会有一个*s *t这样的操作你要能判断出这里应该填什么。第三类函数返回值。递归函数的出口条件、函数末尾的return语句经常被挖空。看到函数有返回值类型就一定要检查函数的每一个分支是否都有return。我整理了一个“三步走”填空技巧先通读全代码搞清程序要完成什么功能锁定挖空位置所在的语句判断它是循环控制、条件判断、赋值运算还是函数调用代入特殊值比如n1或者空字符串验证逻辑是否正确6.2 程序改错题的高频错误类型程序改错题一般会给出含有错误的程序让你修改其中几处错误。高频错误类型集中在这几个方面语法层面的错误少写分号、括号不匹配、变量未定义直接用。这种错误相对好找因为编译时会报错。逻辑层面的错误判断条件的与或关系写反了写成||、循环边界多一或少一写成、运算符优先级弄错比如*p到底是(*p)还是*(p)。函数使用层面的错误函数名写错、参数类型对不上、返回值类型错误。改错题有个实用技巧先编译运行一次看报错信息。有的考场环境允许你编译运行这是最好的定位方式。如果题目明确要求只能“阅读程序”不能运行那就一行一行地过重点关注条件判断、循环边界和函数调用。严格来说程序填空、改错与C语言程序设计上机密切相关同属于计算机二级C语言“程序设计基础”考察能力范畴。备考时把这两块和公共基础里的算法知识一起复习能达到事半功倍的效果——公共基础里学的排序、查找、二叉树遍历在上机题里经常会以代码形式出现。7. 考前冲刺三天快速提分策略7.1 每天复习重点怎么安排如果你的备考时间只剩三天不要慌按这个节奏来第一天集中攻数据结构与算法。上午背算法特征、复杂度概念和二叉树性质下午刷题把近三年真题里数据结构相关的选择题全部做一遍。晚上整理错题重点关注二叉树节点计算和遍历类题目。第二天攻软件工程基础和数据库基础。这两块偏记忆用表格对比法记忆效果最好。比如把白盒测试/黑盒测试、需求分析/概要设计/详细设计、DDL/DML/DCL列成三张表的对比睡前再过一遍。第三天全真模拟。做一套完整的真题试卷严格掐时间模拟考试环境。做完后重点分析公共基础部分的错题把错题对应的知识点找出来强化记忆。下午再把易错点速查表过一遍晚上早点休息。7.2 刷题与复习资料的合理使用市面上标注“计算机二级”的资料非常多但真正有参考价值的是两种近五年的真题和按考纲知识点分类的练习题集。我个人的经验是公共基础知识部分只要把近三年共12套真题每年4次考试批次这里按常见情况取整理解里的选择题全部吃透再把错题整理成个人错题本就足够应付考试了。不需要去做大量的偏题怪题公共基础的出题风格非常固定吃透真题比什么都强。练题的时候不要只看正确选项一定要把错误的选项为什么错也弄清楚。公共基础的选择题有一个特点错误选项的设置是有规律的通常是把相近概念混在一起比如把稳定排序和不稳定排序互换、把白盒测试和黑盒测试的判定依据互换、把内模式和概念模式的描述互换。你只有看出“命题人是怎么设置干扰项的”才能在做新题时迅速识破陷阱。7.3 考场上的时间分配与答题技巧计算机二级C语言考试一共90分钟公共基础这10道选择题大约需要15分钟左右。我见过不少考生在选择题上磨蹭太久导致后面程序题时间不够这是非常不划算的。我的建议是选择题控制在15分钟内完成实在不会的先凭第一印象选一个并做标记绝不在单题上死磕超过2分钟。公共基础部分的题目第一感觉往往就是对的反复纠结反而容易把对的改成错的。答题顺序方面可以考虑先做公共基础选择再做C语言程序相关题。因为选择题包含一些需要阅读和思考的内容放在前面做能让大脑快速进入状态而程序题需要更多精力放在后面集中处理。这只是一个习惯建议你可以根据自己的节奏调整但总时间分配一定要留好后路至少留出30分钟给程序填空和程序改错这些题的按点得分率更高。从“计算机二级C语言公共基础知识”本身出发数据结构与算法是整个公共基础部分的“硬骨头”但也是拿分的关键。我见过很多考生在考场上看到二叉树遍历题就直接放弃其实这类题只要掌握了“前序定根、中序分左右”的套路一两分钟就能推出来。公共基础的很多内容本质上是“思维方式”的训练掌握后不仅对考试有用对后续学习其他编程语言也有帮助。