
1. 2026年CSP-J初赛的考查框架与命题底层逻辑CSP-JCertified Software Professional - Junior初赛作为信息学竞赛入门阶段的第一道关卡每年都让大量初次接触的选手感到无从下手。很多同学在刚接触时第一反应是是不是要写很多代码实际上初赛的考查形式是笔试选择题全部为客观题不涉及现场编程。这一点是理解整个备考方向的前提。2026年的初赛大概率会延续近几年的命题框架但细节上会有微调下面我结合近三年2023、2024、2025的真题规律把整个考查框架拆开来讲。1.1 初赛试卷的四大板块构成CSP-J初赛满分100分考试时间120分钟全部为单项选择题共约40题左右。试卷结构大致分为四个板块板块题量占比分值占比核心考查内容计算机基础知识约15%约15分硬件、软件、进制、编码、网络常识程序设计语言基础约20%约20分C语法、数据类型、运算符、控制结构数据结构与算法约40%约40分栈、队列、树、图、排序、查找、递归、DP入门数学与逻辑推理约25%约25分排列组合、概率、数论、逻辑判断、阅读程序这个比例不是官方公布的固定值而是我根据2023到2025三年真题逐题归类后统计出来的经验值。可以看到数据结构与算法板块占了将近一半的分值这是备考的重中之重。很多同学把大量时间花在背计算机基础知识上结果算法题丢分严重这是非常典型的备考误区。1.2 为什么初赛不考编程却要求学编程这是很多新手最困惑的地方。初赛明明是选择题为什么还要学C编程原因在于初赛中有大量题目是阅读程序写结果和完善程序两类题型这两类题目直接考查你阅读代码、理解代码逻辑、推导运行结果的能力。如果你平时没有写过足够的代码没有调试过程序没有经历过这段循环到底执行几次的纠结你在考场上根本不可能在有限时间内准确推导出结果。我见过太多同学语法知识背得滚瓜烂熟但一遇到阅读程序题就懵了。比如给你一段带有递归和全局变量修改的代码问你最终输出是什么如果你没有亲手写过递归、没有用调试器一步步跟过变量变化你很难在脑子里模拟出正确的执行路径。所以初赛备考的核心逻辑是以编程实践为基础以题型训练为抓手以真题模拟为检验。1.3 2026年命题趋势的三个判断结合近三年的命题变化我对2026年初赛的命题趋势有三个判断第一算法题的思维难度在缓慢上升。2023年和2024年的初赛算法题还比较直接比如直接考栈的出栈顺序、二叉树的遍历结果。但2025年出现了一些需要两步甚至三步推理的题目比如先根据前序和中序还原二叉树再求某种遍历结果再判断某个节点的深度。这种复合型题目在2026年大概率会继续增加。第二阅读程序题的代码长度在增加。以前阅读程序题可能就十几行代码现在有些题目接近三十行涉及多个函数调用和嵌套循环。这要求选手有更强的代码阅读耐力和逻辑追踪能力。第三数学题的应用背景更灵活。纯数学公式题在减少取而代之的是带有实际情境的数学应用题比如有n个人排队按照某种规则报数问最后剩下谁这类约瑟夫问题的变体。这要求选手能把实际问题抽象成数学模型。2. 计算机基础知识板块的拿分策略与常见盲区计算机基础知识这部分很多同学觉得背就完了但实际上这部分恰恰是容易丢分的区域因为知识点太散而且有些概念容易混淆。我在带学生的过程中发现进制转换和编码相关的题目出错率最高其次是网络协议和操作系统的基本概念。2.1 进制转换必须练到条件反射进制转换是每年必考的内容通常出现在前几题。考查形式包括二进制转十进制、十进制转二进制、十六进制与二进制的互转、以及不同进制之间的大小比较。这里有一个很多同学会踩的坑负数的补码表示。比如题目问-5的8位补码是多少很多同学直接写出5的二进制然后加个负号这是完全错误的。正确的做法是先写出5的8位二进制00000101然后取反得到11111010再加1得到11111011这才是-5的补码。我在实际教学中总结了一个快速计算口诀正数补码是自身负数补码取反加一。这个口诀看起来简单但在考场上紧张的时候很多同学会忘记加一这一步。建议在备考时每天花5分钟做10道进制转换题练到看到数字就能条件反射地写出结果。2.2 编码与存储ASCII、Unicode和汉字编码的区别编码相关的题目也是高频考点。需要重点掌握的是ASCII码7位或8位标准ASCII是7位能表示128个字符。记住几个关键值A是65a是970是48空格是32。汉字编码GB2312、GBK、UTF-8的区别。一个汉字在GB2312中占2个字节在UTF-8中通常占3个字节。存储容量计算比如一张分辨率为1024×768、颜色深度为24位的图片未压缩时占多少存储空间计算方法是1024×768×24÷8÷1024÷1024 2.25MB。这里有一个容易混淆的点位bit和字节Byte的关系。1 Byte 8 bit这个换算在存储容量计算题中经常用到。我见过有同学在计算时忘记除以8结果答案差了8倍。2.3 网络与操作系统常识抓住高频考点网络部分的考点相对集中主要包括IP地址的分类和子网掩码的基本概念常见协议的作用HTTP、FTP、SMTP、TCP、UDP域名系统DNS的作用局域网和广域网的基本区别操作系统部分常考的是进程与线程的区别、死锁的四个必要条件、内存管理的基本概念如分页、分段。注意这部分知识点比较零散不建议花大量时间死记硬背。我的做法是整理一张A4纸的速查表考前一周每天看一遍形成短期记忆即可。真正需要长期理解的是算法和数据结构部分。3. 数据结构与算法初赛分值最大的板块怎么啃如果说计算机基础知识是送分题那数据结构与算法就是拉分题。这部分占了初赛将近40%的分值而且题目形式多样有直接考查概念的选择题也有需要推导的阅读程序题还有需要补全代码的完善程序题。下面我按知识点的重要程度逐一拆解。3.1 栈和队列出栈顺序问题是必考题型栈和队列是初赛最基础也是最高频的数据结构考点。几乎每年都会有一道关于栈的出栈顺序的题目比如给定入栈序列为1、2、3、4以下哪个不可能是出栈序列。这类题目的解题技巧是模拟入栈和出栈的过程。以入栈序列1、2、3、4为例判断出栈序列3、1、2、4是否可能要第一个出栈的是3所以先把1、2、3依次入栈然后3出栈接下来要出栈的是1但此时栈顶是21在栈底无法直接出栈所以这个出栈序列不可能这个模拟过程看起来简单但在考场上时间紧张的情况下很多同学会搞混。我的建议是在草稿纸上画一个栈的示意图一步步模拟不要试图在脑子里空想。队列的考点相对简单主要是循环队列的判空和判满条件。记住循环队列中如果队头指针为front队尾指针为rear队列容量为n则队空条件是front rear队满条件是(rear 1) % n front。3.2 树与二叉树遍历还原是核心技能树和二叉树是初赛算法部分的重头戏。核心考点包括二叉树的基本性质第i层最多有2^(i-1)个节点深度为k的二叉树最多有2^k - 1个节点完全二叉树和满二叉树的区别三种遍历方式前序根左右、中序左根右、后序左右根根据两种遍历结果还原二叉树其中根据前序和中序还原二叉树是最常考的题型。解题方法是前序遍历的第一个节点是根节点在中序遍历中找到根节点的位置左边是左子树右边是右子树对左右子树递归执行上述步骤我建议在备考时至少手动画出20棵不同形态的二叉树分别写出它们的前序、中序、后序遍历结果然后再反过来根据遍历结果还原树。这种练习做多了考场上看到题目就能快速反应。3.3 排序与查找时间复杂度和稳定性是重点排序算法的考查主要集中在两个方面时间复杂度和稳定性。排序算法平均时间复杂度最坏时间复杂度空间复杂度是否稳定冒泡排序O(n²)O(n²)O(1)稳定插入排序O(n²)O(n²)O(1)稳定选择排序O(n²)O(n²)O(1)不稳定快速排序O(n log n)O(n²)O(log n)不稳定归并排序O(n log n)O(n log n)O(n)稳定堆排序O(n log n)O(n log n)O(1)不稳定这张表必须背下来。考试中经常问以下哪个排序算法在最坏情况下时间复杂度最低或者以下哪个排序算法是稳定的。查找算法主要考二分查找。二分查找的前提是数据必须有序时间复杂度是O(log n)。常考的题目是在长度为n的有序数组中进行二分查找最多需要比较多少次答案是⌈log₂(n1)⌉。3.4 递归与动态规划入门理解思想比记代码重要初赛对递归和动态规划的考查不会太难主要是考查基本思想。递归的经典题目包括斐波那契数列、汉诺塔、阶乘计算。动态规划的经典题目包括爬楼梯、最长上升子序列、01背包的简化版。这里我要特别提醒初赛中的递归题往往是阅读程序题给你一段递归代码问你输出结果或者递归调用的次数。这类题目需要你耐心地画出递归树一层层展开。不要试图走捷径老老实实画图是最可靠的方法。4. 阅读程序与完善程序初赛最大的分水岭阅读程序题和完善程序题是CSP-J初赛最具特色的题型也是区分选手水平的关键。这两类题目合计约占40-50分可以说得这两类题者得初赛。4.1 阅读程序题的解题流程阅读程序题通常给出一段20-30行的C代码然后问3-4个问题包括程序的输出是什么、某个变量的最终值是多少、时间复杂度是多少、如果修改某个条件结果会怎样。我的解题流程是先看代码整体结构有没有函数定义、有没有递归、有没有嵌套循环标注关键变量在草稿纸上列出所有变量的初始值和变化过程逐行模拟执行从main函数开始一行行跟踪变量的变化验证边界条件特别注意循环的起始和结束条件、数组下标是否越界很多同学做阅读程序题时喜欢心算觉得代码不长在脑子里过一遍就行了。但实际考试中代码中往往有多个变量同时变化心算极易出错。我的建议是再短的代码也要在草稿纸上模拟把每一步的变量值写下来。4.2 完善程序题的命题套路完善程序题是给出一段带有空格的代码要求从选项中选择正确的语句填入空格。这类题目的命题套路比较固定通常考查循环条件的边界如i n还是i n数组下标的起始值如从0开始还是从1开始递归的终止条件变量的初始化值特定算法的关键步骤如二分查找中mid的计算、快速排序中基准的选择做完善程序题的关键是先理解程序要实现什么功能然后根据功能需求推断空格处应该填什么。不要一上来就看选项那样容易被干扰项带偏。4.3 代码模拟的实操技巧在草稿纸上模拟代码执行时我推荐使用变量表的方法。具体做法是画一个表格每一列是一个变量每一行是执行到某一步时的变量值。比如对于下面这段代码int sum 0; for (int i 1; i 5; i) { for (int j 1; j i; j) { sum j; } }变量表可以这样画执行步骤ijsum初始--0i1, j1111i2, j1212i2, j2224i3, j1315............这种方法看起来笨但在考场上是最可靠的。我带的很多学生一开始嫌麻烦后来在模拟考试中因为心算出错丢了好几分才乖乖开始画表。5. 从零开始的备考路线分阶段推进才不慌备考CSP-J初赛最忌讳的是东一榔头西一棒子今天看看进制转换明天做做排序题没有系统性。我根据多年带学生的经验总结了一套分阶段的备考路线适合从零基础开始的选手。5.1 第一阶段语法基础与简单算法约4-6周这个阶段的目标是掌握C的基本语法能够独立写出简单的程序。具体内容包括变量、数据类型、运算符输入输出cin/cout和scanf/printf条件语句if-else和循环语句for、while数组和字符串的基本操作函数的定义和调用简单的递归这个阶段不需要刷初赛题重点是把语法练熟。我建议每天至少写3-5个小程序比如输入n个数求最大值、判断一个数是否为素数、输出斐波那契数列的前n项。5.2 第二阶段数据结构与算法专题约6-8周语法过关后开始系统学习数据结构和算法。按照初赛的考查频率建议的学习顺序是栈和队列1周树和二叉树2周排序和查找1周递归与分治1周动态规划入门1-2周图的基本概念1周每个专题的学习方法是先理解概念再手写代码实现最后做10-15道相关的初赛真题。5.3 第三阶段真题模拟与查漏补缺约3-4周这个阶段的核心任务是做真题。建议从最早的年份开始做比如先做2019、2020年的真题再做2021、2022年的最后做2023、2024、2025年的。为什么要从早做到晚因为早年的题目相对简单可以用来建立信心同时暴露知识盲区。每套真题的做法是严格按照120分钟计时完成对答案计算得分逐题分析错题找出对应的知识点针对薄弱知识点进行专项训练我建议至少做10套真题并且每套真题都要做两遍第一遍模拟考试第二遍只做错题。5.4 第四阶段考前冲刺与状态调整约1-2周考前两周不要再学新知识点了重点放在复习错题本背诵高频考点如排序算法对比表、进制转换口诀每天做一套真题保持手感调整作息确保考试时间段通常是上午头脑清醒提示考前一周不要熬夜刷题保证充足睡眠比多做几道题更重要。初赛是选择题状态好才能发挥出真实水平。6. 考场上的时间分配与答题技巧初赛120分钟做40道题平均每题3分钟但实际上不同题目的耗时差异很大。合理的时间分配是前15题基础知识控制在20分钟内完成中间15题算法概念控制在30分钟内完成最后10题阅读程序和完善程序留出60分钟最后10分钟检查。6.1 遇到卡壳的题目怎么办考场上最怕的是在一道题上死磕。我的原则是一道题超过5分钟还没有思路立刻跳过先做后面的题。等所有会做的题都做完了再回来啃难题。另外对于实在不会的题目不要空着。初赛是选择题四个选项至少有一个是对的蒙一个也有25%的正确率。但蒙题也有技巧优先排除明显错误的选项然后在剩下的选项中选一个。6.2 阅读程序题的快速定位技巧做阅读程序题时不要一上来就从第一行开始逐行读。我的做法是先看main函数找到程序的入口看main函数中调用了哪些函数这些函数的作用是什么再回到main函数逐行模拟执行这样可以避免被前面定义但未使用的函数干扰。有些题目会故意放一些烟雾弹函数定义在那里但根本不调用如果你从头开始读会浪费大量时间。6.3 完善程序题的选项排除法完善程序题的选项往往有两个看起来都对这时候需要用代入法把选项代入空格看看程序逻辑是否通顺。如果代入后程序会出现死循环、数组越界、逻辑矛盾等问题那这个选项就是错的。另外注意观察空格前后的代码风格。比如如果前面的代码用的是i n那空格处大概率也是i n而不是i n。命题人通常不会在同一个程序中混用两种风格。7. 常见备考误区与我的个人建议在带学生的过程中我发现很多同学在备考CSP-J初赛时会陷入一些典型的误区。这些误区如果不及时纠正会严重影响备考效率。7.1 只刷题不总结这是最常见的误区。很多同学买了厚厚的真题集一套接一套地刷但从来不总结错题。结果做过的题还是错不会的题还是不会。我的建议是每做一套真题花同样的时间来分析错题。分析的内容包括这道题考的是什么知识点、我为什么做错、正确的解题思路是什么、有没有类似的题目。把错题整理到一个本子上考前反复看。7.2 忽视计算机基础知识有些同学觉得计算机基础知识太简单不值得花时间结果考试时在进制转换、编码这些送分题上丢分。这是非常可惜的。我的建议是每天花10分钟做基础知识题保持手感。这部分不需要大块时间利用碎片时间即可。7.3 阅读程序题靠感觉阅读程序题是最需要动手模拟的题型但很多同学觉得代码不长看看就行了结果在考场上因为心算出错丢分。我的建议是再简单的阅读程序题也要在草稿纸上模拟。养成这个习惯后你会发现正确率大幅提升。7.4 考前突击而不是循序渐进有些同学平时不学考前两周才开始突击。初赛虽然都是选择题但涉及的知识面很广突击只能记住一些零散的知识点无法形成体系。我的建议是至少提前3个月开始备考按照前面说的四个阶段循序渐进。每天投入1-2小时比考前突击效果好得多。最后分享一个我个人的小技巧在备考期间可以找几个同学组成学习小组每周互相出题、互相讲解。讲给别人听的过程其实是自己加深理解的过程。我在学生时代就用这个方法效果非常好。有些自己以为懂了的知识点一讲出来才发现其实没懂这种输出倒逼输入的方式比单纯刷题效率高得多。