#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) }}

  • O(n)O(n)
  • O(nlogn)O(n \log n)
  • O(1)O(1)
  • O(n2)O(n^2)

8. 已知一棵二叉树的前序遍历为 A B D E C,中序遍历为 D B E A C,则其后序遍历为( )。

{{ select(8) }}

  • D B E C A
  • D E B A C
  • D E B C A
  • E 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) }}

  • 2var
  • my-var
  • _count
  • int

13. 在包含 1000 个元素的有序数组中用二分查找法查找某个元素,最多需要比较( )次。

{{ select(13) }}

  • 8
  • 9
  • 10
  • 11

14. 5 个不同的元素排成一圈,共有( )种不同的排列方式。

{{ select(14) }}

  • 12
  • 24
  • 48
  • 120

15. 以下哪个不是 C++ 中的数据类型?( )

{{ select(15) }}

  • int
  • char
  • real
  • bool

二、阅读程序

程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×;除特殊说明外,判断题 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) }}

  • O(n)O(n)
  • O(n2)O(n^2)
  • O(2n)O(2^n)
  • O(logn)O(\log n)

程序 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 < right
  • left <= right
  • left != right
  • left >= right

35. (3 分)② 处应填( )。

{{ select(35) }}

  • (left + right) / 2
  • (left + right) * 2
  • left + right
  • right - left

36. (3 分)③ 处应填( )。

{{ select(36) }}

  • mid
  • mid + 1
  • mid - 1
  • left + 1

37. (3 分)④ 处应填( )。

{{ select(37) }}

  • mid
  • mid + 1
  • mid - 1
  • right - 1

38. (3 分)⑤ 处应填( )。

{{ select(38) }}

  • ans
  • left
  • right
  • mid

程序 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) }}

  • O(n)O(n)
  • O(logn)O(\log n)
  • O(1)O(1)
  • O(n2)O(n^2)

43. (3 分)若将 ① 处改为 sum[i - 1] + a[i - 1],当 a = {1, 2, 3},询问 l = 2, r = 3 时,程序的输出为( )。

{{ select(43) }}

  • 5
  • 3
  • 6
  • 1