#3241. CSP-J 第一轮 入门级 C++ 语言试题(模拟卷 C)
CSP-J 第一轮 入门级 C++ 语言试题(模拟卷 C)
2026 CCF CSP-J 第一轮 入门级 C++ 语言试题(模拟卷 C)
一、单项选择题(共15题,每题2分,共计30分)
1. 十六进制数 2B 转换为二进制数,结果是( )。
{{ select(1) }}
- 10101011
- 101011
- 1010111
- 10101
2. 将十进制数 255 转换为二进制数,结果是( )。
{{ select(2) }}
- 1111111
- 10000000
- 11111111
- 11111110
3. 某班有 5 名男生和 4 名女生,现要从中选出 3 人组成小组,要求小组中至少有 1 名女生。问有多少种不同的选法?( )
{{ select(3) }}
- 70
- 80
- 74
- 84
4. 已知字符 'A' 的 ASCII 码为 65,'0' 的 ASCII 码为 48,则字符 '9' 的 ASCII 码是( )。
{{ select(4) }}
- 54
- 57
- 55
- 56
5. 在 C++ 中,表达式 (5 > 3) && !(2 > 1) 的值是( )。
{{ select(5) }}
- true
- 0
- false
- 1
6. 以下哪种数据结构具有"先进先出"(FIFO)的特性?( )
{{ select(6) }}
- 栈
- 数组
- 二叉树
- 队列
7. 对 n 个元素进行插入排序,最坏情况下的时间复杂度为( )。
{{ select(7) }}
8. 已知一棵二叉树的前序遍历为 A B D E C,中序遍历为 D B E A C,则其后序遍历为( )。
{{ select(8) }}
D B E C AD E B A CD E B C AE D B C A
9. 在 C++ 中,sizeof(char) 的值是( )。
{{ select(9) }}
- 2
- 1
- 4
- 8
10. 一个具有 8 个顶点的无向完全图共有( )条边。
{{ select(10) }}
- 28
- 36
- 56
- 64
11. 入栈序列为 1, 2, 3, 4,以下哪个可能是合法的出栈序列?( )
{{ select(11) }}
- 2, 1, 4, 3
- 3, 1, 2, 4
- 4, 3, 1, 2
- 1, 4, 2, 3
12. 在 C++ 中,以下哪个是合法的变量名?( )
{{ select(12) }}
2varmy-var_countint
13. 在包含 1000 个元素的有序数组中用二分查找法查找某个元素,最多需要比较( )次。
{{ select(13) }}
- 8
- 9
- 10
- 11
14. 5 个不同的元素排成一圈,共有( )种不同的排列方式。
{{ select(14) }}
- 12
- 24
- 48
- 120
15. 以下哪个不是 C++ 中的数据类型?( )
{{ select(15) }}
intcharrealbool
二、阅读程序
程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分。
程序 1
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
int n = s.length();
bool flag = true;
for (int i = 0; i < n / 2; i++) {
if (s[i] != s[n - 1 - i]) {
flag = false;
break;
}
}
if (flag) cout << "YES" << endl;
else cout << "NO" << endl;
return 0;
}
判断题
16. (1.5 分)该程序用于判断输入的字符串是否为回文字符串。( )
{{ select(16) }}
- √
- ×
17. (1.5 分)当输入为 "abcba" 时,程序的输出为 "YES"。( )
{{ select(17) }}
- √
- ×
18. (1.5 分)当输入为 "abccba" 时,程序的输出为 "NO"。( )
{{ select(18) }}
- √
- ×
19. (1.5 分)若将 flag 的初值改为 false,当输入为回文字符串时,程序输出仍为 "YES"。( )
{{ select(19) }}
- √
- ×
选择题
20. (3 分)当输入为 "level" 时,程序的输出为( )。
{{ select(20) }}
- YES
- NO
- level
- 编译错误
21. (3 分)若输入的字符串长度为 n,则程序中的循环最多执行( )次。
{{ select(21) }}
- n
- n / 2
- n - 1
- 2n
程序 2
#include <iostream>
using namespace std;
int fib(int n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
int main() {
int n;
cin >> n;
cout << fib(n) << endl;
return 0;
}
判断题
22. (1.5 分)该程序使用递归方式计算斐波那契数列的第 n 项(约定 f(0) = 0,f(1) = 1)。( )
{{ select(22) }}
- √
- ×
23. (1.5 分)当输入为 6 时,程序的输出为 8。( )
{{ select(23) }}
- √
- ×
24. (1.5 分)当输入为 0 时,程序的输出为 0。( )
{{ select(24) }}
- √
- ×
选择题
25. (3 分)当输入为 10 时,程序的输出为( )。
{{ select(25) }}
- 34
- 55
- 89
- 144
26. (3 分)若将函数第 3 行的 return n 改为 return 1,当输入为 2 时,程序的输出为( )。
{{ select(26) }}
- 1
- 2
- 3
- 4
27. (3 分)该程序的时间复杂度为( )。
{{ select(27) }}
程序 3
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
cout << rev << endl;
return 0;
}
判断题
28. (1.5 分)该程序的功能是将整数 n 的各个数字顺序反转后输出。( )
{{ select(28) }}
- √
- ×
29. (1.5 分)当输入为 1234 时,程序的输出为 4321。( )
{{ select(29) }}
- √
- ×
30. (1.5 分)当输入为 100 时,程序的输出为 1。( )
{{ select(30) }}
- √
- ×
选择题
31. (3 分)当输入为 12030 时,程序的输出为( )。
{{ select(31) }}
- 321
- 3021
- 30201
- 1203
32. (3 分)当输入为 0 时,程序的输出为( )。
{{ select(32) }}
- 1
- 0
- 空
- 无法确定
33. (3 分)若将循环条件改为 while (n >= 0),当输入为正整数时,程序将( )。
{{ select(33) }}
- 正常输出结果
- 无限循环
- 编译错误
- 输出 0
三、完善程序(单选题,每小题 3 分,共计 30 分)
程序 1:二分查找
给定一个长度为 n 的升序排列的整数数组 a 和一个整数 x,查找 x 在数组中的位置(下标从 1 开始)。若 x 不存在,输出 -1。试补全程序。
#include <iostream>
using namespace std;
const int MAXN = 100005;
int a[MAXN];
int main() {
int n, x;
cin >> n >> x;
for (int i = 1; i <= n; i++) cin >> a[i];
int left = 1, right = n, ans = -1;
while (①) {
int mid = ②;
if (a[mid] == x) {
ans = mid;
break;
} else if (a[mid] < x) {
left = ③;
} else {
right = ④;
}
}
cout << ⑤ << endl;
return 0;
}
34. (3 分)① 处应填( )。
{{ select(34) }}
left < rightleft <= rightleft != rightleft >= right
35. (3 分)② 处应填( )。
{{ select(35) }}
(left + right) / 2(left + right) * 2left + rightright - left
36. (3 分)③ 处应填( )。
{{ select(36) }}
midmid + 1mid - 1left + 1
37. (3 分)④ 处应填( )。
{{ select(37) }}
midmid + 1mid - 1right - 1
38. (3 分)⑤ 处应填( )。
{{ select(38) }}
ansleftrightmid
程序 2:前缀和(区间求和)
给定长度为 n 的整数数组 a 和 m 次询问,每次询问区间 [l, r] 内所有元素之和。试补全程序。
#include <iostream>
using namespace std;
const int MAXN = 100005;
int a[MAXN], sum[MAXN];
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
sum[i] = ①;
}
while (m--) {
int l, r;
cin >> l >> r;
cout << ② << endl;
}
return 0;
}
39. (3 分)① 处应填( )。
{{ select(39) }}
sum[i] + a[i]sum[i - 1] + a[i]sum[i - 1] + a[i - 1]a[i]
40. (3 分)② 处应填( )。
{{ select(40) }}
sum[r] - sum[l]sum[r - 1] - sum[l - 1]sum[r] - sum[l - 1]sum[l] + sum[r]
41. (3 分)当 n = 5,数组 a = {1, 2, 3, 4, 5},询问 l = 2, r = 4 时,程序的输出为( )。
{{ select(41) }}
- 8
- 9
- 10
- 12
42. (3 分)该算法单次询问的时间复杂度为( )。
{{ select(42) }}
43. (3 分)若将 ① 处改为 sum[i - 1] + a[i - 1],当 a = {1, 2, 3},询问 l = 2, r = 3 时,程序的输出为( )。
{{ select(43) }}
- 5
- 3
- 6
- 1
Statistics
Related
In following contests: