

第 1 题 2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )。
A. 检测重心的重力传感器
B. 预装的AI算法程序
C. 接收动作指令的遥控器
D. 拍摄其他机器人的摄像头
【答案】B
【考纲知识点】
输入设备的定义:输入设备是向计算机系统输入数据、信息、指令的外部硬件设备,作用是将外部信息转换为计算机能识别的电信号,供系统处理。
输入设备的本质:硬件,负责向系统输入信息 程序 / 软件:是计算机系统的处理逻辑,不属于输入 / 输出硬件设备
【解析】
A :传感器会将机器人的重心、姿态等物理信息转换为电信号输入给计算机系统,属于输入设备,不符合题意。
B :AI 算法是软件程序,是计算机系统的处理逻辑,负责根据输入信息计算、生成控制指令,不属于输入设备,符合题意。
C :遥控器会将动作指令输入给机器人系统,属于输入设备,不符合题意。
D :摄像头会将图像信息输入给机器人系统,用于定位、保持队列,属于输入设备,不符合题意。
第 2 题 下面代码用来找出输入的N个正整数中最大的一个。如果将代码段用流程图来表示,则 L1 标记的代码行应该使用的图形是( )。

A. 圆形框
B. 椭圆形框
C. 平行四边形框
D. 菱形框
【答案】D
【考纲知识点】流程图标准图形规范(ANSI 标准):
if、while条件) | ||
cin/cout等输入输出操作 | ||
【解析】L1 标记的代码是if(val > max),这是条件判断语句,用于决定是否执行max = val,属于分支判断。
A 选项(圆形框):用于流程图连接,不用于判断,错误。
B 选项(椭圆形框):用于程序起止,不用于判断,错误。
C 选项(平行四边形框):用于输入输出,不用于判断,错误。
D 选项(菱形框):专门用于条件判断,正确。
流程图:判断用菱形,输入输出用平行四边形,处理用矩形,起止用椭圆
第 3 题 下面 C++ 代码可以执行,有关说法正确的是( )。

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);完全匹配,变量定义与使用一致,能正常执行,不会报错。
第 4 题 下面选择项中,与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、!(A && B) ≡ !A || !B(非 A 且 B 等价于 非 A 或 非 B) 2、!(A || B) ≡ !A && !B(非 A 或 B 等价于 非 A 且 非 B) 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,和原表达式逻辑完全无关,错误。
德摩根定律核心:非与变或,非或变与,条件全部取反
第 5 题 某同学执行C++代码 cout << ((0.1 + 0.2) == 0.3) 时输出 0 ,下面最可能的原因是( )。
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.1、0.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是完全成立的,问题出在计算机的二进制存储,不是数学本身
浮点数精度问题:二进制无法精确表示十进制有限小数,禁止直接用==比较浮点数
第 6 题 下面的 C++ 代码段执行后其输出是( )。

C. 10#10
D. 10
【答案】A
【考纲知识点】
嵌套循环的执行流程、累加计数
外层循环 i从0到4(共 5 次),每次外层循环结束后输出一次tnt内层循环 j从0到i-1,执行i次,每次tnt += 1最终外层循环结束后,再输出一次 tnt
【解析】
i | tnt | ||
|---|---|---|---|
i=0 | j < 0 | tnt=0 | 0# |
i=1 | j=0 | tnt=1 | 1# |
i=2 | j=0,1 | tnt=3 | 3# |
i=3 | j=0,1,2 | tnt=6 | 6# |
i=4 | j=0,1,2,3 | tnt=10 | 10# |
外层循环结束后,执行cout << tnt,输出10。最终输出:0#1#3#6#10#10
第 7 题 下面的 C++ 代码执行之后的输出是( )

A. 0#
B. -2#-1#1#
C. -1#0#
【答案】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#
第 8 题 下面的 C++ 代码执行后其输出是( )。

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#。
第 9 题 下面 C++ 代码执行后其输出是( )。

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++ 代码段具有相同效果的是( )。



【答案】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++ 代码执行后输出是( )。

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++ 代码段执行后,其输出是( )。

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++代码段用于判断卡号是否正确,横线处应填入的代码是( )。


【答案】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++ 代码段正常执行后其输出的数字图形是( )。



