2026 CCF CSP-J 第一轮 C++ 语言试题
2026 CCF CSP-J 第一轮 C++ 语言试题
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
2026 CCF CSP-J 第一轮 C++ 语言试题
本卷共43个作答小题,满分100分。每题只选一个答案,答错或未答得0分;判断题A表示正确、B表示错误。
一、单项选择题(每题2分,共30分)
1(2分)
下列 C++ 数据类型中,能够精确存储 这个整数的是( )。
{{ select(1) }}
floatlong longdoubleint
2(2分)
十六进制数 转换为八进制数是( )。
{{ select(2) }}
- 1364
- 1635
- 1405
- 1365
3(2分)
执行下列 C++ 代码,输出是( )。
int a = 7, b = 3;
std::cout << a / b * b + a % b;
{{ select(3) }}
- 9
- 10
- 7
- 6
4(2分)
初始时栈为空,将 1、2、3、4 依次入栈,入栈过程中允许随时出栈。下列出栈序列中不可能出现的是( )。
{{ select(4) }}
- 2,4,3,1
- 1,2,3,4
- 3,1,2,4
- 1,4,3,2
5(2分)
一棵有 100 个结点的完全二叉树,其叶子结点个数是( )。
{{ select(5) }}
- 49
- 50
- 64
- 51
6(2分)
执行下列代码后 s 的值是( )。
int s = 0;
for (int i = 1; i <= 100; i++)
if (i % 3 == 0 || i % 5 == 0)
s += i;
{{ select(6) }}
- 3048
- 2733
- 2318
- 2418
7(2分)
上楼梯每步可上 1 级、2 级或 3 级,从地面(可视为第 0 级)走到第 8 级台阶共有多少种不同走法( )。
{{ select(7) }}
- 44
- 121
- 149
- 81
8(2分)
下图为 网格,行号、列号均从 0 开始,# 为障碍,. 为可通行格:

从 S 出发做广度优先搜索(BFS):初始时把 S 入队;每次取出队首格子,按“上、下、左、右”(上 = 行号减 1,下 = 行号加 1,左 = 列号减 1,右 = 列号加 1)的顺序遍历它的四个相邻格子,越界、障碍或已访问的格子跳过,其余格子标记为已访问并入队。当 E 第一次入队时,已经入队过的格子(含 S 和 E)共有多少个( )。
{{ select(8) }}
- 15
- 12
- 14
- 13
9(2分)
满足 且 的正整数 共有多少个( )。
{{ select(9) }}
- 8
- 6
- 4
- 5
10(2分)
某国硬币面值为 1 元、4 元、6 元且数量不限,凑出 9 元最少需要多少枚( )。
{{ select(10) }}
- 3
- 4
- 5
- 2
11(2分)
执行下列代码,输出是( )。
int a[5] = {1, 3, 5, 7, 9};
int *p = a + 2;
*(p - 1) = p[0] + p[2];
p[1] = *(a + 1) - a[0];
cout << a[1] << "," << a[3];
{{ select(11) }}
- 14,13
- 8,13
- 14,7
- 14,2
12(2分)
在含 1000 个互不相同元素的升序数组中,用二分法查找给定值(返回元素位置或报告不存在),最坏情况下需要与数组元素比较多少次( )。
{{ select(12) }}
- 500
- 9
- 11
- 10
13(2分)
数组 的前缀和数组 (即 )满足 。则 的值是( )。
{{ select(13) }}
- 252
- 310
- 58
- 61
14(2分)
数轴上有 7 个点,坐标分别为 1、3、4、7、10、15、20。在数轴上选取一个整数坐标点 P,使 P 到这 7 个点的距离之和最小,这个最小距离和是( )。
{{ select(14) }}
- 37
- 42
- 40
- 38
15(2分)
一个无向图有 10 个顶点,其中 4 个顶点的度为 3,其余顶点的度均为 4,则该图的边数是( )。
{{ select(15) }}
- 36
- 18
- 17
- 20
二、阅读程序(共40分)
程序输入不超过数组或字符串定义的范围。除特殊说明外,判断题1.5分,选择题3分。
阅读程序(一)

16(1分)
当输入为 3 时,程序输出为 3 3。
{{ select(16) }}
- 正确
- 错误
17(1.5分)
将第 11 行的 ++x; 删除后,程序输出的两个数一定相等。
{{ select(17) }}
- 正确
- 错误
18(1.5分)
假设输入为非负整数,则程序输出的第一个数一定不小于第二个数。
{{ select(18) }}
- 正确
- 错误
19(3分)
将第 7 行的 while (n > 0) 改为 while (n >= 0) 后,程序可能出现的问题是( )。
{{ select(19) }}
- 陷入死循环
- 输出结果比原来大
- 输出结果比原来小
- 输出结果不受影响
20(3分)
当输入为 6 时,输出为( )。
{{ select(20) }}
- 3 3
- 4 2
- 4 3
- 5 2
21(3分)
若输入 依次取遍 中的所有整数,则程序输出的第二个数恰好为 2 的次数为( )。
{{ select(21) }}
- 16
- 30
- 31
- 32
阅读程序(二)

