选择题 共15道
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15阅读程序 共18道
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33完善程序 共10道
34 35 36 37 38 39 40 41 42 43E1045 2026年CSP-J模拟卷-3-练习
选择题 共15道
01 在计算机内部,传送、存储和加工处理数据或指令都是以( )形式进行的。 2分
登录后查看选项
02 计算机的软件系统通常分为( )。 2分
登录后查看选项
03 关于五寸软盘读写孔,正确的说法是( )。 2分
登录后查看选项
04 一棵二叉树的中序遍历序列为 DGBAECHF,后序遍历序列为 GDBEHFCA,则前序遍历序列为( )。 2分
登录后查看选项
05 下列叙述中错误的是( )。 2分
登录后查看选项
06 计算机网络最主要的优点是( )。 2分
登录后查看选项
07 下列 4 个不同进制表示的数中,最大的一个数是( )。 2分
登录后查看选项
08 为了区分汉字与 ASCII 码,计算机中汉字编码的最高位为( )。 2分
登录后查看选项
09 一般来说,在 TCP/IP 协议族中 IP 提供的服务属于( )。 2分
登录后查看选项
10 通信时,模拟信号也可以用数字信道来传输,能实现模拟信号与数字信号之间转换功能的是( )。 2分
登录后查看选项
11 一个栈的输入顺序为 1, 2, 3, 4, 5,下列序列中可能是栈的输出序列的是( )。 2分
登录后查看选项
12 不属于 Internet 的功能的是( )。 2分
登录后查看选项
13 下列关于计算机病毒的特性的描述中,( )不是正确的。 2分
登录后查看选项
14 下面不属于网络操作系统的是( )。 2分
登录后查看选项
15 根据《计算机软件保护条例》,中国公民开发的软件享有著作权的情形是( )。 2分
登录后查看选项
阅读程序 共18道
16
01 #include <bits/stdc++.h>
02 using namespace std;
03 const int Maxn = 10005;
04 int n, b[Maxn];
05 void mergesort(int *a, int l, int r) {
06 if (l == r) return;
07 int mid = l + r >> 1;
08 mergesort(a, l, mid), mergesort(a, mid + 1, r);
09 int i = l, j = mid + 1, cnt = 0;
10 while (i <= mid && j <= r) {
11 if (a[i] <= a[j]) b[++cnt] = a[i++];
12 else b[++cnt] = a[j++];
13 }
14 while (i <= mid) b[++cnt] = a[i++];
15 while (j <= r) b[++cnt] = a[j++];
16 for (i = l; i <= r; i++) a[i] = b[i - l + 1];
17 }
18
19 int a[Maxn];
20 int main(void) {
21 cin >> n;
22 for (int i = 1; i <= n; i++) cin >> a[i];
23 mergesort(a, 1, n);
24 for (int i = 1; i <= n; i++) cout << a[i] << (i == n ? '\n' : ' ');
25 return 0;
26 }
该算法中参数 int *a 采用的不是传值方式。
2分
01 #include <bits/stdc++.h>
02 using namespace std;
03 const int Maxn = 10005;
04 int n, b[Maxn];
05 void mergesort(int *a, int l, int r) {
06 if (l == r) return;
07 int mid = l + r >> 1;
08 mergesort(a, l, mid), mergesort(a, mid + 1, r);
09 int i = l, j = mid + 1, cnt = 0;
10 while (i <= mid && j <= r) {
11 if (a[i] <= a[j]) b[++cnt] = a[i++];
12 else b[++cnt] = a[j++];
13 }
14 while (i <= mid) b[++cnt] = a[i++];
15 while (j <= r) b[++cnt] = a[j++];
16 for (i = l; i <= r; i++) a[i] = b[i - l + 1];
17 }
18
19 int a[Maxn];
20 int main(void) {
21 cin >> n;
22 for (int i = 1; i <= n; i++) cin >> a[i];
23 mergesort(a, 1, n);
24 for (int i = 1; i <= n; i++) cout << a[i] << (i == n ? '\n' : ' ');
25 return 0;
26 }
登录后查看选项
17 该算法输出最后会换行。 2分
登录后查看选项
18 该算法中 mergesort 函数的时间复杂度为 O(nlog n)。 2分
登录后查看选项
19 如果输入为 5 4 3 9 7 8,则输出为 3 4 7 8 9。 2分
登录后查看选项
20 下列选项中与 i==n ? '\n' : ' ' 功能相同的是 ( )。 2分
登录后查看选项
21 该算法在最坏情况下的时间复杂度与 ( ) 算法相同。 2分
登录后查看选项
22
01 #include <bits/stdc++.h>
02 using namespace std;
03 int i, j, k, n, m, f[10010], p1, p2, p3;
04 int find(int k) {
05 if (f[k] == k) return k;
06 return f[k] = find(f[k]);
07 }
08 int main() {
09 cin >> n >> m; // 假设 n, m 同量级
10 for (i = 1; i <= n; i++) f[i] = 1;
11 for (i = 1; i <= m; i++) {
12 cin >> p1 >> p2 >> p3;
13 if (p1 == 1)
14 f[find(p2)] = find(p3);
15 if (p1 == 2) {
16 if (find(p2) == find(p3))
17 printf("Y\n");
18 else
19 printf("N\n");
20 }
21 }
22 return 0;
23 }
该算法中 p1 的作用是确定操作类型。
2分
01 #include <bits/stdc++.h>
02 using namespace std;
03 int i, j, k, n, m, f[10010], p1, p2, p3;
04 int find(int k) {
05 if (f[k] == k) return k;
06 return f[k] = find(f[k]);
07 }
08 int main() {
09 cin >> n >> m; // 假设 n, m 同量级
10 for (i = 1; i <= n; i++) f[i] = 1;
11 for (i = 1; i <= m; i++) {
12 cin >> p1 >> p2 >> p3;
13 if (p1 == 1)
14 f[find(p2)] = find(p3);
15 if (p1 == 2) {
16 if (find(p2) == find(p3))
17 printf("Y\n");
18 else
19 printf("N\n");
20 }
21 }
22 return 0;
23 }
登录后查看选项
23 去掉 for (i=1; i<=n; i++) f[i] = 1; 对该算法没有影响。 2分
登录后查看选项
24 如果输入为 2 2 1 1 2 2 1 2,则输出为 Y。 2分
登录后查看选项
25 如果输入为 2 1 2 1 2,则输出为 N。 2分
登录后查看选项
26 该算法的时间复杂度为 ( )。 3分
登录后查看选项
27 把 return f[k] = find(f[k]); 改成 return find(f[k]);,则最坏情况下算法的时间复杂度为 ( )。 3分
登录后查看选项
28
01 #include <bits/stdc++.h>
02 using namespace std;
03 int t, x[100], a[100];
04 void work(int d, int i, int n) {
05 int k;
06 if (n == 1) {
07 for (k = 0; k < d; k++)
08 printf("%3d", a[k]);
09 printf("\n");
10 } else for (k = i; k < t; k++) {
11 if (n % x[k] == 0) {
12 a[d] = x[k];
13 work(d + 1, k, n / x[k]);
14 }
15 }
16 }
17 int main() {
18 int i, k, n;
19 cin >> n;
20 for (i = n; i > 1; i--)
21 if (n % i == 0) x[t++] = i;
22 work(0, 0, n);
23 return 0;
24 }
main() 函数里的 for 循环的作用是求出 n 的所有因数。
2分
01 #include <bits/stdc++.h>
02 using namespace std;
03 int t, x[100], a[100];
04 void work(int d, int i, int n) {
05 int k;
06 if (n == 1) {
07 for (k = 0; k < d; k++)
08 printf("%3d", a[k]);
09 printf("\n");
10 } else for (k = i; k < t; k++) {
11 if (n % x[k] == 0) {
12 a[d] = x[k];
13 work(d + 1, k, n / x[k]);
14 }
15 }
16 }
17 int main() {
18 int i, k, n;
19 cin >> n;
20 for (i = n; i > 1; i--)
21 if (n % i == 0) x[t++] = i;
22 work(0, 0, n);
23 return 0;
24 }
登录后查看选项
29 该程序的作用是对 n 进行素因数分解。 2分
登录后查看选项
30 去掉printf("%3d",a[k]);中的3,对程序没有影响。 2分
登录后查看选项
31 去掉 if (n % x[k] == 0) 对程序有影响。 2分
登录后查看选项
32 如果输入为 2,那么输出为 ( )。 3分
登录后查看选项
33 如果输入为 72,那么输出的非回车字符有 ( ) 行。 3分
登录后查看选项
完善程序 共10道
34
01 #include <iostream>
02 using namespace std;
03 const int SIZE = 100;
04 int x[SIZE], y[SIZE], f[SIZE];
05 int n, i, j, max_f, ans;
06 int main() {
07 cin >> n;
08 for (i = 1; i <= n; i++) cin >> x[i] >> y[i];
09 max_f = 0;
10 for (i = 1; i <= n; i++) {
11 f = ①;
12 for (j = 1; j <= n; j++) {
13 if (x[j] < x[i] && ②)
14 ③;
15 }
16 if ④ {
17 max_f = f[i];
18 ⑤;
19 }
20 }
21 for (int i=1; i<=n; i++) cout << f[i] << endl;
22 cout << ans << endl;
23 return 0;
24 }
① 处应填 ( )。
3分
01 #include <iostream>
02 using namespace std;
03 const int SIZE = 100;
04 int x[SIZE], y[SIZE], f[SIZE];
05 int n, i, j, max_f, ans;
06 int main() {
07 cin >> n;
08 for (i = 1; i <= n; i++) cin >> x[i] >> y[i];
09 max_f = 0;
10 for (i = 1; i <= n; i++) {
11 f = ①;
12 for (j = 1; j <= n; j++) {
13 if (x[j] < x[i] && ②)
14 ③;
15 }
16 if ④ {
17 max_f = f[i];
18 ⑤;
19 }
20 }
21 for (int i=1; i<=n; i++) cout << f[i] << endl;
22 cout << ans << endl;
23 return 0;
24 }
登录后查看选项
35 ② 处应填 ( )。 3分
登录后查看选项
36 ③ 处应填 ( )。 3分
登录后查看选项
37 ④ 处应填 ( )。 3分
登录后查看选项
38 ⑤ 处应填 ( )。 3分
登录后查看选项
39
01 #include <iostream>
02 #include <cstring>
03 using namespace std;
04 const int SIZE=25;
05 bool used[SIZE];
06 int data[SIZE];
07 int n, m, i, j, k;
08 bool flag;
09
10 int main() {
11 cin >> n >> m;
12 memset(used, false, sizeof(used));
13 for (i=1; i<=m; i++) {
14 data[i] = i;
15 used[i] = true;
16 }
17 flag = true;
18 while (flag) {
19 for (i=1; i<=m-1; i++)
20 cout << data[i] << " ";
21 cout << data[m] << endl;
22 flag = ①;
23 for (i=m; i>=1; i--) {
24 ②;
25 for (j=data[i]+1; j<=n; j++)
26 if (!used[j]) {
27 used[j] = true;
28 data[i] = ③;
29 flag = true;
30 break;
31 }
32 if (flag) {
33 for (k=i+1; k<=m; k++)
34 for (j=1; j<= ④; j++)
35 if (!used[j]) {
36 data[k] = j;
37 used[j] = true;
38 break;
39 }
40 ⑤;
41 }
42 }
43 }
44 return 0;
45 }
① 处应填 ( )。
3分
01 #include <iostream>
02 #include <cstring>
03 using namespace std;
04 const int SIZE=25;
05 bool used[SIZE];
06 int data[SIZE];
07 int n, m, i, j, k;
08 bool flag;
09
10 int main() {
11 cin >> n >> m;
12 memset(used, false, sizeof(used));
13 for (i=1; i<=m; i++) {
14 data[i] = i;
15 used[i] = true;
16 }
17 flag = true;
18 while (flag) {
19 for (i=1; i<=m-1; i++)
20 cout << data[i] << " ";
21 cout << data[m] << endl;
22 flag = ①;
23 for (i=m; i>=1; i--) {
24 ②;
25 for (j=data[i]+1; j<=n; j++)
26 if (!used[j]) {
27 used[j] = true;
28 data[i] = ③;
29 flag = true;
30 break;
31 }
32 if (flag) {
33 for (k=i+1; k<=m; k++)
34 for (j=1; j<= ④; j++)
35 if (!used[j]) {
36 data[k] = j;
37 used[j] = true;
38 break;
39 }
40 ⑤;
41 }
42 }
43 }
44 return 0;
45 }
登录后查看选项
40 ② 处应填 ( )。 3分
登录后查看选项
41 ③ 处应填 ( )。 3分
登录后查看选项
42 ④ 处应填 ( )。 3分
登录后查看选项
43 ⑤ 处应填 ( )。 3分
登录后查看选项