2026年3月 GESP C++ 1级
2026年3月 GESP C++ 1级认证考试真题(含编程操作题部分)
// questions
题目预览
2026 年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )。
检测重心的重力传感器
预装的 AI 算法程序
接收动作指令的遥控器
拍摄其他机器人的摄像头
小明学习编程有一段时间了,他想在图形环境下把当前目录(或文件夹)下的文本文件 20260314.txt 的名字改一下。他用鼠标左键点击选中该文件后,立即完成下面哪个操作后将处于输入新文件名的状态( ):
单击右键并选择弹出菜单中的“重命名”
双击左键
按功能键 F1
按回车键
下面 C++ 代码可以执行,有关说法正确的是( )。
double PI = 3.1415926;
cout << (PI);
为了方便初学者,cout << (PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感
cout << (PI) 修改为 cout << (Pi) 能正常执行
不能用 PI 做变量名,因为要保存圆周率这个常量
将程序中全部 PI 都改写为 Pai,将能正常执行,不会报错
C++ 表达式 3 * 3 % 2 的值为( )。
818181
272727
444
111
整型变量 aaa、bbb 的初值都是 444,则下面的 C++ 代码执行后的输出是( )。
a, b = 3, 4;
cout << (a + 2) << (b - 2) << endl;
cout << a << b << endl;
61
43
52
34
62
44
62
32
下面 C++ 代码的相关说法,正确的是( )。
int N = 0;
cin >> N;
cout << (N);
执行时如输入 101010,则将输出 101010
执行时如输入 3.143.143.14,将报错
执行时如输入 ABC,将报错
执行时如输入 −10-10−10,将报错
下面 C++ 代码执行时,其说法正确的是( )。
int M = 0, N = 0;
cin >> M;
cin >> N;
if (N > M)
cout << (N - M);
else
cout << (M - N);
如果输入一个正数和一个负数,其输出结果肯定是大于 000
不管是负整数、正整数亦或 000,其结果肯定是大于等于 000
如果 NNN 和 MMM 是相等的整数,将不会有输出
如果 NNN 和 MMM 输入带有小数点的数,将按整数部分计算
下面 C++ 代码执行后的输出是( )。
int i, tnt = 1;
for (i = 0; i < 5; i++)
tnt *= i;
printf("%2d%2d\n", tnt, i);
111 242424 555
111 101010 555
111 000 444
111 000 555
执行下面 C++ 代码段求序列 −1+2+3−4+5+6−7+8+9−10+11+12......-1+2+3-4+5+6-7+8+9-10+11+12......−1+2+3−4+5+6−7+8+9−10+11+12...... 之值。例如输入 444,则计算序列前 444 项的值,规律如序列所示,输出为 000。下面说法中正确的是( )。
int N, tnt, i;
cout << "请输入正整数:";
cin >> N;
tnt = 0;
for (i = 1; i < N + 1; i++) // L1
if (i % 3 == 1) // L2
tnt += -i;
else
tnt += i;
cout << tnt;
L1 行中 i < N + 1 应该修为 i < N 才会符合预期
L2 行中 i % 3 == 1 应修改为 i % 3 == 0 才会符合预期
L2 行中 i % 3 == 1 修改为 i % 3 与当前程序效果相同
当前代码能实现题目所描述计算目标
下面 C++ 代码的相关说法,正确的是( )。
int i;
for (i = 1; i < 10; i++){
if (i % 2 == 0){
continue; // L1
}
else
cout << i << "#";
}
cout << i << "END";
上述代码执行后,其输出是 111#333#555#777#999#999END
删除 else 后的执行效果与当前代码相同
删除 else 且将 cout << i << "#" 移入 L1 行下面,则执行效果与当前代码相同
在 cout << i << "END" 前增加判断 if(i > 10),其执行效果与当前代码相同
一个正整数的每位都是个位数,称为数位,最高位非 000。下面的 C++ 代码用于求正整数的所有数位之和,简称数位和。如 123123123 的各数位分别是 111、222、333,则其数位和为 1+2+31+2+31+2+3,结果为 666。为实现该目标,横线处应该填写的代码是( )。
int N;
cin >> N;
int tnt = 0;
while (N != 0){
____________;
____________;
}
cout << "N的数位和为:" << tnt;
tnt += N / 10
N /= 10
tnt += N % 10
N /= 10
tnt += N / 10
N %= 10
tnt = tnt + N % 10
N %= 10
小明想要快速知道任给一个正整数中有多少个奇数位(数位值是奇数),下面的 C++ 代码是其实现,横线处应该填入的代码是( )。
int N;
cin >> N;
int odd_count = 0; // 记录奇数的个数
int old_number = N; // 保存原数
while (N != 0){
if (_________________)
odd_count += 1;
N = (N - N % 10) / 10;
}
cout << old_number << "中共有 " << odd_count << " 个奇数";
N % 10 % 2 == 0
N % 10 % 2 == 1
N / 10 / 2 == 1
N / 2 / 10 == 0
小明和弟弟在玩一个拼数字游戏,游戏规则是:二人各写一个两位正整数 MMM 和 NNN;然后将较大的数字放在较小的前面,拼成一个 444 位数;将这个 444 位数除以 333 的余数添加到 444 位数的后面,得到一个 555 位数;最后判断这个 555 位数能否被 141414 整除。下面的 C++ 代码用于判断 MMM 和 NNN 是否符合全部要求,如果符合则输出 Y 否则输出 N。例如输入 858585 和 797979,可以拼出 857928579285792,恰好是 141414 的倍数,则输出 Y。关于下面代码描述正确的是( )。
int M, N, Q;
cin >> M >> N;
if(M > N) // L1
Q = M*100+N;
else
Q = N*100+M;
if((Q*10+Q%3) % 14 == 0) // L2
cout << "Y";
else
cout << "N";
代码段不能完成正确判断
L1 行代码中条件应该改为 M <= N
L2 行代码应该改为 if ((Q*10+Q/3) % 14 == 0)
代码段可以不使用变量 Q,而是在区分 MMM 和 NNN 大小后分别直接用它们来判断
执行下面 C++ 代码可以判断一个 666 位正整数 NNN 的高 333 位和低 333 位的差是否是 314314314 的倍数。例如 628314628314628314 就符合要求。横线处应该填入( )。
cin >> N;
if (___________________________)
cout << N << "符合条件" << endl;
((N % 1000) - (N / 1000)) / 314 == 0
((N / 1000) - (N % 1000)) % 314 == 0
((N % 1000) - (N / 1000)) / 314
((N / 1000) - (N % 1000)) % 314
NNN 是一个正整数。如果 NNN 的所有奇数位的数位和等于所有偶数位的数位和,则称它是一个“双螺旋数”。例如 123751237512375 的所有奇数位的数位和是 999,同时它的所有偶数位的数位和也是 999,则 123751237512375 就是一个双螺旋数。下面的 C++ 代码用于判断输入的 NNN 是否为双螺旋数。空白处应该填入的代码是( )。
int i, N, N1=0, N2=0, N0;
cin >> N;
N0 = N;
while (N){
_________________________
_________________________
}
if(N1 == N2)
cout << N0 << "是双螺旋数" << endl;
N1 += N%10, N /= 10;
N2 += N%10, N /= 10;
N1 += N/10, N /= 10;
N2 += N/10, N /= 10;
N1 += N%10, N %= 10;
N2 += N%10, N %= 10;
N1 += N/10, N %= 10;
N2 += N/10, N %= 10;
小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。
C++ 表达式 4 % 2 和 2 * 2 % 2 的结果相同。
下面 C++ 代码段成功执行后将输出 000。
for (i = 1; i < 10; i++)
if (i % 3 == 0)
break;
cout << i;
下面能够正常执行的 C++ 代码段用于求 111 到 NNN 之和,NNN 为正整数。因为 i < N + 1,所以是 111 到 NNN 且包含 NNN 之和。
tnt = 0;
cout << "请输入正整数:";
cin >> N;
total = 0;
for (i = 1; i < N + 1; i++) ;
total += i;
cout << total;
执行下面的 C++ 代码段,其语句 cout << (N) 将被执行 000 次或无数次(即死循环)。
cin >> N;
while (N)
cout << (N);
下面的 C++ 代码段的变量都是整型,它能用于判断输入的正整数是否为对称数。所谓对称数是指从左到右和从右到左读该数,其值相同。例如,121121121 和 414414414 都是对称数,而 123123123 不是对称数。( )
cout << "请输入正整数:";
cin >> n;
old_number = n;
new_number = 0;
while (n != 0){
new_number = new_number * 10 + n % 10;
n /= 10;
}
if (old_number == new_number)
cout << "对称数";
else
cout << "非对称数";
执行下面的 C++ 代码段,如果变量都为整型变量,输入为大于 000 的整数,则输出数值一定为 −N-N−N 的值。
cin >> N;
total = 0;
for (i = -N; i < N; i += 2)
total += i;
cout << total;
执行 C++ 语句 printf("%d\n", 3.14) 将报错。
执行下面的 C++ 代码后将输出 250025002500。
int cnt = 0;
for (int i = 1; i < 100; i++)
cnt += i++;
cout << cnt;
小明在测试 C++ 的 printf 的功能时执行了 printf("%-5d\n", 314),则代码输出的结果是 -5314。
试题名称:交朋友
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
Alice 班上共有 4 个小朋友,身高分别为 H1H_1H1, H2H_2H2, H3H_3H3, H4H_4H4,其中 Alice 的身高为 H1H_1H1。Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?
输入格式
输入共 4 行,第 iii 行包含一个整数 HiH_iHi,表示班上小朋友的身高。
输出格式
输出 1 行,包含一个整数 hhh,表示 Alice 想交的朋友的身高。
样例输入 #1
150
165
135
133
样例输出 #1
135
说明/提示
样例解释
样例 1 中,Alice 身高为 150150150,第 2、3 个小朋友与 Alice 身高差距为 151515,同样最接近,Alice 选较矮的一个即第 333 个身高为 135135135 的小朋友交朋友。
数据范围
保证 100≤Hi≤199100 \leq H_i \leq 199100≤Hi≤199 且 HiH_iHi 互不相同。
试题名称:数字替换
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
Alice 不喜欢数字 444,但觉得数字 888 寓意好,她想把数中的 444 全都替换成 888,若数中不含 444 则无需修改,你能帮帮她吗?
输入格式
输入一行,包含一个整数 AAA,表示替换前的数。
输出格式
输出一行,包含一个整数 BBB,表示替换后的数。
样例输入 #1
8459045
样例输出 #1
8859085
样例输入 #2
123
样例输出 #2
123
说明/提示
样例解释
对于样例 111,输入 845904584590458459045 中有两个 444,都将其替换为了 888,得到 885908588590858859085。
对于样例 222,输入 123123123 中不包含 444,无需修改输入数字,输出 123123123。
数据范围
保证 0≤A≤1080\leq A\leq 10^80≤A≤108。