#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 分;每题有且仅有一个正确选项)
- 近年来,中国的人工智能技术飞速发展,在前沿语言模型和推理模型的研发上取得了显著进展。国内各项尖AI实验室陆续推出了多款高性能模型,DeepSeek的RI模型的涌现更显示出中国在AI技术研发方面的快速追赶。下列名人中,被称为“人工智能之父”的是?( )
{{ select(1) }}
- 埃隆·马斯克
- 约翰·冯·诺依曼
- 艾伦·图灵
- 戈登.摩尔
- 下列不属于计算机输入设备的是?( )
{{ select(2) }}
- 扫描仪
- 键盘
- 显示器
- 麦克风
- 计算机系统中通常使用 B 来表示基本存储单位,它的全拼是( )。
{{ select(3) }}
- Bit
- Byte
- Bug
- Billion
- 以下不可以作为 C++标识符的是( )。
{{ select(4) }}
- JX2025
- JXCSPX
- 2025CSPX
- CSPX_2025
- 以下哪个不是 C++中的选择语句?
{{ select(5) }}
- switch...case
- if
- if-else
- for
- 在下列排序算法中,不稳定的排序算法是( )。
{{ select(6) }}
- 归并排序
- 插入排序
- 冒泡排序
- 选择排序
- 十进制数 95 转换为二进制数的结果为( )。
{{ select(7) }}
- 01011101
- 01011111
- 01101101
- 01010111
- 下面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) }}
- 都是偶数
- 都是奇数
- 一个是偶数一个是奇数
- 一个是奇数一个是偶数
- 下面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
- 下列运算符中,优先级最高的是( )。
{{ select(10) }}
- &&
- *
- ||
- !
- 执行下列的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
- 已知一棵完全二叉树有 12 个节点,那么这棵树的高度是( )。
{{ select(12) }}
- 3
- 5
- 6
- 4
- 考虑下图所示的有向图,入度最大的结点为( )号结点。

{{ select(13) }}
- V3
- V6
- V1
- V8
- 教室的图书角里有5本不同的故事书和4本不同的漫画书。有位同学想要从图书角中选出2本书来阅读,要求至少选1本故事书。请问该同学一共有多少种不同的选法?( )。
{{ select(14) }}
- 20
- 26
- 30
- 36
- 一个三位数,个位数字是十位数字的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 }
假设输入的约定 ,完成下面的判断题和单选题。
判断题
- 代码中第1行语句改为
#include<iostream>,程序输出结果不变。( ) {{ select(16) }}
- T
- F
- 上述代码的功能是统计输入的两个数之间质数的数量。( ) {{ select(17) }}
- T
- F
- 去掉程序第11行,不会改变程序的结果。( ) {{ select(18) }}
- T
- F
单选题(第19题 2.5分)
- 为了降低复杂度,第8行划线条件语句(i <= n-1;),可以优化为:( ) {{ select(19) }}
- i <= n-2
- i <= n
- i < sqrt(n)
- i <= sqrt(n)
- 当输入为“2 20”时,输出为( )。 {{ select(20) }}
- 6
- 7
- 8
- 9
- 该程序的时间复杂度为( )。 {{ select(21) }}
(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]是不超过的整数,完成下面的判断题和单选题:
判断题
- 输入n个数,程序将会把这个数从小到大排序。( ) {{ select(22) }}
- T
- F
- 当输入的值为“5 2 4 6 5 1”时,输出的结果为4。( ) {{ select(23) }}
- T
- F
- 第9行~第11行代码可替换为
swap(a[i],a[j]);( ) {{ select(24) }}
- T
- F
单选题
- 该程序的时间复杂度为( )。 {{ select(25) }}
- 若扩大输入n的值,变为不超过100000的正整数,可以使用( )优化复杂度。 {{ select(26) }}
- 归并排序
- 桶排序
- 插入排序
- 选择排序
- 当输入的值为“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位整数字符组成的字符串,完成下面的判断题和单选题:
判断题
- 去掉程序的第20、21、22行,不影响程序运行的结果。( ) {{ select(28) }}
- T
- F
- 输入的str1的最大位数超过510位时,程序可以正常运行。( ) {{ select(29) }}
- T
- F
- 程序的第20行可改为
while(c[l + 1])。( ) {{ select(30) }}
- T
- F
单选题
- 若输入的str1有m位,str2有n位,那么最终的输出结果中最多可能有( )位。 {{ select(31) }}
- m
- n
- max(m,n)
- max(m,n)+1
- 当输入为“7482974181 3829317318”时,输出为( )。 {{ select(32) }}
- 11312291499
- 11311191499
- 11310191399
- 11311191489
- 当输入为“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 }
- ①处应填( ) {{ select(34) }}
- i + 1
- i
- i - 1
- a[i].t
- ②处应填( ) {{ select(35) }}
- i - 1
- i + 1
- a[i].id
- i
- ③处应填( ) {{ 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
- ④处应填( ) {{ select(37) }}
- a[j].t
- a[j].id
- a[i].t
- a[i].id
- ⑤处应填( ) {{ 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 }
- ①处应填( ) {{ select(39) }}
- s[i] != ' ' && s[i] != ','
- s[i] != ' ' || s[i] != ','
- s[i] == ' ' || s[i] == ','
- s[i] != ' ' && s[i] == ','
- ②处应填( ) {{ select(40) }}
- n >= maxn
- n > maxn
- n <= maxn
- n < maxn
- ③处应填( ) {{ select(41) }}
- nq = i + n
- nq = i - 1
- nq = i - n
- nq = i + 1
- ④处应填( ) {{ select(42) }}
- i < mq + maxn
- i < nq + minn
- i < mq - maxn
- i < nq - minn
- ⑤处应填( ) {{ select(43) }}
- i < mq + maxn
- i < nq + minn
- i < mq - maxn
- i < nq - minn