CCF-GESP 2026年3月认证 C++ 一级真题解析
📌 考试信息:CCF编程能力等级认证(GESP)| 2026年3月 | C++一级
题型构成:单选题15道(30分)+ 判断题10道(20分)+ 编程题2道(50分)= 满分100分
获取 202603gesp1级完整真题及详细解析.pdf
请关注状元编程公众号,回复 202603gesp1
第一部分:单选题(每题2分,共30分)
第1题
题目: 下列哪一项不能作为机器人(计算机系统)的输入设备?
答案: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 = 99 % 2 = 1
第5题
题目: 整型变量 a、b 初值都是4,执行以下代码后输出是?
a, b = 3, 4;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,不是9ENDB正确:删除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%3D正确:可以不用变量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分)
4%2=02*2%2=4%2=0,结果相同 | ||
i=3i%3==0,break跳出,输出3而非0 | ||
;,循环体为空,输出N+1 | ||
printf("%d\n", 3.14) | ||
i++1+3+5+...+99=2500 | ||
%-5d314 (后跟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...)将各位重新组装成新数BA/10去掉已处理的个位
样例验证:
输入 8459045→ 输出8859085(两个4都替换为8)输入 123→ 输出123(无4,不变)
答案速查表
单选题答案
判断题答案
考点分布分析
💡 备考建议:GESP C++一级重点考察基础语法、运算符优先级、循环控制、数位处理,编程题需熟练掌握
while循环 +%//数位操作的基本套路。