GESP 客观题评测系统
2025-12-Level-1
2025-12-Level-1
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题)
近日,空中客车公司表示,约6000架空客A320系列飞机需要紧急更换一种易受太阳辐射影响的飞行控制软件。空客表示,在对一起飞行事故分析后的结果显示,强烈的太阳辐射可能会损坏飞行控制系统所需的关键数据,导致判断失误,进而引发飞行异常。那这里的飞行控制系统执行判断的部件最可能是下面的()。
正确答案B
解析详情
【答案】B 【考点】计算机硬件组成(中央处理器 CPU) 【解析】在计算机系统中,负责执行指令、进行逻辑判断和算术运算的核心部件是处理器(CPU)。辐射传感器负责采集信号,内存单元负责存储数据,输出设备负责呈现结果,而“执行判断”这一功能由处理器完成。 【易错点】混淆传感器的采集功能与处理器的决策功能。
第 2 题(单选题)
下面的C++代码在某集成开发环境中编译运行时,提示有“Invalid Character”(“无效字符”)错误。可能的原因是():
int a, b;
a=3, b = 4; // L1
cout << a; // L2
cout << b; // L3正确答案A
解析详情
【答案】A 【考点】C++ 语法规范(标点符号编码) 【解析】C++ 源代码必须使用半角(英文)标点符号。中文逗号“,”在编译器中无法识别,会报错“Invalid Character”。选项 B 提到的分行不是强制的,C 不影响编译错误类型,D 合并与否不影响正确性。 【易错点】忽略中英文标点符号在代码编辑器中的视觉差异。
第 3 题(单选题)
下面有关C++变量的说法,正确的是()。
正确答案A
解析详情
【答案】A 【考点】C++ 变量命名规则与关键字 【解析】A 选项正确,`for` 是 C++ 循环语句的关键字,禁止用作变量名。B 和 C 错误,C++ 变量名可以以字母或下划线开头,中间及末尾也可以包含下划线。D 错误,`printf` 是 standard library 函数名而非保留关键字,虽然可以使用,但会覆盖原有功能,属于极差的习惯。 【易错点】不清楚哪些词是保留关键字(如 `for`, `while`, `if`),哪些是库函数名(如 `printf`, `sqrt`)。
第 4 题(单选题)
X 是C++的整型变量,则 `cout << (X=3, X++, ++X);` 执行后的输出是()。
正确答案C
解析详情
【答案】C 【考点】逗号运算符与自增运算符 【解析】逗号表达式从左向右依次执行,其最终值是最后一个子表达式的值。过程如下:1. 执行 `X=3`,X 的值变为 3;2. 执行 `X++`,X 的值变为 4;3. 执行 `++X`,X 的值变为 5,并作为整个括号内表达式的返回值。因此输出 5。 【易错点】误以为输出第一个表达式的结果,或对自增操作后的变量状态理解不清。
第 5 题(单选题)
C++ 表达式的值为()。
正确答案B
解析详情
【答案】B 【考点】算术运算符优先级与模运算 【解析】根据选项 B(4) 推断,题中 LaTeX 公式的 `\times` 应理解为 C++ 中的乘法和模运算组合。假设表达式为 `2 + 3 * 4 % 5`。根据优先级,先算乘法:`3 * 4 = 12`;再算模运算:`12 % 5 = 2`;最后算加法:`2 + 2 = 4`。若按题干纯乘法计算结果为 62,无匹配项,故此处考查运算优先级。 【易错点】忽视乘法、模运算高于加法的优先级顺序。
第 6 题(单选题)
下面的C++代码执行后,其输出是()。
a = 3;
b = a = 4;
printf("%d %d", a, b);正确答案A
解析详情
【答案】A 【考点】赋值运算符的结合性 【解析】赋值运算符 `=` 具有右结合性。表达式 `b = a = 4` 的执行顺序是:先将 4 赋值给 `a`,此时 `a` 的值变为 4;然后将 `a` 的当前值(即 4)赋值给 `b`,此时 `b` 的值也变为 4。因此输出结果为 4 4。 【易错点】误认为赋值是从左往右执行,或者认为 `b` 会获得 `a` 的初始值 3。
第 7 题(单选题)
下面的 C++ 代码执行时如果先输入 10 回车后输入 20 并回车,其输出是()。
int N, M;
printf("第一个数:");
scanf("%d", &N);
printf("第二个数:");
scanf("%d", &M);
printf("%%( $N+M$=%d", N+M, int(N+M));正确答案C
解析详情
【答案】C 【考点】printf 格式化输出规范 【解析】在 `printf` 格式字符串中:1. `%%` 用于输出一个百分号字符 `%`;2. 后面的 `( N+M=` 是普通文本,原样输出;3. `%d` 对应第一个参数 `N+M`,结果为 30。第二个参数 `int(N+M)` 因无对应的占位符而被忽略。最终输出:`%( N+M=30`。 【易错点】不记得 `%%` 的转义含义,或者混淆了占位符与参数的对应关系。
第 8 题(单选题)
某个整数很长很长,形如:1232123212321……,其规律是从1开始逐一升高到3然后逐一降低到1,然后又逐一升高到3,一直到很长很长。假设最高位编号为1,要求判断从左边最高位开始的第N位数是几?在横线处应该填入的代码是()。
int N, M;
cout << "请输入编号:";
cin >> N;
M = ___;
if (M != 0)
cout << M;
else
cout << 2;正确答案A
解析详情
【答案】A 【考点】周期规律与模运算应用 【解析】序列为 1, 2, 3, 2, 1, 2, 3, 2...,循环周期是“1, 2, 3, 2”,长度为 4。对于第 N 位,使用 `N % 4`:余数 1 对应 1,余数 2 对应 2,余数 3 对应 3,余数 0 对应周期末位的 2。代码中 `if (M != 0)` 处理余数 1-3,`else` 处理余数 0(输出 2),完全符合规律。故选 A。 【易错点】误将周期长度识别为 3 或 6,导致模数选择错误。
第 9 题(单选题)
下面C++代码执行后的输出是()。
int i, tnt = 0;
for (i = 0; i < 100; i++)
tnt += 1;
cout << tnt << ' ' << i;正确答案D
解析详情
【答案】D 【考点】for 循环执行逻辑与变量最终值 【解析】循环 `i` 从 0 增加到 99,共执行 100 次,故 `tnt` 累加为 100。当 `i` 增加到 100 时,条件 `i < 100` 为假,循环结束。此时 `i` 的最终值是 100。因此 `cout` 输出 `100 100`。 【易错点】误认为循环终止时变量 `i` 的值为 99。
第 10 题(单选题)
有关下面 C++ 代码的说法,错误的是()。
int tnt = 0;
for (int i = 1; i < 10; i += 2) // L1
tnt += i; // L2
cout << tnt;正确答案B
解析详情
【答案】B 【考点】循环控制变量与赋值运算 【解析】原代码 `i` 取 1, 3, 5, 7, 9,和为 25。B 选项中,若 `i = 0`,`i` 取 0, 2, 4, 6, 8,和为 20,结果明显不同,故 B 错误。A 选项中,`i < 11` 同样是在 `i=11` 时停止,执行范围一致。C、D 选项描述的是复合赋值运算符的性质,均正确。 【易错点】对步长 `i += 2` 影响下的循环序列计算不准确。
第 11 题(单选题)
下面C++代码执行后输出是()。
int i;
for (i = 10; i < 100; i += 10){
if (i % 10 == 0)
continue;
printf("%d#", i);
}
if (i >= 100)
printf("%d END", i);正确答案C
解析详情
【答案】C 【考点】continue 语句与循环逻辑 【解析】循环中 `i` 取 10, 20...90。对于这些值,`i % 10 == 0` 恒成立,执行 `continue` 跳过本轮循环,故 `printf("%d#", i)` 一次都不会执行。循环结束后 `i` 变为 100,满足 `if (i >= 100)`,输出 `100 END`。故选 C。 【易错点】误以为 `continue` 会终止整个循环,或忽视了 `i % 10 == 0` 条件对循环内输出的屏蔽作用。
第 12 题(单选题)
两个正整数,只要不相等,就一直进行如下操作:最大数减去最小数得到一个值,该值和两个数的最小数构成新的两个正整数,重复操作,直到两个数相等,此时输出该数。下面的C++代码用于实现该操作,横线处应该填写的代码是()。
int N, M;
cin >> N >> M;
while (N != M){
if (N > M)
___
else
___
}
cout << N;N = N - M
M = M - NM = M - N
N = N - MM = N - M
N = M - NN, M = M, N
M, N = N, M正确答案A
解析详情
【答案】A 【考点】更相减损术算法逻辑 【解析】该算法要求“大数减小数”。代码逻辑中:若 `N > M`,则更新 `N = N - M`;若 `N < M`,则更新 `M = M - N`。这与更相减损术(求最大公约数)的步骤完全一致。选项 A 符合此逻辑。 【易错点】减法顺序颠倒或逻辑不匹配。
第 13 题(单选题)
如果一个正整数能被 3 整除,或者某一位能被 3 整除,则称之为“漂亮数”。下面的 C++ 代码用于判断正整数 N 是否为漂亮数,L1 行的横线处应该填入的代码是( )。
int N, Flag;
cin >> N;
Flag = 0; // "非漂亮数"
if (N % 3 == 0)
Flag = 1; // "漂亮数"
else
while (N != 0) {
if (_____) { // L1
Flag = 1;
break;
}
N /= 10;
}
cout << (Flag? "漂亮数" : "非漂亮数");正确答案D
解析详情
【答案】D 【考点】数字位拆解与模运算 【解析】题目要求判断“某一位能被 3 整除”。在 `while` 循环中,`N % 10` 获取当前最低位数字。要判断该位能否被 3 整除,应使用 `(N % 10) % 3 == 0`。选项 D 虽然简略写法为 `N % 10 % 3 == 0`,但表达意思正确(0, 3, 6, 9 均满足此条件)。 【易错点】错误使用整除 `/` 代替取模 `%`,或未针对每一位进行判断。
第 14 题(单选题)
如果正整数N的所有奇因数(即能将N整除的正奇数)的和是27的倍数,则称N是27的神秘数。下面的C++代码用于判断输入的N是否为27的神秘数。如输入53,它有两个奇因数1和53,则将输出Y。()。
int i, N, cnt = 0;
cin >> N;
for (i = 1; i <= N; i++) {
if (___)
cnt += i;
}
if (cnt % 27 == 0)
cout << 'Y';正确答案C
解析详情
【答案】C 【考点】因数查找与奇偶判断 【解析】要找出“奇因数”,需满足两个条件:1. `i` 是 `N` 的因数,即 `N % i == 0`;2. `i` 是奇数,即 `i % 2 != 0`(在 C++ 中可简写为 `i % 2`)。选项 C `(N % i == 0) && (i % 2)` 完美符合这两个逻辑条件。 【易错点】误将 `i % 2 == 0` 理解为奇数,或忽略了因数的基本定义。
第 15 题(单选题)
执行下面C++代码可以找出千位与个位的和恰好等于中间两位的四位数,横线处应该填入( )
int count = 0;
int a, bc, d, tmp;
for (int i = 1000; i <= 9999; i++) {
a = (tmp = i) / 1000;
___
bc = tmp / 10;
d = tmp - bc * 10;
if (a + d == bc) {
count++;
}
}
cout << count;正确答案C
解析详情
【答案】C 【考点】整数位值拆解技巧 【解析】题目要求处理中间两位和个位。代码中 `a` 是千位。随后需要从原数中去掉千位,留下后三位供后续计算。`tmp -= a * 1000` 实现了将四位数变为三位数(如 1234 变为 234)。接着 `bc = tmp / 10` 获取前两位(中间两位),`d = tmp - bc * 10` 获取末位。故选 C。 【易错点】对数字拆分过程中中间变量 `tmp` 的含义变化理解不透彻。
判断题(每题 2 分)
第 1 题(判断题)
鸿蒙是华为公司开发的一款操作系统,那么它能够将正确的源程序翻译成目标程序,并运行。()
正确答案错误
解析详情
【答案】错误 【考点】操作系统与编译系统的区别 【解析】操作系统(如鸿蒙、Windows)负责管理硬件和软件资源,提供运行环境。而将源程序翻译成目标程序的工作由编译器(Compiler)完成,不是操作系统的直接功能。 【易错点】混淆了操作系统与开发工具(编译器)的功能边界。
第 2 题(判断题)
C++表达式 10 * 4 % 6 和 10 * 2 % 3 的结果相同。()
正确答案错误
解析详情
【答案】错误 【考点】算术运算规则(乘法与取模) 【解析】1. 计算 `10 * 4 % 6`:从左往右先算 `10 * 4 = 40`,再算 `40 % 6 = 4`;2. 计算 `10 * 2 % 3`:先算 `10 * 2 = 20`,再算 `20 % 3 = 2`。结果 4 和 2 不相等。 【易错点】口算错误,或者误以为两个表达式在数学意义上等价。
第 3 题(判断题)
下面C++代码执行后将输出 0。()
int i;
for (i = 0; i < 10; i++)
if (i % 3 == 0)
continue;
else
break;
cout << i;正确答案错误
解析详情
【答案】错误 【考点】循环控制(continue 与 break) 【解析】初始 `i = 0`,`0 % 3 == 0` 为真,执行 `continue` 跳过余下部分并执行 `i++`。之后 `i = 1`,`1 % 3 == 0` 为假,进入 `else` 执行 `break` 跳出循环。此时 `i` 的值为 1。最终输出 1 而非 0。 【易错点】忽视 `continue` 后仍会执行 `i++` 这一步骤。
第 4 题(判断题)
下面C++代码中的 i > -10; i-- 改为 i < 10; i++ 执行结果相同。()
int tnt = 0;
for (int i = 0; i > -10; i--){
if (i < 0)
i = -i;
tnt += i;
}
cout << tnt;正确答案错误
解析详情
【答案】错误 【考点】循环变量的手动修改与循环逻辑 【解析】在原代码中,当 `i` 变为 -1 时,进入 `if (i < 0)` 分支,`i` 被手动修改为 1。随后循环末尾执行 `i--`,`i` 又变回 0。这会导致死循环(或逻辑混乱)。而 `i < 10; i++` 是一个标准的正向循环,两者执行路径完全不同。 【易错点】没有仔细观察循环体内部对循环控制变量 `i` 的非法修改。
第 5 题(判断题)
下面C++代码执行后将输出 99,因为 i < 100 不包括100,而是到99。()
int cnt = 0;
for (int i = 0; i < 100; i++)
cnt += 1;
cout << cnt;正确答案错误
解析详情
【答案】错误 【考点】循环次数计算 【解析】循环变量 `i` 从 0 开始到 99 结束。从 0 到 99 的整数总共有 100 个。因此 `cnt += 1` 会执行 100 次,最终输出结果应为 100。 【易错点】常识性错误,误以为 0-99 是 99 个数。
第 6 题(判断题)
下面的C++代码能用于判断输入的正整数是否为对称数。所谓对称数是指从左到右和从右到左读该数,其值相同,121或414等是对称数,而123不是对称数。()
int n, new_number;
cout << "请输入正整数:";
cin >> n;
new_number = 0;
while (n != 0) {
new_number = new_number * 10 + n % 10;
n /= 10;
}
if (n == new_number)
cout << "对称数";
else
cout << "非对称数";正确答案错误
解析详情
【答案】错误 【考点】循环中破坏性修改变量 【解析】代码在 `while` 循环中使用了 `n /= 10`。当循环结束时,变量 `n` 的值必然变为了 0。最后的判断 `if (n == new_number)` 实际上是在拿 0 和反转后的数对比,这在逻辑上是错误的。应该先用一个备份变量存储 `n` 的原始值。 【易错点】忽略了循环体对原始输入数据的修改。
第 7 题(判断题)
下面的C++代码执行后将输出0。()
int tnt = 0;
for (int i = -100; i < 100; i++)
tnt += i;
cout << tnt;正确答案错误
解析详情
【答案】错误 【考点】等差数列求和 【解析】循环范围是 [-100, 99]。其中 [-99, 99] 之间的对称部分相加和为 0。但最开头的数值 -100 没有对应的正数抵消。因此最终和为 -100,不是 0。 【易错点】误以为循环包含 100,或者错误计算了对称抵消的范围。
第 8 题(判断题)
某同学执行C++代码时 printf("%g\n", (3 + 3.1415926535)); 输出 6.14159 而不是 6.1415926535 表明该同学的计算机存在故障需要重新安装C++软件。()
正确答案错误
解析详情
【答案】错误 【考点】printf 格式化字符性质及浮点数精度 【解析】`%g` 格式符在默认情况下只显示 6 位有效数字。输出 `6.14159` 是该格式符的正常规范行为,并不是计算机故障或软件安装问题。若需更高精度,应使用 `%lf` 并指定精度。 【易错点】将编程语言的输出格式约定误认为是系统故障。
第 9 题(判断题)
如果 x 是C++代码中的 double 型变量,则对 cout << (x? 1227 : 12.27); 编译时将报错,因为 1227 和 12.12 分别是 int 和 double 类型,导致识别混乱。()
正确答案错误
解析详情
【答案】错误 【考点】三目运算符的隐式类型转换 【解析】C++ 中的三目运算符 `? :` 会在两个备选分支类型不一致时执行隐式类型提升。在这里,整型 `1227` 会被自动提升为 `double` 类型(即 `1227.0`),以确保整个表达式类型一致。编译器不会报错。 【易错点】不了解 C++ 表达式中的类型兼容与自动转换规则。
第 10 题(判断题)
在C++代码中,不可以将变量命名为 keyword ,因为它是C++语言的关键字。()
正确答案错误
解析详情
【答案】错误 【考点】C++ 关键字定义 【解析】`keyword` 并不是 C++ 的保留关键字。C++ 的关键字包括 `int`, `for`, `class` 等具体词汇,而“keyword”本身只是一个普通的英文单词,完全可以作为变量名使用。 【易错点】混淆了关键字的“概念”与具体的“保留词列表”。