#3229. CSP-J 第一轮 入门级 C++ 语言试题(模拟卷 A)
CSP-J 第一轮 入门级 C++ 语言试题(模拟卷 A)
2026 CCF CSP-J 第一轮 入门级 C++ 语言试题(模拟卷 A)
一、单项选择题(共15题,每题2分,共计30分)
1. 在计算机中,一个字节(Byte)由( )个二进制位(bit)组成。
{{ select(1) }}
- 4
- 8
- 16
- 32
2. 将十进制数 2024 转换为八进制数,结果是( )。
{{ select(2) }}
- 3740
- 3750
- 3744
- 3754
3. 从 6 名男生和 4 名女生中选出 5 人组成代表队,要求代表队中至少有 2 名女生。问有多少种不同的选法?( )
{{ select(3) }}
- 186
- 196
- 206
- 216
4. 已知字符 'A' 的 ASCII 码为 65,'a' 的 ASCII 码为 97。则表达式 'F' - 'A' + 'a' 的值为( )。
{{ select(4) }}
- 'e'
- 'f'
- 'g'
- 'F'
5. 若某台计算机的内存为 16GB,则它最多可以存储( )字节的数据。
{{ select(5) }}
6. 在 C++ 中,下列哪个不是合法的标识符(变量名)?( )
{{ select(6) }}
_countvar_12valuemyVar
7. 表达式 5 >> 1 的值是( )。
{{ select(7) }}
- 1
- 2
- 3
- 10
8. 在一个包含 n 个元素的有序数组中,使用二分查找算法查找某个元素的时间复杂度是( )。
{{ select(8) }}
9. 以下哪种数据结构具有"先进后出"(LIFO)的特性?( )
{{ select(9) }}
- 队列
- 栈
- 链表
- 二叉树
10. 在一棵深度为 4 的满二叉树中,结点的总数为( )。(根的深度为 1)
{{ select(10) }}
- 8
- 15
- 16
- 31
11. IPv4 地址用( )位二进制数表示。
{{ select(11) }}
- 16
- 32
- 64
- 128
12. 已知一棵二叉树的中序遍历为 B D C E A F H G,后序遍历为 D E C B H G F A,则其前序遍历为( )。
{{ select(12) }}
A B C D E F G HA B D C E F H GA B C D E F H GA B D C E F G H
13. 设有一个栈,入栈序列为 1, 2, 3, 4, 5。以下哪个不可能是合法的出栈序列?( )
{{ select(13) }}
- 2, 4, 3, 5, 1
- 3, 1, 2, 5, 4
- 1, 3, 5, 4, 2
- 4, 3, 5, 2, 1
14. 有 3 个相同的红球和 2 个相同的蓝球排成一排,共有( )种不同的排列方式。
{{ select(14) }}
- 6
- 10
- 15
- 20
15. 编译器的主要功能是( )。
{{ select(15) }}
- 将源程序逐条翻译并立即执行
- 将源代码直接转换为可执行文件并运行
- 将高级语言源程序翻译成机器指令代码
- 对源代码进行逐行调试
二、阅读程序
程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分。
程序 1
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
string ans = "";
int n = s.length();
int cnt = 1;
for (int i = 1; i <= n; i++) {
if (i < n && s[i] == s[i - 1]) {
cnt++;
} else {
ans += s[i - 1];
if (cnt > 1) {
ans += to_string(cnt);
}
cnt = 1;
}
}
cout << ans << endl;
return 0;
}
判断题
16. (1.5 分)当输入为 "aaabbbcc" 时,输出为 "a3b3c2"。( )
{{ select(16) }}
- √
- ×
17. (1.5 分)当输入为 "abcd" 时,输出为 "a1b1c1d1"。( )
{{ select(17) }}
- √
- ×
18. (1.5 分)当输入字符串全部由小写字母组成时,程序一定能正常运行且输出有意义的结果。( )
{{ select(18) }}
- √
- ×
19. (1.5 分)如果输入的字符串中包含数字字符(如 "a22b"),程序的输出可能会产生歧义。( )
{{ select(19) }}
- √
- ×
选择题
20. (3 分)当输入为 "aaabbbccc" 时,输出为( )。
{{ select(20) }}
a3b3c3abca3b3aabbcc
21. (3 分)当输入字符串长度为 n,且字符串中每相邻两个字符都不相同时,输出的字符串长度约为( )。
{{ select(21) }}
程序 2
#include <iostream>
using namespace std;
const int MAXN = 1005;
int a[MAXN], dp[MAXN];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
int ans = 0;
for (int i = 1; i <= n; i++) {
dp[i] = 1;
for (int j = 1; j < i; j++) {
if (a[j] < a[i]) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
ans = max(ans, dp[i]);
}
cout << ans << endl;
return 0;
}
判断题
22. (1.5 分)该程序的功能是计算数组 a 的最长上升子序列(LIS)的长度。( )
{{ select(22) }}
- √
- ×
23. (1.5 分)当输入为 "4\n1 2 1 3" 时,程序的输出为 3。( )
{{ select(23) }}
- √
- ×
24. (1.5 分)若将条件 a[j] < a[i] 改为 a[j] <= a[i],程序计算的是最长不下降子序列的长度。( )
{{ select(24) }}
- √
- ×
选择题
25. (3 分)当输入为 "6\n5 1 4 2 3 6" 时,程序的输出为( )。
{{ select(25) }}
- 3
- 4
- 5
- 6
26. (3 分)当输入为 "5\n3 1 4 1 5" 时,程序的输出为( )。
{{ select(26) }}
- 2
- 3
- 4
- 5
27. (3 分)该程序的时间复杂度为( )。
{{ select(27) }}
程序 3
#include <iostream>
using namespace std;
int func(int a, int b) {
if (b == 0) return a;
return func(b, a % b);
}
int main() {
int x, y;
cin >> x >> y;
cout << func(x, y) << endl;
return 0;
}
判断题
28. (1.5 分)该程序实现的是计算两个数的最大公约数(GCD)。( )
{{ select(28) }}
- √
- ×
29. (1.5 分)当输入为 "0 5" 时,程序的输出为 5。( )
{{ select(29) }}
- √
- ×
30. (1.5 分)函数 func 使用了递归实现,该算法也可以用循环(迭代)实现相同的功能。( )
{{ select(30) }}
- √
- ×
选择题
31. (3 分)当输入为 "48 18" 时,程序的输出为( )。
{{ select(31) }}
- 3
- 6
- 9
- 12
32. (3 分)当输入为 "100 75" 时,程序的输出为( )。
{{ select(32) }}
- 5
- 15
- 25
- 50
33. (3 分)若将函数体改为 return func(a - b, b)(假设 a > b),以下说法正确的是( )。
{{ select(33) }}
- 程序功能不变(仍计算最大公约数),但效率可能降低
- 程序功能改变,不再计算最大公约数
- 程序一定会陷入死循环
- 程序功能不变且效率更高
三、完善程序(单选题,每小题 3 分,共计 30 分)
程序 1:埃拉托斯特尼筛法(素数筛)
给定一个正整数 n,求 1 到 n 之间素数的个数。试补全程序。
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1000005;
bool isPrime[MAXN];
int main() {
int n;
cin >> n;
memset(isPrime, 1, sizeof(isPrime));
isPrime[0] = isPrime[1] = 0;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = ①; j <= n; j += ②) {
isPrime[j] = 0;
}
}
}
int cnt = 0;
for (int i = 2; i <= n; i++) {
if (③) cnt++;
}
cout << cnt << endl;
return 0;
}
34. (3 分)① 处应填( )。
{{ select(34) }}
i * ii + 12 * ii
35. (3 分)② 处应填( )。
{{ select(35) }}
1i2j
36. (3 分)③ 处应填( )。
{{ select(36) }}
isPrime[i]!isPrime[i]i > 1i % 2 == 0
37. (3 分)该算法的时间复杂度是( )。
{{ select(37) }}
38. (3 分)当 n = 30 时,程序的输出是( )。
{{ select(38) }}
- 8
- 9
- 10
- 11
程序 2:十进制转二进制
给定一个正整数 x,将其转换为二进制数并输出。要求按从高位到低位的顺序输出。试补全程序。
#include <iostream>
using namespace std;
void dec2bin(int n) {
if (n == 0) return;
①;
cout << ②;
}
int main() {
int x;
cin >> x;
if (x == 0) cout << 0;
else ③;
return 0;
}
39. (3 分)① 处应填( )。
{{ select(39) }}
dec2bin(n / 2)dec2bin(n % 2)cout << n % 2cout << n / 2
40. (3 分)② 处应填( )。
{{ select(40) }}
nn / 2n % 2n / 10
41. (3 分)③ 处应填( )。
{{ select(41) }}
dec2bin(x / 2)dec2bin(x)cout << x % 2cout << x
42. (3 分)当输入为 13 时,程序的输出为( )。
{{ select(42) }}
1011110111101001
43. (3 分)如果删除函数开头的 if (n == 0) return; 判断,当输入为 0 时会发生什么?( )
{{ select(43) }}
- 程序正常输出
0 - 程序无限递归导致栈溢出
- 程序输出空行
- 程序输出
00
Statistics
Related
In following contests: