#CSP0009. CSP-J 2026 初赛模拟试卷 三

CSP-J 2026 初赛模拟试卷 三

按照您的要求,已将题目中所有使用 \(\) 包裹的数学公式全部替换为 $$,其余内容(包括选项、代码、标签等)均未改变。修改后的完整题目配置如下:


  1. 在计算机内部,传送、存储和加工处理数据或指令都是以()形式进行的。 {{ select(1) }}
  • 二进制码
  • 八进制码
  • 十进制码
  • 智能拼音码

  1. 计算机的软件系统通常分为()。 {{ select(2) }}
  • 硬件系统和软件系统
  • 高级软件和一般软件
  • 系统软件和应用软件
  • 军用软件和民用软件

  1. 关于五寸软盘读写孔,正确的说法是()。 {{ select(3) }}
  • 从该孔读信息
  • 从该孔写信息
  • 当该孔处于封住状态时,不能删除盘中文件
  • 该孔没有作用

  1. 一棵二叉树的中序遍历序列为DGBAECHF,后序遍历序列为GDBEHFCA,则前序遍历序列为()。 {{ select(4) }}
  • ABCDFGHE
  • ABDGCEFH
  • ACBGDHEF
  • ACEFHBGD

  1. 下列叙述中错误的是()。 {{ select(5) }}
  • 微机应避免置于强磁场之中
  • 微机使用时间不宜过长,而应隔几小时关机一次
  • 微机应避免频繁开关,以延长其使用寿命
  • 微机不宜长期闲置不用

  1. 计算机网络最主要的优点是()。 {{ select(6) }}
  • 运算速度快
  • 共享资源
  • 精度高
  • 存储容量大

  1. 下列4个不同进制表示的数中,最大的一个数是()。 {{ select(7) }}
  • (220.1)10(220.1)_{10}
  • (11011011.1)2(11011011.1)_{2}
  • (334.1)8(334.1)_{8}
  • (DC.1)16(DC.1)_{16}

  1. 为了区分汉字与ASCII码,计算机中汉字编码的最高位为()。 {{ select(8) }}
  • 1
  • 0
  • -1
  • 2

  1. 一般来说,在TCP/IP协议族中IP提供的服务属于()。 {{ select(9) }}
  • 运输层服务
  • 会话层服务
  • 表示层服务
  • 网络层服务

  1. 通信时,模拟信号也可以用数字信道来传输,能实现模拟信号与数字信号之间转换功能的是()。 {{ select(10) }}
  • D/A
  • A/D
  • Modem
  • Codec

  1. 一个栈的输入顺序为1,2,3,4,5,下列序列中可能是栈的输出序列的是( )。 {{ select(11) }}
  • 54312
  • 24135
  • 21543
  • 12534

  1. 不属于Internet的功能的是( )。 {{ select(12) }}
  • 聊天
  • 远程教育
  • 查询资料
  • 传送能量

  1. 下列关于计算机病毒的特性的描述中,( )不是正确的。 {{ select(13) }}
  • 潜伏性
  • 传染性
  • 高速性
  • 危害性

  1. 下面不属于网络操作系统的是( )。 {{ select(14) }}
  • UNIX
  • Windows NT
  • NetWare
  • DOS

  1. 根据《计算机软件保护条例》,中国公民开发的软件享有著作权的情形是( )。 {{ select(15) }}
  • 不论何人、何地及是否发表的软件
  • 只有公开发表的软件
  • 只有单位发表的软件
  • 只有个人在国内公开发表的软件

阅读程序(1):

