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

  • 2302^{30}
  • 2322^{32}
  • 2342^{34}
  • 2362^{36}

6. 在 C++ 中,下列哪个不是合法的标识符(变量名)?( )

{{ select(6) }}

  • _count
  • var_1
  • 2value
  • myVar

7. 表达式 5 >> 1 的值是( )。

{{ select(7) }}

  • 1
  • 2
  • 3
  • 10

8. 在一个包含 n 个元素的有序数组中,使用二分查找算法查找某个元素的时间复杂度是( )。

{{ select(8) }}

  • O(1)O(1)
  • O(n)O(n)
  • O(logn)O(\log n)
  • O(nlogn)O(n \log n)

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

  • a3b3c3
  • abc
  • a3b3
  • aabbcc

21. (3 分)当输入字符串长度为 n,且字符串中每相邻两个字符都不相同时,输出的字符串长度约为( )。

{{ select(21) }}

  • nn
  • 2n2n
  • n/2n/2
  • logn\log n

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

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

程序 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 * i
  • i + 1
  • 2 * i
  • i

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

{{ select(35) }}

  • 1
  • i
  • 2
  • j

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

{{ select(36) }}

  • isPrime[i]
  • !isPrime[i]
  • i > 1
  • i % 2 == 0

37. (3 分)该算法的时间复杂度是( )。

{{ select(37) }}

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

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 % 2
  • cout << n / 2

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

{{ select(40) }}

  • n
  • n / 2
  • n % 2
  • n / 10

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

{{ select(41) }}

  • dec2bin(x / 2)
  • dec2bin(x)
  • cout << x % 2
  • cout << x

42. (3 分)当输入为 13 时,程序的输出为( )。

{{ select(42) }}

  • 1011
  • 1101
  • 1110
  • 1001

43. (3 分)如果删除函数开头的 if (n == 0) return; 判断,当输入为 0 时会发生什么?( )

{{ select(43) }}

  • 程序正常输出 0
  • 程序无限递归导致栈溢出
  • 程序输出空行
  • 程序输出 00