GESP 2026年3月C++一级真题完整解析

四季读书网 3 0
GESP 2026年3月C++一级真题完整解析

CCF-GESP 2026年3月认证 C++ 一级真题解析

📌 考试信息:CCF编程能力等级认证(GESP)| 2026年3月 | C++一级

题型构成:单选题15道(30分)+ 判断题10道(20分)+ 编程题2道(50分)= 满分100分

获取 202603gesp1级完整真题及详细解析.pdf

请关注状元编程公众号,回复 202603gesp1


第一部分:单选题(每题2分,共30分)

第1题

题目: 下列哪一项不能作为机器人(计算机系统)的输入设备?

选项
内容
A
检测重心的重力传感器
B
预装的AI算法程序 ✅
C
接收动作指令的遥控器
D
拍摄其他机器人的摄像头

答案:B

解析: 传感器、遥控器、摄像头、麦克风等属于输入设备;屏幕、打印机属于输出设备。算法程序是软件,不属于输入/输出设备,故选B。


第2题

题目: 鼠标左键单击选中文件后,哪个操作可进入"输入新文件名"状态?

答案:A(单击右键并选择弹出菜单中的"重命名")

解析:

  • 双击左键 → 打开文件
  • F1 → 帮助
  • 回车键 → 相当于双击(打开文件)
  • 右键 → 重命名 ✅

第3题

题目: 关于以下代码的说法,正确的是?

double PI = 3.1415926;cout << (PI);

答案:D

解析: C++变量名大小写敏感,PI、Pi、pi是三个不同变量。

  • A错:大小写敏感,PI和pi不同
  • B错:Pi未定义,会报错
  • C错:PI符合命名规则,可以作变量名
  • D正确:将所有PI改为Pai,符合命名规则,能正常执行 ✅

第4题

题目: C++表达式 3 * 3 % 2 的值为?

答案:D(1)

解析:*/% 优先级相同,从左向右计算:

  • 3 * 3 = 9
  • 9 % 2 = 1

第5题

题目: 整型变量 a、b 初值都是4,执行以下代码后输出是?

a, b = 34;cout << (a + 2) << (b - 2) << endl;cout << a << b << endl;

答案:A

6143

解析:a, b = 3, 4; 是逗号表达式,等价于:

a;       // a不变,仍为4b = 3;   // b被赋值为34;       // 无效

所以 a=4, b=3,输出 (4+2)=6(3-2)=1,第一行为 61,第二行为 43


第6题

题目: 关于以下代码的说法,正确的是?

int N = 0;cin >> N;cout << (N);

答案:A(输入10,输出10)

解析:

  • 输入 3.14 → N接收整数部分3,不报错
  • 输入 ABC → N接收不到数据,值仍为0,不报错
  • 输入 -10 → N接收-10,不报错
  • 输入10,输出10 ✅

第7题

题目: 关于以下代码的说法,正确的是?

int M = 0, N = 0;cin >> M;cin >> N;if (N > M)    cout << (N - M);else    cout << (M - N);

答案:B

解析:

  • A错:结果可能为0(如一正一负但绝对值相等)
  • B正确:结果为两数之差的绝对值,必然 ≥ 0 ✅
  • C错:N=M时,走else分支,输出 M-N=0有输出
  • D错:输入带小数点的数时,整数部分被M接收,N接收不到数据仍为0,并非"按整数部分计算"

第8题

题目: 以下代码执行后输出是?

int i, tnt = 1;for (i = 0; i < 5; i++)    tnt *= i;printf("%2d%2d\n", tnt, i);