#include <bits/stdc++.h>
using namespace std;
const int Maxn = 10005;
int n,b[Maxn];
void mergesort(int *a,int l,int r){
    if(l == r) return;
    int mid = (l + r) >> 1;
    mergesort(a,l,mid),mergesort(a,mid+1,r);
    int i = l, j = mid+1, cnt = 0;
    while(i <= mid && j <= r){
        if(a[i] <= a[j]) b[++cnt] = a[i++];
        else b[++cnt] = a[j++];
    }
    while(i <= mid) b[++cnt] = a[i++];
    while(j <= r) b[++cnt] = a[j++];
    for(i = l; i <= r; i++) a[i] = b[i-l+1];
}
int a[Maxn];
int main(void){
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    mergesort(a,1,n);
    for(int i = 1; i <= n; i++) cout << a[i] << (i == n ? '\n' : ' ');
    return 0;
}
  1. (1分)该算法中参数int *a采用的不是传值方式。 ( ) {{ select(16) }}
  • 正确
  • 错误

  1. (1分)该算法输出最后会换行。 ( ) {{ select(17) }}
  • 正确
  • 错误

  1. 该算法中 mergesort 函数的时间复杂度为 O(nlogn)O(n \log n) 。 ( ) {{ select(18) }}
  • 正确
  • 错误

  1. 如果输入为 5 4 3 9 7 8, 则输出为 3 4 7 8 9。 ( ) {{ select(19) }}
  • 正确
  • 错误

  1. 下列选项中与 i == n ? '\n' : ' ' 功能相同的是( )。 {{ select(20) }}
  • i != 1 ? '\n' : ' '
  • "\n "[i==n]
  • "\n "[i!=n]
  • ' '

  1. 该算法在最坏情况下的时间复杂度与( )算法相同。 {{ select(21) }}
  • 快速排序
  • 选择排序
  • 计数排序
  • 堆排序

阅读程序(2):

#include <bits/stdc++.h>
using namespace std;
int i,j,k,n,m,f[10010],p1,p2,p3;
int find(int k) {
    if(f[k] == k) return k;
    return f[k] = find(f[k]);
}
int main() {
    cin >> n >> m; //假设n,m同量级
    for(i=1; i<=n; i++) f[i] = i;
    for(i=1; i<=m; i++){
        cin >> p1 >> p2 >> p3;
        if(p1 == 1)
            f[find(p2)] = find(p3);
        if(p1 == 2){
            if(find(p2) == find(p3))
                printf("Y\n");
            else
                printf("N\n");
        }
    }
    return 0;
}
  1. 该算法中 p1 的作用是确定操作类型。 ( ) {{ select(22) }}
  • 正确
  • 错误

  1. 去掉 for (i=1; i<=n; i++) f[i] = i; 对该算法没有影响。 ( ) {{ select(23) }}
  • 正确
  • 错误

  1. 如果输入为 2 2 1 1 2 2 1 2,则输出为 Y。 ( ) {{ select(24) }}
  • 正确
  • 错误

  1. 如果输入为 2 1 2 1 2,则输出为 N。 ( ) {{ select(25) }}
  • 正确
  • 错误

  1. 该算法的时间复杂度为( )。 {{ select(26) }}
  • O(mlogn)O(m \log n)
  • O(nm)O(nm)
  • O(n+m)O(n + m)
  • O(nm2)O(nm^2)

  1. return f[k] = find(f[k]); 改成 return find(f[k]); 则最坏情况下算法的时间复杂度为( )。 {{ select(27) }}
  • O(mlogn)O(m \log n)
  • O(nm)O(nm)
  • O(n+m)O(n + m)
  • O(nm2)O(nm^2)

阅读程序(3):

