#2207. CSP-X 2025年江西小学组初赛真题

CSP-X 2025年江西小学组初赛真题

2025年JXCSP-X第一轮认证

2025 江西省非专业级别软件能力认证第一轮

(JXCSP-X) 小学组 C++语言试题

认证时间:2025 年 9 月 20 日 14:30~16:30

考生注意事项:

  • 试题纸共有 11 页,满分 100 分。请在答题卡作答,写在试题纸上的一律无效。
  • 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。

一、单项选择题(共 15 题,每题2 分,共计 30 分;每题有且仅有一个正确选项)

  1. 近年来,中国的人工智能技术飞速发展,在前沿语言模型和推理模型的研发上取得了显著进展。国内各项尖AI实验室陆续推出了多款高性能模型,DeepSeek的RI模型的涌现更显示出中国在AI技术研发方面的快速追赶。下列名人中,被称为“人工智能之父”的是?( )

{{ select(1) }}

  • 埃隆·马斯克
  • 约翰·冯·诺依曼
  • 艾伦·图灵
  • 戈登.摩尔
  1. 下列不属于计算机输入设备的是?( )

{{ select(2) }}

  • 扫描仪
  • 键盘
  • 显示器
  • 麦克风
  1. 计算机系统中通常使用 B 来表示基本存储单位,它的全拼是( )。

{{ select(3) }}

  • Bit
  • Byte
  • Bug
  • Billion
  1. 以下不可以作为 C++标识符的是( )。

{{ select(4) }}

  • JX2025
  • JXCSPX
  • 2025CSPX
  • CSPX_2025
  1. 以下哪个不是 C++中的选择语句?

{{ select(5) }}

  • switch...case
  • if
  • if-else
  • for
  1. 在下列排序算法中,不稳定的排序算法是( )。

{{ select(6) }}

  • 归并排序
  • 插入排序
  • 冒泡排序
  • 选择排序
  1. 十进制数 95 转换为二进制数的结果为( )。

{{ select(7) }}

  • 01011101
  • 01011111
  • 01101101
  • 01010111
  1. 下面C++代码段执行后的输出是( )。
int a = 15;
int b = 12;
if (a % 2 == 0 && b % 2 == 0){
    cout << "都是偶数";
}
else if(a % 2 == 1 && b % 2 == 1){
    cout << "都是奇数";
}
else{
    cout << "一个是偶数一个是奇数";
}

{{ select(8) }}

  • 都是偶数
  • 都是奇数
  • 一个是偶数一个是奇数
  • 一个是奇数一个是偶数
  1. 下面C++代码段执行后的输出结果是( )。
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
for(int i = 0 ; i < 3 ; i++){
    for(int j = 2 ; j >= 0 ; j--){
        cout << a[i][j] << " ";
    }
    cout << endl;
}

{{ select(9) }}

  • 1 2 3
    4 5 6
    7 8 9
  • 4 5 6
    3 2 1
    7 8 9
  • 3 2 1
    6 5 4
    9 8 7
  • 9 8 7
    6 5 4
    3 2 1
  1. 下列运算符中,优先级最高的是( )。

{{ select(10) }}

  • &&
  • *
  • ||
  • !
  1. 执行下列的C++代码段,当x=6时,函数的返回值为( )。
int cal(int x){
    if(x==0||x==1||x==2){
        return 1;
    }
    else{
        return cal(x-1)+cal(x-2)+cal(x-3);
    }
}

{{ select(11) }}

  • 15
  • 16
  • 17
  • 18
  1. 已知一棵完全二叉树有 12 个节点,那么这棵树的高度是( )。

{{ select(12) }}

  • 3
  • 5
  • 6
  • 4
  1. 考虑下图所示的有向图,入度最大的结点为( )号结点。

{{ select(13) }}

  • V3
  • V6
  • V1
  • V8
  1. 教室的图书角里有5本不同的故事书和4本不同的漫画书。有位同学想要从图书角中选出2本书来阅读,要求至少选1本故事书。请问该同学一共有多少种不同的选法?( )。

{{ select(14) }}

  • 20
  • 26
  • 30
  • 36
  1. 一个三位数,个位数字是十位数字的2倍,十位数字比百位数字大2。将这个三位数的数字顺序颠倒后,得到的新数比原数大495。那么这个数是( )。

{{ select(15) }}

  • 256
  • 125
  • 457
  • 136

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填T,错误填F;除特殊说明外,判断题1.5分,选择题3分,共计40分)

(1)

