GESP认证C++编程真题解析 | 202603 一级
附上汇总帖:GESP认证C++编程真题解析 | 汇总
单选题
第1题
2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )。
A. 检测重心的重力传感器
B. 预装的AI算法程序
C. 接收动作指令的遥控器
D. 拍摄其他机器人的摄像头
【答案】:B
【解析】
预装的AI算法程序属于软件系统,不属于硬件中的"输入设备"。传感器、遥控器和摄像头均用于采集外部信息并输入到系统中,属于输入设备。
第2题
小明学习编程有一段时间了,他想在图形环境下把当前目录(或文件夹)下的文本文件 20260314.txt 的名字改一下。他用鼠标左键点击选中该文件后,立即完成下面哪个操作后将处于输入新文件名的状态( ):
A. 单击右键并选择弹出菜单中的“重命名”
B. 双击左键
C. 按功能键 F1
D. 按回车键
【答案】:A
【解析】
在常见的图形操作系统中,选中文件后单击右键并选择"重命名"可以更改文件名。
第3题
下面C++代码可以执行,有关说法正确的是( )。
double PI = 3.141596;
cout << (PI);
A. 为了方便初学者,cout << (PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感
B. cout << (PI) 修改为 cout << (Pi) 能正常执行
C. 不能用 PI 做变量名,因为要保存圆周率这个常量
D. 将程序中全部 PI 都改写为 Pai ,将能正常执行,不会报错
【答案】:D
【解析】
C++对大小写是严格敏感的,因此A和B错误。PI只是一个普通的标识符,可以作为变量名使用,C错误。只要变量声明和调用的名字保持一致,改为 Pai 是完全合法的。
第4题
C++表达式 3 * 3 % 2 的值为( )。
A. 81
B. 27
C. 4
D. 1
【答案】:D
【解析】
乘法 * 和取余 % 优先级相同,从左到右结合。先计算 \(3*3\) 得到 9,再计算 9%2 得到 1。
第5题
整型变量 a 、b 的初值都是 4,则下面的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、b的初值都是4,C++中逗号的优先级低,所以"a, b=3, 4"应该理解为一个逗号表达式,三个子表达式分别为"a"b=3"4",也就是说b变为3,a依然为4,第2行输出(4+2)和(3-2),即6和1。
第6题
下面C++代码的相关说法,正确的是( )。
int N = 0;
cin >> N;
cout << (N);
A. 执行时如输入 10,则将输出 10
B. 执行时如输入3.14,将报错
C. 执行时如输入ABC,将报错
D. 执行时如输入 -10 ,将报错
【答案】:A
【解析】
N是整型,输入整数10会正常读取并输出10。如果输入浮点数或字符,C++的标准输入流只会截断或停止读取,并不会直接"报错"导致程序崩溃。
第7题
下面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题
下面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 第一次乘积累积就是 1 * 0 = 0。之后无论 i 是多少,tnt 始终为 0。循环结束时 i 为 5,因此输出为 0 5。
第9题
执行下面C++代码段求序列 -1+2+3-4+5+6-7+8+9-10+11+12...... 之值。例如输入 4 ,则计算序列前 4 项的值,规律如序列所示,输出为 0。下面说法中正确的是( )。
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;
A. L1行中 i < N + 1 应该修为 i < N 才会符合预期
B. L2行中 i % 3 == 1 应修改为 i % 3 == 0 才会符合预期
C. L2行中 i % 3 == 1 修改为 i % 3 与当前程序效果相同
D. 当前代码能实现题目所描述计算目标
【答案】:D
【解析】
序列的规律是:遇到模3余1的位置(1,4,7...)变为负数。代码中 i = 1,2,......N,模3余1时执行 tnt+=-i;能实现所描述的特定目标。
第10题
下面C++代码的相关说法,正确的是( )。
int i;
for (i = 1; i < 10; i++){
if (i % 2 == 0){
continue; // L1
}
else
cout << i << "#";
}
cout << i << "END";
A. 上述代码执行后,其输出是 1#3#5#7#9#9END
B. 删除 else 后的执行效果与当前代码相同
C. 删除 else 且将 cout << i << "#" 移入L1行下面,则执行效果与当前代码相同
D. 在 cout << i << "END" 前增加判断 if(i > 10) ,其执行效果与当前代码相同
【答案】:B
【解析】
A错误。for 循环结束的条件是 i<10 为假,这意味着跳出循环时 i 的值必定是10,而不是9。所以最后输出的应该是 10END。
B正确。如果 if 条件成立触发了 continue,那么后面的 cout 语句无论有没有被 else 包裹,都会被直接跳过。只有当if条件不成立(没有触发continue)时,程序才会按顺序向下执行到 cout。
C错误。如果把输出语句移入 if 分支内部,代码会变成当 i 是偶数时输出并 continue。这样输出的内容就完全反过来了,变成了输出偶数。
D错误。前面分析过,循环结束后 i 的值等于 10。如果加上 if (i > 10)这个判断条件,那么最后的 10END 就不会被打印出来了,执行效果发生了改变。
第11题
一个正整数的每位都是个位数,称为数位,最高位非0。下面的C++代码用于求正整数的所有数位之和,简称数位和。如 123 的各数位分别是1、2、3,则其数位和为 1+2+3 ,结果为6。为实现该目标,横线处应该填写的 代码是( )。
int N;
cin >> N;
int tnt = 0;
while (N != 0){
____________;
____________;
}
cout << "N的数位和为:" << tnt;
A.
tnt += N / 10
N /= 10
B.
tnt += N % 10
N /= 10
C.
tnt += N / 10
N %= 10
D.
tnt = tnt + N % 10
N %= 10
【答案】:B
【解析】
求数位和的常用逻辑是每次取出个位累加到 tnt 中(tnt+=N%10),然后去掉个位(N/=10)。
第12题
小明想要快速知道任给一个正整数中有多少个奇数位(数位值是奇数),下面的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 << " 个奇数";
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。因此填入 N % 10 % 2 == 1。
第13题
小明和弟弟在玩一个拼数字游戏,游戏规则是:二人各写一个两位正整数 M 和 N;然后将较大的数字放在较小的前面,拼成一个4位数;将这个4位数除以3的余数添加到4位数的后面,得到一个5位数;最后判断这个5位数能否被14整除。下面的C++代码用于判断 M 和 N 是否符合全部要求,如果符合则输出 Y 否则输出 N。例如输入 85 和 79,可以拼出 85792 ,恰好是14的倍数,则输出 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)
cout << "Y";
else
cout << "N";
A. 代码段不能完成正确判断
B. L1行代码中条件应该改为 M <= N
C. L2行代码应该改为 if ((Q*10+Q/3) % 14 == 0)
D. 代码段可以不使用变量 Q ,而是在区分 M 和 N 大小后分别直接用它们来判断
【答案】:B
【解析】
不借助变量Q,直接在比较 M 和 N 大小时将相应的 M * 100 + N 或 N * 100 + M 代入 Q 的位置判断即可。
第14题
执行下面C++代码可以判断一个6位正整数 N 的高3位和低3位的差是否是314的倍数。例如 628314 就符合要求。横线处应该填入( )。
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
【解析】
高 3 位是 N/1000,低 3 位是 N%1000。两者的差为(N/1000)-(N%1000),判断其是否为 314 的倍数,使用模运算 % 314 == 0 即可。
第15题
N 是一个正整数。如果 N 的所有奇数位的数位和等于所有偶数位的数位和,则称它是一个“双螺旋数”。例如 12375 的所有奇数位的数位和是9,同时它的所有偶数位的数位和也是9,则 12375 就是一个双螺旋数。下面的C++代码用于判断输入的 N 是否为双螺旋数。空白处应该填入的代码是( )。
int i, N, N1=0, N2=0, N0;
cin >> N;
N0 = N;
while (N){
_________________________
_________________________
}
if(N1 == N2)
cout << N0 << "是双螺旋数" << endl;
A.
N1 += N%10, N /= 10;
N2 += N%10, N /= 10;
B.
N1 += N/10, N /= 10;
N2 += N/10, N /= 10;
C.
N1 += N%10, N %= 10;
N2 += N%10, N %= 10;
D.
N1 += N/10, N %= 10;
N2 += N/10, N %= 10;
【答案】:A
【解析】
要在一次循环中交替处理奇数位和偶数位,可取两次个位:第一次将个位加给 N1 并 N 除以10,紧接着将新的个位加给 N2 并 N 除以 10。对应的操作为 N1 += N % 10; N /= 10; N2 += N % 10; N /= 10;。
判断题
第1题
小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。
A. 正确
B. 错误
【答案】:A
【解析】
现代智能电话手表包含硬件调度及通讯功能,需要专属的嵌入式操作系统。
第2题
C++表达式 4 % 2 和 2 * 2 % 2 的结果相同。
A. 正确
B. 错误
【答案】:A
【解析】
4 % 2 = 0,2 * 2 % 2 也是 4 % 2 = 0。两者结果完全相同。
第3题
下面C++代码段成功执行后将输出 0。
for (i = 1; i < 10; i++)
if (i % 3 == 0)
break;
cout << i;
A. 正确
B. 错误
【答案】:B
【解析】
当 i = 3 时触发 break 跳出循环,循环外部的 cout<< i 会输出 3。
第4题
下面能够正常执行的C++代码段用于求1到N之和,N为正整数。因为 i < N + 1 ,所以是1到N且包含N之和。
tnt = 0;
cout << "请输入正整数:";
cin >> N;
total = 0;
for (i =1; i < N + 1; i++) ;
total += i;
cout << total;
A. 正确
B. 错误
【答案】:B
【解析】
for循环末尾有一个分号,导致它变成了一个空循环。随后执行 total += i;时,只是将最后退出循环时的 i 加上,无法求 1~N 的和。
第5题
执行下面的C++代码段,其语句 cout << (N) 将被执行0次或无数次(即死循环)。
cin >> N;
while (N)
cout << (N);
A. 正确
B. 错误
【答案】:A
【解析】
如果在 while(N)循环内部不对变量 N 进行任何修改,当初始 N 为 0 时执行 0 次;非 0 时陷入死循环。
第6题
下面的C++代码段的变量都是整型,它能用于判断输入的正整数是否为对称数。所谓对称数是指从左到右和从右到左读该数,其值相同。例如,121 和 414 都是对称数,而 123 不是对称数。( )
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 << "非对称数";
A. 正确
B. 错误
【答案】:A
【解析】
该代码求出了 n 的逆序数 new_number,与 old_number 对比,若相等则 n 是对称数。
第7题
执行下面的C++代码段,如果变量都为整型变量,输入为大于0的整数,则输出数值一定为 -N 的值。
cin >> N;
total = 0;
for (i = -N; i < N; i +=2)
total += i;
cout << total;
A. 正确
B. 错误
【答案】:A
【解析】
变量 i 的初始值是 -N,每次步长为 2,并且循环结束的条件是 i < N。这意味着数列的最后一项必定是 N-2(因为如果再加上2,就会变成N,不满足 < N 的条件)。
所以,这个循环产生的 i 的序列是:-N, -N+2, -N+4, ..., N-4, N-2
第8题
执行C++语句 printf("%d\n", 3.14) 将报错。
A. 正确
B. 错误
【答案】:B
【解析】
3.14是 double 类型的数据,使用 %d 会输出无意义的整数值(可能是0或其他值),但不会编译报错或程序崩溃。
第9题
执行下面的C++代码后将输出 2500。
int cnt = 0;
for (int i = 1; i < 100; i++)
cnt += i++;
cout << cnt;
A. 正确
B. 错误
【答案】:B
【解析】
循环体内 i++ 加上 for 头部的 i++ 导致每次增加2,即求奇数项 1+3+5+...+99 的和 =2500。
第10题
小明在测试C++的 printf 的功能时执行了 printf("%-5d\n", 314) ,则代码输出的结果是 -5314。
A. 正确
B. 错误
【答案】:B
【解析】
%-5d 表示左对齐,占据至少 5 个字符宽度。输出结果应为 314 后跟两个空格,并不是 -5314。
浙公网安备 33010602011771号