#include <bits/stdc++.h>
using namespace std;
int t,x[100],a[100];
void work(int d,int i,int n){
    int k;
    if(n == 1){
        for(k=0; k<d; k++)
            printf("%3d", a[k]);
        printf("\n");
    } else for(k=i; k<t; k++)
        if(n % x[k] == 0){
            a[d] = x[k];
            work(d+1,k,n/x[k]);
        }
}
int main() {
    int i,k,n;
    cin >> n;
    for(i=n; i>1; i--)
        if(n % i == 0) x[t++]=i;
    work(0,0,n);
    return 0;
}
  1. main() 函数里的 for 循环的作用是求出 n 的所有因数。 ( ) {{ select(28) }}
  • 正确
  • 错误

  1. 该程序的作用是对 n 进行素因数分解。 ( ) {{ select(29) }}
  • 正确
  • 错误

  1. 去掉 printf("%3d", a[k]); 中的 3 对程序没有影响。 ( ) {{ select(30) }}
  • 正确
  • 错误

  1. 去掉 if (n % x[k] == 0) 对程序有影响。 ( ) {{ select(31) }}
  • 正确
  • 错误

  1. 如果输入为 2,那么输出为()。 {{ select(32) }}
  • 2
  • 21
  • 12
  • 22

  1. 如果输入为 72,那么输出的非回车字符有()。 {{ select(33) }}
  • 14
  • 15
  • 16
  • 17

完善程序(1):

#include <iostream>
using namespace std;
const int SIZE = 100;
int x[SIZE], y[SIZE], f[SIZE];
int n,i,j,max_f,ans;
int main() {
    cin >> n;
    for (i=1; i<=n; i++) cin >> x[i] >> y[i];
    max_f = 0;
    for (i=1; i<=n; i++) {
        f[i] = ①;
        for (j=1; j<=n; j++) {
            if (x[j] < x[i] && ②)
                ③;
        }
        if ④ {
            max_f = f[i];
            ⑤;
        }
    }
    for (int i=1; i<=n; i++) cout << f[i] << endl;
    cout << ans << endl;
    return 0;
}
  1. ①处应填()。 {{ select(34) }}
  • 0
  • 1
  • i
  • INT_MAX

  1. ②处应填()。 {{ select(35) }}
  • y[j] <= y[i]
  • y[j] < y[i]
  • y[j] > y[i]
  • y[j] >= y[i]

  1. ③处应填()。 {{ select(36) }}
  • ans = i
  • f[i]++
  • f[i]--
  • ans++

  1. ④处应填()。 {{ select(37) }}
  • f[i] > max_f
  • f[i] >= max_f
  • f[i] < max_f
  • f[i] <= max_f

  1. ⑤处应填()。 {{ select(38) }}
  • ans++
  • ans += max_f
  • ans = i
  • ans = max_f

完善程序(2):

#include <iostream>
#include <cstring>
using namespace std;
const int SIZE=25;
bool used[SIZE];
int data[SIZE];
int n,m,i,j,k;
bool flag;

int main() {
    cin >> n >> m;
    memset(used, false, sizeof(used));
    for(i=1; i<=m; i++){
        data[i] = i;
        used[i] = true;
    }
    flag = true;
    while (flag) {
        for(i=1; i<=m-1; i++){
            cout << data[i] << " ";
        }
        cout << data[m] << endl;
        flag = ①;
        for(i=m; i>=1; i--){
            ②;
            for(j=data[i]+1; j<=n; j++)
                if(!used[j]){
                    used[j] = true;
                    data[i] = ③;
                    flag = true;
                    break;
                }
            if(flag){
                for(k=i+1; k<=m; k++)
                    for(j=1; j<=④; j++)
                        if(!used[j]){
                            data[k] = j;
                            used[j] = true;
                            break;
                        }
                ⑤;
            }
        }
    }
    return 0;
}
  1. ①处应填()。 {{ select(39) }}
  • false
  • true
  • 1
  • -1

  1. ②处应填()。 {{ select(40) }}
  • used[i] = true
  • data[i] = i
  • used[data[i]] = true
  • used[data[i]] = false

  1. ③处应填()。 {{ select(41) }}
  • j
  • i
  • true
  • false

  1. ④处应填()。 {{ select(42) }}
  • n
  • m
  • i
  • j

  1. ⑤处应填()。 {{ select(43) }}
  • return 0
  • exit
  • continue
  • break