2026 CSP-J 第一轮真题卷(PDF版,无答案)

资源下载
  1. 二一教育资源

2026 CSP-J 第一轮真题卷(PDF版,无答案)

资源简介

2026 CCF 非专业级别软件能力认证第一轮
(CSP-J1)入门级 C++ 语言试题
认证时间:2026 年 9 月 19 日 09:30~11:30
考生注意事项:
试题纸共有 13 页,答题纸共有 1 页,满分 100 分。请在答题纸上作答,写在试题
纸上的一律无效。
不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)
1. 下列 C++ 数据类型中,能够精确存储 1018 + 1 这个整数的是( )
A. float B. long long C. double D. int
2. 十六进制数 2F5 转换为八进制数是( )
A. 1364 B. 1635 C. 1405 D. 1365
3. 执行下列 C++ 代码,输出是( )
01 int a = 7, b = 3;
02 std::cout << a / b * b + a % b;
A. 9 B. 10 C. 7 D. 6
4. 初始时栈为空,将 1、2、3、4 依次入栈,入栈过程中允许随时出栈。下列出栈序列中不
可能出现的是( )
A. 2,4,3,1 B. 1,2,3,4 C. 3,1,2,4 D. 1,4,3,2
5. 一棵有 100 个结点的完全二叉树,其中叶子结点个数是( )
A. 49 B. 50 C. 64 D. 51
CCF CSP-J 2026 第一轮 C++ 语言试题
第 1 页 共 13页
6. 执行下列代码后 s 的值是( )
01 int s = 0;
02 for (int i = 1; i <= 100; i++)
03 if (i % 3 == 0 || i % 5 == 0)
04 s += i;
A. 3048 B. 2733 C. 2318 D. 2418
7. 上楼梯每步可上 1 级、2 级或 3 级,从地面(可视为第 0 级)走到第 8 级台阶共有
多少种不同走法( )
A. 44 B. 121 C. 149 D. 81
8. 下图为 5× 5 网格,行号、列号均从 0 开始,# 为障碍,. 为可通行格:
S . . # .
. . . # .
. . . # .
# # . . E
. . . # .
从 S 出发做广度优先搜索(BFS):初始时把 S 入队;每次取出队首格子,按“上、下、左、
右”(上=行号减 1,下=行号加 1,左=列号减 1,右=列号加 1)的顺序遍历它的四个相
邻格子,越界、障碍或已访问的格子跳过,其余格子标记为已访问并入队。当 E 第一次入队
时,已经入队过的格子(含 S 和 E)共有多少个( )
A. 15 B. 12 C. 14 D. 13
9. 满足 1 ≤ n ≤ 100 且 gcd(n, 60) = 6 的正整数 n 共有多少个( )
A. 8 B. 6 C. 4 D. 5
10.某国硬币面值为 1 元、4 元、6 元且数量不限,凑出 9 元最少需要多少枚( )
A. 3 B. 4 C. 5 D. 2
CCF CSP-J 2026 第一轮 C++ 语言试题
第 2 页 共 13页
11.执行下列代码,输出是( )
01 int a[5] = {1, 3, 5, 7, 9};
02 int *p = a + 2;
03 *(p - 1) = p[0] + p[2];
04 p[1] = *(a + 1) - a[0];
05 cout << a[1] << ”,” << a[3];
A. 14,13 B. 8,13 C. 14,7 D. 14,2
12.在含 1000 个互不相同元素的升序数组中,用二分法查找给定值(返回元素位置或报告
不存在),最坏情况下需要与数组元素比较多少次?( )
A. 500 B. 9 C. 11 D. 10
13.数组 a[1..n] 的前缀和数组 s(即 s[i] = a[1] + a[2] + · · ·+ a[i])满足 s[i] = 3i2 + i。
则 a[10] 的值是( )
A. 252 B. 310 C. 58 D. 61
14.数轴上有 7 个点,坐标分别为 1、3、4、7、10、15、20。在数轴上选取一个整数坐标
点 P,使 P 到这 7 个点的距离之和最小,这个最小距离和是( )
A. 37 B. 42 C. 40 D. 38
15.一个无向图有 10 个顶点,其中 4 个顶点的度为 3,其余顶点的度均为 4,则该图的
边数是( )
A. 36 B. 18 C. 17 D. 20
CCF CSP-J 2026 第一轮 C++ 语言试题
第 3 页 共 13页
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×;除
特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)
(1)
01 #include
02 using namespace std;
03 int main() {
04 int n;
05 cin >> n;
06 int x = 1, y = 1;
07 while (n > 0) {
08 if (n % 2 == 0) {
09 ++x;
10 } else {
11 ++x;
12 ++y;
13 }
14 n = n / 2;
15 }
16 cout << x << ’ ’ << y << endl;
17 return 0;
18 }
以下问题均假定输入的 n 为不超过 231 1 的非负整数。
判断题
16.(1 分)当输入为 3 时,程序输出为 3 3。( )
17.将第 11 行的 ++x; 删除后,程序输出的两个数一定相等。( )
18.假设输入为非负整数,则程序输出的第一个数一定不小于第二个数。( )
单选题
19.将第 7 行的 while (n > 0) 改为 while (n >= 0) 后,程序可能出现的问题是
( )。
A. 陷入死循环 B. 输出结果比原来大
C. 输出结果比原来小 D. 输出结果不受影响
CCF CSP-J 2026 第一轮 C++ 语言试题
第 4 页 共 13页
20.当输入为 6 时,输出为( )。
A. 3 3 B. 4 2 C. 4 3 D. 5 2
21.若输入 n 依次取遍 0, 1, 2, . . . , 231 1 中的所有整数,则程序输出的第二个数恰好为 2
的次数为( )。
A. 16 B. 30 C. 31 D. 32
CCF CSP-J 2026 第一轮 C++ 语言试题
第 5 页 共 13页
(2)
01 #include
02 #include
03 #include
04 using namespace std;
05 int a[100007], b[100007], c[100007], carry[100007];
06 string input_str;
07 int a_len, b_len;
08 int main() {
09 cin >> input_str;
10 a_len = input_str.size();
11 for (int i = 0; i < a_len; i++) {
12 a[i] = input_str[a_len - i - 1] - ’0’;
13 }
14 cin >> input_str;
15 b_len = input_str.size();
16 for (int i = 0; i < b_len; i++) {
17 b[i] = input_str[b_len - i - 1] - ’0’;
18 }
19 carry[0] = 0;
20 for (int i = 0; i < max(a_len, b_len) + 1; i++) {
21 c[i] = a[i] + b[i] + carry[i];
22 if (c[i] >= 10) {
23 carry[i + 1] = 1;
24 c[i] -= 10;
25 } else {
26 carry[i + 1] = 0;
27 }
28 }
29 for (int i = max(a_len, b_len); i >= 0; i--) {
30 cout << c[i];
31 }
32 cout << endl;
33 return 0;
34 }
本题输入的两个数均为非负整数,位数不超过 100000,可能包含前导零。
判断题
22.当输入为 123 456 时,程序输出为 0579。( )
CCF CSP-J 2026 第一轮 C++ 语言试题
第 6 页 共 13页
23.假设输入的两个数均不含前导零,则程序输出的结果也一定不会含有前导零。( )
24.将第 21 行改为 c[i]=a[i]+b[i]; 后,程序输出的结果一定比原来的结果小。( )
单选题
25.当输入为 12345 678 时,输出为( )。
A. 012923 B. 013023 C. 13023 D. 130230
26.将第 22 行的 if (c[i]>=10) 改为 if (c[i]>10) 后,当输入为 95 15 时,输
出为( )。
A. 01010 B. 110 C. 140 D. 1410
27.假设输入的两个数均为 n 位正整数(不含前导零),且它们的和小于 10n,则程序输出的
字符串一定满足( )。
A. 第一个字符一定不为 ’0’
B. 长度一定为 n
C. 长度一定为 n + 1,且第一个字符为 ’0’
D. 长度可能为 n + 2
CCF CSP-J 2026 第一轮 C++ 语言试题
第 7 页 共 13页
(3)
01 #include
02 using namespace std;
03 bool check_prime(int x) {
04 if (x <= 1) return false;
05 for (int i = 2; i * i <= x; i++) {
06 if (x % i == 0) return false;
07 }
08 return true;
09 }
10 int n;
11 void search_result(int x) {
12 if (!check_prime(x)) return;
13 if (x >= n) {
14 cout << x << endl;
15 return;
16 }
17 for (int i = 0; i <= 9; i++) {
18 search_result(x * 10 + i);
19 }
20 }
21 int main() {
22 cin >> n;
23 for (int i = 1; i <= 9; i++) search_result(i);
24 return 0;
25 }
判断题
28.当输入为 10 时,程序的输出共有 10 行。( )
29.若输入的 n 不大于 5,则程序的输出中一定包含 5。( )
30.若输入的 n 大于 10,将第 17 行的 for (int i=0;i<=9;i++) 改为 for (int
i=1;i<=9;i+=2) 后,程序的输出结果一定不变。( )
单选题
31.当输入为 24 时,程序输出的第 3 行为( )。
A. 23 B. 29 C. 31 D. 239
CCF CSP-J 2026 第一轮 C++ 语言试题
第 8 页 共 13页
32.下列关于该程序输出的说法中,正确的是( )。
A. 输出的数一定按照从小到大的顺序排列
B. 随着输入 n 的增大,输出的行数一定不会增加
C. 输出的数的个位数字只可能是 3 或 7
D. 输出的每个大于等于 10 的数,十进制下删去它的末位数字后得到的数一定是质数
33.当输入为 200 时,程序输出的行数为( )。
A. 12 B. 13 C. 14 D. 15
CCF CSP-J 2026 第一轮 C++ 语言试题
第 9 页 共 13页
三、完善程序(单选题,每小题 3 分,共计 30 分)
(1 进制减半)
给定 n,m,再给定一个 mn 进制下的数 A,其各个数位上的数按照从高位到低位的顺序给
出,请你将其转化为 n 进制,并同样按照从高位到低位的顺序输出。
输入的第一行依次为 n、m 和 A 的位数 d,接下来 d 个数 ad, ad 1, · · · , a1 从高位到低位
描述各个数位上的数。
数据满足 2 ≤ n,m ≤ 10,1 ≤ d ≤ 18,0 ≤ A < 263,对于所有 1 ≤ i ≤ d,0 ≤ ai < mn。
以下程序按“逐位除以 n”的方法完成进制转换。请补全程序。
01 #include
02
03 constexpr int N = 100005;
04 long long b[N];
05
06 int main() {
07 long long n, m, d;
08 std::cin >> n >> m >> d;
09 int len = 1;
10 for (int i = 0; i < d; i++) {
11 long long x;
12 std::cin >> x;
13 for (int j = len; j >= 1; j--)
14 b[j] = ①;
15 b[0] = ②;
16 len++;
17 for (int j = 0; j < len; j++)
18 if (b[j] >= n) {
19 b[j + 1] += ③;
20 b[j] = ④;
21 if (j + 1 == len) len++;
22 }
23 }
24 while (⑤) len--;
25 for (int i = len - 1; i >= 0; i--)
26 std::cout << b[i] << ’ ’;
27 return 0;
28 }
CCF CSP-J 2026 第一轮 C++ 语言试题
第 10 页 共 13页
34.①处应填( )
A. b[j] * n B. b[j] * m
C. b[j - 1] * n D. b[j - 1] * m
35.②处应填( )
A. x * n B. x C. 0 D. m
36.③处应填( )
A. b[j] / m B. b[j] % n C. b[j] % m D. b[j] / n
37.④处应填( )
A. b[j] / m B. b[j] % n C. b[j] % m D. b[j] / n
38.⑤处应填( )
A. len > 0 && b[len - 1] == 0
B. len > 0 && b[0] == 0
C. len > 1 && b[len - 1] == 0
D. len > 1 && b[0] == 0
(2 平衡分割)
给定一个长度为 n 的字符串,其中每个字符都是一个十六进制数位。例如,字符串 016A 表
示十进制下的四个数 0、1、6、10。
现在请选择 k 个(k 是你选定的数)切分位置 p1, p2, . . . , pk,其中 1 ≤ k < n,且 1 ≤ p1 <
p2 < · · · < pk < n。再令 p0 = 0,pk+1 = n。
对于每个 0 ≤ i ≤ k,计算第 pi + 1 个数到第 pi+1 个数的平均值,记作 bi。你的目标是使
b0, b1, . . . , bk 中最大值与最小值之差尽可能小,并输出这个最小值。
其中 2 ≤ n ≤ 20。输入字符串中的字符只可能是 0~9 或 A~F。本题假定字符采用 ASCII
编码。输出答案时保留小数点后 6 位。
以下程序通过递归枚举所有可能的连续分段方案。请补全程序。
CCF CSP-J 2026 第一轮 C++ 语言试题
第 11 页 共 13页
01 #include
02 #include
03 #include
04
05 using namespace std;
06
07 constexpr int N = 25;
08 int n;
09 char s[N];
10 double ans = 1e100;
11
12 int get_val(char c) { return ①; }
13
14 void split(int l, int cnt, double minb, double maxb) {
15 if (l > n) {
16 if (cnt == 0) return;
17 ans = min(ans, maxb - minb);
18 return;
19 }
20 int sum = 0;
21 for (②) {
22 sum += ③;
23 double nwb = ④;
24 split(⑤);
25 }
26 }
27
28 int main() {
29 cin >> n >> s + 1;
30 split(1, -1, 1e100, -1e100);
31 cout << fixed << setprecision(6) << ans;
32 return 0;
33 }
CCF CSP-J 2026 第一轮 C++ 语言试题
第 12 页 共 13页
39.①处应填( )
A. c <= ’9’ c - ’0’ : c - ’A’ + 10
B. c <= ’9’ c - ’0’ : c - ’A’
C. c <= ’9’ c - ’0’ + 1 : c - ’A’ + 10
D. c <= ’9’ c - ’0’ : c - ’A’ + 9
40.②处应填( )
A. int r = l; r <= n; r++
B. int r = l; r < n; r++
C. int r = 1; r <= n; r++
D. int r = l; r++ < n
41.③处应填( )
A. get_val(s[r]) B. get_val(s[r-1])
C. s[r-1] D. s[r]
42.④处应填( )
A. sum/(r-l+1) B. 1.0*sum/(r-l+1)
C. 1.0*sum/(r-l) D. sum*1.0/n
43.⑤处应填( )
A. r+1, cnt+1, min(minb,nwb), max(maxb,nwb)
B. r, cnt+1, minb, maxb
C. r+1, cnt, nwb, nwb
D. r, cnt, min(minb,nwb), max(maxb,nwb)
CCF CSP-J 2026 第一轮 C++ 语言试题
第 13 页 共 13页

展开更多......

收起↑

资源预览