夜雨聆风学习资料网

ARTICLE · 1032145

CSP-J 初赛赛前模拟题-打印版|结合近七年真题考点(附答案详解)

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 = falsebreak; }        }if (flag) cnt++;    }    cout << cnt << endl;return0;}

判断题(正确写 √,错误写 ×)

  1. 该程序的功能是统计 2~100 之间质数的个数。( )
  2. 程序最终的输出结果是 25。( )
  3. 若把 n 改为 10,输出结果为 4。( )
  4. 若把 n 改为 2,输出结果为 0。( )

选择题

  1. 若把内层循环条件 j * j <= i 改为 j <= i / 2,输出结果会( )。 A. 变大  B. 变小  C. 不变  D. 无法确定

阅读程序(二)

#include<iostream>#include<vector>usingnamespace std;intmain(){int n = 10;vector<intdp(n + 10);    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;}

判断题(正确写 √,错误写 ×)

  1. 程序最终的输出结果是 89。( )
  2. dp[5] 的值是 8。( )
  3. 若把 n 改为 1,程序会出错。( )

选择题

  1. 该程序使用的算法思想是( )。 A. 贪心  B. 动态规划(递推)  C. 分治  D. 回溯

  2. 该程序的时间复杂度是( )。 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;}

判断题(正确写 √,错误写 ×)

  1. 程序最终的输出结果是 11。( )
  2. 若把 s 改为 "1111",输出结果为 15。( )
  3. 若把 s 改为 "10000",输出结果为 32。( )

选择题

  1. 该程序的功能是( )。 A. 十进制转二进制  B. 二进制字符串转十进制  C. 十六进制转十进制  D. 字符串反转

  2. 若 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
答案
C
A
B
A
A
D
A
B
A
A
B
C
B
A
A

逐题解析

  • 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)。


五、考点对照(这张卷覆盖的七年高频点)

题号
对应考点
七年考频
1、15
计算机基础(存储计算 / int 范围)
🔴 必考
2
进制转换
🔴 必考
3
位运算(x&(x-1))
🟡 中频
4、5
二叉树遍历 / 哈夫曼
🔴 必考
6、7
栈出栈顺序 / 链表头插法
🔴 必考
8
图·握手定理
🔴 必考
9、10
组合数学(捆绑 / 网格路径)
🔴 必考
11、完善一
二分查找
🟠 高频
12
排序稳定性
🟠 高频
13、阅读一
数论(gcd / 质数)
🟠 高频
14、阅读二
递归 / 动态规划
🟠 高频
阅读三
字符串 / 进制
🟠 高频
完善二
递归·汉诺塔
🟠 高频

💡 全卷 30 道题,覆盖了七年真题里的 12 大高频考点,其中「计算机基础、进制、树、栈队列、图、组合数学」六大必考板块全部命中,做题时若卡壳,回到对应知识点补短板。


本模拟卷基于 2019—2025 七年 CSP-J 初赛真题的题型与考点规律原创编写,仅供赛前自测,最终以 CCF 官方真题为准。祝各位同学初赛旗开得胜!

相关学习资料