22(1.5分)
当输入为 123 456 时,程序输出为 0579。
{{ select(22) }}
- 正确
- 错误
23(1.5分)
假设输入的两个数均不含前导零,则程序输出的结果也一定不会含有前导零。
{{ select(23) }}
- 正确
- 错误
24(1.5分)
将第 21 行改为 c[i]=a[i]+b[i]; 后,程序输出的结果一定比原来的结果小。
{{ select(24) }}
- 正确
- 错误
25(3分)
当输入为 12345 678 时,输出为( )。
{{ select(25) }}
- 012923
- 013023
- 13023
- 130230
26(3分)
将第 22 行的 if (c[i]>=10) 改为 if (c[i]>10) 后,当输入为 95 15 时,输出为( )。
{{ select(26) }}
- 01010
- 110
- 140
- 1410
27(3分)
假设输入的两个数均为 位正整数(不含前导零),且它们的和小于 ,则程序输出的字符串一定满足( )。
{{ select(27) }}
- 第一个字符一定不为
'0' - 长度一定为
- 长度一定为 ,且第一个字符为
'0' - 长度可能为
阅读程序(三)

28(1.5分)
当输入为 10 时,程序的输出共有 10 行。
{{ select(28) }}
- 正确
- 错误
29(1.5分)
若输入的 不大于 5,则程序的输出中一定包含 5。
{{ select(29) }}
- 正确
- 错误
30(1.5分)
若输入的 大于 10,将第 17 行的 for (int i=0;i<=9;i++) 改为 for (int i=1;i<=9;i+=2) 后,程序的输出结果一定不变。
{{ select(30) }}
- 正确
- 错误
31(3分)
当输入为 24 时,程序输出的第 3 行为( )。
{{ select(31) }}
- 23
- 29
- 31
- 239
32(3分)
下列关于该程序输出的说法中,正确的是( )。
{{ select(32) }}
- 输出的数一定按照从小到大的顺序排列
- 随着输入 的增大,输出的行数一定不会增加
- 输出的数的个位数字只可能是 3 或 7
- 输出的每个大于等于 10 的数,十进制下删去它的末位数字后得到的数一定是质数
33(3分)
当输入为 200 时,程序输出的行数为( )。
{{ select(33) }}
- 12
- 13
- 14
- 15
三、完善程序(每小题3分,共30分)
完善程序(一):进制减半

34(3分)
①处应填( )。
{{ select(34) }}
b[j] * nb[j] * mb[j - 1] * nb[j - 1] * m
35(3分)
②处应填( )。
{{ select(35) }}
x * nx0m
36(3分)
③处应填( )。
{{ select(36) }}
b[j] / mb[j] % nb[j] % mb[j] / n
37(3分)
④处应填( )。
{{ select(37) }}
b[j] / mb[j] % nb[j] % mb[j] / n
38(3分)
⑤处应填( )。
{{ select(38) }}
len > 0 && b[len - 1] == 0len > 0 && b[0] == 0len > 1 && b[len - 1] == 0len > 1 && b[0] == 0
完善程序(二):平衡分割


39(3分)
①处应填( )。
{{ select(39) }}
c <= '9' ? c - '0' : c - 'A' + 10c <= '9' ? c - '0' : c - 'A'c <= '9' ? c - '0' + 1 : c - 'A' + 10c <= '9' ? c - '0' : c - 'A' + 9
40(3分)
②处应填( )。
{{ select(40) }}
int r = l; r <= n; r++int r = l; r < n; r++int r = 1; r <= n; r++int r = l; r++ < n
41(3分)
③处应填( )。
{{ select(41) }}
get_val(s[r])get_val(s[r-1])s[r-1]s[r]
42(3分)
④处应填( )。
{{ select(42) }}
sum/(r-l+1)1.0*sum/(r-l+1)1.0*sum/(r-l)sum*1.0/n
43(3分)
⑤处应填( )。
{{ select(43) }}
r+1, cnt+1, min(minb,nwb), max(maxb,nwb)r, cnt+1, minb, maxbr+1, cnt, nwb, nwbr, cnt, min(minb,nwb), max(maxb,nwb)