【答案】A
【考纲知识点】
1、嵌套循环执行流程:外层循环控制行数,内层循环控制每行打印的内容。
2、循环条件分析:外层i从 1 到 4(共 4 行),内层j从 1 到i(每行打印i个数字)。
【解析】
i | j的取值 | ||
|---|---|---|---|
i=1 | j=1 | 1 | |
i=2 | j=1,2 | 12 | |
i=3 | j=1,2,3 | 123 | |
i=4 | j=1,2,3,4 | 1234 |
第 15 题 某学校举办“校园演讲比赛”,每位选手由8位评委打分(分数为 0~10 的整数),且每位评委必须打分。计分规则:若至少有5位评委给出大于等于6分,则成绩有效,最终得分为所有8位评委的总分;如给出低于6分的评委数量超过5位,则记为0分。以下核心程序段依次输入8个分数,并计算最终得分。横线处应填入( )。


【答案】A
【考纲知识点】循环
【解析】
(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 → 错误,是累加不是累乘,逻辑完全错误。

第 1 题 小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。( )
【答案】√
【考纲知识点】智能嵌入式设备的系统基础
【解析】电话手表属于智能穿戴设备,需要操作系统来管理硬件、运行通信 / 计时等应用,因此必然搭载嵌入式操作系统(如 Wear OS、厂商自研 RTOS 等)。
第 2 题 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
第 3 题 下面的 C++ 代码段执行时将报错,因为10是整数类型, a 是布尔类型。由于类型不同,不能进行加法运算。( )

【答案】×
【考纲知识点】C++ 类型隐式转换
【解析】C++ 中bool类型会隐式转换为int:true→1,false→0。因此10 + a = 10 + 1 = 11,代码可正常执行,不会报错。
第 4 题 下面C++代码段执行后将输出 0-3-6-9- 。 ( )

【答案】√
【考纲知识点】continue语句、取模运算
【解析】
if(i%3)等价于if(i%3 != 0):当i不是 3 的倍数时,执行continue跳过输出
仅当i是 3 的倍数(0,3,6,9)时,执行输出
最终输出:0-3-6-9-,与题目描述一致
第 5 题 执行下面的 C++ 代码段,如果N是基本数据类型,则语句 cout << (N); 将被执行 0 次或无数次(即死循环)。( )

【答案】√
【考纲知识点】while循环条件、死循环
【解析】
while(N)等价于while(N != 0)
若N=0:条件为假,循环执行 0 次
若N≠0:循环体未修改N,条件永远为真,死循环,执行无数次
第 6 题 下面的 C++ 代码段可正常执行,删除 continue 不影响执行效果。( )

【答案】√
【考纲知识点】continue语句的作用
【解析】
原代码:每次循环i +=1后,continue跳过后续代码,直接进入下一次i++,最终i的变化为0→1→3→5→7→9→11,循环结束时i=11
删除continue后:循环体无后续代码,i的变化完全一致,最终i=11,执行效果完全相同
第 7 题 下面的 C++ 代码段用于计算1到N之间且包含N的所有数字中含有的3的个数,如1到40含有14个3, 而1到20则只含有2个3。如果将 while (i != 0) 改为 while (abs(i)) ,则执行结果相同。( )

【答案】√
【考纲知识点】abs()函数、循环条件等价性
【解析】
i != 0 等价于 abs(i) != 0,因此while(i != 0)和while(abs(i))完全等价。
输入为正整数,i始终非负,abs(i)=i,循环逻辑完全一致,执行结果相同。
第 8 题 下面的 C++ 代码段执行将不会有输出,因为内层循环 j 总是 0 开始, i * j % 10 == 0 将会被满足,执行 break ,故而 i 小于 10 ,不会满足 if 判断条件。( )

【答案】×
【考纲知识点】嵌套循环、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,有输出,题目描述错误
第 9 题 下列 C++ 代码执行后将输出 1#4#9#16#16。( )

【答案】×
【考纲知识点】嵌套循环、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" 即可实现右图输出。( )

【答案】√
【考纲知识点】printf格式化输出、宽度控制
【解析】
(1)%d:默认右对齐,宽度按数字实际长度,左图为紧凑输出
(2)%3d:设置输出宽度为 3,不足 3 位用空格填充,右对齐,实现右图的整齐对齐效果
(3)代码逻辑完全符合,修改后可实现右图输出
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美丽数的数量。

【考纲知识点】
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 行,表示对应的正方形。

【考纲知识点】
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) | + |
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;}