01 #include <bits/stdc++.h>
02 using namespace std;
03 int main(){
04     int a = 0, b = 0, cnt = 0;
05     cin >> a >> b;
06     for(int n = a; n <= b; n++){
07         bool isPrime = true;
08         for(int i = 2; i <= n-1; i++){
09             if(n % i == 0){
10                 isPrime = false;
11                 break;
12             }
13         }
14         if(isPrime){
15             cnt++;
16         }
17     }
18     cout << cnt << endl;
19     return 0;
20 }

假设输入的约定 2ab1002 \leq a \leq b \leq 100,完成下面的判断题和单选题。

判断题

  1. 代码中第1行语句改为#include<iostream>,程序输出结果不变。( ) {{ select(16) }}
  • T
  • F
  1. 上述代码的功能是统计输入的两个数之间质数的数量。( ) {{ select(17) }}
  • T
  • F
  1. 去掉程序第11行,不会改变程序的结果。( ) {{ select(18) }}
  • T
  • F

单选题(第19题 2.5分)

  1. 为了降低复杂度,第8行划线条件语句(i <= n-1;),可以优化为:( ) {{ select(19) }}
  • i <= n-2
  • i <= n
  • i < sqrt(n)
  • i <= sqrt(n)
  1. 当输入为“2 20”时,输出为( )。 {{ select(20) }}
  • 6
  • 7
  • 8
  • 9
  1. 该程序的时间复杂度为( )。 {{ select(21) }}
  • O(a)O(a)
  • O(b2)O(b^2)
  • O(b)O(b)
  • O(a×b2)O(a \times b^2)

(2)

01 #include<bits/stdc++.h>
02 using namespace std;
03 int a[1005];
04 int n, num;
05 int func(int n){
06     for(int i = 1; i < n; i++){
07         for(int j = i + 1; j <= n; j++){
08             if(a[i] > a[j]){
09                 int temp = a[i];
10                 a[i] = a[j];
11                 a[j] = temp;
12                 num++;
13             }
14         }
15     }
16     return num;
17 }
18 int main(){
19     cin >> n;
20     for(int i = 1; i <= n; i++)
21         cin >> a[i];
22     cout << func(n) << endl;
23     return 0;
24 }

假设输入的n是不超过10000的正整数,输入的a[i]是不超过10910^9的整数,完成下面的判断题和单选题:

判断题

  1. 输入n个数,程序将会把这个数从小到大排序。( ) {{ select(22) }}
  • T
  • F
  1. 当输入的值为“5 2 4 6 5 1”时,输出的结果为4。( ) {{ select(23) }}
  • T
  • F
  1. 第9行~第11行代码可替换为 swap(a[i],a[j]);( ) {{ select(24) }}
  • T
  • F

单选题

  1. 该程序的时间复杂度为( )。 {{ select(25) }}
  • O(n3)O(n^3)
  • O(n2)O(n^2)
  • O(n)O(n)
  • O(logn)O(\log n)
  1. 若扩大输入n的值,变为不超过100000的正整数,可以使用( )优化复杂度。 {{ select(26) }}
  • 归并排序
  • 桶排序
  • 插入排序
  • 选择排序
  1. 当输入的值为“10 8 7 11 24 1 3 4 10 30 2”时,输出的结果为( )。 {{ select(27) }}
  • 22
  • 23
  • 24
  • 25

(3)

01 #include<bits/stdc++.h>
02 using namespace std;
03 int a[501], b[501], c[501];
04 string str1, str2;
05 int main() {
06     cin >> str1 >> str2;
07     int al = str1.length(), b1 = str2.length();
08     for (int i = al - 1, j = 1; i >= 0; i--, j++) {
09         a[j] = str1[i] - '0';
10     }
11     for (int i = b1 - 1, j = 1; i >= 0; i--, j++) {
12         b[j] = str2[i] - '0';
13     }
14     int l = max(al, bl);
15     for (int i = 1; i <= l; i++) {
16         c[i] += a[i] + b[i];
17         c[i + 1] += c[i] / 10;
18         c[i] %= 10;
19     }
20     if (c[l + 1] != 0) {
21         l++;
22     }
23     for (int i = 1; i >= 1; i--) {
24         cout << c[i];
25     }
26     return 0;
27 }

假设输入的str1, str2都是由不超过500位整数字符组成的字符串,完成下面的判断题和单选题:

判断题

  1. 去掉程序的第20、21、22行,不影响程序运行的结果。( ) {{ select(28) }}
  • T
  • F
  1. 输入的str1的最大位数超过510位时,程序可以正常运行。( ) {{ select(29) }}
  • T
  • F
  1. 程序的第20行可改为 while(c[l + 1])。( ) {{ select(30) }}
  • T
  • F

