选择题 共15道

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15


阅读程序 共17道

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32


完善程序 共10道

33 34 35 36 37 38 39 40 41 42

E1041 2026年CSP-J模拟卷-2-练习

选择题 共15道
01 文件型病毒传染的主要对象是( )。 2分
登录后查看选项
02 24 针打印机的分辨率约为 180dpi。dpi 数越大,打印精度越高。其中单位 dpi 是指( )。 2分
登录后查看选项
03 内存地址最重要的特点是( )。 2分
登录后查看选项
04 多媒体计算机是指( )。 2分
登录后查看选项
05 最早的计算机的用途是( )。 2分
登录后查看选项
06 CPU 中( )相当于运算器中的一个存储单元,它的存取速度比存储器快得多。 2分
登录后查看选项
07 计算机软件一般指的是( )。 2分
登录后查看选项
08 操作系统在( )计算机中普遍开始应用。 2分
登录后查看选项
09 计算机中的数有浮点与定点两种,其中用浮点表示的数通常由( )组成。 2分
登录后查看选项
10 假设用一字节来表示整数,最高位用作符号位,其他位表示数值。例如,00000001 表示 +1,10000001 表示 -1。采用这种表示法的整数 A 的范围应该是( )。 2分
登录后查看选项
11 下列叙述中,正确的是( )。 2分
登录后查看选项
12 用某种排序方法对线性表 25,84,21,47,15,27,68,35,20 进行排序,节点变化如下:(1) 25,84,21,47,15,27,68,35,20; (2) 20,15,21,25,47,27,68,35,84; (3) 15,20,21,25,35,27,47,68,84; (4) 15,20,21,25,27,35,47,68,84。那么,排序方法是( )。 2分
登录后查看选项
13 如果某二叉树的前序遍历序列为 STUWVS,中序遍历序列为 UWVTS,那么该二叉树的后序遍历序列是( )。 2分
登录后查看选项
14 下列关于数据结构的叙述中,正确的是( )。 2分
登录后查看选项
15 表达式 (1 + 34) * 5 - 56/7 的后缀表达式为( )。 2分
登录后查看选项
阅读程序 共17道
16
01 #include <iostream>
02 using namespace std;
03 void hanoi(int n,char a,char b,char c) {
04     if (n == 1)
05         cout << n << " : " << a << " --> " << c << endl;
06     else {
07         hanoi(n-1, a, c, b);
08         cout << n << " : " << a << " --> " << c << endl;
09         hanoi(n-1, b, a, c);
10     }
11 }
12 int main() {
13     int n;
14     cin >> n;
15     hanoi(n, 'A', 'B', 'C');
16     return 0;
17 }

当 n >= 0 时,程序不会出现死循环。

2分
登录后查看选项
17 输出共有 2^n 行。 2分
登录后查看选项
18 当 n > 0 时,将第 4 行的 == 改为 <=,程序输出结果必定不变。 2分
登录后查看选项
19 将第 5 行的 n 改为 1,程序输出结果必定不变。 2分
登录后查看选项
20 此程序的时间复杂度是 ( )。 3分
登录后查看选项
21 若要求输出不超过 15 行,则下列 n 值中 ( ) 是合法的。 3分
登录后查看选项
22
01 #include <cstdio>
02 using namespace std;
03 #define N 1005
04 int num[N];
05 int main() {
06     int a1 = 1, n, x;
07     scanf("%d", &n);
08     num[1] = 1;
09     for (int i=1; i<=n; ++i) {
10         x = 0;
11         for (int j=1; j<=a1; ++j) {
12             num[j] = num[j] * 5 + x;
13             x = num[j] / 10;
14             num[j] %= 10;
15         }
16         if (x > 0) num[++a1] = x;
17     }
18     printf("0");
19     for (int i=a1; i<=n; ++i) putchar('0');
20     for (int i=a1; i>=1; i--) printf("%d", num[i]);
21     putchar('\n');
22     return 0;
23 }

程序输出的是 5^n 的值。

