免费领取!CSP-J初赛模拟试卷(含答案详解)

四季读书网 2 0
免费领取!CSP-J初赛模拟试卷(含答案详解)

CSP-J 入门组 · 初赛模拟

📝 2026 CSP-J初赛模拟试卷(完整真题·含答案详解)

关注公众号 → 私信「试卷文档」→ 获取PDF完整版

📌 写在前面

 亲爱的家长、同学们好: 这份CSP-J(入门组)初赛模拟试卷,严格按照CCF官方初赛题型和难度编写。 全卷共 20题,满分100分,考试时间90分钟。 建议同学们限时完成,再对照答案自查。坚持刷题,初赛稳过! 

一、单项选择题(共15题,每题4分,共60分)

第1题(4分)

 在C++中,以下哪个关键字用于声明常量?

A. static
B. const
C. final
D. #define

✅ 答案:B 解析:const 用于声明常量;static 声明静态变量;final 是Java的关键字;#define 是C语言的宏定义。

第2题(4分)

 下列关于数组的描述,正确的是?

A. 数组下标从1开始
B. 数组所有元素必须是相同类型
C. C++中数组长度可以动态改变
D. 字符数组不能以字符串形式初始化

✅ 答案:B 解析:数组是同类型元素的集合,所有元素类型必须相同。A错误(下标从0开始);C错误(C++原生数组长度固定);D错误(可以用字符串初始化字符数组)。

第3题(4分)

 以下哪种数据结构遵循"先进先出"(FIFO)原则?

A. 栈(Stack)
B. 队列(Queue)
C. 树(Tree)
D. 图(Graph)

✅ 答案:B 解析:队列(Queue)是先进先出(FIFO);栈(Stack)是后进先出(LIFO)。

第4题(4分)

 C++中,int 类型通常占用多少字节?

A. 1字节
B. 2字节
C. 4字节
D. 8字节

✅ 答案:C 解析:在大多数现代编译器中,int 类型占用4字节(32位),范围为 -2,147,483,648 到 2,147,483,647。

第5题(4分)

 下列哪个排序算法的最坏时间复杂度是 O(n log n)?

A. 冒泡排序
B. 快速排序(最坏)
C. 归并排序
D. 选择排序

✅ 答案:C 解析:归并排序最坏时间复杂度是 O(n log n);快速排序最坏是 O(n²);冒泡和选择排序最坏都是 O(n²)。

第6题(4分)

 C++中,以下哪种循环结构至少会执行一次循环体?

A. for
B. while
C. do-while
D. 以上都不是

✅ 答案:C 解析:do-while 先执行循环体,再判断条件,所以至少执行一次。

第7题(4分)

 在一棵二叉树中,第 i 层最多有多少个节点(根节点为第1层)?

A. 2^i
B. 2^(i-1)
C. 2i - 1
D. i^2

✅ 答案:B 解析:二叉树第 i 层最多有 2^(i-1) 个节点。这是二叉树的基本性质。

第8题(4分)

 以下哪个不是面向对象编程的特性?

A. 封装
B. 继承
C. 多态
D. 递归

✅ 答案:D 解析:面向对象编程三大特性是封装、继承、多态。递归是一种编程技巧,不是OOP特性。

第9题(4分)

 C++中,函数 strlen() 的作用是?

A. 计算字符串占用的字节数(含\0)
B. 计算字符串实际长度(不含\0)
C. 比较两个字符串
D. 连接两个字符串

✅ 答案:B 解析:strlen() 返回字符串中字符的个数,不包含结尾的 \0

第10题(4分)

 在二分查找算法中,对于一个包含 n 个有序元素的数组,平均时间复杂度是?

A. O(n)
B. O(n log n)
C. O(log n)
D. O(n²)

✅ 答案:C 解析:二分查找每次将搜索范围减半,时间复杂度为 O(log n)。

第11题(4分)

 C++中,引用(reference)和指针(pointer)的区别,下列说法正确的是?

A. 引用可以为空(NULL),指针不能
B. 引用必须初始化,指针可以不初始化
C. 引用可以重新赋值,指针不能
D. 引用和指针没有区别

✅ 答案:B 解析:引用必须初始化且不能改变指向;指针可以不初始化(但不推荐),也可以改变指向。引用不能为NULL。

第12题(4分)

 以下哪个STL容器是先进先出的?

A. vector
B. stack
C. queue
D. map

✅ 答案:C 解析:queue(队列)是先进先出(FIFO)容器;stack 是后进先出(LIFO)。

第13题(4分)

 下列关于递归算法的描述,错误的是?

A. 递归必须有终止条件
B. 递归调用会占用栈空间
C. 所有递归算法都可以用迭代方式实现
D. 递归的深度受限于内存大小,与问题规模无关

✅ 答案:D 解析:递归深度与问题规模有关,问题规模越大,递归深度越深,越可能导致栈溢出。