单选题

  1. 若输入的str1有m位,str2有n位,那么最终的输出结果中最多可能有( )位。 {{ select(31) }}
  • m
  • n
  • max(m,n)
  • max(m,n)+1
  1. 当输入为“7482974181 3829317318”时,输出为( )。 {{ select(32) }}
  • 11312291499
  • 11311191499
  • 11310191399
  • 11311191489
  1. 当输入为“000001321313 000098899898”时,输出为( )。 {{ select(33) }}
  • 100211211
  • 000100221211
  • 100221211
  • 000100121211

三、完善程序(单选题,每小题3 分,共计30 分)

(1)(排队接水)

问题:有n(n<=1000)个住校生晚自习后在一个水龙头前排 队接水,已知每个接水的时间为ti(ti<=10000),输入n和n个时间,找出这让n 个人的平均等待时间最小的顺序,并计算平均等待时间(精确到小数点后两位)。

01 #include<bits/stdc++.h>
02 using namespace std;
03 struct stu{
04     int id;
05     int t;
06 } a[1005];
07 int main(){
08     int n;
09     double sum = 0;
10     cin >> n;
11     for(int i = 1; i <= n;i++){
12         cin >> a[i].t;
13         a[i].id = ①;
14     }
15     for(int i = 1; i < n; i++){
16         for(int j = ②; j <= n;j++){
17             if(a[i].t > a[j].t){
18                 swap(a[i].t , a[j].t);
19                 swap(__③__);
20             }
21         }
22     }
23     for(int i = 1; i <= n; i++){
24         cout << a[i].id << " ";
25         for(int j = 1; j < i; j++){
26             sum += __④__;
27         }
28     }
29     printf("\n__⑤__",1.0 * sum / n);
30     return 0;
31 }
  1. ①处应填( ) {{ select(34) }}
  • i + 1
  • i
  • i - 1
  • a[i].t
  1. ②处应填( ) {{ select(35) }}
  • i - 1
  • i + 1
  • a[i].id
  • i
  1. ③处应填( ) {{ select(36) }}
  • a[i].t , a[j].t
  • a[i].id , a[i].t
  • a[i].id , a[j].id
  • a[j].id , a[j].t
  1. ④处应填( ) {{ select(37) }}
  • a[j].t
  • a[j].id
  • a[i].t
  • a[i].id
  1. ⑤处应填( ) {{ select(38) }}
  • %.1lf
  • %.2lf
  • %.2f
  • %.2lf

(2)(长难句记单词)

小明暑期买了一些英语绘本想边看书边练习英语,其中不 乏一些长难句,每个句子中都有若干单词组成。小明认真记笔记整理了句子中的第 一个出现的最短单词和最长单词。已知句子不多于100个单词,每个单词长度不超 过10,只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都 是单词间的间隔。

01 #include<bits/stdc++.h>
02 using namespace std;
03 int main(){
04     string s;
05     getline(cin,s);
06     int l = s.length();
07     int n = 0, maxn = 0, minn = 11;
08     int mq = 0, nq = 0;
09     s[l] = '';
10     for(int i = 0; i <= 1; i++){
11         if(   ①    ){
12             n++;
13         }else if (n > 0){
14             if(   ②    ){
15                 maxn = n;
16                 mq = i - n;
17             }
18             if(n < minn){
19                 minn = n;
20                ③;
21             }
22             n = 0;
23         }
24     }
25     for(int i = mq;   ④; i++){
26         cout << s[i];
27     }
28     cout << endl;
29     for(int i = nq; ⑤; i++){
30         cout << s[i];
31     }
32     cout << endl;
33     return 0;
34 }
  1. ①处应填( ) {{ select(39) }}
  • s[i] != ' ' && s[i] != ','
  • s[i] != ' ' || s[i] != ','
  • s[i] == ' ' || s[i] == ','
  • s[i] != ' ' && s[i] == ','
  1. ②处应填( ) {{ select(40) }}
  • n >= maxn
  • n > maxn
  • n <= maxn
  • n < maxn
  1. ③处应填( ) {{ select(41) }}
  • nq = i + n
  • nq = i - 1
  • nq = i - n
  • nq = i + 1
  1. ④处应填( ) {{ select(42) }}
  • i < mq + maxn
  • i < nq + minn
  • i < mq - maxn
  • i < nq - minn
  1. ⑤处应填( ) {{ select(43) }}
  • i < mq + maxn
  • i < nq + minn
  • i < mq - maxn
  • i < nq - minn