普及组 CSP - J 2026 初赛模拟卷 3

一、单项选择题(共15题,每题两分)


  1. A。在计算机内部,所有的数据存储、传送和加工处理都必须转化为二进制码的形式进行。

  2. C。计算机软件系统在结构上最经典的分类是划分为系统软件(如操作系统)和应用软件(如各类具体功能软件)。

  3. C。早期的5.25英寸(五寸)软盘边缘有一个读写保护孔(写保护口),当该孔被封住(覆盖)时,处于写保护状态,只能读取信息,不能写入或删除盘中文件。

  4. B。考察二叉树遍历,过程如下:

  5. B。微机(个人计算机)不宜长期闲置不用,应避免强磁场,也应避免频繁开关机以延长寿命,但“应隔几小时关机一次”是错误的,正常运行的微机无需数小时强制关机一次。

  6. B。计算机网络建立的最本质目的与最主要的优点就是实现软硬件及数据的共享资源。

  7. C。将各选项转化为十进制进行比较:A为 220.1;B为 128+64+16+8+2+1+0.5=219.5128+64+16+8+2+1 + 0.5 = 219.5128+64+16+8+2+1+0.5=219.5;C为 3×64+3×8+4+0.125=220.1253 \times 64 + 3 \times 8 + 4 + 0.125 = 220.1253×64+3×8+4+0.125=220.125;D为 13×16+12+1/16=220.062513 \times 16 + 12 + 1/16 = 220.062513×16+12+1/16=220.0625。最大的是C选项。

  8. A。为了与标准 ASCII 码(最高位为 0)进行区分,计算机中汉字机内码的每个字节最高位均设为 1。

  9. D。在 TCP/IP 协议族中,IP(网际协议)负责数据包的路由和转发,属于网络层服务。

  10. C。Modem(调制解调器)的核心功能就是实现模拟信号(调制)与数字信号(解调)之间的相互转换,以利用模拟信道传输数字信息。四个选项的区别如下:
    A/D(模数转换) & D/A(数模转换):

    • 定位:最底层的信号物理量转换模块。
    • 功能:
      • A/D(Analog-to-Digital,ADC): 把连续变化的模拟信号(如声音电压、温度)采样、量化并转化为离散的二进制数字信号(0 和 1)。
      • D/A(Digital-to-Analog,DAC): 把离散的数字信号还原为连续变化的模拟电压/电流信号。
    • 关键指标:采样率(如 192kHz)、量化位数(如 24-bit)。

    Modem (调制解调器):

    • 定位:通信系统中的信道传输与信号调制设备/芯片。
    • 功能:解决数字数据如何在模拟信道或高频无线信道中长距离传输的问题。
      • 调制(Modulation):将数字数据(0/1)叠加到高频载波(如电磁波、光信号)上。
      • 解调(Demodulation):从接收到的高频载波中提取原始数字数据。
    • 核心组成:内部底层包含了 A/D 和 D/A 模块,用于完成基带数字信号与高频模拟射频信号之间的相互转换。

    Codec (编解码器):

    • 定位:数据处理层面的逻辑单元,包含硬件芯片或软件算法。
    • 功能:解决数据的存储体积、传输带宽与协议对接问题。
      • Coder(编码):将原始模拟信号或未压缩数字数据转换为特定格式(通常伴随数据压缩),如将原始音频压缩为 MP3,或将视频压缩为 H.264。
      • Decoder(解码):将特定格式的数据解压缩并恢复为可直接处理或播放的数据流。
    • 两种存在形态:
      • 硬件 Codec:集成了 A/D、D/A、DSP 及总线接口(如 I2S/PCIe)的独立 IC 芯片(如板载声卡芯片 Realtek ALC)。
      • 软件 Codec:纯算法代码库(如 FFmpeg 内置的各种音视频解码器)。
  11. C。对于输入顺序 1, 2, 3, 4, 5,栈的输出必须满足“后进先出”原则。选项C中,1进,2进,2出,1出,3进,4进,5进,5出,4出,3出,合法输出序列为 21543。

  12. D。Internet 可以进行信息交流(聊天、远程教育、查询资料),但无法进行物理上的“传送能量”。

  13. C。计算机病毒的常见特性包括传染性、潜伏性、破坏性(危害性)等,但“高速性”并非计算机病毒的特性。

  14. D。UNIX、Windows NT、NetWare 均为经典的、支持多用户和网络功能的网络操作系统,而 DOS 是单用户单任务操作系统,不属于网络操作系统。

  15. A。根据《计算机软件保护条例》,中国公民、法人或者其他组织对其所开发的软件,不论是否发表,不论在何地,自动享有著作权。

