【单选题】
1、(2分)2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。
如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备?( )
A、检测重心的重力传感器 B、预装的AI算法程序 C、接收动作指令的遥控器 D、拍摄其他机器人的摄像头
正确答案:B
试题解析:题目问哪一项不能作为输入设备,传感器、遥控器、摄像头都是设备,而算法程序属于软件,不能作为设备。
2、(2分)小明学习编程有一段时间了,他想在图形环境下把当前目录(或文件夹)下的文本文件 20260314.txt 的名字改一下。
他用鼠标左键点击选中该文件后,立即完成下面哪个操作后将处于输入新文件名的状态?( )
A、单击右键并选择弹出菜单中的“重命名” B、双击左键 C、按功能键 F1 D、按回车键
正确答案:A
试题解析:将文件改名,单击文件名或者右键使用菜单中的“重命名”,使文件名处于输入新文件名的状态。
3、(2分)下面C++代码可以执行,有关说法正确的是?( )
double PI = 3.1415926;
cout << (PI);
A、为了方便初学者,cout << (PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感
B、cout << (PI) 修改为 cout << (Pi) 能正常执行 C、不能用 PI 做变量名,因为要保存圆周率这个常量
D、将程序中全部 PI 都改写为 Pai ,将能正常执行,不会报错
正确答案:D
试题解析:定义的PI是一个变量,C++的变量名区分大小写,选项A和B错误;
PI不是系统的保留字,可以作为变量名,选项C错误;
本题答案为选项D。
4、(2分)C++表达式 3 * 3 % 2 的值为?( )
A、81 B、27 C、4 D、1
正确答案:D
试题解析:运算符*和%优先级相同,从左往右计算:3*3=9,9%2=1。
5、(2分)整型变量 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
试题解析:C++赋值运算不支持多个变量同时赋值,a, b = 3, 4;相当于三条语句:a; b=3; 4;,执行了赋值的只有b=3,所以a的值还是4,b变为了3;
输出(a+2)为6,(b-2)为1,第一行输出为61;
然后输出a、b,第二行输出为:43。
6、(2分)下面C++代码的相关说法,正确的是?( )
int N = 0;
cin >> N;
cout << (N);
A、执行时如输入 10 ,则将输出 10 B、执行时如输入 3.14 ,将报错 C、执行时如输入 ABC ,将报错
D、执行时如输入 -10 ,将报错
正确答案:A
试题解析:变量N的类型是整数,当输入的数是一个无效的整数时,遇到无效字符会自动停止,但程序执行不会报错。
输入3.14时,N的值为3(.是无效的字符);
输入ABC时,第一个字符是无效的整数字符,N保持为0;
输出10和-10时,是有效的整数,N为10和-10。
7、(2分)下面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
试题解析:判断条件N>M,则输出N-M,否则输出M-N,即输出两个数中较大的数减去较小的数的差。
所以结果一定是一个正数或者0(两个数有可能相同),选项B正确。
如果输入的是带有小数点的数,小数点不是有效的整数,则小数点前面的整数输入到N中,M则是无效的输入,其值保持为0,选项D错误。
8、(2分)下面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
试题解析:for循环第一次,i为0,执行 tnt *= 0,所以循环执行完成后,tnt为0;
当i等于5时,不满足for循环条件,for循环结束,所以最终i为5。
9、(2分)执行下面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
试题解析:根据序列的规律,第1、4、7、……个数的符号为负号,其余数符号为正号。
for循环的i从1开始,判断条件 i%3==1 刚好满足题目序列的特征,可以实现题目的功能。
10、(2分)下面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
试题解析:循环中,i从1到9,当i为偶数时,跳过循环(不输出),所以输出的为:1#3#5#7#9#,循环结束后,i的值为10,输出10END,选项A错误;
删除 else 且将 cout << i << "#" 移入L1行下面,continue后面的代码不会执行,所以循环中不会输出,选项C错误;
循环结束后,i的值为10,不满足i>10的条件,加上这个条件,不会输出:10END,选项D错误;
选项B正确,删除else,不会对程序执行结果有影响。
11、(2分)一个正整数的每位都是个位数,称为数位,最高位非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中;
while循环中,使用 N%10 取出 N 的个位,然后使用N /= 10,丢掉N的个位;
所以应填入:
tnt += N % 10
N /= 10
12、(2分)小明想要快速知道任给一个正整数中有多少个奇数位(数位值是奇数),下面的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
试题解析:while循环中使用 N % 10 取出 N 的个位,判断是奇数则将计数器+1,判断条件为:
N % 10 % 2 != 0 或者 N % 10 % 2 == 1。
13、(2分)小明和弟弟在玩一个拼数字游戏,游戏规则是:二人各写一个两位正整数 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) // L2
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 取较大的数作为4位数的前两位,所以是较大数*100+较小数,L1处判断条件正确,选项B错误;
Q作为组成的4位数,再*10变成5位数,然后加上Q除以3的余数,即组成的五位数为:Q*10+Q%3,选项C错误;
程序能正确完成判断,选项A错误;
选项D正确,如果不使用变量Q,也可以在if(M>N) 和 else 中直接使用M、N组成五位数并判断输出,只是表达式会复杂一点。
14、(2分)执行下面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
试题解析:6位正整数 N 的高3位为:N/1000,低3位:N%1000,所以判断条件为:
(N / 1000 – N % 1000) % 314 == 0,加上小括号也没有影响,即选项B正确。
15、(2分)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 取出 N 的个位,然后 使用 N /=10 丢掉其个位数,对应的程序为:
N1 += N%10, N /= 10;
N2 += N%10, N /= 10;
【判断题】
16、(2分)小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。( )
正确答案:正确
试题解析:说法正确,手表具有手机类似的功能,说明这个手机是一个小的计算机系统,也是内置了一个操作系统来管理手表的软硬件。
17、(2分)C++表达式 4 % 2 和 2 * 2 % 2 的结果相同。( )
正确答案:正确
试题解析:%是求余数,4 % 2的结果为0,2 % 2的结果也是0,所以描述正确。
18、(2分)下面C++代码段成功执行后将输出 0 。( )
for (i = 1; i < 10; i++)
if (i % 3 == 0)
break;
cout << i;
正确答案:错误
试题解析:循环中i从1到9,通过判断条件:i % 3 == 0,可知当 i为3时,条件成立,所以最后输出 i的值为3。
19、(2分)下面能够正常执行的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;
正确答案:错误
试题解析:注意 for循环那一行最后有个分号,这会使循环体是一个空语句,而不是total += i;
所以不能正确 用于求1到N之和。
20、(2分)执行下面的C++代码段,其语句 cout << (N) 将被执行0次或无数次(即死循环)。( ).
cin >> N;
while (N)
cout << (N);
正确答案:正确
试题解析:正确,当输入的N为0时,while条件为0(false),循环执行0次;否则,循环会一直执行。
21、(2分)下面的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 << "非对称数";
正确答案:正确
试题解析:变量new_number保存 n的逆序数,使用while循环将 n 从个位的每一位放到 new_number中。
最后判断逆序数 new_number 和输入的n的一个拷贝:old_number是否相等,完成对称数的判断。
22、(2分)执行下面的C++代码段,如果变量都为整型变量,输入为大于0的整数,则输出数值一定为 -N 的值。( )
cin >> N;
total = 0;
for (i = -N; i < N; i +=2)
total += i;
cout << total;
正确答案:正确
试题解析:for循环中,i 的取值为:-N、-N+2、……,total是i的和;
如果N为1,i取值为:-1,total结果为-1;
如果N大于2,i取值为:-2、0,total结果为-2;
以此类推,可知最终结果为:-N。
23、(2分)执行C++语句 printf("%d\\n", 3.14) 将报错。( )
正确答案:错误
试题解析:printf函数使用 %d 表示以整数输出,但是传入的参数是小数3.14,这将会导致输出结果错误,但程序本身不会报错。
24、(2分)执行下面的C++代码后将输出 2500 。( )
int cnt = 0;
for (int i = 1; i < 100; i++)
cnt += i++;
cout << cnt;
正确答案:正确
试题解析:for循环中,i初值为1,第1次循环,cnt += 1,然后i++变成2,for循环本身也会有一个i++,所以第2次循环i值为3,……即i的值每次增加了2;
所以cnt结果为:1+3+5+……+99,即:1+99+3+97+……,一共25个100,结果为:2500。
25、(2分)小明在测试C++的 printf 的功能时执行了 printf("%-5d\\n", 314) ,则代码输出的结果是 -5314 。( )
正确答案:错误
试题解析:printf函数的 %5d 表示右对齐以5个宽度输出,不足5位左边补0;
而 %-5d 则表示左对齐以5个宽度输出,不足5位右边边补0;
所以输出的结果为:“314 ”(不包括引号)。
【编程题】
26、(25分)交朋友
时间限制:1 s,内存限制:512 MB
【问题描述】
Alice 班上共有 4 个小朋友,身高分别为 H1、H2、H3、H4,其中 Alice 的身高为 H1。
Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?
【输入描述】
输入共 4 行,第 i 行包含一个整数 Hi,表示班上小朋友的身高。
【输出描述】
输出 1 行,包含一个整数 h,表示 Alice 想交的朋友的身高。
【样例输入】
150
165
135
133
【样例输出】
135
【样例解释】
样例中,Alice 身高为 150,第 2、3 个小朋友与 Alice 身高差距为 15,同样最接近,Alice 选较矮的一个即第 3 个身高为 135 的小朋友交朋友。
【数据范围】
保证 100 <= Hi <= 199 且 Hi 互不相同。
【参考程序】
#include <iostream>
using namespace std;
int main() {
int H1, H2, H3, H4;
cin >> H1 >> H2 >> H3 >> H4;
int ans = H2; //假设是第二个小朋友
int d = H1 – H2;
if (d < 0) d = -d;
int min = d; //最小身高差
//第三个小朋友和假设进行比较
d = H1 – H3;
if (d < 0) d = -d;
if (d < min || (d == min && H3 < ans))
ans = H3, min = d;
//第四个小朋友和假设进行比较
d = H1 – H4;
if (d < 0) d = -d;
if (d < min || (d == min && H4 < ans))
ans = H4;
cout << ans << endl;
return 0;
}
27、(25分)数字替换
时间限制:1 s,内存限制:512 MB
【问题描述】
Alice 不喜欢数字 4,但觉得数字 8 寓意好,她想把数中的 4 全都替换成 8,若数中不含 4 则无需修改,你能帮帮她吗?
【输入描述】
输入一行,包含一个整数 A,表示替换前的数。
【输出描述】
输出一行,包含一个整数 B,表示替换后的数。
【样例输入1】
8459045
【样例输出1】
8859085
【样例输入2】
123
【样例输出2】
123
【样例解释】
对于样例1,输入 8459045 中有两个 4,都将其替换为了 8,得到 8859085。
对于样例2,输入 123 中不包含 4,无需修改输入数字,输出 123。
【数据范围】
0 <= A <= 10^8。
【参考程序】
#include <iostream>
using namespace std;
int main() {
int a, b = 0, t = 1;
cin >> a;
while(a != 0) {
int k = a % 10; //取出当前位
if(k == 4) //直接替换
k = 8;
b += k * t;
a /= 10;
t *= 10;
}
cout << b;
return 0;
}




