2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律)

四季读书网 3 0
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律)
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第1张
一、单选题(每题2分,共30 
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第2张

第 题 2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )

A. 检测重心的重力传感器

B. 预装的AI算法程序

C. 接收动作指令的遥控器

D. 拍摄其他机器人的摄像头

【答案】B

【考纲知识点】

输入设备的定义:输入设备是向计算机系统输入数据、信息、指令的外部硬件设备,作用是将外部信息转换为计算机能识别的电信号,供系统处理。

  • 输入设备的本质:硬件,负责向系统输入信息
  • 程序 / 软件:是计算机系统的处理逻辑,不属于输入 / 输出硬件设备

【解析】

A :传感器会将机器人的重心、姿态等物理信息转换为电信号输入给计算机系统,属于输入设备,不符合题意。

B :AI 算法是软件程序,是计算机系统的处理逻辑,负责根据输入信息计算、生成控制指令,不属于输入设备,符合题意。

C :遥控器会将动作指令输入给机器人系统,属于输入设备,不符合题意。

D :摄像头会将图像信息输入给机器人系统,用于定位、保持队列,属于输入设备,不符合题意。

第 题 下面代码用来找出输入的N个正整数中最大的一个。如果将代码段用流程图来表示,则 L1 标记的代码行应该使用的图形是( )。

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第3张

A. 圆形框

B. 椭圆形框

C. 平行四边形框

D. 菱形框

【答案】D

【考纲知识点】流程图标准图形规范(ANSI 标准):

图形
名称
用途
菱形框
判断框
表示条件判断、分支选择(如ifwhile条件)
矩形框
处理框
表示赋值、运算等处理操作
平行四边形框
输入 / 输出框
表示cin/cout等输入输出操作
椭圆形框
起止框
表示程序的开始 / 结束
圆形框
连接符
表示流程图的跳转连接

【解析】L1 标记的代码是if(val > max),这是条件判断语句,用于决定是否执行max = val,属于分支判断。

A 选项(圆形框):用于流程图连接,不用于判断,错误。

B 选项(椭圆形框):用于程序起止,不用于判断,错误。

C 选项(平行四边形框):用于输入输出,不用于判断,错误。

D 选项(菱形框):专门用于条件判断,正确。

流程图:判断用菱形,输入输出用平行四边形,处理用矩形,起止用椭圆

