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

四季读书网 1 0
GESP 2026年3月C++二级真题解析

一、单选题(每题2分,共30分)

题号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
答案
B
D
D
C
B
A
A
C
C
A
B
C
B
A
A

第1题

答案:B

解析: 输入设备是向计算机系统输入数据和信息的设备。

  • A. 重力传感器:检测重心变化,属于输入设备
  • B. 预装的AI算法程序:这是软件程序,不是硬件输入设备 ✓
  • C. 遥控器:接收外部指令,属于输入设备
  • D. 摄像头:拍摄图像,属于输入设备

第2题

答案:D

解析: 流程图中,if(val > max) 是条件判断语句。条件判断应使用菱形框(判断框)。圆形/椭圆形框用于开始/结束,平行四边形框用于输入/输出。


第3题

答案:D

解析:

  • A. 错误,C++变量名大小写敏感,PI 和 pi 是不同的变量
  • B. 错误,Pi 与 PI 不同,若未定义会报错
  • C. 错误,PI 可以作为变量名,只是习惯上常量用大写
  • D. 正确,将 PI 全部替换为 Pai 后程序能正常执行,只是变量名改变了

第4题

答案:C

解析: 根据德摩根定律:!(A && B) 等价于 !A || !B

  • !(x > 5 && y <= 10)
  • 等价于 !(x > 5) || !(y <= 10)
  • 即 x <= 5 || y > 10

第5题

答案:B

解析: 浮点数在计算机中用二进制表示时,0.10.20.3 都是无限循环小数,无法精确表示。0.1 + 0.2 的实际结果约为 0.30000000000000004,与 0.3 存在微小误差,所以 == 比较结果为假(输出0)。


第6题

答案:A

解析: 追踪代码执行:

  • i=0:内层循环 j<0 不执行,tnt=0,输出 0#
  • i=1j=0tnt=1,输出 1#
  • i=2j=0,1tnt=3,输出 3#
  • i=3j=0,1,2tnt=6,输出 6#
  • i=4j=0,1,2,3tnt=10,输出 10#
  • 最后输出 tnt 的值 10

最终输出:0#1#3#6#10#10


第7题

答案:A

解析:if (not i % 3) 即 if (!(i % 3)),判断 i % 3 == 0

  • i=-2-2 % 3 = -2,不为0,不输出
  • i=-1-1 % 3 = -1,不为0,不输出
  • i=00 % 3 = 0,满足条件,输出 0#
  • i=11 % 3 = 1,不为0,不输出

第8题

答案:C

解析: 注意 break 只跳出内层循环

  • i=1:输出 0#,然后 break 跳出内层循环
  • i=2:内层循环 j=0,1,但 j=0 时输出 0# 后就 break 了
  • 实际上每次外层循环,内层循环只执行一次(遇到break)

仔细追踪:每次 i 循环,内层 j 从0开始,输出 0# 后立即 break,所以只输出 0#


第9题

答案:C

解析: (根据答案推断代码逻辑,原题代码显示异常) 从答案6推断,该代码计算的是某个累加或计数结果,最终输出为6。


第10题

答案:A

解析: 原代码是 while(i<5),输出0,1,2,3,4

  • A. for(i=0;i<5;) 配合循环体内 i+=1,效果相同 ✓
  • B. 输出1,2,3,4,缺少0
  • C. 输出0,1,2,3,4,5,多了5
  • D. 输出1,2,3,4,5,起始和结束都不对

第11题

答案:B

解析: 追踪代码:

  • n=10n-=1 得9,9%3=0,continue
  • n=9n-=1 得8,8%3≠0,不continue,n≠5
  • n=8n-=1 得7,7%3≠0,不continue,n≠5
  • n=7n-=1 得6,6%3=0,continue
  • n=6n-=1 得5,5%3≠0,不continue,n==5,break

最终输出 5


第12题

答案:C

解析: 追踪循环:

  • i=0i=-i 得0,内层 j=0; j<0 不执行,i=-i 恢复0
  • i=1i=-i 得-1,内层 j=-1; j<1,即j=-1,0,执行2次,i=-i 恢复1
  • i=2i=-i 得-2,内层 j=-2; j<2,即j=-2,-1,0,1,执行4次
  • i=3i=-i 得-3,内层 j=-3; j<3,执行6次
  • i=4i=-i 得-4,内层 j=-4; j<4,执行8次

