GESP2026年3月C++一级真题解析

四季读书网 1 0
GESP2026年3月C++一级真题解析
CCF 官方认证考试

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

全题精讲 · 附参考代码 · 考点归纳
选择题 × 15判断题 × 10编程题 × 2C++ 一级
15
选择题
10
判断题
2
编程题
27
总题数
📋 本文目录
  • 一、选择题(第1—15题)

  • 二、判断题(第16—25题)

  • 三、编程题(第1—2题)

🔘
一、选择题
共 15 题
1
输入设备辨析选择题
2026年春节联欢晚会上一个武术表演节目《武BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )。
A.检测重心的重力传感器
B.预装的AI算法程序
C.接收动作指令的遥控器
D.拍摄其他机器人的摄像头
✅ 正确答案B
💡 解析
计算机系统中,输入设备负责向主机传递外部信息。重力传感器获取平衡状态信息、遥控器接收控制指令、摄像头采集视觉图像,这些都属于输入范畴。预装程序属于系统软件范畴,不是硬件设备,因此不能作为输入设备。
2
文件重命名选择题
小明学习编程有一段时间了,他想在图形环境下把当前目录(或文件夹)下的文本文件 `20260314.txt` 的名字改一下。他用鼠标左键点击选中该文件后,立即完成下面哪个操作后将处于输入新文件名的状态( ):
A.单击右键并选择弹出菜单中的"重命名"
B.双击左键
C.按功能键 `F1`
D.按回车键
✅ 正确答案A
💡 解析
选中文件后,右键菜单选择"重命名"可以进入编辑状态。直接双击会打开文件,F1键调用帮助功能,回车键用于确认或打开。也可以按F2键直接重命名。
3
变量名大小写选择题
下面C++代码可以执行,有关说法正确的是( )。
C++
double PI = 3.1415926;cout << (PI);
A.`cout << (PI)` 和 `cout << (pi)` 效果相同
B.`cout << (PI)` 修改为 `cout << (Pi)` 能正常执行
C.不能用 `PI` 做变量名
D.将程序中全部 `PI` 都改写为 `Pai`,将能正常执行
✅ 正确答案D
💡 解析
C++语言对大小写严格区分,`PI`、`Pi`、`pi` 代表三个不同的变量名。`PI` 不是系统保留字,可以用作用量名。只要统一修改变量名,程序就能正常运行。
4
运算符优先级选择题
C++表达式 `3 * 3 % 2` 的值为( )。
A.81
B.27
C.4
D.1
✅ 正确答案D
💡 解析
乘法和取余属于同一优先级,结合方向从左至右。计算过程:3×3=9,9%2=1,最终结果为1。
5
逗号表达式与赋值选择题
整型变量 `a`、`b` 的初值都是4,则下面的C++代码执行后的输出是( )。
C++
a, b = 3, 4;cout << (a + 2) << (b - 2) << endl;cout << a << b << endl;
A.第一行输出 `61`,第二行输出 `43`
B.第一行输出 `52`,第二行输出 `34`
C.第一行输出 `62`,第二行输出 `44`
D.第一行输出 `62`,第二行输出 `32`
✅ 正确答案A
💡 解析
赋值运算符优先级高于逗号。表达式从左至右:先执行 `a`(保持原值4),再执行 `b = 3`,最后是 `4`(无实际作用)。因此 `a+2=6`,`b-2=1`,输出61;第二行输出43。
6
cin输入特性选择题
下面C++代码的相关说法,正确的是(  )。
C++
int N = 0;cin >> N;cout << (N);
A.输入10,输出10
B.输入3.14,将报错
C.输入ABC,将报错
D.输入-10,将报错
✅ 正确答案A
💡 解析
输入3.14时,cin遇到小数点停止,只读取整数部分3存入变量,程序继续运行。输入字母时cin进入失败状态,变量保持原值0,程序不崩溃。负整数是合法输入,不会报错。
7
if-else绝对值逻辑选择题
下面C++代码执⾏时,其说法正确的是(  )。
C++
int M = 0, N = 0;cin >> M;cin >> N;if (N > M)    cout << (N - M);else    cout << (M - N);
A.如果输⼊⼀个正数和⼀个负数,其输出结果肯定是⼤于0
B.不管是负整数、正整数亦或0,其结果肯定是⼤于等于0
C.如果 N 和 M 是相等的整数,将不会有输出
D.如果 N 和 M 输⼊带有⼩数点的数,将按整数部分计算
✅ 正确答案B
💡 解析
代码逻辑等价于求绝对值`|M-N|`。无论输入正数、负数还是零,结果必然大于等于零。相等时输出0而非无输出。输入小数会导致读取异常,结果不可控。
8
for循环与乘零选择题
下面C++代码执⾏后的输出是(  )。
C++
int i, tnt = 1;for (i = 0; i < 5; i++)    tnt *= i;printf("%2d%2d\n", tnt, i);
A.`24 5`
B.`10 5`
C.`0 4`
D.`0 5`
✅ 正确答案D
💡 解析
循环首次执行时i=0,tnt*=0使结果变为0。后续乘以任何数仍为0。循环结束时i值为5,所以输出0 5。
9
序列求和代码分析选择题
执⾏下⾯C++代码段求序列-1+2+3-4+5+6-7+8+9-10+11+12...... 之值。例如输⼊ 4,则计算序列前4 项的值,规律如序列所⽰,输出为 0。下⾯说法中正确的是(  )。
C++
int N, tnt, i;cin >> N;tnt = 0;for (i = 1; i < N + 1; i++)    if (i % 3 == 1)        tnt += -i;    else        tnt += i;
A.L1⾏中 i < N + 1 应该修为 i < N 才会符合预期
B.L2⾏中 i % 3 == 1 应修改为 i % 3 == 0 才会符合预期
C.L2⾏中 i % 3 == 1 修改为 i % 3 与当前程序效果相同
D.当前代码能实现题⽬所描述计算⽬标
✅ 正确答案D
💡 解析
i<n+1即i≤n,可遍历到第n项。i%3==1对应每组第一个数为负的规则。单独使用i%3结果非零即真,与==1含义不同。当前代码符合题目要求。
10
continue语句与else选择题
下面C++代码的相关说法,正确的是(  )。
C++
int i;for (i = 1; i < 10; i++){    if (i % 2 == 0){        continue;    }    else        cout << i << "#";}cout << i << "END";
A.上述代码执行后,其输出是 `1#3#5#7#9#END`
B.删除 `else` 后的执行效果与当前代码相同
C.删除 `else` 且将 `cout << i << "#"` 移入L1行下面,则执行效果与当前代码相同
D.在 `cout << i << "END"` 前增加判断 `if(i > 10)`,其执行效果与当前代码相同
✅ 正确答案B
💡 解析
循环结束后i=10,输出10END。删除else后,偶数继续执行,奇数输出,结果相同。将输出语句移入if块会导致偶数无法输出。增加i>10判断会使输出不执行。
11
数位和求法选择题
一个正整数的每位都是个位数,称为数位,最高位非0。下面的C++代码用于求正整数的所有数位之和,简称数位和。如 `123` 的各数位分别是1、2、3,则其数位和为 `1+2+3`,结果为6。为实现该目标,横线处应该填写的代码是( )。
C++
int N;cin >> N;int tnt = 0;while (N != 0){    _____________;    _____________;}
A.选项A:tnt += N / 10; N /= 10
B.选项B:tnt += N % 10; N /= 10
C.选项C:tnt += N / 10; N %= 10
D.选项D:tnt = tnt + N % 10; N %= 10
✅ 正确答案B
💡 解析
提取个位数字使用N%10,累加后通过N/=10删除已处理位。其他选项提取的是高位或无法正确删除位数。
12
统计奇数位个数选择题
小明想要快速知道任给一个正整数中有多少个奇数位(数位值是奇数),下面的C++代码是其实现,横线处应该填入的代码是( )。
C++
int N;cin >> N;int odd_count = 0;while (N != 0){    if (_____________)        odd_count += 1;    N = (N - N % 10) / 10;}
A.N % 10 % 2 == 0
B.N % 10 % 2 == 1
C.N / 10 / 2 == 1
D.N / 2 / 10 == 0
✅ 正确答案B
💡 解析
N%10取出当前个位数字,对2取余结果为1表示奇数。其他选项或取高位,或判断逻辑相反。
13
数字拼接游戏选择题
小明和弟弟在玩一个拼数字游戏,游戏规则是:二人各写一个两位正整数 `M` 和 `N`;然后将较大的数字放在较小的前面,拼成一个4位数;将这个4位数除以3的余数添加到4位数的后面,得到一个5位数;最后判断这个5位数能否被14整除。下面的C++代码用于判断 `M` 和 `N` 是否符合全部要求,如果符合则输出 `Y` 否则输出 `N`。例如输入 `85` 和 `79`,可以拼出 `85792` 恰好是14的倍数,则输出 `Y`。关于下面代码描述正确的是( )。
C++
int M, N, Q;cin >> M >> N;if(M > N)    Q = M*100+N;else    Q = N*100+M;if((Q*10+Q%3) % 14 == 0)    cout << "Y";else    cout << "N";
A.代码段不能完成正确判断
B.L1行代码中条件应该改为 `M <= N`
C.L2行代码应该改为 `if ((Q*10+Q/3) % 14 == 0)`
D.代码段可以不使用变量 `Q`,而是在区分 `M` 和 `N` 大小后分别直接用它们来判断
✅ 正确答案D
💡 解析
代码逻辑正确,可以完成判断。M<=N会导致较小数放前面,错误。题目要求添加余数而非商。可以将拼接与计算合并处理。
14
高低位差整除判断选择题
执行下面C++代码可以判断一个6位正整数 `N` 的高3位和低3位的差是否是314的倍数。例如 `628314` 就符合要求。横线处应该填入( )。
C++
cin >> N;if (_____________________)    cout << N << "符合条件" << endl;
A.((N % 1000) - (N / 1000)) / 314 == 0
B.((N / 1000) - (N % 1000)) % 314 == 0
C.((N % 1000) - (N / 1000)) / 314
D.((N / 1000) - (N % 1000)) % 314
✅ 正确答案B
💡 解析
N/1000取得高3位,N%1000取得低3位。判断倍数关系应用取模运算而非除法。选项B正确实现了这一逻辑。
15
双螺旋数判断选择题
`N` 是一个正整数。如果 `N` 的所有奇数位的数位和等于所有偶数位的数位和,则称它是一个"双螺旋数"。例如 `12375` 的所有奇数位的数位和是9、同时它的所有偶数位的数位和也是9,则 `12375` 就是一个双螺旋数。下面的C++代码用于判断输入的 `N` 是否为双螺旋数。空白处应该填入的代码是( )。
C++
int i, N, N1=0, N2=0, N0;cin >> N;N0 = N;while (N){    ______________________    ______________________}if(N1 == N2)    cout << N0 << "是双螺旋数" << endl;
A.选项A:N1+=N%10,N/=10; N2+=N%10,N/=10;
B.选项B:N1+=N/10,N/=10; N2+=N/10,N/=10;
C.选项C:N1+=N%10,N%=10; N2+=N%10,N%=10;
D.选项D:N1+=N/10,N%=10; N2+=N/10,N%=10;
✅ 正确答案A
💡 解析
从低位开始依次取出数字,奇偶位交替累加。N%10取个位,N/=10删除该位。选项A正确实现了交替处理。
⚖️
二、判断题
共 10 题
16
智能手表与操作系统判断题
小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。
✓ 正确
✗ 错误
✅ 正确答案正确
💡 解析
现代智能手表具备复杂功能,需要操作系统来协调硬件资源、管理应用程序。打电话、发信息等功能的实现离不开系统支持。
17
取余表达式相等判断题
C++表达式 `4 % 2` 和 `2 * 2 % 2` 的结果相同。
✓ 正确
✗ 错误
✅ 正确答案正确
💡 解析
乘法和取余优先级相同,从左至右计算。4%2=0,2*2%2=4%2=0,两结果相等。
18
break跳出循环判断题
下面C++代码段成功执行后将输出 `0`。
C++
for (i = 1; i < 10; i++)    if (i % 3 == 0)        break;cout << i;
✓ 正确
✗ 错误
❌ 正确答案错误
💡 解析
i=1时继续,i=2时继续,i=3时满足条件执行break跳出,此时i=3,输出3而非0。
19
for循环末尾分号陷阱判断题
下面能够正常执行的C++代码段用于求1到N之和,N为正整数。因为 `i < N + 1`,所以是1到N且包含N之和。
C++
for (i =1; i < N + 1; i++) ;    total += i;
✓ 正确
✗ 错误
❌ 正确答案错误
💡 解析
for循环后存在分号,使得循环体为空。循环只让i自增到N+1,total+=i只在循环外执行一次,最终值为N+1而非求和结果。
20
while死循环分析判断题
执行下面的C++代码段,其语句 `cout << (N)` 将被执行0次或无数次(即死循环)。
C++
cin >> N;while (N)    cout << (N);
✓ 正确
✗ 错误
✅ 正确答案正确
💡 解析
输入0时条件为假,不执行;输入非0时条件恒为真且N未改变,导致死循环。两种情况分别对应0次和无数次。
21
回文数判断算法判断题
下面的C++代码段的变量都是整型,它能用于判断输入的正整数是否为对称数。所谓对称数是指从左到右和从右到左读该数,其值相同。例如,`121` 和 `414` 都是对称数,而 `123` 不是对称数。( )
C++
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 << "对称数";
✓ 正确
✗ 错误
✅ 正确答案正确
💡 解析
代码将输入数字反转后与原数比较。相等则为对称数,这是判断回文数的经典算法。
22
等差序列求和判断题
执行下面的C++代码段,如果变量都为整型变量,输入为大于0的整数,则输出数值一定为 `-N` 的值。
C++
cin >> N;total = 0;for (i = -N; i < N; i +=2)    total += i;cout << total;
✓ 正确
✗ 错误
✅ 正确答案正确
💡 解析
循环遍历-N到N-2的偶数个项。以N=4为例:-4+-2+0+2=-4。数学上可证明总和等于-N。
23
printf类型不匹配判断题
执行C++语句 `printf("%d\n", 3.14)` 将报错。
✓ 正确
✗ 错误
❌ 正确答案错误
💡 解析
该语句不会产生编译错误,但会导致运行时错误。%d期望整数却传入浮点数,会输出错误的内存数据。
24
后置自增与奇数求和判断题
执行下面的C++代码后将输出 `2500`。
C++
int cnt = 0;for (int i = 1; i < 100; i++)    cnt += i++;cout << cnt;
✓ 正确
✗ 错误
✅ 正确答案正确
💡 解析
i++作为后置自增,每次循环使i增加2。实际累加1、3、5...99共50个奇数。等差数列求和:(1+99)×50/2=2500。
25
printf左对齐格式判断题
小明在测试C++的 `printf` 的功能时执行了 `printf("%-5d\n", 314)`,则代码输出的结果是 `-5314`。
✓ 正确
✗ 错误
❌ 正确答案错误
💡 解析
%-5d表示左对齐占5位,不足部分右侧补空格。输出结果为"314 "(314后有两个空格),而非-5314。
💻
三、编程题
共 2 题
1
交朋友编程题
Alice班上有4个小朋友,身高分别为H1、H2、H3、H4(Alice身高为H1)。她想找身高最接近自己的人做朋友,若多人差距相同则选择较矮的那个。
📥 输入格式
4行整数,分别表示H1、H2、H3、H4。
📤 输出格式
输出朋友的身高。
输入样例
150 165 135 133
输出样例
135
📏 数据范围
100≤Hi≤199,各身高互不相同。
🧠 思路分析
将H2作为初始候选人,计算与H1的差值依次比较H3、H4:差值更小则更新候选人,差值相同但身高更矮也更新输出最终答案
📝 参考代码
C++
#include<bits/stdc++.h>
using namespace std;int main(){    int h1, h2, h3, h4;    cin >> h1 >> h2 >> h3 >> h4;    int ans = h2;    int mind = abs(h1 - h2);    int d = abs(h1 - h3);    if (d < mind || (d == mind && h3 < ans)){        ans = h3;        mind = d;    }    d = abs(h1 - h4);    if (d < mind || (d == mind && h4 < ans)){        ans = h4;    }    cout << ans << endl;    return 0;}
2
数字替换编程题
将整数中的所有数字4替换为8,若不含4则保持不变。
📥 输入格式
一个整数A。
📤 输出格式
替换后的整数B。
输入样例
8459045
输出样例
8859085
📏 数据范围
0≤A≤10^8。
🧠 思路分析
从低位到高位提取每位数字判断是否为4,若是则替换为8按对应位权累加到结果中位权逐位乘10递增
📝 参考代码
C++
#include<bits/stdc++.h>
using namespace std;int main() {    int a, b = 0, t = 1;    cin >> a;    while(a){        int digit = a % 10;        if(digit == 4) digit = 8;        b += t * digit;        a /= 10;        t *= 10;    }    cout << b;    return 0;}
🏆

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