CSP-J 入门组 · 初赛模拟
📝 2026 CSP-J初赛模拟试卷(完整真题·含答案详解)
关注公众号 → 私信「试卷文档」→ 获取PDF完整版
📌 写在前面
亲爱的家长、同学们好: 这份CSP-J(入门组)初赛模拟试卷,严格按照CCF官方初赛题型和难度编写。 全卷共 20题,满分100分,考试时间90分钟。 建议同学们限时完成,再对照答案自查。坚持刷题,初赛稳过!
一、单项选择题(共15题,每题4分,共60分)
第1题(4分)
在C++中,以下哪个关键字用于声明常量?
static | const |
final | #define |
✅ 答案:B 解析:const 用于声明常量;static 声明静态变量;final 是Java的关键字;#define 是C语言的宏定义。
第2题(4分)
下列关于数组的描述,正确的是?
✅ 答案:B 解析:数组是同类型元素的集合,所有元素类型必须相同。A错误(下标从0开始);C错误(C++原生数组长度固定);D错误(可以用字符串初始化字符数组)。
第3题(4分)
以下哪种数据结构遵循"先进先出"(FIFO)原则?
✅ 答案:B 解析:队列(Queue)是先进先出(FIFO);栈(Stack)是后进先出(LIFO)。
第4题(4分)
C++中,int 类型通常占用多少字节?
✅ 答案:C 解析:在大多数现代编译器中,int 类型占用4字节(32位),范围为 -2,147,483,648 到 2,147,483,647。
第5题(4分)
下列哪个排序算法的最坏时间复杂度是 O(n log n)?
✅ 答案:C 解析:归并排序最坏时间复杂度是 O(n log n);快速排序最坏是 O(n²);冒泡和选择排序最坏都是 O(n²)。
第6题(4分)
C++中,以下哪种循环结构至少会执行一次循环体?
for | while |
do-while |
✅ 答案:C 解析:do-while 先执行循环体,再判断条件,所以至少执行一次。
第7题(4分)
在一棵二叉树中,第 i 层最多有多少个节点(根节点为第1层)?
✅ 答案:B 解析:二叉树第 i 层最多有 2^(i-1) 个节点。这是二叉树的基本性质。
第8题(4分)
以下哪个不是面向对象编程的特性?
✅ 答案:D 解析:面向对象编程三大特性是封装、继承、多态。递归是一种编程技巧,不是OOP特性。
第9题(4分)
C++中,函数 strlen() 的作用是?
✅ 答案:B 解析:strlen() 返回字符串中字符的个数,不包含结尾的 \0。
第10题(4分)
在二分查找算法中,对于一个包含 n 个有序元素的数组,平均时间复杂度是?
✅ 答案:C 解析:二分查找每次将搜索范围减半,时间复杂度为 O(log n)。
第11题(4分)
C++中,引用(reference)和指针(pointer)的区别,下列说法正确的是?
✅ 答案:B 解析:引用必须初始化且不能改变指向;指针可以不初始化(但不推荐),也可以改变指向。引用不能为NULL。
第12题(4分)
以下哪个STL容器是先进先出的?
vector | stack |
queue | map |
✅ 答案:C 解析:queue(队列)是先进先出(FIFO)容器;stack 是后进先出(LIFO)。
第13题(4分)
下列关于递归算法的描述,错误的是?
✅ 答案:D 解析:递归深度与问题规模有关,问题规模越大,递归深度越深,越可能导致栈溢出。
第14题(4分)
对于一个有 n 个顶点的无向连通图,其生成树有 ______ 条边。
✅ 答案:B 解析:树的边数为顶点数减1,所以 n 个顶点的生成树有 n-1 条边。
第15题(4分)
C++中,以下哪个头文件包含了 sort() 函数?
<iostream> | <algorithm> |
<vector> | <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; }判断题(正确的打"√",错误的打"×"):
💡 解析: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; }选择题:
✅ 答案: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 解析: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; }请在空缺处填入正确内容:
💡 解析:桶排序的核心思想是用数组下标表示数值,用数组值表示该数值出现的次数。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; // 没找到 }请在空缺处填入正确内容:
💡 解析:二分查找的核心是不断缩小搜索区间。left <= right 是循环条件;目标在右半边时 left = mid + 1;在左半边时 right = mid - 1。
📥 获取完整试卷 + 答案详解 PDF
以上为试卷部分题目预览。 完整试卷(含全部20题 + 详细答案与解析)已整理为PDF文档。 点击下方按钮,关注公众号后私信领取!
👉 关注公众号,私信「试卷文档」领取PDF
关注公众号:私信「试卷文档」获取PDF试卷
我们专注信奥赛(CSP/NOI)升学规划每周分享备考干货、政策解读、真题解析
私信「试卷文档」
#CSP-J #信奥赛 #初赛模拟 #编程竞赛 #信息学奥赛