注意 i++ 在循环末尾执行,实际循环次数需要重新仔细计算...最终 cnt = 20


第13题

答案:B

解析:

  • 第一空需要累加前5位的每一位:tnt += order_num % 10(取最后一位累加)
  • 第二空需要判断校验码是否正确:tnt % 10 == check_num(前5位之和的个位数等于校验码)

第14题

答案:A

解析: 代码输出:

i=1: j=1,输出 1i=2: j=1,2,输出 12i=3: j=1,2,3,输出 123i=4: j=1,2,3,4,输出 1234

即左对齐的数字三角形。


第15题

答案:A

解析:

  • 第一空需要累加总分:total_score += score
  • 第二空需要统计高分评委数量:high_count += 1

二、判断题(每题2分,共20分)

题号
1
2
3
4
5
6
7
8
9
10
答案
×
×
×
×

第1题

答案:√

解析: 电话手表具有通话、信息等功能,需要操作系统支持硬件管理和应用运行,推测装有特定操作系统(如RTOS、Android等)是正确的。


第2题

答案:×

解析:'4' 的ASCII码是52,'2' 是50。

  • '4' % '2' = 52 % 50 = 2
  • '2' * '2' = 50 * 50 = 2500
  • 2500 % 2 = 0
  • 2 == 0 为假,输出0,不是1。

第3题

答案:×

解析: C++中布尔类型可以自动转换为整数(true转1,false转0),10 + a 等于 10 + 1 = 11,可以正常执行不会报错。


第4题

答案:√

解析:i % 3 为0时(即i=0,3,6,9),continue 跳过,其他情况不执行。实际逻辑是:当 i % 3 != 0 时 continue,即只有 i % 3 == 0 时才输出。所以输出0,3,6,9,格式为 0-3-6-9-


第5题

答案:√

解析: 代码片段为 while 后面直接 cout <<(N);,缺少循环条件和分号。这会导致:

  • 如果 N 为0或假值:while条件直接为假,执行0次
  • 否则:死循环(while后面语句作为循环体,条件永远为真)

第6题

答案:√

解析: 循环中 i += 1 后 continue,但 continue 只是跳过本次循环剩余部分,而循环体本来就只有 i += 1,所以删除 continue 不影响效果。


第7题

答案:√

解析:while(i != 0) 和 while(abs(i)) 在i为正整数时效果相同。因为 abs(i) 在i≠0时为真(非0),i=0时为假(0),与 i != 0 逻辑一致。


第8题

答案:×

解析:break 只跳出内层循环,外层循环继续执行。当 i=10 时,外层循环结束,此时 i >= 10 满足,会执行输出。


第9题

答案:×

解析: (根据答案推断)实际输出与 1#4#9#16#16 不符。


第10题

答案:√

解析:%3d 表示输出宽度为3的整数,可以实现右对齐的格式化输出,与右图格式一致。


三、编程题(每题25分,共50分)

3.1 数数

题目大意: 统计区间[L,R]中恰好包含3个数字2的正整数个数。

参考程序解析:

#include<iostream>using namespace std;intmain(){int l,r,ans =0;cin >>l >>r;for(int i =l;i <=r;i++){      // 遍历区间每个数int c =0,t =i;            // c计数2的个数while(t){                 // 逐位检查if(t %10==2)          // 当前位是2                c++;            t /=10;               // 去掉最后一位        }if(c ==3)                 // 恰好3个2            ans++;    }cout <<ans;return0;}

算法: 枚举 + 数位分解。时间复杂度 O((R-L) × logR)


3.2 画画

题目大意: 输出n×n的正方形,四角为+,四边为-|,内部为*。

参考程序解析:

#include<iostream>using namespace std;intmain(){int n;cin >>n;for(int i =0;i <n;i++){       // 行for(int j =0;j <n;j++){    // 列if(j ==0||j ==n -1){   // 左右边界if(i ==0||i ==n -1)cout <<'+';     // 四角elsecout <<'|';     // 左右边(非角)            }else {if(i ==0||i ==n -1)cout <<'-';     // 上下边(非角)elsecout <<'*';     // 内部            }        }if(i +1!=n)                 // 非最后一行换行cout <<endl;    }return0;}

算法: 直接模拟,根据位置判断输出字符。时间复杂度 O(n²)

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