2024 Round 1

把整张 CSP-J1 试卷拆成可复习、可导航、可逐题回看的学习站。

2024 CCF 非专业级别软件能力认证第一轮(CSP-J1)入门级 C++ 语言试题。页面按纸感长文阅读体验设计:首页保留总览,详情页补足完整教学型解析。

考试时间

2024 年 9 月 21 日 09:30 - 11:30

总分 / 页数

100 分 / 12

题量 / 时长

42 题 / 120 分钟

题组数量

5

阅读程序 3 组,完善程序 2 组。

知识标签

46

首页支持按知识标签筛选题目目录。

逐题解析

42

每题都包含答案、详细讲解、易错点和拓展补充。

阅读重点

11

题目聚成 11 个核心知识模块,便于横向复习。

Knowledge Map

本卷的知识图谱

知识点不是按课本目录生硬展开,而是按这份试卷真正出现的考法来聚类,方便把“会做一道题”变成“会做一类题”。

3 题覆盖

数制与编码

覆盖整数表示范围、进制换算与格雷码,相当于第一轮最典型的“纸面计算题”。

对应题号: 1、2、4

1 题覆盖

存储单位

掌握 byte、KB、MB 与 bit 之间的换算,避免十进制和二进制单位混淆。

对应题号: 5

8 题覆盖

C++ 基础语法

涉及基本数据类型、循环语句、程序补全中的布尔返回值,以及程序的编译执行链路。

对应题号: 6、7、15、33、34、35、36、37

1 题覆盖

字符与 ASCII

重点是字符字面量、隐式整型提升和字符编码的位移规律。

对应题号: 8

2 题覆盖

组合计数

要求会拆情况、会乘法原理和组合数,尤其要能识别“至少一个”的限制条件。

对应题号: 3、14

1 题覆盖

查找复杂度

二分查找的比较次数经常以 log2(n) 的上取整形式出现,是第一轮高频考法。

对应题号: 9

2 题覆盖

图论与树

涵盖无向图握手定理与二叉树前中后序互推,重在结构关系的理解。

对应题号: 11、12

1 题覆盖

利用“后进先出”的约束验证出栈序列是否合法,是典型模拟题。

对应题号: 13

6 题覆盖

递归

阅读程序部分的递归题考查递归终止条件、调用深度和递推式的等价表达。

对应题号: 27、28、29、30、31、32

6 题覆盖

动态规划

楼梯花费题展示了状态定义、状态转移和边界初始化,是第一轮常见 DP 原型。

对应题号: 21、22、23、24、25、26

5 题覆盖

经典递归题

汉诺塔属于必须会写的经典递归模型,关键是把“大问题拆成两个小问题”。

对应题号: 38、39、40、41、42

Directory

按分区和知识点浏览 42 道题

首页保留一览式目录,详情页再展开完整讲解。你可以先按题型缩小范围,再用知识标签快速锁定需要复习的题。

当前命中 42 题。每张卡片都包含题型、分值、核心知识点和跳转入口。

Section

单项选择

15 道基础题,覆盖数制、组合计数、数据结构、树与图、编译原理等高频知识点。

Question 1

32 位整数范围

答案 C

32 位 int 类型的存储范围是?

数制与编码数据表示
题型单选
分值2
难度基础

核心考点:32 位有符号整数通常使用补码表示,取值范围是 -2^31 到 2^31 - 1。

查看详解

Question 2

多进制表达式计算

答案 A

计算 (14₈ − 1010₂) * D₁₆ − 1101₂ 的结果,并选择答案的十进制值。

数制与编码进制换算
题型单选
分值2
难度基础

核心考点:先把八进制、二进制、十六进制都转换成十进制,再代入普通算式。

查看详解

Question 3

带限制的组合计数

答案 B

某公司有 10 名员工,分为 A、B、C 三个部门,人数分别为 4、3、3。现选 4 人组成工作小组,且每个部门至少 1 人,共有多少种选法?

组合计数分类讨论
题型单选
分值2
难度中等

核心考点:“4 人且每部门至少 1 人”意味着人数分配只能是 (2,1,1),再讨论哪个部门出 2 人。

