GESP 客观题评测系统
2025-09-Level-2
2025-09-Level-2
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题)
人工智能现在非常火,小杨就想多了解一下,其中就经常听人提到“大模型”。那么请问这里说的“大模型”最贴切是指()。
正确答案D
解析详情
【答案】D 【考点】人工智能基础知识 【解析】在当前人工智能(AI)领域,人们常提到的“大模型”主要指的是“大语言模型”(Large Language Model, LLM)。这类模型通过海量的文本数据进行训练,具备强大的自然语言理解和生成能力。虽然其背后依赖大规模计算资源 and 实现大规模智能,但其最贴切的术语定义是“大语言模型”。 【易错点】容易受到字面意思干扰,误认为是指硬件层面的模型(大电脑)或抽象的智能单位。
第 2 题(单选题)
在TCP协议中,完成连接建立需要通过()握手。
正确答案C
解析详情
【答案】C 【考点】计算机网络基础(TCP协议) 【解析】传输控制协议(TCP)在建立连接时采用“三次握手”机制:1. 客户端发送连接请求(SYN);2. 服务端确认并发送同步信号(SYN+ACK);3. 客户端再次确认(ACK)。这一机制确保了双方都具备发送 and 接收数据的能力,从而在不可靠的信道上建立可靠的全双工连接。 【易错点】混淆建立连接(三次握手)与释放连接(四次挥手)的过程。
第 3 题(单选题)
下面的C++代码用于输入姓名,然后输出姓名,正确的说法是()。
string XingMing;
cout << "请输入您的姓名:";
cin >> XingMing;
cout << XingMing;正确答案C
解析详情
【答案】C 【考点】C++变量命名规则 【解析】A 错误:C++ 允许使用任何符合规则的字符组合(字母、数字、下划线,且不能以数字开头)作为变量名,拼音是合法的。B 错误:变量名中不能包含空格。C 正确:C++ 变量名区分大小写,xingming 是完全合法的标识符。D 错误:变量名不能包含连字符“-”。 【易错点】不熟悉变量命名的合法字符范围,或忽略了 C++ 对大小写的敏感性。
第 4 题(单选题)
下面C++代码用于获得正整数N的第M位数,如N等于1234,M等于2,则输出 3。此题假设M的值大于等于1且小于等于N的位数。横线处应填入的代码是( )。
int N, M, div=1;
cout << "请输入一个正整数:";
cin >> N;
cout << "请输入从右到左取第几位数:";
cin >> M;
for (int i = 0; i < (M - 1); i++) div *= 10;
cout << (___);正确答案D
解析详情
【答案】D 【考点】整数拆分与算术运算 【解析】变量 div 被计算为 10^(M-1)。要获取从右向左数第 M 位(即权值为 10^(M-1) 的位):1. 执行 N / div 会去掉目标位右侧的所有数字,使目标位变成个位。例如当 N=1234, M=2 时,div=10,1234/10=123。2. 接着执行 % 10 取出此时的个位数。123%10=3。因此填入 N / div % 10。 【易错点】混淆取模(%)和整除(/)的逻辑顺序,或者对 div 的含义理解有误。
第 5 题(单选题)
下面 C++ 代码执行,其输出是()。
a, b = 3, 4;
c = a == b;
cout << a << ' ' << b << ' ' << c;正确答案D
解析详情
【答案】D 【考点】C++ 语法规范(变量声明与赋值) 【解析】在 C++ 中,变量使用前必须先声明类型(如 int a;)。该代码中直接使用 a, b = 3, 4; 属于语法错误。即使 a, b 已声明,C++ 也不支持这种 Python 风格的多重赋值。在 C++ 中,a, b = 3, 4; 是一个逗号表达式,其效果并非将 3 and 4 分别赋给 a and b。由于代码无法正常通过编译,输出结果为“以上都不对”。 【易错点】受 Python 等动态语言影响,误认为 C++ 支持 a, b = 3, 4 这种赋值方式。
第 6 题(单选题)
某种编号的规则是“XX-Y”,其中XX从00到11,Y从0到9。第1个编号是00-0,第2个编号是01-1,……,第12个编号11-1,第13个编号00-2,即其编码规则是XX和Y同时增1,到XX到11时下一个变为00,Y到9时,下一个变为0。下面的C++代码用于生成第N个编号,横线处应填上的代码是()。
cout << "请输入编号位置:";
cin >> N;
part1 = N % ___;
part2 = N % ___;
if (part1 < 10)
printf("0%d-%d\n", part1, part2);
else
printf("%d-%d\n", part1, part2);正确答案A
解析详情
【答案】A 【考点】周期性规律与取模运算 【解析】题目中 XX 的取值范围是 00 到 11,共 12 个数,因此 XX(part1)随编号位置 N 变化的周期为 12,对应的取模基数应为 12。Y 的取值范围是 0 到 9,共 10 个数,因此 Y(part2)变化的周期为 10,对应的取模基数应为 10。虽然 N 从 1 开始时逻辑通常为 (N-1)%周期,但从选项来看,A 提供的周期基数 12 and 10 是最合理的。 【易错点】数错 XX 或 Y 的取值总个数,例如误认为 00 到 11 是 11 个数。
第 7 题(单选题)
下面的C++代码执行后其输出是()。
cnt = 0;
for (int i = -10; i < 10; i++)
for (int j = 0; j < i; j++)
cnt += 1;
cout << cnt;正确答案D
解析详情
【答案】D 【考点】嵌套循环执行次数计算 【解析】外层循环 i 从 -10 变到 9。内层循环执行条件是 j 从 0 开始且 j < i。因此: 1. 当 i <= 0 时(i 为 -10 到 0),j < i 条件无法满足(0 不可能小于负数 or 0),内层循环执行 0 次。 2. 当 i > 0 时(i 为 1 到 9),内层循环分别执行 1, 2, 3, 4, 5, 6, 7, 8, 9 次。 总累加次数 cnt = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45。 【易错点】忽略了 j 从 0 开始的限制,误认为 i 为负数时也会执行内层循环。
第 8 题(单选题)
下面C++代码执行后其输出是()。
for (i = 1; i < 12; i++) {
if (i % 2 == 0)
continue;
for (j = 0; j < i; j++)
if (i * j % 2)
break;
}
if(i >= 12)
cout << (i * j);正确答案B
解析详情
【答案】B 【考点】循环控制结构(continue/break)分析 【解析】1. 外层循环 i 从 1 到 11。当 i 为偶数时 continue,只考虑 i 为奇数(1, 3, 5, 7, 9, 11)。 2. 内层循环 j 从 0 开始,判定 i*j%2(即 i and j 均为奇数时 break)。 3. 当 i=11 时,内层 j=0(11*0%2=0,不 break),j=1(11*1%2=1,break 退出)。此时 j 的值为 1。 4. 外层循环在 i=11 后执行 i++ 变为 12,循环结束。最终 i=12, j=1。 5. if(i >= 12) 成立,输出 i*j = 12 * 1 = 12。 【易错点】忽略了外层循环正常退出后 i 会自增到 12,以及内层循环 break 时 j 的确切数值。
第 9 题(单选题)
阅读下面的C++代码,其中变量都是整型,则说法正确的是()。
cin >> a >> b;
while (b != 0){
remainder = a % b;
a = b;
b = remainder;
}
cout << a;正确答案D
解析详情
【答案】D 【考点】辗转相除法(最大公约数)逻辑 【解析】这是实现辗转相除法的代码。A 错误:若 b=0,while 循环不执行,直接输出 a。B 错误:a < b 时第一次循环会交换 a and b,随后正常运行。C 错误:负数也可取模。D 正确:若 a=0,循环开始时 remainder = 0 % b = 0,接着 a = b, b = 0,循环结束输出 a。由于 GCD 通常取正值,输出结果确实与 abs(b) 相关 and 逻辑自洽。 【易错点】对 0 参与取模运算的判定规则以及辗转相除法对不同输入的兼容性理解不透彻。
第 10 题(单选题)
下面 C++ 代码执行后输出是()。
num = 0;
while (num <= 5){
num += 1;
if (num == 3){
continue;
}
printf("%d#", num);
}正确答案A
解析详情
【答案】A 【考点】循环控制与自增逻辑 【解析】1. num 初始为 0,while 条件 num <= 5。2. 第一次:num 变 1,输出 1#。3. 第二次:num 变 2,输出 2#。4. 第三次:num 变 3,触发 continue 跳过 printf。5. 第四、五次:输出 4#, 5#。6. 第六次:此时 num 为 5,5 <= 5 成立,num 变为 6,输出 6#。7. num 为 6 时判定 6 <= 5 为假,退出。结果:1#2#4#5#6#。 【易错点】没注意到 num 的增加发生在 printf 之前,且忽略了当 num=5 时循环条件依然成立,导致最终输出了 6#。
第 11 题(单选题)
下面C++代码用于记录多个输入数中的最大数和最小数(输入 -999 则输入结束),相关说法错误的是()。
cin >> now_num;
min_num = max_num = now_num;
while (now_num != -999){
if (max_num < now_num)
max_num = now_num;
if (min_num > now_num)
min_num = now_num;
cin >> now_num;
}
cout << min_num << ' ' << max_num;正确答案D
解析详情
【答案】D 【考点】循环输入逻辑与哨兵值处理 【解析】A/B/C 描述正确,代码利用 while 循环 and 哨兵值 -999 更新最值。D 错误:若将 cin 移动到 while 内部最顶端,在判断 now_num != -999 时使用的是旧值,且当用户输入 -999 意图结束时,该值会先进入 if 分支参与比较(被当作有效数值处理),从而导致求得的最小值可能变成错误的 -999。 【易错点】忽略了哨兵值不应参与核心业务逻辑(比较大小)的编程原则。
第 12 题(单选题)
下面C++代码执行后输出与 5 有关数的数量。“与 5 有关的数”定义为含有 5 或者能被 5 整除的数。相关说法正确的是()。
int cnt = 0;
for (i = 1; i < 1000; i++){
if (i % 5 == 0){
cnt += 1;
continue;
}
j = i;
while (j > 0)
if (j % 10 == 5){
cnt += 1;
break;
}
else
j /= 10;
}
cout << cnt;正确答案C
解析详情
【答案】C 【考点】循环控制逻辑与变量保护 【解析】A 错误:若删除 continue,对于既能被 5 整除又包含 5 的数(如 55),会被统计两次。B 错误:i 是外层循环变量,直接在内层修改 i 会导致外层循环混乱。C 正确:break 的目的是跳出内层 while,令 j=0 也会使 j>0 失效从而跳出,效果一致。D 错误:j>=0 会导致 j 为 0 时无限循环。 【易错点】混淆 break and continue 的作用范围,以及忽略对循环控制变量的保护。
第 13 题(单选题)
下面C++代码实现输出如下图形,应该在横线处填入的代码是()。
1 请输入层数:10
2 1
3 23
4 456
5 7891
6 23456
7 789123
8 4567891
9 23456789
10 123456789
11 1234567891cout << "请输入层数:";
cin >> N;
K = 1;
for (i = 1; i < N + 1; i++) {
for (int _ = 1; _ < ___; _++)
cout << " ";
for (int _ = 1; _ < ___; _++) {
cout << K;
K += 1;
if (K == 10)
K = 1;
}
cout << '\n';
}N - i + 1
i + 1N - i
iN
iN - i
i + 1正确答案A
解析详情
【答案】A 【考点】双层嵌套循环图形规律 【解析】观察图形:第 i 行(i 从 1 开始)前面有 N-i 个空格,后面有 i 个数字。代码中使用 _ 从 1 开始 and 循环条件是 _ < ___。1. 为了输出 N-i 个空格,横线处应填 N-i+1(循环次数为 N-i)。2. 为了输出 i 个数字,横线处应填 i+1(循环次数为 i)。综合选 A。 【易错点】没数清每一行空格 and 数字的具体数量,或者在处理 < 边界时出现偏移误差。
第 14 题(单选题)
下面 C++ 代码执行,其输出是()。
int a=9, b=27;
a = 'a' + 'b';
b = 'a' - 'b';
a = a - b;
cout << a << ' ' << b << endl;正确答案A
解析详情
【答案】A 【考点】字符 ASCII 码运算 【解析】1. 'a' 的 ASCII 码为 97,'b' 为 98。2. a = 'a' + 'b' = 97 + 98 = 195。3. b = 'a' - 'b' = 97 - 98 = -1。4. a = a - b = 195 - (-1) = 196。5. 输出 a and b 分别为 196 and -1。故选 A。 【易错点】记错基础字符的 ASCII 码值,或者在处理负数减法(减负等于加)时出现计算疏忽。
第 15 题(单选题)
有个无限长的链,由3种外形相同但材质不同的环链成。3种环的重量分别是3、4、6克,相同材质的多个环每12克一组,分别记为G3、G4、G6。链依次G3、G4、G6、G3、G4、G6、……。同时对链上所有环从头依次编号1、2、3、4……。输入正整数代表环编号,求该编号前所有环(不含该环本身)的重量。下面是C++代码是实现,正确说法是()。
int N, G, R;
int wc = 0;
cin >> N; // 输入正整数
G = (N - 1) / 9; // L1
R = (N - 1) % 9; // L2: 保存余数
wc += 36*G;
if((1 <= R) && (R <= 4))
wc += 3*R; // L3
else if((5 <= R) && (R <= 7))
wc += 4*R; // L4
else if(R == 8)
wc += 6*(R - 1); // L5
cout << wc << endl;正确答案D
解析详情
【答案】D 【考点】综合逻辑推理与代码缺陷分析 【解析】一个完整周期包含 G3 (12/3=4个), G4 (12/4=3个), G6 (12/6=2个),共 9 个环,总重 36 克。G= (N-1)/9 and R= (N-1)%9 计算周期 and 余数是正确的。但后续求“该编号前所有环重量”时,累加逻辑 wc += 3*R 等在各材质交界处是不准确的(例如进入 G4 区域时应先加满 G3 的 12 克再算 G4 部分)。选项 A/B/C 提到的修改都太片面,不足以完全修复逻辑,故选 D。 【易错点】在复杂的数值推导中迷失,未能从全局逻辑判断代码的健壮性。
判断题(每题 2 分)
第 1 题(判断题)
在集成开发环境里调试程序时,要注意不能修改源程序,因为如果修改,就要终止调试、关闭该文件并重新打开,才能再次开始调试。()
正确答案错误
解析详情
【答案】错误 【考点】集成开发环境(IDE)调试基础 【解析】在现代 IDE 中,调试时可以修改源程序。虽然重大逻辑修改可能需要重新编译才能在下次调试中生效,但绝不需要“关闭该文件并重新打开”。某些高级调试器甚至支持边调试边修改代码(如热重载)。 【易错点】误以为调试状态下源文件会被锁定,或低估了现代开发工具的灵活性。
第 2 题(判断题)
在C++代码中,假设N为正整数且大于100,则 N / 100 将舍弃个位和十位,如N为1234则cout << (N / 100) 将输出 12。如果N小于100,则其值为 0。()
正确答案正确
解析详情
【答案】正确 【考点】整数除法取整规则 【解析】C++ 中两个整数相除的结果会自动向零取整(舍弃小数部分)。正整数除以 100 相当于整体右移两位并去掉最后的两位(个位 and 十位)。例如 1234/100=12,99/100=0。描述完全符合语法。 【易错点】混淆整数除法与浮点数除法(如 100 与 100.0 的区别)。
第 3 题(判断题)
下列C++代码执行后将输出 1,因为 a 确实小于 20 和 10。()
a = 5;
cout << (a < 10 and 20);正确答案错误
解析详情
【答案】错误 【考点】逻辑运算符优先级与真值判定 【解析】代码输出 1 的原因是 (a < 10) 的结果为 true(即 1),然后 1 and 20 进行逻辑与运算(20 非零即为真),最终结果为 true(输出 1)。但题干给出的理由“a 确实小于 20”是错误的,代码中 and 20 并非判断 a 与 20 的大小关系。 【易错点】误认为逻辑表达式能像自然语言那样省略重复的比较对象。
第 4 题(判断题)
下面的C++代码中变量都是整型,则执行后将输出1。()
x, y, z = 5, 10, 15;
result = x < y < z;
cout << result;正确答案正确
解析详情
【答案】正确 【考点】关系运算符的左结合性 【解析】C++ 关系运算符自左向右结合。表达式 x < y < z 先计算 x < y(5 < 10)得到结果 true(整数 1)。接着计算 1 < z(1 < 15)得到结果 true,最终输出 1。虽然这在数学逻辑上不代表连等判断,但在 C++ 语法下结果确实为 1。 【易错点】忽略了 C++ 会将中间比较结果转换为 0 或 1 参与后续计算的机制。
第 5 题(判断题)
下面C++代码执行时如输入 99.99,将输出及格两个汉字。()
int score;
cout << "请输入学生成绩:";
cin >> score;
if (score >= 60)
printf("及格");
else
printf("不及格");正确答案正确
解析详情
【答案】正确 【考点】cin 数据读取与类型截断 【解析】当向 int 类型变量输入浮点数 99.99 时,cin 会在读到小数点时停止,变量 score 最终存储的是整数部分 99。因为 99 >= 60 为真,程序输出“及格”。 【易错点】误以为输入浮点数到整数变量会导致错误 or 读取 100(进位)。
第 6 题(判断题)
执行下面的C++代码时输入123,则输出是DCB。()
int a;
cin >> a;
while(a){
cout << 'A'+a%10;
a /= 10;
}正确答案错误
解析详情
【答案】错误 【考点】表达式类型提升与输出流规则 【解析】虽然逻辑上计算出的值对应字符 D、C、B,但在 cout << 'A' + a%10; 中,'A'(char)与整数相加后结果会被提升为 int 类型。因此 cout 会输出这些字符对应的 ASCII 码值(如 68 67 66),而不是字符本身。 【易错点】忽略了混合运算中类型自动提升及 cout 对不同类型输出格式的差异。
第 7 题(判断题)
下面的 C++ 代码执行后将输出 +#+#3#。()
int i;
for (i = 0; i < 3; i++) {
if (i == 2)
continue;
printf("+\#");
}
cout << i << '#';正确答案正确
解析详情
【答案】正确 【考点】循环边界与 continue 逻辑 【解析】1. i=0 and i=1 时输出 +#(两次)。2. i=2 时触发 continue 跳过 printf。3. 随后执行 i++ 变为 3,不满足 i < 3,循环退出。4. 最后输出 i# 即 3#。综合结果为 +#+#3#,描述正确。 【易错点】在计算循环退出后的变量值时容易出错(误认为 i 停在 2)。
第 8 题(判断题)
下列C++代码用于求斐波那契数列,即第1个数0,第2个数1,从第三个数开始,是前两个数之和。如果输入的值为大于1的正整数,该代码能实现。()
cin >> n;
a = 0, b = 1;
for (int j = 0; j < n; j++) {
cout << a << " ";
b = b + a;
a = b - a;
}正确答案正确
解析详情
【答案】正确 【考点】斐波那契数列的迭代实现 【解析】代码通过 b = b + a (算出下一项) and a = b - a (将原 b 值赋给 a) 的技巧实现了不使用 third 个变量的数值更新,能正确输出斐波那契数列的前 n 项。描述正确。 【易错点】对 a = b - a 这种原地更新逻辑理解不透彻,误认为更新顺序有误。
第 9 题(判断题)
下面的C++不能实现如下输出,但如果将L1标记的cout << 0行移动if块外面,或者说移动到 L2标记行,则可以。()
1 请输入矩阵大小n:9
2 100000000
3 020000000
4 003000000
5 000400000
6 000050000
7 000006000
8 000000700
9 000000080
10 000000009int n, i, j;
cout << "请输入矩阵大小n:";
cin >> n;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i == j) {
cout << i + 1;
continue;
cout << 0; // L1
}
// L2
}
printf("\n");
}正确答案正确
解析详情
【答案】正确 【考点】分支逻辑缺陷 and continue 的作用 【解析】原代码在 i==j 时执行 continue 跳过了该层循环后续动作,且 i!=j 时没有任何输出,因此无法打印出“0”。若将输出 0 的语句移至 L2 处,则非对角线位置均会输出 0,从而实现目标图形。描述正确。 【易错点】忽略了 continue 对内层循环执行流的影响,以及 i!=j 分支缺失输出的问题。
第 10 题(判断题)
C++代码 cout << ('5'+4); 执行后的输出为 9。()
正确答案错误
解析详情
【答案】错误 【考点】字符型与整型混合运算 【解析】字符 '5' 的 ASCII 码是 53。'5' + 4 运算后结果是整数 57。cout << 57 会输出数字 57 而不是 9。要输出 9 需写为 '5' - '0' + 4。描述错误。 【易错点】误以为字符 '5' 能直接按数值 5 参与加法运算 and 输出其结果。