ARTICLE · 1032145
CSP-J 初赛赛前模拟题-打印版|结合近七年真题考点(附答案详解)
CSP-J 初赛赛前模拟题-打印版|结合近七年真题考点(附答案详解)
距 CSP-J 第一轮认证越来越近,光看知识点不够,还得实战练手。这份模拟卷严格按照近七年(2019—2025)CSP-J 初赛真题的题型与考点规律编写——15 道单选、3 段阅读程序、2 段完善程序,满分 100 分。建议先卡 120 分钟做完,再翻到文末对答案。
获取 CSP-J 初赛赛前模拟题.pdf
请关注状元编程公众号,回复 2026091802
一、单项选择题(共 15 题,每题 2 分,共 30 分)
1. 一张分辨率为 1024×768、24 位真彩色的位图,不压缩存储约需( )KB。
A. 768 B. 1536 C. 2304 D. 1024
2. 二进制数 101101₂ 与八进制数 135₈ 的和,用十六进制表示为( )。
A. 8A₁₆ B. 7A₁₆ C. 8B₁₆ D. 9A₁₆
3. 设有 int x = 48; 则表达式 x & (x - 1) 的值是( )。
A. 47 B. 32 C. 16 D. 0
4. 一棵二叉树的前序遍历为 ABCDEF,中序遍历为 CBDAEF,则其后序遍历是( )。
A. CDBFEA B. CDBEFA C. DCBFEA D. CDBAFE
5. 用权值集合 {3, 5, 7, 9, 11} 构造哈夫曼树,其带权路径长度 WPL 是( )。
A. 78 B. 79 C. 80 D. 81
6. 元素 1、2、3、4 依次入栈,下列哪个出栈序列是不可能的?( )
A. 1,2,3,4 B. 4,3,2,1 C. 2,4,3,1 D. 3,1,2,4
7. 在带头结点的单链表中,用头插法插入新结点 p(值为 x),正确的操作是( )。
A. p->next = head->next; head->next = p; B. head->next = p; p->next = head->next; C. p->next = head; head = p; D. head = p; p->next = head;
8. 一个无向图有 7 条边,则所有顶点的度数之和是( )。
A. 7 B. 14 C. 21 D. 无法确定
9. 5 个男生和 3 个女生站成一排,要求 3 个女生必须相邻,共有( )种排法。
A. 4320 B. 40320 C. 8640 D. 2160
10. 从网格点 (0,0) 走到 (3,4),每次只能向右或向上走一格,共有( )种不同路径。
A. 35 B. 21 C. 12 D. 7
11. 在含 64 个元素的有序表中进行二分查找,最多需要比较( )次。
A. 5 B. 6 C. 7 D. 8
12. 下列排序算法中,属于稳定排序的是( )。
A. 快速排序 B. 堆排序 C. 归并排序 D. 选择排序
13.gcd(48, 36) 的值是( )。
A. 6 B. 12 C. 18 D. 24
14. 函数 int f(int n) { if (n <= 1) return 1; return f(n-1) + n; },则 f(5) 的值是( )。
A. 15 B. 16 C. 20 D. 21
15. 32 位有符号整型 int 能表示的最小值是( )。
A. -2147483648 B. -2147483647 C. -32768 D. -2³¹+1
二、阅读程序题(3 段程序,共约 40 分)
阅读程序(一)
#include<iostream>usingnamespace std;intmain(){int n = 100, cnt = 0;for (int i = 2; i <= n; i++) {bool flag = true;for (int j = 2; j * j <= i; j++) {if (i % j == 0) { flag = false; break; } }if (flag) cnt++; } cout << cnt << endl;return0;}判断题(正确写 √,错误写 ×)
该程序的功能是统计 2~100 之间质数的个数。( ) 程序最终的输出结果是 25。( ) 若把 n改为 10,输出结果为 4。( )若把 n改为 2,输出结果为 0。( )
选择题
若把内层循环条件 j * j <= i改为j <= i / 2,输出结果会( )。 A. 变大 B. 变小 C. 不变 D. 无法确定
阅读程序(二)
#include<iostream>#include<vector>usingnamespace std;intmain(){int n = 10;vector<int> dp(n + 1, 0); dp[0] = 1; dp[1] = 1;for (int i = 2; i <= n; i++) dp[i] = dp[i-1] + dp[i-2]; cout << dp[n] << endl;return0;}判断题(正确写 √,错误写 ×)
程序最终的输出结果是 89。( ) dp[5]的值是 8。( )若把 n改为 1,程序会出错。( )
选择题
该程序使用的算法思想是( )。 A. 贪心 B. 动态规划(递推) C. 分治 D. 回溯
该程序的时间复杂度是( )。 A. O(log n) B. O(n) C. O(n²) D. O(2ⁿ)
阅读程序(三)
#include<iostream>#include<string>usingnamespace std;intmain(){ string s = "1011";int ans = 0;for (int i = 0; i < s.size(); i++) ans = ans * 2 + (s[i] - '0'); cout << ans << endl;return0;}判断题(正确写 √,错误写 ×)
程序最终的输出结果是 11。( ) 若把 s改为 "1111",输出结果为 15。( )若把 s改为 "10000",输出结果为 32。( )
选择题
该程序的功能是( )。 A. 十进制转二进制 B. 二进制字符串转十进制 C. 十六进制转十进制 D. 字符串反转
若
s = "0",则程序输出( )。 A. 0 B. 1 C. 编译错误 D. 运行错误
三、完善程序题(2 段程序,共 30 分)
完善程序(一):二分查找
在升序数组 a[0..n-1] 中查找 x,找到返回下标,找不到返回 -1。
#include<iostream>usingnamespace std;int a[100], n, x;intbinary_search(){int l = 0, r = n - 1;while (l <= r) {int mid = ____①____;if (a[mid] == x) return mid;if (a[mid] < x) ____②____;else ____③____; }return-1;}intmain(){ cin >> n >> x;for (int i = 0; i < n; i++) cin >> a[i]; cout << binary_search() << endl;return0;}① ② ③ 处应填写的代码分别是(3 空,每空 4 分)。
完善程序(二):汉诺塔
把 n 个盘子从柱子 src 移到柱子 tgt,借助柱子 tmp。
#include<iostream>usingnamespace std;voidhanoi(int n, char src, char tmp, char tgt){if (n == 1) { cout << src << "->" << tgt << endl;return; } ____①____; cout << src << "->" << tgt << endl; ____②____;}intmain(){hanoi(3, 'A', 'B', 'C');return0;}① ② 处应填写的代码分别是(2 空,每空 5 分)。
四、参考答案与详解
单项选择题答案
逐题解析
1. C:1024×768×24 bit = 1024×768×3 Byte = 2359296 Byte = 2304 KB。 2. A:101101₂=45,135₈=93,45+93=138,138 = 8×16+10 = 8A₁₆。 3. B:48 = 110000₂,47 = 101111₂,相与得 100000₂ = 32(清除最低位的 1)。 4. A:前序根为 A,中序分左右子树:左 CBD、右 EF。左子树根 B,C 在左、D 在右;右子树根 E,F 在右。后序 = CDB + FE + A = CDBFEA。 5. A:合并 3+5=8、7+8=15、9+11=20、15+20=35。WPL = 3×3+5×3+7×2+9×2+11×2 = 9+15+14+18+22 = 78。 6. D:3 先出栈说明 1、2 仍在栈中,栈顶是 2,接下来只能出 2,不可能出 1。 7. A:头插法是 p->next = head->next; head->next = p;,注意顺序不能反。8. B:握手定理,无向图度数之和 = 2×边数 = 14。 9. A:3 女生捆成整体,共 6 个"单位"全排列 6!,内部再 3!,即 6!×3! = 720×6 = 4320。 10. A:共走 3+4=7 步,选 3 步向右(或 4 步向上),C(7,3) = 35。 11. B:二分查找最多比较 ⌈log₂64⌉ = 6 次。 12. C:归并排序稳定;快速、堆、选择排序均不稳定。 13. B:gcd(48,36) = gcd(36,12) = gcd(12,0) = 12。 14. A:f(1)=1,f(2)=3,f(3)=6,f(4)=10,f(5)=15。 15. A:32 位有符号 int 范围 -2³¹ ~ 2³¹-1,最小值 -2147483648。
阅读程序答案
阅读程序(一):1.√ 2.√ 3.√ 4.× 5.C
程序用试除法统计 2~100 质数个数,共 25 个(2,3,5,7,…,97)。 n=10 时质数 {2,3,5,7} 共 4 个;n=2 时 2 是质数,输出 1,故第 4 题 ×。 第 5 题: j<=i/2与j*j<=i判断范围等价(i≥2 时都覆盖所有可能的因子),结果不变。
阅读程序(二):1.√ 2.√ 3.× 4.B 5.B
斐波那契:1,1,2,3,5,8,13,21,34,55,89,故 dp[10]=89;dp[5]=8。 n=1 时 dp[1]=1 正常,不报错,故第 3 题 ×。 递推/动态规划,时间复杂度 O(n)。
阅读程序(三):1.√ 2.√ 3.× 4.B 5.A
秦九韶式逐位累乘,把二进制字符串转十进制:1011₂=11;1111₂=15。 "10000"₂ = 16(不是 32),故第 3 题 ×。 s="0" 时 ans 始终为 0,输出 0。
完善程序答案
完善程序(一):
① (l + r) / 2② l = mid + 1③ r = mid - 1
经典二分模板:
a[mid] < x说明目标在右半区,l右移;否则r左移。注意l <= r的等号和+1/-1避免死循环。
完善程序(二):
① hanoi(n - 1, src, tgt, tmp)② hanoi(n - 1, tmp, src, tgt)
汉诺塔三步:先把上面 n-1 个从 src 移到 tmp(借助 tgt),再移动第 n 个,最后把 n-1 个从 tmp 移到 tgt(借助 src)。
五、考点对照(这张卷覆盖的七年高频点)
💡 全卷 30 道题,覆盖了七年真题里的 12 大高频考点,其中「计算机基础、进制、树、栈队列、图、组合数学」六大必考板块全部命中,做题时若卡壳,回到对应知识点补短板。
本模拟卷基于 2019—2025 七年 CSP-J 初赛真题的题型与考点规律原创编写,仅供赛前自测,最终以 CCF 官方真题为准。祝各位同学初赛旗开得胜!