查看详解

Question 4

格雷码序列

答案 D

以下哪个序列对应数字 0 至 7 的 4 位二进制格雷码?

数制与编码格雷码
题型单选
分值2
难度中等

核心考点:格雷码要求相邻两个编码恰好只有 1 位不同。

查看详解

Question 5

MB 与 bit 换算

答案 D

记 1KB = 1024 byte,1MB = 1024KB,那么 1MB 是多少 bit?

存储单位单位换算
题型单选
分值2
难度基础

核心考点:1 byte = 8 bit,1MB = 1024 * 1024 byte。

查看详解

Question 6

基本数据类型

答案 C

以下哪个不是 C++ 中的基本数据类型?

C++ 基础语法数据类型
题型单选
分值2
难度基础

核心考点:`int`、`float`、`char` 都是基本类型;`struct` 是用户自定义复合类型机制。

查看详解

Question 7

循环语句识别

答案 D

以下哪个不是 C++ 中的循环语句?

C++ 基础语法循环结构
题型单选
分值2
难度基础

核心考点:C++ 内置的三种常见循环是 `for`、`while`、`do...while`。

查看详解

Question 8

字符运算

答案 B

在 C/C++ 中,(char)('a' + 13) 与下面的哪一个值相等?

字符与 ASCII字符运算
题型单选
分值2
难度基础

核心考点:字符字面量参与运算时会先转成整数编码,再转回字符。

查看详解

Question 9

二分查找比较次数

答案 B

假设有序表中有 1000 个元素,则用二分法查找元素 X 最多需要比较多少次?

查找复杂度二分查找
题型单选
分值2
难度基础

核心考点:二分查找的最大比较次数大约是 `ceil(log2 n)`。

查看详解

Question 10

操作系统识别

答案 A

下面的哪一个不是操作系统名字?

计算机系统操作系统
题型单选
分值2
难度基础

核心考点:Linux、Windows、macOS 都是操作系统;Notepad 是应用程序。

查看详解

Question 11

无向图度数之和

答案 B

在无向图中,所有顶点的度数之和等于什么?

图论与树无向图
题型单选
分值2
难度基础

核心考点:无向图的每条边会分别给两个端点各贡献 1 次度数,这就是握手定理。

查看详解

Question 12

前中序推后序

答案 A

已知二叉树前序为 [A, B, D, E, C, F, G],中序为 [D, B, E, A, F, C, G],后序遍历结果是?

图论与树二叉树遍历
题型单选
分值2
难度中等

核心考点:前序首元素是根,中序中根左边是左子树、右边是右子树,再递归拆分。

查看详解

Question 13

栈的出栈序列

答案 D

给定空栈,依次入栈 1 2 3 4 5 6,下面哪种出栈顺序不可能出现?

模拟
题型单选
分值2
难度中等

核心考点:判断栈序列是否合法的关键是:当前要弹出的元素必须位于栈顶。

查看详解

Question 14

相邻限制的排列

答案 A

5 个男生和 3 个女生站成一排,规定 3 个女生必须相邻,共有多少种不同排列?

组合计数捆绑法
题型单选
分值2
难度基础

核心考点:相邻问题优先考虑“捆绑法”,把必须相邻的对象先看成一个整体。

查看详解

Question 15

编译器的作用

答案 B

编译器的主要作用是什么?

计算机系统编译与运行
题型单选
分值2
难度基础

核心考点:编译器负责把高级语言程序翻译成目标代码,供计算机执行。

查看详解

Section

阅读程序

3 段程序阅读,重点考查素数判断、动态规划、递归函数与程序输出分析。

Question 16

输入 10 时的输出判断

答案

当输入为 10 时,程序的第一个输出为 4,第二个输出为 17。

素数程序阅读
题型判断
分值1.5
难度基础

核心考点:10 以内的素数是 2、3、5、7,所以个数为 4,和为 17。

查看详解

Question 17

修改循环条件后的影响

答案 ×

若将 `isPrime` 函数中的循环条件改为 `i <= n / 2`,输入 20 时,`countPrimes(20)` 的输出将变为 6。