2分
登录后查看选项
23 程序执行到倒数第 3 行时,i 的值为 1。 2分
登录后查看选项
24 程序结束前,对于任意 1 <= i <= a1,都有 0 <= num[i] <= 9。 2分
登录后查看选项
25 程序输出的是一个小数,且小数末尾可能有多余的 0。 2分
登录后查看选项
26 此程序的时间复杂度是 ( )。 3分
登录后查看选项
27 若 n = 3,则输出为 ( )。 3分
登录后查看选项
28
01 #include <iostream>
02 using namespace std;
03 int l,n,m,a [50005], ans;
04 bool check(int dis) {
05     int count=0, last =0;
06     for (int i=1; i<=n+1; i++)
07         if (a[i] - last < dis) count++;
08         else last = a[i];
09     if (count > m) return 0;
10     return 1;
11 }
12 
13 int main() {
14     // 输入保证 l,n,m,a[i] 是正整数,且 a[i] 严格递增
15     cin >> l >> n >> m;
16     for (int i=1; i<=n; i++) cin >> a[i];
17     a[n+1] = l;
18     int fl = 0, fr = l;
19     while (fl <= fr) {
20         int mid = (fl + fr) / 2;
21         if (check(mid)) fl=mid+1, ans=mid;
22         else fr=mid-1;
23     }
24     cout << ans << endl;
25     return 0;
26 }

将 main() 函数中 while 之前的 fl = 0 改为 fl = 1,程序输出结果必定不变。

2分
登录后查看选项
29 程序结束前,必有 fl > fr。 2分
登录后查看选项
30 若主函数中执行 check(mid) 返回 1,则最终的 ans 小于或等于此时的 mid。 2分
登录后查看选项
31 此程序的时间复杂度是 ( )。 3分
登录后查看选项
32 若输入如下,则输出为 ( )。
25 5 2
2 11 14 17 21
3分
登录后查看选项
完善程序 共10道
33
01 #include <iostream>
02 using namespace std;
03 int main() {
04     int edges;
05     int points;
06     int dis[10];
07     int flag[10];
08     int infinity=9999999;
09     cin >> points >> edges;
10     int edg[10][10];
11     for (int i=1; i<=points; i++) {
12         for (int j=1; j<=points; j++) {
13             if (i == j) {
14                 edg[i][j] = ①;
15             } else {
16                 edg[i][j] = ②;
17             }
18         }
19     }
20     int point1, point2, quanzhi;
21     for (int i=1;i<=edges; i++) {
22         cin >> point1 >> point2 >> quanzhi;
23         edg[point1][point2] = ③;
24     }
25     for (int i=1; i<=points; i++) dis[i] = edg[1][i];
26     for (int i=1; i<=points; i++) flag[i]=0;
27     flag[1]=1;
28     int min,u;
29     for (int i=1; i<=points-1; i++) {
30         // 源点到源点不用比较,因此总的次数少一次
31         min = infinity;
32         for (int j=1; j<=points; j++) {
33             if (flag[j]==0 && dis[j]<min) {
34                 // 核心思想:依次比较出离源点最近的点
35                 min = ④;
36                 u=j;
37             }
38         }
39         flag[u] = 1;
40         for (int v=1; v<=points; v++) {
41             // 找出离源点最近的点后,更新 dis 里面的源点到各个点的值是否最小
42             if (edg[u][v] < infinity) {
43                 if (dis[v] > dis[u] + edg[u][v]) {
44                     dis[v] = ⑤;
45                 }
46             }
47         }
48     }
49     for (int i=1; i<=points; i++) cout << dis[i]<<" ";
50     cout << endl;
51     return 0;
52 }

① 处应填 ( )。

3分
登录后查看选项
34 ② 处应填 ( )。 3分
登录后查看选项
35 ③ 处应填 ( )。 3分
登录后查看选项
36 ④ 处应填 ( )。 3分
登录后查看选项
37 ⑤ 处应填 ( )。 3分
登录后查看选项
38
01 #include <iostream>
02 #include <algorithm>
03 using namespace std;
04 int main() {
05     int total_weight=10;
06     int w[6] = {0,5,4,3,2,1};
07     int v[6] = {0,1,2,3,4,5};
08     int dp[11] = { ① };
09     for (int i=1; i<=2; i++)
10         for (int j=w[i]; j<=③; j++)
11             dp[j] = ④;
12     cout << ⑤ << endl;
13     return 0;
14 }

① 处应填 ( )。

3分
登录后查看选项
39 ② 处应填 ( )。 3分
登录后查看选项
40 ③ 处应填 ( )。 3分
登录后查看选项
41 ④ 处应填 ( )。 3分
登录后查看选项
42 ⑤ 处应填 ( )。 3分
登录后查看选项