GESP 客观题评测系统

2023-12-Level-2

2023-12-Level-2

试卷解析总览,可直接查看每题答案与解析。

单选题(每题 2 分)

1 题(单选题

以下不可以做为C++变量的是()。

A.
FiveStar
B.
fiveStar
C.
5Star
D.
Star5

正确答案C

解析详情

【答案】C 【考点】变量命名规则 【解析】C++ 标识符 必须以字母或下划线开头,不能以数字开头。5Star 以数字 5 开头,不符合命名规则。 【易错点】误认为变量名只要包含数字即可,忽略了数字不能作为开头。

2 题(单选题

在C++中,与for(int i = 10; i < 20; i += 2) cout << i; 输出结果相同的是()。

A.
for(int i = 10; i < 19; i += 2) cout << i;
B.
for(int i = 11; i < 19; i += 2) cout << i;
C.
for(int i = 10; i < 21; i += 2) cout << i;
D.
以上均不对

正确答案A

解析详情

【答案】A 【考点】for 循环边界 【解析】原循环 `i` 取值:10, 12, 14, 16, 18(共5个数)。选项 A 范围 `[10, 19)`,步长 2,取值同样为 10, 12, 14, 16, 18。选项 B 起点为 11 会输出 11, 13, 15, 17。选项 C 范围 `[10, 21)` 会多输出 20。 【易错点】对循环终止条件的临界值判断不准确。

3 题(单选题

以下C++代码实现从小到大的顺序输出能整除N的数(N的因子),例如N=18时输出1236918,横线处应填入( )。

cin >> N;
for ( ___)
    if (N % i == 0)
        cout << i << " " ;
A.
int i = 0; i < N; i++
B.
int i = 1; i < N; i++
C.
int i = 0; i < N+1; i++
D.
int i = 1; i < N+1; i++

正确答案D

解析详情

【答案】D 【考点】因子查找 【解析】求 N 的所有因子需要遍历范围 [1, N]。选项 A、C 从 0 开始会导致 `N % 0` 运行时错误(除零异常);选项 B 终止条件 `i < N` 漏掉了 N 本身;选项 D 范围为 `[1, N]`,正确。 【易错点】忽略循环边界是否包含 N 本身,或误从 0 开始导致除零错误。

4 题(单选题

下面C++代码用于判断输入的整数是否为对称数,如1221、12321是对称数,但123、972不是对称数。下面对该题对应代码的说法,正确的是()。

cin >> N;
newNum = 0;
while(N) {
    newNum = newNum * 10 + N % 10;
    N = N / 10;
}
if(newNum == N)
    cout << N << "为对称数";
A.
代码没有语法错误,如果N为对称数,第8行将能正确输出。
B.
代码没有语法错误,但如果N为负数,将导致死循环。
C.
代码存在语法错误,程序不能被执行。
D.
代码没有语法错误,但不能达到预期目标,因为循环结束N总为0。

正确答案D

解析详情

【答案】D 【考点】数值反转逻辑 【解析】`while(N)` 循环结束后,变量 `N` 的值必然为 0。第 7 行 `if(newNum == N)` 实际上是将反转后的数与 0 比较,而非与原数比较。应在循环前用临时变量保存 `N` 的原始值。 【易错点】忽略了在循环过程中修改循环变量 `N` 会导致其原始值丢失。

5 题(单选题

下面C++代码用于判断N(大于等于2的正整数)是否为质数(素数)。下面对如下代码的说法,正确的是()。

cin >> N;
for(i = 2; i < N / 2; i++)
    if(N % i == 0) {
        cout << N << "不是质数";
        break;
    }
if(i >= N / 2)
    cout << N << "是质数";
A.
代码能正确判断N是否为质数。
B.
代码总是不能判断N是否质数。
C.
删除第5行 break,将能正确判断N是否质数。
D.
代码存在漏洞,边界存在问题,应将第2行和第7行的N / 2改为N / 2 + 1。

正确答案D

解析详情

【答案】D 【考点】质数判定边界 【解析】当 `N=4` 时,`N/2=2`,循环条件 `i < 2` 不成立,循环体不执行。此时 `i` 保持 2,满足 `if(i >= 2)`,输出“4是质数”,显然错误。应将条件改为 `i <= N/2` 或 `i < N/2 + 1` 以检查到 `N/2`。 【易错点】循环边界条件设置不当,导致漏掉关键的约数检查。

6 题(单选题

下面C++代码执行后的输出是()。

N = 4;
for (int i = 0; i < N; i++) {
    for (int j = 1; j < i; j++)
        if (i * j % 2 == 0)
            cout << i << "#";
    continue;
}
cout << "0";
A.
2#3#0
B.
1#2#0
C.
1#0#
D.
2#3#

正确答案A

解析详情

【答案】A 【考点】嵌套循环追踪 【解析】 1. `i=0, 1`: `j<i` 不成立,无输出。 2. `i=2`: `j=1`,`2*1%2==0`,输出 `2#`。 3. `i=3`: `j=1` 时 `3*1%2!=0`;`j=2` 时 `3*2%2==0`,输出 `3#`。 4. 循环结束输出 `0`。综合输出 `2#3#0`。 【易错点】忽略外层循环结束后的最后一行 `cout << "0"`。

7 题(单选题

下面 C++ 代码执行后的输出 is()。

cnt = 0;
for (i = 1; i < 10; i++)
    for (j = 1; j < i; j += 2)
        if (i * j % 2 == 0) {
            cnt++;
            break;
        }
if (i >= 10) cout << cnt << "#";
cout << cnt;
A.
θ
B.
8#8
C.
4
D.
4#4

正确答案D

解析详情

【答案】D 【考点】嵌套循环与分支 【解析】`i` 遍历 1-9,`j` 每次增加 2 且 `j < i`,即 `j` 取奇数。当 `i` 为偶数(2, 4, 6, 8)时,存在 `i*j` 为偶数,执行 `cnt++` 并 `break`。循环结束 `cnt=4`,`i=10`。满足 `if(i >= 10)` 输出 `4#`,最后输出 `4`。 【易错点】计算 `cnt` 时忽略了 `break` 导致重复计数,或漏看最后的 `if` 判断。

8 题(单选题

下面C++代码执行后的输出是()。

N=100;
while (N > 0)
    if (N % 2)
        break;
    else if (N % 3 == 0)
        N -= 5;
    else
        N -= 20;
cout << N;
A.
100
B.
95
C.
55
D.
0

正确答案C

解析详情

【答案】C 【考点】多分支循环追踪 【解析】 1. `N=100`: 偶数且 `100%3!=0`,执行 `N-=20` 得 80。 2. `N=80`: 偶数且 `80%3!=0`,执行 `N-=20` 得 60。 3. `N=60`: 偶数且 `60%3==0`,执行 `N-=5` 得 55。 4. `N=55`: 奇数,执行 `break` 跳出。最终输出 55。 【易错点】在 `if-else if` 结构中错误地执行了多个分支。

9 题(单选题

下面C++代码执行后的输出是()。

x = 1;
while (x < 100) {
    if (x % 3 != 0)
        cout << x << ",";
    else if (x / 10)
        break;
    else
        x += 5;
    x += 2;
}
cout << x;
A.
1
B.
1,3
C.
15,17
D.
1,10,12

正确答案D

解析详情

【答案】D 【考点】复杂逻辑循环 【解析】 1. `x=1`: `1%3!=0` 输出 `1,`,`x` 变为 1+2=3。 2. `x=3`: `3%3==0` 且 `3/10=0`,执行 `x += 5; x += 2;` 后 `x=10`。 3. `x=10`: `10%3!=0` 输出 `10,`,`x` 变为 10+2=12。 4. `x=12`: `12%3==0` 且 `12/10=1`,执行 `break` 跳出。最后输出 `12`。综合结果 `1,10,12`。 【易错点】忽略 `x += 2` 是在 `if-else` 结构之后每次循环都会执行的。

10 题(单选题

下面 C++ 代码执行后的输出是()。

cnt = 0;
for (i=0; i<5; i++)
    for (j=0; j<i; j++)
        cnt += 1;
cout << cnt;
A.
5
B.
10
C.
20
D.
30

正确答案B

解析详情

【答案】B 【考点】等差数列求和 【解析】内层循环执行次数取决于 `i` 的值。当 `i` 分别取 0, 1, 2, 3, 4 时,`j` 的循环次数分别为 0, 1, 2, 3, 4。总执行次数为 0+1+2+3+4 = 10 次。 【易错点】计算嵌套循环次数时误算为 5x5 = 25。

11 题(单选题

以下C++代码用于输出1-100(含)的整数平方数(完全平方数),如16是4的平方,横线处应填写()。

for (i=1; i < 100+1; i++)
    if ( ___)
        cout << i << "";
A.
int(sqrt(i)) * int(sqrt(i)) = i
B.
int(sqrt(i)) == sqrt(i)
C.
int(sqrt(i)) * int(sqrt(i)) == i
D.
int(sqrt(i)) == sqrt(i)

正确答案C

解析详情

【答案】C 【考点】完全平方数判定 【解析】判断 `i` 是否为完全平方数,可通过 `sqrt(i)` 取整后再平方,看结果是否等于 `i`。选项 C 的逻辑 `int(sqrt(i)) * int(sqrt(i)) == i` 正确。选项 A 使用了赋值运算符 `=`;选项 B 浮点数比较可能存在精度问题。 【易错点】混淆赋值运算符 `=` 和等于关系运算符 `==`。

12 题(单选题

下面的 C++ 代码用于实现如下左图所示的效果,应在以下右图 C++ 代码中填入()。

0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
01234567890
012345678901
A.
与第8行下面填入一行:cout << nowNum;
B.
与第2行下面填入一行:cout << endl;
C.
与第7行下面填入一行:cout << nowNum;
D.
与第9行下面填入一行:cout << endl;

正确答案D

解析详情

【答案】D 【考点】循环图形输出 【解析】题干展示了一个典型的数字金字塔,每一行数字输出完毕后需要换行。在双重循环结构中,外层循环代表行,因此在内层循环(第 9 行)结束后添加 `cout << endl;` 即可实现逐行递增输出的效果。 【易错点】将换行符放在内层循环内部,导致每个数字都换行。

13 题(单选题

某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。()

A.
麦克风
B.
扬声器
C.
油量表
D.
传感器

正确答案C

解析详情

【答案】C 【考点】信息处理系统构成 【解析】声控智能驾驶系统需要:麦克风(接收声音指令)、传感器(感知路径环境)、扬声器(反馈路径信息)。油量表属于车辆状态监控,不是完成“选路”(路径规划)逻辑的必要组件。 【易错点】误认为所有汽车零部件都是自动驾驶系统的核心组成部分。

14 题(单选题

现代计算机是指电子计算机,它所基于的是()体系结构。

A.
艾伦·图灵
B.
冯·诺依曼
C.
阿塔纳索夫
D.
埃克特·莫克利

正确答案B

解析详情

【答案】B 【考点】计算机发展史 【解析】冯·诺依曼提出了“存储程序”原理,规定计算机由控制器、运算器、存储器、输入设备 and 输出设备五部分组成,这构成了现代计算机的体系结构。 【易错点】混淆图灵机模型与冯·诺依曼物理架构。

15 题(单选题

输入一个正整数N,想找出它所有相邻的因数对,比如,输入12,因数对有(1,2)、(2,3)、(3,4)。下面哪段代码找不到所有的因数对?()

A.
for(i=1;i<N;i++) if(!(N%i) &&!(N%(i+1))) printf("%d,%d)\n", i, i+1);
B.
for(i=2;i<N;i++) if(!(N%i) &&!(N%(i+1))) printf("%d,%d)\n", i, i+1);
C.
for(i=2;i<N/2;i++) if(!(N%(i-1)) &&!(N%i)) printf("%d,%d)\n", i-1, i);
D.
for(i=1;i<N/2;i++) if(!(N%i) &&!(N%(i+1))) printf("%d,%d)\n", i, i+1);

正确答案B

解析详情

【答案】B 【考点】逻辑完整性检查 【解析】输入 12 时,因数对包含 (1, 2)。选项 B 的循环起点为 `i=2`,此时无法检查 `i=1` 和 `i+1=2` 这一对因数,导致漏掉 (1, 2)。其他选项均能覆盖 1 到 N/2 的范围。 【易错点】忽略循环起点的选择对结果覆盖范围的影响。

判断题(每题 2 分)

1 题(判断题

C++表达式 -7/2 的值为整数 -3。()

正确答案正确

解析详情

【答案】正确 【考点】整数除法取整 【解析】C++ 中整数除法执行截断取整(向零取整)。-7 / 2 = -3.5,截断小数部分后结果为 -3。 【易错点】误以为会按照数学规则进行四舍五入或向下取整(得到 -4)。

2 题(判断题

C++表达式 2*int('9')*2 的值为36。()

正确答案错误

解析详情

【答案】错误 【考点】字符与整数转换 【解析】在 C++ 中,`int('9')` 获取的是字符 '9' 的 ASCII 码,值为 57。表达式计算为 2 * 57 * 2 = 228,而非 2 * 9 * 2 = 36。 【易错点】混淆字符 '9' 的字面含义与其在计算机中的 ASCII 编码值。

3 题(判断题

C++ 表达式 3+2 && 5-5 的值为 false。()

正确答案正确

解析详情

【答案】正确 【考点】逻辑表达式求值 【解析】`3+2` 结果为 5,在逻辑判断中视为 true;`5-5` 结果为 0,视为 false。根据逻辑与运算“全真才为真”,`true && false` 结果为 false。 【易错点】忽略了非零整数在逻辑运算中被视为“真”。

4 题(判断题

在C++代码中,执行 srand(θ) 后连续两次执行 rand() 的结果相等。()

正确答案错误

解析详情

【答案】错误 【考点】随机数生成机制 【解析】`srand(seed)` 用于初始化随机数种子。初始化后,调用 `rand()` 会根据该种子生成 a 伪随机序列。序列中的每个数通常是不同的,连续调用两次 `rand()` 不会得到相同的结果。 【易错点】误认为固定了种子后 `rand()` 每次返回的值就固定不变了。

5 题(判断题

C++代码中 while(1){...} 的判断条件不是逻辑值,将导致语法错误。()

正确答案错误

解析详情

【答案】错误 【考点】布尔类型转换 【解析】C++ 允许将整型隐式转换为布尔型。在 `while` 判断中,非零值被视为 true,0 被视为 false。因此 `while(1)` 是完全合法的语法,表示无限循环。 【易错点】误认为 `while` 括号内必须显式使用布尔表达式。

6 题(判断题

执行以下C++代码后将输出0。()

Sum = 0;
for (i = -500; i < 500; i++)
    Sum += i;
cout << Sum;

正确答案错误

解析详情

【答案】错误 【考点】循环区间求和 【解析】循环范围是 `[-500, 500)`,即从 -500 累加到 499。其中 `[-499, 499]` 部分的正负数相互抵消,和为 0。最终 `Sum` 的值为初始项 -500。 【易错点】误认为循环包含了 500 导致正负完全抵消,或者忽略了区间是左闭右开。

7 题(判断题

在C++代码中,运算符只能处理相同的数据类型,不同类型之间必须转换为相同的数据类型。()

正确答案错误

解析详情

【答案】错误 【考点】算术运算转换规则 【解析】C++ 具有自动类型转换机制(隐式转换)。例如 `int` 和 `double` 运算时,`int` 会自动提升为 `double` 再进行计算,并不要求程序员必须手动强制转换。 【易错点】不熟悉 C++ 的类型提升规则。

8 题(判断题

在 C++ 代码中,虽然变量都有数据类型,但同一个变量也可以先后用不同类型的值赋值。()

正确答案正确

解析详情

【答案】正确 【考点】变量赋值兼容性 【解析】虽然 C++ 是强类型语言,但允许不同类型之间进行赋值。如果类型不匹配,编译器会进行隐式转换(如将 `double` 赋给 `int` 会发生截断)。 【易错点】混淆“变量类型不可变”与“赋值时的类型转换”。

9 题(判断题

小杨最近在准备考GESP,他用的Dev C++来练习和运行程序,所以Dev C++也是一个小型操作系统。()

正确答案错误

解析详情

【答案】错误 【考点】应用软件与系统软件 【解析】Dev C++ 是一种集成开发环境(IDE),属于应用软件。操作系统(如 Windows, Linux)是系统软件,负责管理硬件资源,二者概念完全不同。 【易错点】分不清开发工具和运行环境(操作系统)的区别。

10 题(判断题

任何一个 while 循环都可以转化为等价的 for 循环()。

正确答案正确

解析详情

【答案】正确 【考点】循环结构的等价性 【解析】`for` 循环和 `while` 循环都是图灵完备的控制结构。任何 `for` 循环都可以写成带有初始化 and 迭代步长的 `while` 循环,反之亦然。 【易错点】误认为某种特定循环逻辑只能由其中一种结构实现。