一、单项选择题
第二届世界人形机器人运动会开幕式上,机器人方阵通过控制程序来完成整场表演。表演前,工程师们使用集成开发环境(IDE)编写并调试方阵的控制程序。下列关于 IDE 功能的描述,错误的是( )。
A. 可以提供代码自动补全,提高编程效率
B. 可以提供辅助信息,帮助排查程序逻辑错误
C. 可以直接控制机器人电机转动
D. 支持语法高亮,使代码更易阅读
【解析】IDE 提供代码编辑、自动补全、语法高亮、调试辅助(帮助排查逻辑错误)等功能,但不能直接控制机器人电机转动——控制电机需将编译好的程序部署到机器人控制器上运行,IDE 本身不具备该功能。
【答案】C
现代计算机已经历四个时代:电子管计算机(1946—1958 年)、晶体管计算机(1958—1964 年)、中小规模集成电路计算机(1965—1970 年)以及大规模和超大规模集成电路计算机(1971 年至今)。划分计算机时代所采用的主要依据是( )。
A. 运算速度
B. 存储容量
C. 体积大小
D. 核心元器件
【解析】四个时代正是按照其核心元器件(电子管 → 晶体管 → 中小规模集成电路 → 大规模/超大规模集成电路)划分的。运算速度、存储容量、体积的变化都是元器件变革带来的结果,而非划分依据。
【答案】D
下列 C++ 代码执行的输出是( )。
int a = 4 + -2 * 3;
cout << a;
A. -2
B. 6
C. 18
D. 输出错误提示信息
【解析】先乘除后加减,一元负号与 2 结合:-2 * 3 = -6,再 4 + (-6) = -2,输出 -2。
【答案】A
下列 C++ 表达式与 2 * - 2 % 3的值相同的是( )。
A. (2 * - 2) % 3
B. 2 * (- 2 % 3)
C. 2 * - (2 % 3)
D. 2 % - 2 * 3
【解析】* 与 % 优先级相同、从左到右结合,原式等价于 (2 * -2) % 3 = (-4) % 3 = -1(C++ 中取模结果符号同被除数)。
A 同为 -1;
B 中 -2 % 3 = -2,得 -4;
C 中 -(2 % 3) = -2,得 -4;
D 中 2 % -2 = 0,得 0。
【答案】A
如下 C++ 代码执行后,其输出是( )。
int a = 3;
int b = 4;
printf("%d#%d\n", a, b);
A. 3 4
B. 3#4
C. 3 # 4
D. 两行,依次是 3 和 4
【解析】printf 按格式串原样输出:两个 %d 分别替换为 3 和 4,中间的 # 原样输出,即 3#4(\n 只换行,不产生空格)。
【答案】B
下列 C++ 代码执行后的输出是( )。
int a = 8;
int b = 10;
cout << (a % b) << " " << (a * 1 / b) << " " << (a * 1.0 / b);
A. 8 0.8 0
B. 0 0.8 0
C. 8 0 0.8
D. 0 0 0.8
【解析】a % b = 8 % 10 = 8(被除数小于除数,余数为自身);a * 1 / b 全为整型运算,8 / 10 = 0;a * 1.0 / b 因含浮点数而做浮点除法,结果为 0.8。
【答案】C
执行下面代码后,b 的值会是( )。
int b = 8;
++b *= 2 + 1;
A. 18
B. 17
C. 19
D. 27
【解析】++b 为前缀自增,先使 b 变为 9;复合赋值 *= 优先级低于 +,右侧先算 2 + 1 = 3;等价于 b = 9 * 3 = 27。
【答案】D
执行如下 C++ 代码,其输出是( )。
int i, cnt = 0;
for (i = 0; i < 10; i++)
cnt += 1;
cout << i << ' ' << cnt;
A. 10 10
B. 9 9
C. 10 9
D. 9 10
【解析】循环体执行 10 次,cnt = 10;循环结束时 i 因不满足 i < 10 而为 10,输出 10 10。
【答案】A
执行如下 C++ 代码,变量都是整型,则其输出是( )。
int cnt, i;
cnt = 0;
for (i = -10; i < 0; i++)
cnt += 1;
cout << (i * cnt);
A. -10
B. -9
C. 0
D. 9
【解析】i 从 -10 到 -1 共循环 10 次,cnt = 10;循环结束后 i = 0,故 i * cnt = 0 * 10 = 0。
【答案】C
如下 C++ 代码执行输出是( )。
int i;
for (i = 1; i < 5; i++) {
if (i % 3 == 0) {
printf("%d+", i);
continue;
} else {
printf("%d-", i);
break;
}
}
printf("%dEND*", i);
A. 1-1
B. 1 - 1 END*
C. 1+1-2-2END*
D. 1-1END*
【解析】i = 1 时 1 % 3 != 0,走 else 分支输出 1- 并 break,循环结束;此时 i = 1,最后输出 1END*,整体为 1-1END*。
【答案】D
如下 C++ 代码执行时,下列说法错误的是( )。
int N, tot;
cin >> N;
tot = 0;
while (N > 0) {
cout << N << "#";
tot += 1;
N -= 1;
}
cout << tot << "-END";
B. 如果输入 -10,输出是:0-END
C. 如果输入 0,输出是:0-END
D. 如果输入 1,输出是:1#0-END
【解析】输入 3:循环输出 3#、2#、1#,tot = 3,再输出 3-END,A 正确。输入 -10 或 0:N > 0 不成立,循环不执行,直接输出 0-END,B、C 正确。输入 1:循环执行 1 次输出 1#,tot = 1,最后输出 1-END,整体为 1#1-END,D 错误。
【答案】D
下列 C++ 代码执行时如输入 35,输出效果为每行 10 个数、从 35 递减到 1 且右对齐占 3 列。横线处应填入的代码是( )。
int N, tot, i;
cin >> N;
tot = 0;
for (i = 0; i < N; i++) {
printf(__________);
tot = tot + 1;
if (tot % 10 == 0)
printf("\n");
}
输出效果(输入 35 时):
35 34 33 32 31 30 29 28 27 26
25 24 23 22 21 20 19 18 17 16
15 14 13 12 11 10 9 8 7 6
5 4 3 2 1
A. "%3d", N
B. "%3d", N - i
C. N - i
D. N
【解析】输出从 35 递减到 1,第 i 次循环应输出 N - i;每个数右对齐占 3 位(个位数前补空格),需用格式串 "%3d", N - i。A 会输出 35 次 35;C、D 不是合法的 printf 格式串用法。
【答案】B
下面 C++ 代码执行后输出是( )。
int k = 0;
while (k < 8) {
k += 2;
continue;
if (k > 5)
break;
cout << k << "#";
}
if (k >= 8)
cout << "FINISH";
A. FINISH
【解析】continue 位于 break 和输出之前且无条件执行,其后的语句永远不会被执行;k 依次为 2、4、6、8,k = 8 时循环结束。此时 k >= 8 成立,输出 FINISH。
【答案】A
下列 C++ 代码可以取得正整数 N 的从右到左第 M 位置的数(个位数为第 1 位置)。横线处应填入( )。
int N, M, M10;
cout << "请输入正整数:";
cin >> N;
cout << "从右到左第几位?";
cin >> M;
M10 = 1;
for (; M > 1; M--)
M10 *= 10;
cout << ______________; // L1
A. N / M10 % 10
B. N / M10 / 10
C. N % M10 % 10
D. N % M10 / 10
【解析】M10 = 10^(M-1)。N / M10 先把第 M 位右移到个位,再 % 10 取出该位。例如 N = 123、M = 2:123 / 10 = 12,12 % 10 = 2。
【答案】A
鸡兔同笼求解程序:tou 代表头总数,jiao 代表脚总数,输入均为正整数。关于该程序下面说法准确的是( )。
int tou, jiao, tu_tou, ji_tou;
cout << "请输入鸡和兔的头总数:";
cin >> tou;
cout << "请输入鸡和兔的脚总数:";
cin >> jiao;
for (tu_tou = 0; tu_tou < tou + 1; tu_tou++) { // L1
ji_tou = tou - tu_tou;
if (tu_tou * 4 + ji_tou * 2 == jiao) {
printf("兔的数量=%d,鸡的数量=%d\n", tu_tou, ji_tou);
break;
}
}
if (tu_tou == tou) // L2
printf("无解\n");
A. 能求解鸡兔同笼。
B. ji_tou 没有初始化,在 L1 行代码前增加 ji_tou = 0; 即可求解鸡兔同笼。
C. 将 L1 行的 tu_tou < tou + 1 改为 tu_tou < tou 即可求解鸡兔同笼。
D. 将 L2 行的 tu_tou == tou 改为 tu_tou == tou + 1 即可求解鸡兔同笼。
【解析】ji_tou 在循环内已被赋值,B 错误。原代码问题在 L2:兔的数量范围是 0 到 tou(含 tou,即全为兔的情形),无解时循环正常结束,tu_tou = tou + 1,而原判断 tu_tou == tou 永远不会成立,无法输出"无解";若解恰好出现在 tu_tou = tou,虽已输出结果却会被误判为"无解"。改为 tu_tou == tou + 1 后,只有穷举完仍无解(tu_tou 越界)才输出"无解",逻辑完整,D 正确。C 的改法会漏掉"全为兔"的情形。A 不准确,因为原程序在无解时不输出"无解"。
【答案】D




