本模拟题基于近十年CSP-J初赛命题规律编制,覆盖计算机基础、进制运算、数据结构、图论、组合数学等高频考点,整理的过程中难免有误,如有发现之处,及时反馈,我们将及时更新,谢谢大家。
如果有需要原题的留言,分享给你们。
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
1.计算机中,CPU的主要功能是( )。
A. 存储数据和程序
B. 进行算术运算和逻辑运算,并控制计算机各部件协调工作
C. 实现人机交互
D. 管理计算机的硬件资源
答案:B
2.十进制小数0.625转换成二进制是( )。
A. 0.101
B. 0.110
C. 0.111
D. 0.100
答案:A
解析:0.625 × 2 = 1.25 → 取1,0.25 × 2 = 0.5 → 取0,0.5 × 2 = 1.0 → 取1,得到 0.101。
3.已知字符'A'的ASCII码为 65,则字符 'F' 的ASCII码是( )。
A. 66
B. 68
C. 70
D. 72
答案:C
解析:'A'为65,'B'为66,'C'为67,'D'为68,'E'为69,'F'为70。
4.以下哪个不是合法的C++标识符?( )
A. _count
B. int
C. a123
D. Name
答案:B
解析:int 是 C++ 的保留关键字,不能用作标识符。
5.一棵完全二叉树有100个节点,则其叶子节点数为( )。
A. 50
B. 49
C. 51
D. 48
答案:A
解析:完全二叉树中,叶子节点数= ⌈n/2⌉ = ⌈100/2⌉ = 50。
6.数组a[10][10]按行优先存储,每个元素占4个字节,a[0][0]的地址为1000,则 a[3][5] 的地址为( )。
A. 1060
B. 1070
C. 1100
D. 1140
答案:D
解析:按行优先,a[3][5] 前面有 3×10 + 5 = 35 个元素,地址 = 1000 + 35×4 = 1140。
7.入栈序列为 1,2,3,4,以下哪个出栈序列不可能出现?( )
A. 4,3,2,1
B. 1,4,3,2
C. 2,4,3,1
D. 3,4,1,2
答案:D
解析:D中,3出栈前1、2已在栈中(1在2下方),3出栈后栈中为1、2(2在上方),4入栈出栈后,下一个出栈的应为2而不是1,故不可能。
8.有4个男生和3个女生站成一排,要求女生互不相邻,共有多少种排法?( )
A. 1440
B. 2400
C. 3600
D. 4800
答案:A
解析:先排4个男生:A(4,4)=24,形成5个空位(含两端),选3个空位给女生:C(5,3)×A(3,3)=10×6=60,总数=24×60=1440,选A。
9.在C++中,以下哪个关键字用于释放动态分配的内存?( )
A. new
B. delete
C. free
D. malloc
答案:B
解析:C++中用 new 分配、delete 释放;free 和 malloc 是C语言的函数。
10.有向图G有5个顶点,若每个顶点的入度之和为10,则出度之和为( )。
A. 5
B. 10
C. 15
D. 20
答案:B
解析:有向图中,所有顶点的入度之和= 所有顶点的出度之和 = 边数。
11.已知中缀表达式为(a+b)*c-d/e,则对应的后缀表达式是( )。
A. ab+c*de/-
B. ab+cde/-*
C. abc+*de/-
D. ab+c*de/-
答案:A
解析:(a+b) → ab+,(a+b)*c → ab+c*,d/e → de/,整体 → ab+c*de/-。
12.采用冒泡排序对 7,3,5,1,9 进行升序排序,第一趟排序后的结果是( )。
A. 3,5,1,7,9
B. 3,1,5,7,9
C. 3,5,1,9,7
D. 1,3,5,7,9
答案:A
解析:冒泡排序第一趟从左到右相邻比较,73交换→3,7,5,1,9;75交换→3,5,7,1,9;71交换→3,5,1,7,9;7<9不交换,第一趟结束为3,5,1,7,9。
13.某算法的递推关系为 T(n)=2T(n/2)+n,T(1)=1,则T(n)的时间复杂度为( )。
A. O(n)
B. O(n log n)
C. O(n²)
D. O(log n)
答案:B
解析:符合主定理情形2,T(n)=O(n log n),即归并排序的时间复杂度。
14.以下哪个不是存储设备?( )
A. 硬盘
B. 内存
C. CPU缓存
D. 显示器
答案:D
解析:显示器是输出设备,不是存储设备。
15.在一个连通无向图中,若有n个顶点,则至少需要( )条边才能保证图连通。
A. n
B. n-1
C. n+1
D. n²
答案:B
解析:连通图至少需要n-1 条边(构成一棵树)。
二、阅读程序(共3题,每题约13-14分,共计40分)
说明:阅读程序题包含判断题和选择题。判断题正确填√,错误填×;除特殊说明外,判断题每题1.5分,选择题每题3分。程序输入不超过数组或字符串定义的范围。
程序一
#include<iostream>using namespace std;intmain(){int n;cin>>n;int count = 0;for (int i = 1; i <= n; i++) {int x = i;while (x>0) {if (x % 10 == 7) count++;x /= 10;}}cout << count << endl;return 0;}
判断题
16. 若输入为 7,输出为 1。( )
17. 若输入为 20,输出为 2。( )
18. 若输入为 100,输出为 19。( )
单选题
19. 若输入为 77,输出为( )。
A. 8
B. 15
C. 16
D. 17
20. 该程序的功能是( )。
A. 统计 1 到 n 中数字 7 出现的次数
B. 统计 1 到 n 中能被 7 整除的数的个数
C. 统计 1 到 n 中个位是 7 的数的个数
D. 统计 1 到 n 中数字之和为 7 的数的个数
程序二
#include <iostream>using namespace std;int a[100][100];int n, m;int main() {cin>>n>>m;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin>>a[i][j];}}for(int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {int sum = 0;if (i>0) sum += a[i-1][j];if (i < n-1) sum += a[i+1][j];if (j>0) sum += a[i][j-1];if (j < m-1) sum += a[i][j+1];cout << sum << " ";}cout << endl;}return 0;}
判断题
21. 若输入为 2×2 矩阵 [[1,2],[3,4]],输出矩阵中每个元素是原矩阵上下左右相邻元素之和。( )
22. 输出矩阵中,每个位置的数值都等于原矩阵中该位置四个相邻位置的和。( )
23. 若输入的矩阵为 1×3 矩阵 [1,2,3],则输出为 [2,4,2]。( )
单选题
24. 若输入为:
3 3
1 2 3
4 5 6
7 8 9
输出矩阵中第一行第一列的值为()。
A. 5
B. 6
C. 7
D. 8
25. 若输出矩阵中某个位置的值为 20,则原矩阵中该位置的四个相邻位置之和为( )。
A. 16
B. 20
C. 24
D. 无法确定
程序三
#include<iostream>using namespace std;intf(int x, int y){if (x == 0 || y == 0) return 1;return f(x - 1, y) + f(x, y - 1);}intmain(){int n, m;cin>>n>>m;cout << f(n, m) << endl;return 0;}
判断题
26. 调用 f(0, 5) 的返回值为 1。( )
27. 调用 f(1, 1) 的返回值为 2。( )
28. 函数 f(x, y) 的计算过程中,存在重复计算。( )
单选题
29. 调用 f(2, 2) 的返回值为( )。
A. 4
B. 5
C. 6
D. 8
30. 调用 f(3, 2) 的返回值为( )。
A. 8
B. 9
C. 10
D. 12
31. 函数 f(x, y) 的返回值等价于( )。
A. C(x+y, x)
B. x + y
C. x × y
D. 2^(x+y)
三、程序完善题(共2题,每题15分,共计30分)
说明:阅读程序,根据题目要求,从备选项中选择正确的选项填入空白处,使程序能够正确运行。每题有5个空,每空3分。
程序一(素数判断)
题目描述:输入一个正整数n,判断 n 是否为素数。若是输出 "Yes",否则输出 "No"。
备选项:
①
A. n % 2 == 0
B. n / 2 == 0
C. n == 1
D. n % 2 != 0
②
A. i <= sqrt(n)
B. i < sqrt(n)
C. i <= n
D. i * i <= n
③
A. n % i == 0
B. i % n == 0
C. n / i == 0
D. n % 2 == 0
④
A. isPrime(n)
B. isPrime
C. isPrime(n) == false
D. n 0
⑤ 若输入为 17,输出为( )。
A. Yes
B. No
C. 17
D. 无法确定
程序二(斐波那契数列)
题目描述:输入正整数n,输出斐波那契数列的第 n 项。斐波那契数列定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n≥3)。要求使用迭代方式实现,空间复杂度为 O(1)。
备选项:
⑤
A. 1
B. n
C. 0
D. -1
⑥
A. a + b
B. a - b
C. a * b
D. b - a
⑦
A. b
B. c
C. a + 1
D. b + 1
⑧
A. a
B. b
C. c
D. a + b
⑨
A. a
B. b
C. c
D. n
⑩ 若输入为 10,输出为( )。
A. 34
B. 55
C. 89
D. 144
参考答案汇总
一、单项选择题
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | B | A | C | B | A | D | D | A | B | B | A | A | B | D | B |
二、阅读程序
题号 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
答案 | √ | √ | × | C | A | √ | √ | √ | B | B | √ | √ | √ | C | C | A |
部分解析:
程序一:统计1到n中数字7出现的次数。
- 第16题:n=7,数字7中1个7 → 输出1 → 判√
- 第17题:1-20中含7的数字:7(1个)、17(1个)→ 共2个 → √
- 第18题:1-100中含7的数字:7,17,27,37,47,57,67,70-79(11个),87,97 → 共20个 → 判×(应为20,不是19)
- 第19题:77中两个7 → 输出应为16 → 选C
程序二:计算每个元素上下左右相邻元素之和(边界元素只计算存在的相邻元素)。
- 第21题:正确
- 第22题:边界元素只有2或3个相邻,不是4个 → 判×
- 第23题:1×3矩阵[1,2,3],输出:位置0(右邻2)→2,位置1(左邻1+右邻3)→4,位置2(左邻2)→2 → [2,4,2] → √
程序三:递归计算组合数C(x+y, x)。
- f(2,2) = f(1,2)+f(2,1) = [f(0,2)+f(1,1)] + [f(1,1)+f(2,0)] = (1+2)+(2+1)=6 → 选C
- f(3,2) = C(5,3)=10 → 选C
三、程序完善题
程序一:
题目 | ① | ② | ③ | ④ | ⑤ |
答案 | A | D | A | A | A |
解析:①排除偶数(2已处理);②用 i*i <= n 更高效;③判断整除;④调用判断函数;⑤17是素数 → Yes
程序二:
题目 | ⑤ | ⑥ | ⑦ | ⑧ | ⑨ | ⑩ |
答案 | A | A | B | C | C | B |
解析:⑤n=1或2时输出1;⑥c=a+b;⑦a=b;⑧b=c;⑨输出c(第n项);⑩F(10)=55 → 选B
试卷命题说明
题型 | 题量 | 分值 | 主要考点 |
单项选择题 | 15题 | 30分 | 计算机基础、进制转换、数据结构、排列组合、算法复杂度 |
阅读程序-判断 | 13题 | 约19.5分 | 代码阅读能力、逻辑推理、边界条件 |
阅读程序-选择 | 8题 | 约24分 | 程序功能分析、输出结果预测 |
程序完善题 | 10空 | 30分 | 算法理解、代码填空能力 |
难度分布:基础题约40%,中等题约45%,较难题约15%,与CSP-J历年真题难度曲线一致。
夜雨聆风