ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

计算机二级C语言公共基础知识:数据结构与算法考点详解

计算机二级C语言公共基础知识:数据结构与算法考点详解 你备考计算机二级C语言是不是把大部分时间都花在刷C语言程序题上结果到了考场公共基础知识25道选择题直接把你打懵——算法复杂度、二叉树遍历、软件测试目的、关系运算这些跟C语言语法八竿子打不着的内容反而是很多人丢分的重灾区。我自己当年考二级的时候C语言程序设计部分得了高分公共基础却错了将近一半最后险险飘过。后来帮学弟学妹辅导发现大家踩的坑几乎一样不是不努力是根本不知道公共基础知识怎么复习以为背背书就能搞定结果被各种概念题绕进去。这篇内容我就结合计算机二级C语言公共基础知识的常考范围把数据结构、软件工程、数据库这几个模块的核心知识点和做题套路拆开讲每部分配典型习题和解析。这是系列第一篇先啃掉公共基础知识里最硬核的数据结构相关考点再覆盖软件工程和数据库最后给出一套复习和刷题建议。适合正在备考计算机二级C语言、但对公共基础部分一头雾水的同学也适合想快速回顾考点的上班族。1. 公共基础知识到底考什么先搞懂命题思路1.1 公共基础知识在试卷中的真实地位计算机二级C语言的笔试现在叫选择题一共40道题公共基础知识占10道左右剩下才是C语言相关内容。别看只有10道题它们分布在试卷最前面答题状态好不好直接影响后面做C语言题的心态。公共基础知识不是一个单独的科目考试大纲把它划分成四个模块数据结构与算法、程序设计基础、软件工程基础、数据库设计基础。每个模块考查的侧重点完全不同数据结构与算法概念理解加计算比如求时间复杂度、模拟栈和队列的操作、二叉树结点数推算。程序设计基础主要是结构化程序设计原则、面向对象基本概念属于偏记忆的送分题。软件工程基础软件生命周期、开发模型、软件测试方法概念多且容易混淆。数据库设计基础数据模型、关系运算、SQL语句基本操作需要一点逻辑思维。1.2 高频考点分布复习时间要花在刀刃上根据我对近几年真题的观察各模块的出题数量大致稳定模块出题数量高频考点数据结构与算法4-5题算法复杂度、栈与队列、二叉树遍历、查找与排序程序设计基础1题结构化程序设计原则、对象与类软件工程基础2-3题软件生命周期、软件测试目的、软件工具数据库设计基础2-3题数据模型、关系运算、SQL基本操作从分值占比就能看出来数据结构是公共基础知识里的绝对核心。很多同学复习公共基础喜欢从头到尾背书其实效率很低。我建议把70%的时间花在数据结构上剩下30%分给软件工程和数据库。程序设计基础内容太少考前过一眼就行。1.3 一个很容易被忽略的复习误区公共基础知识和C语言程序设计虽然是两张卷子的内容但它们在思维上是相通的。比如你在学C语言的数组、链表、指针时其实就是在用具体的语言实现数据结构中的线性表递归程序的执行过程本质就是栈的后进先出。我在复习的时候发现一个规律当我把C语言指针和内存管理的概念搞明白后再去看栈和队列的题目理解速度明显加快。所以建议大家不要完全隔离这两个部分的复习公共基础知识里抽象的概念试着用C语言的代码去对应一下很多死记硬背的内容就活起来了。2. 数据结构与算法算法复杂度、栈、队列与二叉树2.1 算法复杂度会套公式还要会分析循环结构复杂度是必考题每年至少一道。常见问法有两种给出代码片段让你判断时间复杂度或者给定义让你选正确的说法。判断时间复杂度最实用的方法是看循环嵌套层数。单层循环一般是O(n)双层循环一般是O(n²)但要注意循环变量变化的步长。比如下面的代码int sum 0; for (int i 1; i n; i * 2) { sum i; }循环变量每次乘以2执行次数大约是log₂n次所以时间复杂度是O(log n)。很多同学一看到循环就默认O(n)这个细节特别容易错。关于空间复杂度考得相对少但要知道它衡量的是算法运行过程中临时占用的存储空间大小。注意递归算法的空间复杂度通常和递归深度有关每递归一层就要占用一部分栈空间。我的做题心得是不要把复杂度想得太玄乎你就数“基本操作”被重复执行的次数是多少。所谓基本操作就是循环体里最核心的那句赋值、比较或者加减运算。数清楚次数再把常数项和低阶项扔掉就是时间复杂度。2.2 栈与队列进出顺序题画图比心算靠谱栈是先进后出FILO队列是先进先出FIFO这个基础概念基本人人都知道但做题时还是会出错。尤其是给出一个序列问你“经过栈操作后不可能的输出序列是什么”或者“循环队列中元素个数怎么算”光靠脑子想很容易翻车。做这类题我强烈建议在草稿纸上画一个“容器”。栈就画一个开口向上的盒子队列就画一条管道。每push一个元素写进盒子里每pop一个元素从盒子顶部划掉。把每一步都画出来正确率会高很多。循环队列的元素个数计算是个经典考点。公式是元素个数 (rear - front maxSize) % maxSize其中maxSize是队列容量。这个公式的记忆诀窍是先想想一般队列rear大于front时个数就是rear-front万一rear小于front说明绕了一圈就加上maxSize再减。取模运算只是把两种情况统一了。我第一次做这道题的时候想当然地以为元素个数是|rear-front|结果掉坑里了。后来把模运算理解成“补上一圈再减”就再也没错过。2.3 二叉树遍历序列反推结构两步走二叉树的考点主要集中在结点数计算、遍历序列反推结构、完全二叉树的性质。每年至少出1-2题。先说遍历。前序遍历根左右、中序遍历左根右、后序遍历左右根规则好背但题目往往不会直接让你写出遍历序列而是给前序和中序让你求后序或者给中序和后序让你判断树的形状。破解这类题核心是利用“根结点”的位置前序遍历的第一个结点或后序遍历的最后一个结点一定是整棵树的根。拿到根结点后去中序遍历中找到它中序序列中根的左边是左子树右边是右子树。回到前序或后序中数出左右子树各自的结点范围重复第1步。举个例子前序是ABDCE中序是BDAEC。前序第一个是A所以根是A。中序里A左边是BD说明左子树包含B和D右边是EC说明右子树包含E和C。再看前序中紧接着的BD前序是根左右所以B是左子树的根。以此类推就能把整棵树画出来。掌握这个递归过程无论题目怎么变都能解。完全二叉树有一个很实用的性质如果总结点数为n则叶子结点数可以按公式算。度为2的结点数等于度为0的叶子结点数减1。这个结论经常用来计算二叉树中叶子结点的数量。很多同学记不住其实可以自己推导一下设叶子结点数为n₀度为1的结点数为n₁度为2的结点数为n₂总边数等于结点数减1同时边数也等于n₁2n₂联立就能得到n₀n₂1。2.4 查找与排序记结论但更要会模拟查找和排序在公共基础里考的套路很固定。顺序查找最坏情况比较n次二分查找最坏比较log₂n次——但前提是序列有序。排序方面要记住各种排序算法在最坏情况下的时间复杂度排序方法平均时间复杂度最坏时间复杂度是否稳定冒泡排序O(n²)O(n²)稳定快速排序O(n log n)O(n²)不稳定简单插入排序O(n²)O(n²)稳定简单选择排序O(n²)O(n²)不稳定堆排序O(n log n)O(n log n)不稳定考试不会考你写排序代码但会给你一个初始序列问经过第一趟冒泡或快速排序后的结果。这种题必须动手模拟。我复习时会把经典排序算法各模拟三遍尤其是快速排序的“挖坑填数”过程第一趟结束后基准值的位置很容易算错。一个做题技巧看到“关键字比较的次数”或“移动次数”要联想到具体的实现过程。比如冒泡排序每一趟都会把当前最大值移到末尾那第一趟结束后序列最后一个元素一定是最大值。用这个结论反推选项往往不用完整模拟。3. 软件工程与程序设计基础概念题也能用排除法3.1 结构化程序设计的三种基本结构程序设计基础部分经常考查“三种基本结构”的识别和结构化程序设计的原则。三种基本结构是顺序结构、选择结构、循环结构。任何复杂的程序都能用这三种结构组合实现。题目可能会问“以下哪种不属于结构化程序设计的三种基本结构之一”这时候要小心“跳转结构”这个干扰项。goto语句的无条件跳转会破坏结构化设计所以GoTo不属于三种基本结构。还有一种常见考法是给出程序流程图判断应用了哪种结构。只要看到菱形判断框后面出现两个分支就是选择结构看到箭头往回形成闭环就是循环结构。3.2 软件生命周期背住阶段名称和顺序软件生命周期指软件从提出、实现、使用、维护到停止使用的全过程。常见划分是可行性研究与计划、需求分析、软件设计、软件实现、软件测试、运行与维护。考题容易在两个地方挖坑一是“软件生命周期中花费最多、时间最长的阶段”正确答案是运行维护阶段不是软件开发二是“软件设计阶段的任务”包括体系结构设计、接口设计、数据设计和过程设计不是编写代码。我在复习的时候画过一张时间轴把每个阶段的主要任务和产物列出来比如需求分析阶段的产物是需求规格说明书设计阶段的产物是设计文档。这样选择题里看到“产生软件需求规格说明书的阶段是”就能立刻锁定需求分析。3.3 软件测试与程序调试目的完全不同关于软件测试最常见的错误理解是把测试等同于“证明程序没有错误”。考试规定的标准说法是软件测试的目的是发现错误而不是证明程序正确。我当年就栽在这道题上总想着测试是为了验证程序是对的结果标准答案恰好相反。还要区分两个概念测试是执行程序发现错误调试是定位并改正错误。选择题经常问“软件调试的目的是什么”正确答案是“改正程序中存在的错误”。测试方法中白盒测试和黑盒测试的对比也是高频考点。白盒测试需要了解程序内部结构和逻辑根据路径来设计测试用例黑盒测试不关心内部实现只关注输入输出是否符合规格说明。记住一句话白盒看过程黑盒看结果。4. 数据库设计基础从数据模型到关系运算4.1 数据模型三个层次概念、逻辑、物理数据库部分第一道题往往考数据模型的三层次概念数据模型、逻辑数据模型、物理数据模型。概念模型是面向用户的比如实体-联系模型E-R模型逻辑模型是面向数据库管理系统的常见的有层次模型、网状模型、关系模型物理模型描述数据在存储介质上的组织结构。考题喜欢问“数据库中的关系模型属于哪一层”答案是逻辑数据模型。这个知识点不难但需要区分“数据模型”和“数据结构”的关系。关系模型用二维表表示实体和实体间联系一张表就是一个关系。4.2 关系运算选择、投影、连接怎么快速区分关系运算每年必考通常给一个关系二维表问以下哪个操作会得到指定的结果。三个基本运算必须清楚选择从表中选出满足条件的行元组。口诀行选择。投影从表中选出指定的列属性。口诀列投影。连接把两个表通过共同属性拼接成一张更大的表。举个例子学生表有学号、姓名、性别、年龄四列现在要查询所有男生的姓名和年龄。这个过程分两步先对性别做“选择”只保留性别为男的记录再对姓名和年龄做“投影”只保留这两列。做这类题看清题目问的是“行方向”还是“列方向”基本不会错。还有一道经典题“关系运算中能够取消重复元组的是”答案是投影因为投影后若出现完全相同的一行会去重。4.3 SQL语句基础会看更要会写公共基础里的SQL题不会很难主要考查SELECT查询的基本结构有时涉及INSERT、UPDATE、DELETE。最常考的是WHERE子句的作用和ORDER BY子句的作用。比如“从学生表中查询年龄大于18岁的学生姓名和学号正确的SQL语句是”要会写出SELECT 学号, 姓名 FROM 学生 WHERE 年龄 18;注意SELECT后面跟的是要显示的列投影WHERE后面跟的是筛选条件选择。如果题目要求按某个字段排序要加ORDER BY要求分组统计要加GROUP BY。我复习SQL时总结了一个做题模板先看选什么列再看从哪张表然后看有没有条件最后看是否分组、排序。按这个顺序逐一套进去基本不会漏条件。数据库部分的考题还有一个常见概念数据管理技术的发展经历了人工管理、文件系统、数据库系统三个阶段。数据库系统阶段最大的特点是数据共享性好、冗余度低。这个知识点一般是直接送分别选错就行。5. 公共基础知识习题精讲一起来做几道有代表性的真题5.1 数据结构与算法典型题题目1设栈的初始状态为空元素A、B、C、D依次入栈再进行两次出栈操作则栈顶元素是 A. A B. B C. C D. D解析栈是先进后出。A、B、C、D依次入栈后栈内从栈底到栈顶依次为A、B、C、D。第一次出栈弹出D第二次出栈弹出C此时栈顶元素是B。选B。这道题如果粗心可能直接选C忘记弹了两次。题目2某二叉树有5个度为2的结点和4个度为1的结点则叶子结点数为 A. 5 B. 6 C. 9 D. 10解析根据公式n₀n₂1叶子结点数为516。选B。需要注意题目给的是度为1的结点数这部分和公式无关是干扰条件。很多同学把度为1的结点也加进去算出9那就错了。题目3在长度为n的有序线性表中进行二分查找最坏情况下需要的比较次数为 A. n B. n² C. log₂n D. n/2解析二分查找每次把查找范围缩小一半最坏情况下比较次数为log₂n向上取整。选C。题目如果问顺序查找才选n。5.2 软件工程与程序设计基础典型题题目4在软件生命周期中能准确确定软件系统必须做什么和必须具备哪些功能的阶段是 A. 需求分析 B. 软件设计 C. 编码 D. 测试解析“做什么”是需求分析阶段回答的问题“怎么做”是设计阶段回答的问题。选A。这道题考的是各阶段任务边界属于纯记忆。题目5下列叙述中正确的是 A. 软件测试就是程序调试B. 软件测试的目的是证明程序没有错误C. 软件测试的目的是发现程序中的错误D. 软件测试是为了找出所有错误解析软件测试目的不是证明程序正确而是发现错误选C。D错在“所有错误”因为测试只能找出存在的错误但不能证明没有其他错误。A混淆了测试和调试。5.3 数据库基础典型题题目6在关系数据库中能够唯一标识一个元组的属性或属性组合称为 A. 索引 B. 关键字键 C. 域 D. 关系解析候选键或主键是能唯一标识一个元组的属性或属性组合。选B。注意“域”是属性的取值范围这个定义也经常考。题目7有两个关系R和S如下所示经过某种关系运算后得到关系T则该运算是 关系RA B C / 1 2 3 / 4 5 6关系SA B C / 1 2 3 / 7 8 9关系TA B C / 1 2 3A. 选择 B. 投影 C. 交 D. 并解析R和S的交集是T选C。这道题容易和“选择”混淆但“选择”是在一个关系中筛选行不会涉及两个关系求共有记录。R和S结构相同T中只有两表都出现的元组所以是交运算。题目8将学生表student中的学生年龄age增加1岁正确的SQL语句是 A. UPDATE student SET age age 1B. UPDATE SET age age 1 FROM studentC. ALTER TABLE student ADD age age 1D. INSERT INTO student SET age age 1解析UPDATE的固定格式是UPDATE 表名 SET 列名值【WHERE条件】。选A。B的写法是SQL Server的风格但在全国计算机二级标准SQL语法中不选它。ALTER TABLE用于修改表结构不是修改数据。5.4 常见易混淆点清单刷题刷多了我发现有些知识点反复被拿出来当陷阱。整理一个避坑清单后序遍历序列的最后一个结点是根结点而不是第一个。在循环队列中判断队空的条件是rear front判断队满的条件是(rear1) % maxSize front。程序调试的目的是改正错误测试的目的是发现错误。数据库设计中的E-R图属于概念模型不是逻辑模型。关系运算的选择是行运算投影是列运算。结构化程序设计强调“自顶向下、逐步求精”模块化是它的原则之一但不是唯一的。6. 备考策略把公共基础变成稳定拿分项很多同学觉得公共基础知识点碎今天背了明天忘。我自己的经验是不要试图一口气把所有概念记完而是采用“刷题驱动复习”的方式。具体操作分三步。第一步先做一套真题的选择题把公共基础的10道题标出来无论对错都看一下解析大概了解考试问什么。第二步按照本文前四节的模块划分逐个过知识点每过一个模块就找对应的练习题做20道左右。第三步考前一周集中回顾错题尤其是那些因为概念混淆做错的题把两个相近概念写在一起对比记忆。关于题库选择网上的“小黑课堂”、历年真题卷都可以关键是要有详细解析。只看对错不看解析等于白做。我做题时遇到解析里说“软件测试的目的是发现错误”这种结论会在旁边批注“不是证明正确”反复强化。还有一个实用技巧公共基础的选择题往往是50%左右的正确率就能过不必追求所有概念倒背如流。优先抓高频考点比如算法复杂度、栈队列、二叉树、关系运算这些每年必考而且只要理解了就不会忘。像一些冷门的软件工具名称、数据库物理存储细节性价比不高战略性放弃也没问题。我在实际备考过程中发现把公共基础知识放在C语言刷题之间穿插复习效果最好。刷C语言程序题刷累了就做几道公共基础选择题换换脑子既不会太枯燥还能保持对概念的敏感度。等到考试时你会发现这些知识点就像C语言的函数一样调用起来特别顺手。希望这篇总结能帮你把公共基础这块硬骨头啃下来下一篇我会继续整理C语言本身的常考知识点和易错程序题到时候咱们接着练。
返回列表