素数程序修改
题型判断
分值1.5
难度中等

核心考点:把循环上界从平方根改到 n/2 会变慢,但不会改变素数判断结果。

查看详解

Question 18

sumPrimes 的功能判断

答案

`sumPrimes` 函数计算的是从 2 到 n 之间的所有素数之和。

素数函数职责
题型判断
分值1.5
难度基础

核心考点:`sumPrimes` 的循环变量 `i` 从 2 枚举到 n,遇到素数就累加。

查看详解

Question 19

sumPrimes(50) 输出

答案 B

当输入为 50 时,`sumPrimes(50)` 的输出为多少?

素数程序阅读
题型单选
分值3
难度中等

核心考点:只要列出 50 以内素数并求和即可。

查看详解

Question 20

把上界改成 i <= n 的后果

答案 A

如果将 `for (int i = 2; i * i <= n; i++)` 改为 `for (int i = 2; i <= n; i++)`,输入 10 时程序的输出是什么?

素数程序修改
题型单选
分值3
难度中等

核心考点:如果把循环跑到 `i == n`,那么任何 `n > 1` 都会因为 `n % n == 0` 被错误判成非素数。

查看详解

Question 21

样例 {10,15,20} 的输出

答案

当输入的 `cost` 数组为 `{10, 15, 20}` 时,程序的输出为 15。

动态规划状态转移
题型判断
分值1.5
难度基础

核心考点:`dp[i] = min(dp[i-1], dp[i-2]) + cost[i-1]`,最终返回 `min(dp[n], dp[n-1])`。

查看详解

Question 22

dp[i-3] 是否会编译错误

答案 ×

如果将 `dp[i-1]` 改为 `dp[i-3]`,程序可能会产生编译错误。

动态规划数组下标
题型判断
分值1.5
难度中等

核心考点:数组越界通常是运行时逻辑问题,不是编译错误。

查看详解

Question 23

是否总输出最小元素

答案 ×

程序总是输出 `cost` 数组中的最小元素。

动态规划函数含义
题型判断
分值2
难度基础

核心考点:程序输出的是“走到楼顶的最小总代价”,不是数组中的最小单个元素。

查看详解

Question 24

经典楼梯样例输出

答案 A

当输入的 `cost` 数组为 `{1,100,1,1,1,100,1,1,100,1}` 时,程序输出为多少?

动态规划状态转移
题型单选
分值3
难度中等

核心考点:这是最小花费爬楼梯的经典样例,最优路径会尽量避开 100 这种高代价台阶。

查看详解

Question 25

样例 {10,15,30,5,5,10,20} 的输出

答案 B

如果输入的 `cost` 数组为 `{10, 15, 30, 5, 5, 10, 20}`,程序输出为多少?

动态规划状态转移
题型单选
分值4
难度中等

核心考点:手推 DP 时要按照下标顺序逐个算,别试图跳步。

查看详解

Question 26

修改转移式后的输出

答案 A

若把 `min(dp[i-1], dp[i-2]) + cost[i-1]` 改为 `dp[i-1] + cost[i-2]`,输入 `cost = {5, 10, 15}` 时,输出为多少?

动态规划转移式修改
题型单选
分值3
难度中等

核心考点:改动后的转移式已经不再比较两条路径,而是强制从前一阶来。

查看详解

Question 27

输入 2 3 时返回值判断

答案 ×

当输入为 `2 3` 时,`customFunction(2, 3)` 的返回值为 64。

递归函数返回值
题型判断
分值1.5
难度基础

核心考点:`customFunction(a, b)` 返回的是 `a * (b + 1)`,不是平方后的结果。

查看详解

Question 28

负数参数是否会无限递归

答案

当 `b` 为负数时,`customFunction(a, b)` 会陷入无限递归。

递归终止条件
题型判断
分值1.5
难度中等

核心考点:递归只在 `b == 0` 时停止,而负数每次都会继续减 1,永远到不了 0。

查看详解

Question 29

b 增大时运行时间变化

答案

当 `b` 的值越大,程序的运行时间越长。

递归时间复杂度
题型判断
分值1.5
难度基础