二、阅读程序(除特例外,判断题每题2分,选择题每题3分)


  1. √。参数 int *a 传递的是数组首地址的指针,等效于传址调用,故“不是传值方式(不发生数组数据的拷贝)”表述正确。

  2. √。代码 cout << a[i] << (i==n? '\n':' '); 的逻辑是,当输出到最后一个元素(即 i == n)时,输出换行符 \n ,因此最后会换行。

  3. √。该程序实现的是标准的归并排序(mergesort),其时间复杂度在任何情况下均为 O(nlog⁡n)O(n \log n)O(nlogn)
    归并排序核心逻辑

    • 递归拆分: 算法通过计算中间点 mid = l + r >> 1,将当前需要排序的数组区间 [l, r] 拆分为左右两半,并通过递归调用 mergesort 继续对子区间进行拆分。当区间收敛到只有一个元素(即 l == r)时,递归终止。
    • 双指针合并: 算法利用两个指针 ij 分别扫描拆分后的左右两个有序子区间,通过比较 a[i] <= a[j] 的大小,将较小的元素按顺序存入预先定义的辅助数组 b 中。
    • 残余处理与数据回写: 当其中一个子区间的数据全部存入辅助数组后,利用 while 循环将另一个子区间剩余的所有元素直接追加到辅助数组 b 的末尾。最后,通过 for 循环将辅助数组 b 中已经排序好的数据,覆盖回原数组 a 的对应区间内。
  4. √。根据输入逻辑,cin >> n; 读入 5 为数组长度,随后读入数组 4 3 9 7 8。经过归并排序后,数组变为有序,输出为 3 4 7 8 9

  5. C。原逻辑为:若 i==n 为真,取 '\n';若为假,取 ' '。选项 C "\n "[i!=n] 的逻辑是:如果 i!=n 为真(值为1),则取字符串下标为 1 的字符(空格);如果 i!=n 为假(即 i==n,值为0),则取字符串下标为 0 的字符(换行)。两者逻辑完全一致。

  6. D。归并排序的最坏时间复杂度为 O(nlog⁡n)O(n \log n)O(nlogn)。四个选项中:快速排序最坏为 O(n2)O(n^2)O(n2),选择排序最坏为 O(n2)O(n^2)O(n2),计数排序不属于比较排序,堆排序的最坏时间复杂度也为 O(nlog⁡n)O(n \log n)O(nlogn),与归并排序相同。



  1. √。程序中 p1 == 1 执行合并操作,p1 == 2 执行查询操作,因此 p1 用于确定操作类型。
  2. X。for(i=1; i<=n; i++) f[i]=i; 是并查集必须的初始化步骤。
  3. √。输入 2 2 (n=2, m=2),第一步操作 1 1 2 将 1 和 2 合并;第二步操作 2 1 2 查询 1 和 2 是否在同一集合,结果为真,输出 Y
  4. √。输入 2 1 (n=2, m=1),只有一步查询操作 2 1 2。由于初始状态未合并,1 和 2 不在同一集合,输出 N
  5. A。n和m同量级,代码中存在递归和循环,时间复杂度便为O(mlog⁡n)O(m \log n)O(mlogn)
  6. B。此操作去除了路径压缩优化。每次查询需要 O(n)O(n)O(n) 时间,m 次操作的总时间复杂度退化为 O(nm)O(nm)O(nm)


  1. X。主函数中的 for (i=n; i>1; i--) 循环仅求出了 n 范围在 2到n 内的因数,忽略了 1 这个因数(为了避免递归死循环)。
  2. 该程序的实际作用是输出所有的将 n 分解为若干个大于 1 的整数的乘积的组合方式,不只有素因数。
  3. X。printf("%3d", a[k]); 中的 3 用于控制输出场宽为 3 位右对齐,若去掉则输出数字将紧贴在一起,与原输出不符。
  4. √。若去掉 if (n % x[k] == 0),则无论当前数是否为因数,程序都会强制向下递归并执行整除,改变了程序的逻辑。
  5. A。当输入 2 时,求得因数数组仅有 x[0] = 2。调用 函数后,满足条件直接打印 2。
  6. C。题目本质上求 72 能够分解为非递增因子乘积的方案数。通过计算,包含:(72), (36,2), (24,3), (18,4), (18,2,2), (12,6), (12,3,2), (9,8), (9,4,2), (9,2,2,2), (8,3,3), (6,6,2), (6,4,3), (6,3,2,2), (4,3,3,2), (3,3,2,2,2),共计 16 种方案换 16 次行。

三、完善程序(每小题 3 分)


  1. A。计算每个点前需要将当前点的计数器 f[i] 初始化为0。
  2. B。题目定义左下方的点为x、y坐标都比它小的点。前面已有 x[j]<x[i],所以应为y[j] < y[i]
  3. B。若满足点 j 在点 i 的左下方,则点 i 的战斗力应增加,即 f[i]++。
  4. B。打擂台找最大值,若有若干个点战斗力相同则输出编号最大的,所以是 (f[i]>=max_f) 遍历过去就是编号最大的。
  5. C。题目还需要记录当前最高点的编号 i,即 ans = i


  1. A。要初始化 flag,通过 29 行的 flag = trueflag 初始化结果应为 false
  2. D。初始化操作标记为未使用。
  3. A。当前循环在查找下一个大于当前数字且未被使用的数字,找到后应赋值给当前位置。
  4. A。遍历1到n的区间
  5. 题目位置貌似不对
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