第14题(4分)

 对于一个有 n 个顶点的无向连通图,其生成树有 ______ 条边。

A. n
B. n-1
C. n+1
D. 2n

✅ 答案:B 解析:树的边数为顶点数减1,所以 n 个顶点的生成树有 n-1 条边。

第15题(4分)

 C++中,以下哪个头文件包含了 sort() 函数?

A. <iostream>
B. <algorithm>
C. <vector>
D. <string>

✅ 答案:B 解析:sort() 函数在 <algorithm> 头文件中。

二、阅读程序题(共3题,每题8分,共24分)

阅读程序第1题(8分)

C++ 代码:

#include <iostream> using namespace std;  int f(int n) {     if (n <= 1) return n;     return f(n-1) + f(n-2); }  int main() {     int x = 6;     cout << f(x) << endl;     return 0; }

判断题(正确的打"√",错误的打"×"):

1. 函数 f 的功能是计算斐波那契数列的第 n 项。
( √ )
2. 当 x=6 时,程序输出结果为 8。
( × )
3. 该递归算法的时间复杂度是 O(2^n)。
( √ )
4. f(10) 的返回值是 55。
( √ )

💡 解析:f(6) 的计算过程:f(0)=0, f(1)=1, f(2)=1, f(3)=2, f(4)=3, f(5)=5, f(6)=8。第2题错误,输出是8,不是13。f(10)=55。

阅读程序第2题(8分)

#include <iostream> #include <algorithm> using namespace std;  int main() {     int a[6] = {5, 2, 8, 1, 9, 3};     sort(a, a+6);     for (int i = 0; i < 6; i++) {         cout << a[i] << " ";     }     return 0; }

选择题:

A. 5 2 8 1 9 3
B. 9 8 5 3 2 1
C. 1 2 3 5 8 9
D. 3 1 9 8 2 5

✅ 答案:C 解析:sort() 默认升序排序,排序后数组为 {1, 2, 3, 5, 8, 9}。

阅读程序第3题(8分)

#include <iostream> #include <string> using namespace std;  int main() {     string s = "HELLO";     s = s + "world";     s.erase(5, 5);  // 从第5个字符开始删除5个字符     cout << s << endl;     cout << s.length() << endl;     return 0; }

程序运行后,输出结果是?

A. HELLO5
B. HELLOworld10
C. HELLO10
D. 编译错误

✅ 答案:A 解析:s = s + "world" 后 s="HELLOworld"(10字符);erase(5,5) 从第5个字符(下标5='w')开始删除5个字符,剩下 "HELLO",长度为5。

三、完善程序题(共2题,每题8分,共16分)

完善程序第1题:用桶排序对数组进行升序排序(8分)

#include <iostream> using namespace std;  int main() {     int n, i, x;     int bucket[101] = {0};  // 桶的大小为101(假设数值范围0~100)     cin >> n;     for (i = 1; i <= n; i++) {         cin >> x;         _______(1)_______;  // 将数x放入对应的桶中     }     for (i = 0; i <= 100; i++) {         while (_______(2)_______) {  // 如果桶i中有数             cout << i << " ";             bucket[i]--;         }     }     return 0; }

请在空缺处填入正确内容:

空缺(1)
bucket[x]++ 或 bucket[x] = bucket[x] + 1
空缺(2)
bucket[i] > 0

💡 解析:桶排序的核心思想是用数组下标表示数值,用数组值表示该数值出现的次数。bucket[x]++ 记录 x 出现了一次;输出时循环判断 bucket[i] > 0,若该桶中有数则输出。

完善程序第2题:二分查找(8分)

#include <iostream> using namespace std;  int binarySearch(int a[], int n, int target) {     int left = 0, right = n - 1;     while (_______(1)______) {         int mid = left + (right - left) / 2;         if (a[mid] == target) {             return mid;         } else if (a[mid] < target) {             _______(2)_______;         } else {             _______(3)_______;         }     }     return -1;  // 没找到 }

请在空缺处填入正确内容:

空缺(1)
left <= right
空缺(2)
left = mid + 1
空缺(3)
right = mid - 1

💡 解析:二分查找的核心是不断缩小搜索区间。left <= right 是循环条件;目标在右半边时 left = mid + 1;在左半边时 right = mid - 1

📥 获取完整试卷 + 答案详解 PDF

 以上为试卷部分题目预览。 完整试卷(含全部20题 + 详细答案与解析)已整理为PDF文档。 点击下方按钮,关注公众号后私信领取! 

👉 关注公众号,私信「试卷文档」领取PDF

关注公众号:私信「试卷文档」获取PDF试卷

我们专注信奥赛(CSP/NOI)升学规划每周分享备考干货、政策解读、真题解析

私信「试卷文档」

#CSP-J #信奥赛 #初赛模拟 #编程竞赛 #信息学奥赛

抱歉,评论功能暂时关闭!