核心考点:每增加 1 个 b,就会多产生 1 层递归调用。

查看详解

Question 30

输入 5 4 时的返回值

答案 B

当输入为 `5 4` 时,`customFunction(5, 4)` 的返回值为多少?

递归函数返回值
题型单选
分值3
难度基础

核心考点:函数值等于 a 被重复相加 `b + 1` 次。

查看详解

Question 31

输入 3 3 时的最终输出

答案 C

如果输入 `x = 3` 和 `y = 3`,则程序的最终输出为多少?

递归程序输出
题型单选
分值3
难度基础

核心考点:先算递归返回值 12,再平方得到最终输出。

查看详解

Question 32

修改递归式后的最终输出

答案 D

若将 `customFunction` 改为 `return a + customFunction(a - 1, b - 1);`,并输入 `3 3`,程序的最终输出为多少?

递归程序修改
题型单选
分值4
难度中等

核心考点:修改后每层递归同时让 a 和 b 都减 1,相当于求一个递减等差和。

查看详解

Section

完善程序

2 组程序补全,要求根据算法意图补齐边界条件、递归参数和判定语句。

Question 33

① 的起始值

答案 A

在判断平方数程序中,① 处应填什么?

程序补全完全平方数
题型补全
分值3
难度基础

核心考点:完全平方数要从最小正整数 1 开始尝试。

查看详解

Question 34

② 的上界

答案 B

在判断平方数程序中,② 处应填什么?

程序补全完全平方数
题型补全
分值3
难度中等

核心考点:检查完全平方数时,枚举到 `floor(sqrt(num))` 就足够,而且不能少一位。

查看详解

Question 35

③ 的判定条件

答案 D

在判断平方数程序中,③ 处应填什么?

程序补全条件判断
题型补全
分值3
难度基础

核心考点:要判断 num 是否是某个 i 的平方,条件必须写成 `num == i * i`。

查看详解

Question 36

④ 的返回值

答案 C

在判断平方数程序中,④ 处应填什么?

程序补全布尔返回值
题型补全
分值3
难度基础

核心考点:一旦找到满足条件的 i,就说明 num 是完全平方数,应该立即返回 `true`。

查看详解

Question 37

⑤ 的返回值

答案 D

在判断平方数程序中,⑤ 处应填什么?

程序补全布尔返回值
题型补全
分值3
难度基础

核心考点:循环结束仍未找到平方根,说明 num 不是完全平方数,应返回 `false`。

查看详解

Question 38

① 的终止条件

答案 B

在汉诺塔程序中,① 处应填什么?

经典递归题汉诺塔
题型补全
分值3
难度基础

核心考点:汉诺塔递归的最小子问题是“只剩 1 个盘子”,这时可以直接移动。

查看详解

Question 39

② 的移动参数

答案 B

在汉诺塔程序中,② 处应填什么?

经典递归题汉诺塔
题型补全
分值3
难度基础

核心考点:终止条件下只有一个盘子,要直接从源柱移动到目标柱。

查看详解

Question 40

③ 的第一次递归参数

答案 B

在汉诺塔程序中,③ 处应填什么?

经典递归题递归参数
题型补全
分值3
难度中等

核心考点:第一次递归是把前 `i - 1` 个盘子从源柱移到临时柱,此时原目标柱变成辅助柱。

查看详解

Question 41

④ 的第二次递归参数

答案 B

在汉诺塔程序中,④ 处应填什么?

经典递归题递归参数
题型补全
分值3
难度中等

核心考点:第二次递归是把临时柱上的 `i - 1` 个盘子移到目标柱,原源柱这时变成辅助柱。

查看详解

Question 42

⑤ 的盘子数量

答案 C

在汉诺塔程序中,⑤ 处应填什么?

经典递归题递归规模
题型补全
分值3
难度基础

核心考点:两次递归都处理的是“去掉最大盘子后剩下的 i - 1 个小盘子”。

查看详解

Source

原卷与来源入口

站点内容以原卷 PDF 为主源,题面经过手工清洗和校对,答案再用外部参考页交叉核验。你可以从下面的入口回看原卷或继续挖同目录资料。