答案:D( 0 5

解析: 当 i=0 时,tnt *= 0,所以 tnt=0。循环结束时 i=5(此时 i<5 不成立退出)。%2d 表示占2位宽,输出为  0 5


第9题

题目: 求序列 -1+2+3-4+5+6-7+8+9-10+... 前N项之和,以下说法正确的是?

答案:D(当前代码能实现题目所描述计算目标)

解析:

  • A错:i < N+1 等价于 i <= N,包含N项,正确
  • B错:改为 i%3==0 则第1项为正、第3项为负,不符合题意
  • C错:改为 i%3 则第1、2项都为负,第3项为正,不符合题意
  • D正确 ✅

第10题

题目: 关于以下代码的说法,正确的是?

int i;for (i = 1; i < 10; i++){if (i % 2 == 0){continue// L1    }else        cout << i << "#";}cout << i << "END";

答案:B

解析: 完整输出为 1#3#5#7#9#10END

  • A错:最后输出的是 10END,不是 9END
  • B正确:删除else后,当i为奇数时仍执行输出语句,效果相同 ✅
  • C错:将输出语句移到L1下面,则永远不会被执行(continue会跳过)
  • D错:循环结束时 i=10,条件 i>10 不成立,10END 不会输出

第11题

题目: 求正整数各数位之和,横线处应填写?

int N;cin >> N;int tnt = 0;while (N != 0){    __________;    __________;}cout << "N的数位和为:" << tnt;

答案:B

tnt += N % 10N /= 10

解析:N%10 取个位数,N/10 去掉个位数,循环直到N为0。


第12题

题目: 判断正整数中有多少个奇数位(数位值为奇数),横线处应填?

if (_______________)    odd_count += 1;N = (N - N % 10) / 10;

答案:B(N % 10 % 2 == 1

解析:N%10 取个位数,再 %2==1 判断是否为奇数。


第13题

题目: 关于拼数字游戏判断代码的说法,正确的是?

答案:D

解析:

  • A错:代码能正确判断
  • B错:改为 M<=N 不影响结果,但说法不准确
  • C错:Q/3 是商,不是余数,应用 Q%3
  • D正确:可以不用变量Q,直接用M和N分别判断(但程序会复杂些) ✅

第14题

题目: 判断6位正整数高3位和低3位的差是否是314的倍数,横线处应填?

答案:B(((N / 1000) - (N % 1000)) % 314 == 0

解析:

  • 高3位:N/1000
  • 低3位:N%1000
  • 差为314的倍数:% 314 == 0

第15题

题目: 判断"双螺旋数"(奇数位数位和 = 偶数位数位和),空白处应填?

答案:A

N1 += N%10, N /= 10;N2 += N%10, N /= 10;

解析: 从个位开始,第一次取个位加入N1(奇数位),去掉个位;第二次取新个位加入N2(偶数位),去掉个位。若N为奇数位,最后一轮N2加0,值不变。


第二部分:判断题(每题2分,共20分)

题号
答案
要点说明
第1题
✅ 正确
电话手表属智能设备,需安装操作系统
第2题
✅ 正确
4%2=0
2*2%2=4%2=0,结果相同
第3题
❌ 错误
i=3
i%3==0,break跳出,输出3而非0
第4题
❌ 错误
第5行末有分号;,循环体为空,输出N+1
第5题
✅ 正确
输入0执行0次;输入非0则死循环
第6题
✅ 正确
逐位"组装"反转数,与原数比较判断回文
第7题
✅ 正确
等差数列求和,结果为-N
第8题
❌ 错误
printf("%d\n", 3.14)
 是未定义行为,不会报错,但输出不可预测
第9题
✅ 正确
i++
在循环体内额外自增,实际计算 1+3+5+...+99=2500
第10题
❌ 错误
%-5d
 表示左对齐占5位,输出 314  (后跟2个空格),不是 -5314

第三部分:编程题(每题25分,共50分)

编程题1:交朋友

题目描述: Alice身高为H₁,班上共4人,找与Alice身高最接近的人;若有多个相同差距,选较矮的那个。

数据范围:100 ≤ Hᵢ ≤ 199,且互不相同。

参考代码(方法二,推荐):

#include<iostream>usingnamespace std;intmain(){int h1, h2, h3, h4, d, frd, dist;    cin >> h1 >> h2 >> h3 >> h4;    dist = h2 - h1;if (dist < 0) dist = -dist;    frd = h2;    d = h3 - h1;if (d < 0) d = -d;if (d < dist || (d == dist && h3 < frd))        frd = h3, dist = d;    d = h4 - h1;if (d < 0) d = -d;if (d < dist || (d == dist && h4 < frd))        frd = h4;    cout << frd << endl;return0;}

样例说明: Alice身高150,第2人165(差15),第3人135(差15),第4人...选差距最小且较矮的,输出135。


编程题2:数字替换

题目描述: 将整数A中所有数字4替换为8,若不含4则不修改。

数据范围:0 ≤ A ≤ 10⁸

参考代码(方法一,一级知识点):

#include<iostream>usingnamespace std;intmain(){int A = 0, B = 0, d, r = 1;    cin >> A;while (A > 0) {        d = A % 10;          // 取个位if (d == 4) d = 8;   // 4替换为8        B += r * d;          // 按权值组装新数        A /= 10;             // 去掉个位        r *= 10;             // 权值×10    }    cout << B << endl;return0;}

核心思路:

  • A%10 取个位数字
  • 若该位为4,改为8
  • 用权值 r(1, 10, 100...)将各位重新组装成新数B
  • A/10 去掉已处理的个位

样例验证:

  • 输入 8459045 → 输出 8859085(两个4都替换为8)
  • 输入 123 → 输出 123(无4,不变)

答案速查表

单选题答案

1
2
3
4
5
6
7
8
9
10
B
A
D
D
A
A
B
D
D
B
11
12
13
14
15
B
B
D
B
A

判断题答案

1
2
3
4
5
6
7
8
9
10

考点分布分析

知识点
题号
分值
计算机基础(输入输出设备、文件操作)
单1、单2
4分
C++基础语法(变量命名、大小写敏感)
单3
2分
运算符与表达式(优先级、取模)
单4、判2
4分
逗号表达式
单5
2分
cin输入行为
单6、单7
4分
循环与格式化输出
单8、判4、判10
6分
continue/break控制流
单9、单10、判3
6分
数位提取与处理
单11、单12、单15、判6
8分
条件判断与逻辑
单13、单14
4分
未定义行为
判8
2分
编程实践
编1、编2
50分

💡 备考建议:GESP C++一级重点考察基础语法、运算符优先级、循环控制、数位处理,编程题需熟练掌握 while 循环 + %// 数位操作的基本套路。

抱歉,评论功能暂时关闭!