林老师 · 客观题题库 · CSP-J 卷
CSP-J 卷
· 共 35 题 · 由简到难 · 建议 53 分钟
真题 复刻
试卷编号OBJ-814402
题目总数35 题 · 70 分
试卷类型客观题
考生须知:
① 本卷为客观题单卷,合计 35 题 · 70 分 ,全部为客观题;
② 试卷右上角设有 「提交答卷」 与 「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。
壹
客 观 题
35 QUESTIONS · 2 POINTS EACH
第 1 题
判断
☆
⧉
未作答
C++ 表达式 ('1' + '1') 的值为 '2'。
(2 分)
GESP 一级 2023-09 · 判断 第6题 | 知识点 字符ASCII运算、字符型
第 2 题
判断
☆
⧉
未作答
在 C++ 语言中,do-while 循环不可能导致死循环,但 while 有可能。
(2 分)
GESP 一级 2023-09 · 判断 第7题 | 知识点 do-while循环、while循环
第 3 题
判断
☆
⧉
未作答
在下面的 C++ 代码中,由于循环中的 continue 是无条件被执行,因此将导致死循环。
01 for (int i = 1; i < 10; i++) continue ;
(2 分)
GESP 一级 2023-09 · 判断 第8题 | 知识点 break与continue、for循环
第 4 题
判断
☆
⧉
未作答
在 C++ 代码中,不可以将变量命名为 cout,因为 cout 是 C++ 的关键字。
(2 分)
GESP 一级 2023-09 · 判断 第9题 | 知识点 标识符与命名、cin与cout
第 5 题
单选
☆
⧉
未作答
(2 分)
GESP 一级 2023-09 · 单选 第1题 | 知识点 内存、外存
第 6 题
判断
☆
⧉
未作答
在 C++ 代码中,假设 N 为正整数,则 N - N / 10 * 10 与 N % 10 都将获得 N 的个位数。( )
(2 分)
GESP 二级 2025-03 · 判断 第2题 | 知识点 算术运算、整型除法
第 7 题
判断
☆
⧉
未作答
下面 C++ 代码执行后将输出 10。( )
01 int i;
02 for (i = 0; i < 10; i++)
03 continue ;
04 cout << i << endl;
(2 分)
GESP 二级 2025-03 · 判断 第6题 | 知识点 for循环、break与continue、程序阅读与输出推断
第 8 题
单选
☆
⧉
未作答
求三色彩球的颜色。有数量无限的红(Red)绿(Green)蓝(Blue)三种彩球排成一行,每组先为 5 个红色球,随后 3 个绿色,最后为 2 个蓝色。每个球都有编号,从左到右依次为 1、2、3、......。输入整数代表编号,求该编号球的颜色。下面是 C++ 代码是实现,正确说法是( )。
01 int N, remainder;
02 cin >> N;
03 remainder = N % 10; // remainder变量保存余数
04 if ((1 <= remainder) && (remainder <= 5))
05 cout << "Red" ;
06 else if ((6 <= remainder) && (remainder <= 8))
07 cout << "Green" ;
08 else if ((remainder == 9) || (remainder == 0))
09 cout << "Blue" ;
(2 分)
A 将 else if ((remainder == 9) || (remainder == 0)) 修改为 else 效果相同
B 将 ((1 <= remainder) && (remainder<= 5)) 修改为 (remainder <= 5) 效果相同
C else if ((6 <= remainder) && (remainder <= 8)) 写法错误,应修改为 else if (6 <= remainder <= 8)
D 根据题意 remainder = N % 10 应修改为 remainder = N / 10
GESP 二级 2025-03 · 单选 第4题 | 知识点 if-else、算术运算
第 9 题
单选
☆
⧉
未作答
下面 C++ 代码执行后其输出是( )。
01 int tnt = 0;
02 for (int i = 0; i < 10; i++)
03 if (i % 3)
04 tnt += 1;
05 else
06 tnt += 2;
07 cout << tnt;
(2 分)
GESP 二级 2025-03 · 单选 第5题 | 知识点 for循环、if-else、程序阅读与输出推断
第 10 题
单选
☆
⧉
未作答
下面 C++ 代码执行后输出是( )。
01 int i;
02 for (i = 0; i < 10; i++){
03 if (i % 3 == 0)
04 continue ;
05 cout << "0" << "#" ;
06 }
07 if (i >= 10)
08 cout << "1" << "#" ;
(2 分)
A 0#0#0#0#0#0#
B 0#0#0#0#0#0#0#1#
C 0#0#0#0#1#
D 0#0#0#0#0#0#1#
GESP 二级 2025-03 · 单选 第7题 | 知识点 break与continue、for循环、程序阅读与输出推断
第 11 题
单选
☆
⧉
未作答
下面 C++ 代码执行后的输出是( )。
01 int i,j;
02 for (i = 0; i < 5; i++)
03 for (j = i; j > 0; j -= 1)
04 printf("%d-" ,j);
(2 分)
A 1-2-1-3-2-1-4-3-2-1-
B 1-2-1-3-2-1-4-3-2-1
C 0-0-1-0-1-2-0-1-2-3-
D 0-0-1-0-1-2-0-1-2-3
GESP 二级 2025-03 · 单选 第8题 | 知识点 嵌套循环、程序阅读与输出推断
第 12 题
单选
☆
⧉
未作答
下列程序中,假设一个字符占用的内存空间是 1 1 1 ,ch 占用的内存空间是( )。
01 char ch[] = "hello world" ;
02 size_t ret=strlen(ch);
03 cout<<ret<<endl;
(2 分)
A 11 11 11
B 10 10 10
C 13 13 13
D 12 12 12
GESP 三级 2024-12 · 单选 第10题 | 知识点 字符数组、一维数组
第 13 题
单选
☆
⧉
未作答
下列程序最后输出的是( )。
01 int a=65;
02 cout<<tolower(a)<<endl;
(2 分)
GESP 三级 2024-12 · 单选 第11题 | 知识点 字符ASCII运算、ASCII码
第 14 题
单选
☆
⧉
未作答
想要计算从数字 n 到数字 m 之间(包含 n 和 m)有多少个数字 d 出现,下列程序哪个能够实现( )。
(2 分)
A
01 int n,m,res,d;
02 cin >> n >> m>>d;
03 for (int i = n+1; i <= m; i++){
04 int temp = i;
05 while (temp){
06 if (temp % 10 == d) res++;
07 temp /= 10;
08 }
09 }
10 cout << res << endl;
B
01 int n,m,res,d;
02 cin >> n >> m>>d;
03 for (int i = n; i <= m; i++){
04 int temp = i;
05 while (temp){
06 if (temp % 10 = d) res++;
07 temp /= 10;
08 }
09 }
10 cout << res << endl;
C
01 int n,m,res=0,d;
02 cin >> n >> m>>d;
03 for (int i = n; i <= m; i++){
04 int temp = i;
05 while (temp){
06 if (temp % 10 == d) res++;
07 temp /= 10;
08 }
09 }
10 cout << res << endl;
D
01 int n,m,res=0,d;
02 cin >> n >> m>>d;
03 for (int i = n; i <= m; i++){
04 while (temp){
05 if (temp % 10 == d) res++;
06 temp /= 10;
07 }
08 }
09 cout << res << endl;
GESP 三级 2024-12 · 单选 第12题 | 知识点 枚举、while循环
第 15 题
单选
☆
⧉
未作答
求小于等于 N 的素数的方法中,有一种方法是将所有从 2 2 2 到它本身减 1 1 1 的数都除一遍,如果不能整除,就是素数。下列哪个程序,体现了这种方法( )。
(2 分)
A
01 if (N >= 3){
02 cout<<2<<endl;
03 for (int i = 2;i <= N;i++){
04 for (int j = 2;j < i;j++){
05 if (i % j != 0){
06 flag = 1;
07 }
08 }
09 if (flag == 0){
10 cout << i << endl;
11 }
12 flag = 0;
13 }
14 }
B
01 if (N >= 2){
02 for (int i = 3;i <= N;i++){
03 for (int j = 2;j < i;j++){
04 if (i % j == 0){
05 flag = 1;
06 }
07 }
08 if (flag == 0){
09 cout << i << endl;
10 }
11 flag = 0;
12 }
13 }
C
01 if (N >= 2){
02 cout << 2 << endl;
03 for (int i = 3;i <= N;i++){
04 for (int j = 2;j < i;j++){
05 if (i % j == 0){
06 flag = 1;
07 }
08 }
09 if (flag == 0){
10 cout << i << endl;
11 }
12 flag = 0;
13 }
14 }
D
01 for (int i = 2;i <= N;i++){
02 int j = 2;
03 while (i % j != 0) j++;
04 if (j == i) cout << i << endl;
05 }
GESP 三级 2024-12 · 单选 第14题 | 知识点 质数判定、枚举
第 16 题
单选
☆
⧉
未作答
以下 C++ 代码中存在几处错误( )。
01 #include <iostream>
02 using namespace std;
03 int main() {
04 const int SIZE = 5;
05 int arr[SIZE];
06 for (int i = 0; i <= SIZE; i++) {
07 arr[i] = i * 2;
08 }
09 cout << arr[SIZE] << endl;
10 return 0;
11 }
(2 分)
A 0 0 0 处
B 1 1 1 处
C 2 2 2 处
D 3 3 3 处
GESP 三级 2025-09 · 单选 第14题 | 知识点 数组越界、程序阅读与输出推断
第 17 题
单选
☆
⧉
未作答
以下关于 C++ 中 string 类和字符数组(char[])的说法,错误的是( )。
(2 分)
A string 对象可以使用 = 进行赋值,而字符数组需要使用 strcpy。
B string 对象的长度可以使用 length() 成员函数获取,而字符数组需要使用 strlen() 函数。
C string 对象在内存中是动态分配空间的,因此可以自动处理字符串长度的变化。
D string 对象和字符数组都可以使用 == 运算符来直接比较两个字符串的内容是否相同。
GESP 三级 2025-09 · 单选 第15题 | 知识点 string类、字符数组
第 18 题
单选
☆
⧉
未作答
某排序算法对如下数据排序(按 score 升序),则下面关于该排序算法稳定性的描述中,说法正确的是( )。
初始:(90,'A'), (90,'B'), (80,'C'), (90,'D')
排序后:(80,'C'), (90,'A'), (90,'B'), (90,'D')
(2 分)
A 不稳定,因为出现了相同分数
B 稳定,因为相同 score 的相对顺序保持为 A 在 B 前、B 在 D 前
C 不稳定,因为 C 跑到前面了
D 无法判断
GESP 四级 2026-03 · 单选 第10题 | 知识点 排序稳定性、排序复杂度
第 19 题
单选
☆
⧉
未作答
下面代码试图把数组按升序进行“插入排序”,横线处应填写( )。
01 void ins(int a[], int n){
02 for (int i = 1; i < n; i++){
03 int key = a[i];
04 int j = i-1;
05 while (j >= 0 && ____________){
06 a[j+1] = a[j];
07 j--;
08 }
09 a[j+1] = key;
10 }
11 }
(2 分)
A a[j] < key
B a[j] > key
C a[j+1] > key
D a[j] == key
GESP 四级 2026-03 · 单选 第11题 | 知识点 插入排序、程序补全、while循环
第 20 题
单选
☆
⧉
未作答
下列代码段的时间复杂度为( )。
01 int cnt=0;
02 for (int i=0; i<n; i++){
03 for (int j=0; j<n; j++){
04 if ( (i+j) % 3 == 0) cnt++;
05 }
06 }
(2 分)
A O ( n ) O(n) O ( n )
B O ( n log n ) O(n \log n) O ( n log n )
C O ( n 2 ) O(n^2) O ( n 2 )
D O ( 2 n ) O(2^n) O ( 2 n )
GESP 四级 2026-03 · 单选 第12题 | 知识点 时间复杂度、嵌套循环
第 21 题
单选
☆
⧉
未作答
下面哪种方式不能实现将字符串 Welcome to 2026! 输出重定向到文件 log.txt( )。
(2 分)
A
freopen("log.txt", "w", stdout);
cout << "Welcome to 2026!" << endl;
fclose(stdout);
B
01 std::ofstream outFile("log.txt" );
02 cout << "Welcome to 2026!" << endl;
03 outFile.close();
C
ofstream log_file("log.txt");
streambuf* org_cout = cout.rdbuf();
cout.rdbuf(log_file.rdbuf());
cout << "Welcome to 2026!" << endl;
cout.rdbuf(org_cout);
D
01 std::ofstream outFile("log.txt" );
02 outFile << "Welcome to 2026!" << endl;
03 outFile.close();
GESP 四级 2026-03 · 单选 第13题 | 知识点 文件读写、cin与cout
第 22 题
单选
☆
⧉
未作答
下列函数实现排行榜中单个元素的位置调整(类似插入排序的相邻搬移)。当某玩家分数增加,需将其向前移动时,while 循环的条件应为( )。
01 struct Player{ int score; };
02 void up(Player players[], int n, int idx){
03 Player cur = players[idx];
04 int i = idx;
05 while ( ____________ ){
06 players[i] = players[i-1];
07 i--;
08 }
09 players[i] = cur;
10 }
(2 分)
A i > 0 && cur.score > players[i-1].score
B i > 0 && cur.score < players[i-1].score
C i < n-1 && cur.score > players[i+1].score
D i < n-1 && cur.score < players[i+1].score
GESP 四级 2026-03 · 单选 第15题 | 知识点 插入排序、程序补全、while循环
第 23 题
判断
☆
⧉
未作答
(2 分)
GESP 五级 2024-03 · 判断 第8题 | 知识点 贪心
第 24 题
单选
☆
⧉
未作答
(2 分)
A 在每一步选择中都做当前状态下的最优选择
B 在每一步选择中都选择局部最优解
C 在每一步选择中都选择全局最优解
D 以上都对
GESP 五级 2024-03 · 单选 第2题 | 知识点 贪心
第 25 题
单选
☆
⧉
未作答
(2 分)
A 每次选择最小元素放到前面
B 将数组分成两半分别排序,再合并两个有序部分
C 相邻元素两两交换
D 从左到右把元素插入有序区
GESP 五级 2026-06 · 单选 第12题 | 知识点 归并排序、分治
第 26 题
单选
☆
⧉
未作答
在对长度为 n n n (n ≥ 1 n\ge1 n ≥ 1 )的数组进行归并排序的过程中,mergeArray 函数(合并两个有序子数组的操作)被调用的次数是( )。
01 const int MAXN = 100005;
02 int a[MAXN];
03 int tempArr[MAXN];
04
05 void mergeArray(int left, int mid, int right) {
06 int i = left; // 左半部分起点
07 int j = mid + 1; // 右半部分起点
08 int k = left; // 临时数组下标
09
10 while (i <= mid && j <= right) {
11 if (a[i] <= a[j]) {
12 tempArr[k++] = a[i++];
13 } else {
14 tempArr[k++] = a[j++];
15 }
16 }
17
18 while (i <= mid) {
19 tempArr[k++] = a[i++];
20 }
21
22 while (j <= right) {
23 tempArr[k++] = a[j++];
24 }
25
26 for (int p = left; p <= right; p++) {
27 a[p] = tempArr[p];
28 }
29 }
30
31 void mergeSort(int left, int right) {
32 if (left >= right) {
33 return ;
34 }
35
36 int mid = left + (right - left) / 2;
37 mergeSort(left, mid);
38 mergeSort(mid + 1, right);
39 mergeArray(left, mid, right);
40 }
(2 分)
A n − 1 n-1 n − 1
B l o g n log n l o g n
C n log n n\log n n log n
D 2 n 2n 2 n
GESP 五级 2026-06 · 单选 第13题 | 知识点 归并排序、分治
第 27 题
单选
☆
⧉
未作答
小杨在学校义卖会上负责打包“零食盲盒”。每个盲盒重量不同,快递盒最多承重 limit 克,每个快递盒最多装两个盲盒。为了尽量少用快递盒,他采用如下策略:
(1 1 1 )每次把最轻的盲盒和最重的盲盒尝试放在一起;
(2 2 2 )如果两者重量之和不超过 limit,就一起装;
(3 3 3 )否则,只能让最重的盲盒单独装一盒。
下面代码用于计算最少需要多少个快递盒,则横线处应填入的是( )。
01 int minBoxes(vector<int >& w, int limit) {
02 sort(w.begin(), w.end());
03 int l = 0, r = w.size() - 1;
04 int boxes = 0;
05 while (l <= r) {
06 if (w[l] + w[r] <= limit) {
07 __________; // 在此处填入代码
08 } else {
09 r--;
10 }
11 boxes++;
12 }
13 return boxes;
14 }
(2 分)
A l++;
B r--;
C l++; r--;
D boxes--;
GESP 五级 2026-06 · 单选 第14题 | 知识点 贪心、双指针、程序补全
第 28 题
单选
☆
⧉
未作答
给定一棵二叉树,其前序遍历结果为:ABDECFG,中序遍历结果为:DEBACFG,则这棵树的正确后序遍历结果是( )。
(2 分)
A EDBGFCA
B EDGBFCA
C DEBGFCA
D DBEGFCA
GESP 六级 2024-09 · 单选 第8题 | 知识点 前序遍历、中序遍历、后序遍历
第 29 题
单选
☆
⧉
未作答
假设⼀个算法时间复杂度的递推式是 T ( n ) = 2 T ( n − 1 ) + 1 T(n) = 2T(n-1)+1 T ( n ) = 2 T ( n − 1 ) + 1 ,且 T ( 0 ) = 1 T(0) =1 T ( 0 ) = 1 ,那么这个算法的时间复杂度是()。
(2 分)
A O ( n ) O(n) O ( n )
B O ( n log n ) O(n\log{n}) O ( n log n )
C O ( n 2 ) O(n^2) O ( n 2 )
D O ( 2 n ) O(2^n) O ( 2 n )
GESP 七级 2026-03 · 单选 第1题 | 知识点 时间复杂度、递归
第 30 题
单选
☆
⧉
未作答
下⾯程序的运⾏结果为( )。
01 #include <iostream>
02 #include <algorithm>
03
04 bool check(int n, int a[], int k, int dist) {
05 int cnt = 1;
06 int last = a[0];
07
08 for (int i = 1; i < n; i++) {
09 if (a[i] - last >= dist) {
10 cnt++;
11 last = a[i];
12 }
13 }
14
15 return cnt >= k;
16 }
17
18 int solve(int n, int a[], int k) {
19 std::sort(a, a + n);
20
21 int l = 0;
22 int r = a[n - 1] - a[0];
23
24 while (l < r) {
25 int mid = (l + r + 1) / 2;
26
27 if (check(n, a, k, mid))
28 l = mid;
29 else
30 r = mid - 1;
31 }
32
33 return l;
34 }
35
36 int main() {
37 int a[] = {1, 2, 8, 4, 9};
38 int n = 5;
39 int k = 3;
40
41 std::cout << solve(n, a, k) << std::endl;
42
43 return 0;
44 }
(2 分)
GESP 七级 2026-03 · 单选 第7题 | 知识点 程序阅读与输出推断、二分答案、二分查找
第 31 题
单选
☆
⧉
未作答
下⾯程序的时间复杂度是( ),假设数组 a 的值域范围是 D。
01 #include <iostream>
02 #include <algorithm>
03 bool check(int n, int a[], int k, int dist) {
04 int cnt = 1;
05 int last = a[0];
06 for (int i = 1; i < n; i++) {
07 if (a[i] - last >= dist) {
08 cnt++;
09 last = a[i];
10 }
11 }
12 return cnt >= k;
13 }
14 int solve(int n, int a[], int k) {
15 std::sort(a, a + n);
16 int l = 0;
17 int r = a[n - 1] - a[0];
18 while (l < r) {
19 int mid = (l + r + 1) / 2;
20 if (check(n, a, k, mid))
21 l = mid;
22 else
23 r = mid - 1;
24 }
25 return l;
26 }
27 int main() {
28 int a[] = {1, 2, 8, 4, 9};
29 int n = 5;
30 int k = 3;
31 std::cout << solve(n, a, k) << std::endl;
32 return 0;
33 }
(2 分)
A O ( n log n + n log D ) O(n\log n + n\log D) O ( n log n + n log D )
B O ( n log n log D ) O(n\log n \log D) O ( n log n log D )
C O ( n log n ) O(n\log n) O ( n log n )
D O ( n log D ) O(n\log D) O ( n log D )
GESP 七级 2026-03 · 单选 第8题 | 知识点 时间复杂度、二分答案、程序阅读与输出推断
第 32 题
单选
☆
⧉
未作答
某⼆叉树共有 10 10 10 个结点,记为 A ∼ J A\sim J A ∼ J ,已知它的先序遍历序列为:A B D H I E C F J G,中序遍历序列为:H D I B E A F J C G,则该⼆叉树的后序遍历序列是( )。
(2 分)
A H I D E B J F G C A
B H I D B E J F G C A
C I H D E B J F G C A
D H I D E B F J G C A
GESP 七级 2026-03 · 单选 第9题 | 知识点 后序遍历、前序遍历、中序遍历
第 33 题
单选
☆
⧉
未作答
下面 schedule 函数的时间复杂度为( )。
01 #include <algorithm>
02 using namespace std;
03 struct activity {
04 int id, start, end;
05 };
06 bool compare(activity a, activity b) {
07 return a.end < b.end;
08 }
09 int schedule(int n, activity * p) {
10 sort(p, p + n, compare);
11 int cnt = 0, end = 0;
12 for (int i = 0; i < n; i++) {
13 if (p[i].start >= end) {
14 end = p[i].end;
15 cnt++;
16 }
17 }
18 return cnt;
19 }
(2 分)
A O ( n ) O(n) O ( n )
B O ( log ( n ) ) O(\log(n)) O ( log ( n ))
C O ( n log ( n ) ) O(n\log(n)) O ( n log ( n ))
D O ( n 2 ) O(n^2) O ( n 2 )
GESP 七级 2024-03 · 单选 第11题 | 知识点 贪心、时间复杂度、程序阅读与输出推断
第 34 题
单选
☆
⧉
未作答
下列代码片段的时间复杂度为( )。
01 long long s = 0;
02 for (int i = 1; i <= n; i++) {
03 for (int j = 1; j * j <= n; j++) {
04 s += i + j;
05 }
06 }
(2 分)
A O ( n ) O(n) O ( n )
B O ( n log n ) O(n \log n) O ( n log n )
C O ( n n ) O(n \sqrt{n}) O ( n n )
D O ( n 2 ) O(n^2) O ( n 2 )
GESP 八级 2026-06 · 单选 第11题 | 知识点 时间复杂度、嵌套循环
第 35 题
单选
☆
⧉
未作答
某优化问题的答案是 [ 1 , M ] [1, M] [ 1 , M ] 内的整数,存在单调判定函数 check(x),且每次判定的时间复杂度为 O ( n ) O(n) O ( n ) 。
使用二分答案求最小可行值,整体时间复杂度通常为( )。
(2 分)
A O ( n M ) O(nM) O ( n M )
B O ( n log M ) O(n \log M) O ( n log M )
C O ( M log n ) O(M \log n) O ( M log n )
D O ( n + M ) O(n + M) O ( n + M )
GESP 八级 2026-06 · 单选 第12题 | 知识点 二分答案、时间复杂度