第 题 下面 C++ 代码可以执行,有关说法正确的是( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第4张

A. 为了方便初学者, cout << (PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感

B. cout << (PI) 修改为 cout << (Pi) 能正常执行

C. 不能用 PI 做变量名,因为要保存圆周率这个常量

D. 将程序中全部 PI 都改写为 Pai ,将能正常执行,不会报错

【答案】D

【考纲知识点】

1、C++ 标识符大小写敏感:C++ 是严格区分大小写的语言,PI、Pi、pi是三个完全不同的标识符,不能混用。

2、变量命名规则:C++ 中可以自定义变量名,只要符合标识符规则(字母、数字、下划线,不能以数字开头)即可,PI是合法的变量名,C++ 标准库中没有预定义PI(需要手动定义或包含<cmath>并开启宏才会有M_PI)。

3、变量定义与使用:变量必须先定义后使用,修改变量名后必须同步修改所有使用处,否则会出现未定义标识符错误。

【解析】

A:错误。C++ 严格区分大小写,PI和pi是不同变量,pi未定义,cout << pi会编译报错,效果完全不同。

B:错误。代码中定义的是PI,Pi是未定义的标识符,修改为cout << (Pi)会编译报错,无法正常执行。

C:错误。C++ 中PI不是关键字,也不是预定义常量,完全可以作为自定义变量名使用,不存在 “不能用 PI 做变量名” 的限制。

D:正确。将所有PI都改为Pai,变量定义double Pai = 3.1415926;和输出cout << (Pai);完全匹配,变量定义与使用一致,能正常执行,不会报错。

第 题 下面选择项中,与C++表达式 !(x > 5 && y <= 10) 等价的是( )

A. x <= 5 && y > 10

B. x > 5 || y <= 10

C. x <= 5 || y > 10

D. ! x > 5 && ! y <= 10

【答案】C

【考纲知识点】

德摩根定律(De Morgan's Laws):逻辑运算的等价变换规则,是 C++ 逻辑表达式化简的核心知识点:

  1. 1、!(A && B) ≡ !A || !B
     (非 A 且 B 等价于 非 A 或 非 B)
  2. 2、!(A || B) ≡ !A && !B
     (非 A 或 B 等价于 非 A 且 非 B)
  3. 3、关系运算符取反规则:
    • !(x > a)  等价于 x <= a
  • !(x < a)  等价于 x >= a
  • !(x >= a) 等价于 x < a
  • !(x <= a) 等价于 x > a

【解析】

解题步骤

令 A = x > 5,B = y <= 10,原表达式为 !(A && B)

根据德摩根定律:!(A && B) ≡ !A || !B

对A取反:!A = !(x > 5) ≡ x <= 5

对B取反:!B = !(y <= 10) ≡ y > 10

因此原表达式等价于:x <= 5 || y > 10

逐项分析

A 选项:x <= 5 && y > 10:逻辑与,不符合德摩根定律的||,错误。

B 选项:x > 5 || y <= 10:未对条件取反,完全错误。

C 选项:x <= 5 || y > 10:完全符合推导结果,正确。

D 选项:! x > 5 && ! y <= 10:运算符优先级错误,!优先级高于>/<=,等价于(!x) >5 && (!y) <=10,和原表达式逻辑完全无关,错误。

德摩根定律核心:非与变或,非或变与,条件全部取反

第 题 某同学执行C++代码 cout << ((0.1 + 0.2) == 0.3) 时输出 ,下面最可能的原因是( )

A. C++的 运算符在处理小数时存在bug

B. 0.1 、 0.2 和 0.3 在计算机中无法用二进制浮点数精确表示,导致 0.1 + 0.2 的结果与 0.3 存在微小误差

C. == 运算符不能用于比较浮点数,只能用于整数

D. 因为 0.1 + 0.2 的数学结果不等于 0.3

【答案】B

【考纲知识点】二进制浮点数的精度问题:计算机使用二进制存储浮点数(如double/float),而0.10.2这类十进制小数无法被二进制精确表示,只能存储近似值。因此0.1 + 0.2的实际计算结果是一个无限接近0.3但不等于0.3的数,导致==比较结果为false(输出0)。

【解析】

A :错误。+运算符本身没有 bug,是浮点数的二进制存储特性导致的精度问题。

B :正确。这是浮点数精度问题的本质原因,0.1、0.2、0.3都无法用二进制精确表示,相加后产生微小误差,导致比较不相等。

C :错误。==可以用于浮点数比较,只是因为精度问题,不建议直接用==判断浮点数相等,通常用fabs(a-b) < 1e-9这类误差范围判断。

D :错误。数学上0.1 + 0.2 = 0.3是完全成立的,问题出在计算机的二进制存储,不是数学本身

浮点数精度问题:二进制无法精确表示十进制有限小数,禁止直接用==比较浮点数

第 题 下面的 C++ 代码段执行后其输出是( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第5张

A. 0#1#3#6#10#10

B. 1#2#3#4#5#6#7#8#9#10#10

C. 10#10

D. 10

【答案】A

【考纲知识点】

嵌套循环的执行流程、累加计数

  • 外层循环i04(共 5 次),每次外层循环结束后输出一次tnt
  • 内层循环j0i-1,执行i次,每次tnt += 1
  • 最终外层循环结束后,再输出一次tnt

【解析】

外层i
内层循环执行次数
tnt
变化
本次输出
i=0j < 0
 → 0 次
tnt=00#
i=1j=0
 → 1 次
tnt=11#
i=2j=0,1
 → 2 次
tnt=33#
i=3j=0,1,2
 → 3 次
tnt=66#
i=4j=0,1,2,3
 →4 次
tnt=1010#

外层循环结束后,执行cout << tnt,输出10。最终输出:0#1#3#6#10#10

第 题 下面的 C++ 代码执行之后的输出是( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第6张

A. 0#

B. -2#-1#1#

C. -1#0#

D. -2#0#1#

【答案】A

【考纲知识点】

1、not关键字:C++ 中not是逻辑非运算符!的替代写法,not A等价于!A

2、负数取模规则:C++ 中取模%的结果符号与被除数一致

3、逻辑非的真值判断:!0为true(非 0),!非0为false(0)

【解析】

循环i的取值:-2, -1, 0, 1,逐个判断if (not i % 3)(等价于if (!(i % 3)))

i = -2:i % 3 = -2(非 0)→ !(-2) = false → 不输出

i = -1:i % 3 = -1(非 0)→ !(-1) = false → 不输出

i = 0:i % 3 = 0 → !0 = true → 输出0#

i = 1:i % 3 = 1(非 0)→ !1 = false → 不输出

最终仅输出0#

第 题 下面的 C++ 代码执行后其输出是( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第7张

A. 0#0#1#0#1#2#0#1#2#3#12

B. 0#0#1#0#1#2#0#1#2#3#

C. 0#

D. 1#

【答案】C

【考纲知识点】

1、break语句的作用:仅跳出当前所在的内层循环,无法影响外层循环。

2、循环执行流程:外层循环i=1执行第一次时,内层循环执行后立即执行break,直接跳出外层循环。

【解析】

1、初始化cnt=0,进入外层循环i=1。

2、内层循环j=0,j<1成立:

(1)输出0#。

(2)j++变为1,循环结束。

3、执行break:跳出外层循环(仅执行一次外层循环)。

4、此时i=1,j=1。

5、判断if(i>=5):1>=5不成立,不执行cout << (i*j)。

6、最终输出仅为内层循环执行的内容:0#。

第 题 下面 C++ 代码执行后其输出是( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第8张

A. 2

B. 4

C. 6

D. 8

【答案】C

【考纲知识点】

1、continue语句:结束当前本次循环,直接进入下一次循环判断,不执行后续代码。

2、break语句:结束当前整个循环,跳出循环体。

3、嵌套循环执行流程:内层循环break仅跳出内层,不影响外层。

【解析】

1、外层i=1:

(1)内层j=1:j!=3且i!=2 → count=1。

(2)内层j=2:j!=3且i!=2 → count=2。

(3)内层j=3:continue,不计数。

(4)内层j=4:j!=3且i!=2 → count=3。

2、外层i=2:

内层j=1:j!=3,但i==2 → break,跳出内层循环。

3、外层i=3:

(1)内层j=1:j!=3且i!=2 → count=4。

(2)内层j=2:j!=3且i!=2 → count=5。

(3)内层j=3:continue,不计数。

(4)内层j=4:j!=3且i!=2 → count=6。

4、输出count=6。

第 10 题 下面4个选项中,与下面 C++ 代码段具有相同效果的是( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第9张
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第10张
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第11张

【答案】A

【考纲知识点】

1、while循环与for循环的等价转换。

2、循环初始值、条件、步长的对应关系。

【解析】

A 选项:for (i = 0; i < 5; i++) cout << i;

初始值i=0,条件i<5,步长i++,逻辑完全一致,输出相同。

B 选项:从i=1开始,错误。

C/D 选项:循环条件错误,输出序列长度不同。

第 11 题 下面 C++ 代码执行后输出是( )。

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第12张

A. 0

B. 5

C. 6

D. 7

【答案】B

【考纲知识点】

1、continue与break的区别:continue跳过后续代码,break直接终止循环。

2、循环执行流程:逐轮递减n并判断条件。

【解析】

初始n=10。

第 1 轮:n=9 → 9%3==0 → continue。

第 2 轮:n=8 → 不满足 continue,不满足n==5。

第 3 轮:n=7 → 不满足 continue,不满足n==5。

第 4 轮:n=6 → 6%3==0 → continue。

第 5 轮:n=5 → 不满足 continue,满足n==5 → break,退出循环。

输出n=5。

第 12 题 下面 C++ 代码段执行后,其输出是( )。

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第13张

A. 5

B. 15

C. 20

D. 30

【答案】C

【考纲知识点】

1、循环变量的修改:在for循环体内对循环变量i进行赋值,会干扰循环的正常执行流程。

2、嵌套循环的累加:内层循环次数决定每次累加值。

【解析】

1、初始:cnt=0。

2、外层i=0

(1)i = -0 → 仍为0。

(2)内层j=0; j<0 → 不执行,cnt不变。

(3)i = -0 → 仍为0。

3、外层i=1

(1)i = -1。

(2)内层j=-1; j<1 → j=-1, 0 → 执行 2 次,cnt=2。

(3)i = 1。

4、外层i=2

(1)i = -2。

(2)内层j=-2; j<2 → j=-2,-1,0,1 → 执行 4 次,cnt=6。

(3)i = 2。

5、外层i=3:

(1)i = -3。

(2)内层执行 6 次,cnt=12。

(3)i = 3。

6、外层i=4:

(1)i = -4。

(2)内层执行 8 次,cnt=20。

(3)i = 4。

7、输出20。

第 13 题 某学校图书馆的借阅卡号由6位整数组成。前5位是顺序编号,第6位是校验码,用于防止输错。校验码规则如下:将前5位数字相加,然后除以10的余数,就是第6位数字。如卡号 123455 的前5位之和为 15 ,除以 10 的余数是5,故第6位为5。下面的C++代码段用于判断卡号是否正确,横线处应填入的代码是( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第14张
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第15张

【答案】B

【考纲知识点】

1、数字逐位提取:用%10取数字最后一位,/10去掉最后一位,是处理整数逐位运算的经典方法。

2、校验逻辑:前 5 位求和 → 对 10 取余 → 与校验码比较。

3、循环累加:循环 5 次,依次提取前 5 位数字并累加。

【解析】

题目核心

图书馆借阅卡号校验:前 5 位数字之和除以 10 的余数 = 第 6 位校验码,补全代码。

A 选项:tnt += order_num / 10 → 取的是去掉最后一位的数,不是当前位,错误;tnt / 10 不是余数,错误。

B 选项:

(1)tnt += order_num % 10 → 正确提取当前最后一位,累加到总和。

(2)tnt % 10 == check_num → 正确:总和对 10 取余,和校验码比较,符合规则。

C 选项:tnt = order_num / 10 + tnt → 提取错误,不是当前位,错误。

D 选项:tnt = order_num % 10 → 每次赋值会覆盖之前的和,不是累加,错误;tnt / 10 不是余数,错误。

第 14 题 下面的 C++ 代码段正常执行后其输出的数字图形是( )。

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第16张
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第17张
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第18张

【答案】A

【考纲知识点】

1、嵌套循环执行流程:外层循环控制行数,内层循环控制每行打印的内容。

2、循环条件分析:外层i从 1 到 4(共 4 行),内层j从 1 到i(每行打印i个数字)。

【解析】

外层i
内层j的取值
打印内容
换行
i=1j=11
换行
i=2j=1,212
换行
i=3j=1,2,3123
换行
i=4j=1,2,3,41234
换行

第 15 题 某学校举办校园演讲比赛,每位选手由8位评委打分(分数为 0~10 的整数),且每位评委必须打分。计分规则:若至少有5位评委给出大于等于6分,则成绩有效,最终得分为所有8位评委的总分;如给出低于6分的评委数量超过5位,则记为0分。以下核心程序段依次输入8个分数,并计算最终得分。横线处应填入( )。

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第19张
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第20张

【答案】A

【考纲知识点】循环

【解析】

逻辑对应:(1)无论分数高低,都要累加到总分(题目要求 “最终得分为所有 8 位评委的总分”)。
  • (2)只有分数≥6 分时,才给high_count计数 + 1。

    A 选项

    total_score += score → 正确:每次输入分数都累加总分。

    high_count += 1 → 正确:分数≥6 时,计数 + 1。

    B 选项:high_count += score → 错误,计数应该 + 1,不是加分数。

    C 选项:顺序错误,high_count +=1 应该在if内部,不能在外部,否则所有分数都计数,错误。

    D 选项:total_score *= score → 错误,是累加不是累乘,逻辑完全错误。

二、判断题(每题2分,共20
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第21张

第 题 小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。( )

【答案】√

【考纲知识点】智能嵌入式设备的系统基础

【解析】电话手表属于智能穿戴设备,需要操作系统来管理硬件、运行通信 / 计时等应用,因此必然搭载嵌入式操作系统(如 Wear OS、厂商自研 RTOS 等)。

第 题 C++ 语句 cout << ('4' % '2' == '2' * '2' % 2); 执行后的输出是1( )

【答案】×

【考纲知识点】字符的 ASCII 值、运算符优先级

【解析】

字符'4'的 ASCII 值为 52,'2'为 50

左边:52 % 50 = 2

右边:50 * 50 % 2 = 2500 % 2 = 0

2 == 0 为false,输出0,不是 1

第 题 下面的 C++ 代码段执行时将报错,因为10是整数类型, 是布尔类型。由于类型不同,不能进行加法运算。( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第22张

【答案】×

【考纲知识点】C++ 类型隐式转换

【解析】C++ 中bool类型会隐式转换为inttrue1false0。因此10 + a = 10 + 1 = 11,代码可正常执行,不会报错。

第 题 下面C++代码段执行后将输出 0-3-6-9- 。 ( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第23张

【答案】√

【考纲知识点】continue语句、取模运算

【解析】

if(i%3)等价于if(i%3 != 0):当i不是 3 的倍数时,执行continue跳过输出

仅当i是 3 的倍数(0,3,6,9)时,执行输出

最终输出:0-3-6-9-,与题目描述一致

第 题 执行下面的 C++ 代码段,如果N是基本数据类型,则语句 cout << (N); 将被执行 次或无数次(即死循环)。( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第24张

【答案】√

【考纲知识点】while循环条件、死循环

【解析】

while(N)等价于while(N != 0)

若N=0:条件为假,循环执行 0 次

若N≠0:循环体未修改N,条件永远为真,死循环,执行无数次

第 题 下面的 C++ 代码段可正常执行,删除 continue 不影响执行效果。( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第25张

【答案】√

【考纲知识点】continue语句的作用

【解析】

原代码:每次循环i +=1后,continue跳过后续代码,直接进入下一次i++,最终i的变化为0→1→3→5→7→9→11,循环结束时i=11

删除continue后:循环体无后续代码,i的变化完全一致,最终i=11,执行效果完全相同

第 题 下面的 C++ 代码段用于计算1N之间且包含N的所有数字中含有的3的个数,如140含有143, 120则只含有23。如果将 while (i != 0) 改为 while (abs(i)) ,则执行结果相同。( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第26张

【答案】√

【考纲知识点】abs()函数、循环条件等价性

【解析】

i != 0 等价于 abs(i) != 0,因此while(i != 0)和while(abs(i))完全等价。

输入为正整数,i始终非负,abs(i)=i,循环逻辑完全一致,执行结果相同。

第 题 下面的 C++ 代码段执行将不会有输出,因为内层循环 总是 开始, i * j % 10 == 0 将会被满足,执行 break ,故而 小于 10 ,不会满足 if 判断条件。( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第27张

【答案】×

【考纲知识点】嵌套循环、break作用域

【解析】

外层循环i从 1 到 9,内层循环j从 0 到i-1

j=0时i*j=0,满足条件break,内层循环仅执行 1 次

外层循环结束后,i=10,j为最后一次内层循环结束后的值(j=0)

if(i>=10)成立,执行cout << 10*0 = 0,有输出,题目描述错误

第 题 下列 C++ 代码执行后将输出 1#4#9#16#16。( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第28张

【答案】×

【考纲知识点】嵌套循环、break作用域、条件判断

【解析】

(1)外层i=1:内层j=1,1*1%10≠0,循环结束j=2,j>=2成立,输出1*1=1#

(2)i=2:j=1→2,2*1=2≠0,2*2=4≠0,j=3,输出4#

(3)i=3:j=1→3,3*1=3≠0,3*2=6≠0,3*3=9≠0,j=4,输出9#

(4)i=4:j=1→4,4*1=4≠0,4*2=8≠0,4*3=12≠0,4*4=16≠0,j=5,输出16#

(5)外层结束i=5,j=5,if(i>=5)成立,输出5*5=25

(6)最终输出:1#4#9#16#25,不是1#4#9#16#16

第 10 题 下面 C++ 代码执行后输出如左图所示,将 " %d" 修改为 "%3d" 即可实现右图输出。( )

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第29张

【答案】√

【考纲知识点】printf格式化输出、宽度控制

【解析】

(1)%d:默认右对齐,宽度按数字实际长度,左图为紧凑输出

(2)%3d:设置输出宽度为 3,不足 3 位用空格填充,右对齐,实现右图的整齐对齐效果

(3)代码逻辑完全符合,修改后可实现右图输出

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

3.1 编程题 1

试题名称:数数

时间限制1.0 s

内存限制512.0 MB

3.1.1 题目描述

对于正整数 n,如果n 的所有数位中包含恰好 3个 2,Alice 会认为这个正整数是美丽的。例如,正整数 24122中包含3 个2 ,所以 24122美丽的;正整数132 中包含1 个2 ,所以132 不是美丽的;正整数212322 中包含 4个 2,所以 212322不是美丽的。

Alice 想知道正整数L 到正整数 R(包括L 和 R)中有多少美丽的正整数,你能帮她数一数吗?

3.1.2 输入格式

输入共2 行,第一行为正整数 L,第二行为正整数 R。

3.1.3 输出格式

输出一行,包含一个整数 C,表示L 到R 中 C美丽数的数量。

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第30张

【考纲知识点】

1、数字逐位统计:通过取模%10提取数字最后一位、整除/10去掉最后一位,统计数字中2的出现次数;也可将数字转为字符串逐字符统计。

2、遍历与条件判断:遍历区间[L, R]内的所有整数,对每个数判断是否满足「恰好 3 个 2」的条件,符合则计数 + 1。

3、时间复杂度优化:数据范围1 ≤ L ≤ R ≤ 10^6,最大遍历次数为10^6次,属于可接受的时间复杂度,无需复杂优化,暴力遍历即可通过。

【解题思路】

1、读取输入:读取区间左右端点L和R。

2、初始化计数器:count = 0,用于统计美丽数的数量。

3、遍历区间内所有数:从L到R,对每个数n:

(1)统计n中数字2的出现次数cnt

(2)如果cnt == 3,则count += 1

4、输出结果:遍历完成后,输出count。

方法 1:整数运算(纯数学方法)

对数字n,循环执行:

1、digit = n % 10:取最后一位

2、如果digit == 2,计数 + 1

3、n = n / 10:去掉最后一位

4、直到n == 0,结束循环

【参考程序】整数运算版(纯数学)

#include<iostream>using namespace std;// 统计数字n中2的出现次数intcountTwo(int n){    int cnt = 0;    while (n > 0) {        int digit = n % 10;        if (digit == 2) {            cnt++;        }        n /= 10;    }    return cnt;}intmain(){    int L, R;    cin >> L >> R;    int count = 0;    for (int n = L; n <= R; n++) {        if (countTwo(n) == 3) {            count++;        }    }    cout << count << endl;    return 0;}

3.2 编程题 2

试题名称:画画

时间限制1.0 s

内存限制512.0 MB

3.2.1 题目描述

输入一个正整数n ,你需要绘制一个 n行 n列的正方形,绘制规则如下:

正方形的四个顶点使用 绘制;

除顶点外,第 1行与第 n行使用 绘制;

除顶点外,第 1列与第 n列使用 绘制;

正方形内部使用 绘制。

3.2.2 输入格式

一行,一个正整数n 。

3.2.3 输出格式

输出共n 行,表示对应的正方形。

2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第31张

【考纲知识点】

1、嵌套循环打印图形:外层循环控制行数,内层循环控制列数(每行的字符),是打印规则图形的核心方法。

2、多条件分支判断:根据当前行号、列号的位置,匹配不同的绘制规则,输出对应字符。

3、边界与内部区分:区分图形的顶点、上下边框、左右边框、内部区域四类位置,对应不同字符。

4、字符串拼接输出:逐列生成每行的字符,拼接成完整一行后再输出,保证格式整齐。

【解题思路】

1. 明确绘制规则(位置→字符对应表)

我们以0 为起始索引(行号i从0到n-1,列号j从0到n-1),规则如下:

位置条件
对应字符
四个顶点:(i==0 && j==0)(i==0 && j==n-1)(i==n-1 && j==0)(i==n-1 && j==n-1)
+
上下边框(第 1 行 / 第 n 行),非顶点:(i==0||i==n-1) 且 不是顶点
-
左右边框(第 1 列 / 第 n 列),非顶点:(j==0||j==n-1)且 不是顶点
|
内部区域(非顶点、非边框):i不是 0/n-1,j不是 0/n-1
*

2. 循环遍历逻辑

外层循环:遍历每一行(i从0到n-1)

内层循环:遍历当前行的每一列(j从0到n-1)

对每个(i,j)位置,按上述规则判断,输出对应字符

内层循环结束后,换行,进入下一行

【参考程序】

#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 ((i == 0 && j == 0) || (i == 0 && j == n-1) ||                 (i == n-1 && j == 0) || (i == n-1 && j == n-1)) {                cout << '+';            }            // 判断是否为上下边框(第1行/第n行,非顶点)            else if (i == 0 || i == n-1) {                cout << '-';            }            // 判断是否为左右边框(第1列/第n列,非顶点)            else if (j == 0 || j == n-1) {                cout << '|';            }            // 内部区域            else {                cout << '*';            }        }        // 每行结束换行        cout << endl;    }    return 0;}
【加入我们,让孩子在信息学赛道上跑得更快、更稳!欢迎关注留言!】
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第32张
2026 年 3 月 GESP C++ 二级真题解析(流程图、德摩根定律) 第33张

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