GESP 客观题评测系统

试卷解析 · 理解每一步

2025-03-Level-1

2025-03-Level-1

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

单选题

第 1 题(单选题,2 分)

2025年春节有两件轰动全球的事件,一个是DeepSeek横空出世,另一个是贺岁片《哪吒2》票房惊人,入了全球票房榜。下面关于DeepSeek与《哪吒2》的描述成立的是()。

A.
《哪吒2》是一款新型操作系统
B.
DeepSeek是深海钻探软件
C.
《哪吒2》可以生成新的软件
D.
DeepSeek可以根据《哪吒2》的场景生成剧情脚本

正确答案D

解析详情
答案 D人工智能应用常识
思路与推导
  1. DeepSeek是人工智能模型,可以根据给定场景生成文字内容,剧情脚本就属于这一类生成结果,所以 D 成立。A 把电影说成操作系统,B 把 DeepSeek 说成深海钻探软件,C 把电影说成能生成软件,这些都不符合题意。

第 2 题(单选题,2 分)

在某集成开发环境中编辑一个源代码文件时不可以执行下面()操作。

A.
修改变量定义
B.
保存代码修改
C.
撤销代码修改
D.
插入执行截图

正确答案D

解析详情
答案 D集成开发环境的基本功能
思路与推导
  1. 在 IDE 中编辑源代码文件时,修改内容、保存、撤销都是常见编辑操作。把程序执行截图插入到代码文件里不属于这种编辑行为,所以 D 不可以执行。

第 3 题(单选题,2 分)

在C++中,下列可以做变量的是()。

A.
Var-1
B.
$1
C.
%%1
D.
Var_1

正确答案D

解析详情
答案 D标识符命名规则
思路与推导
  1. C++ 标识符可以由字母、数字和下划线组成,但不能包含减号等运算符,也不能用这道题中的特殊符号形式开头。`Var_1` 只用了字母、数字和下划线,符合规则,所以 D 正确;`Var-1` 中的 `-` 是减号,`$1` 和 `%%1` 也都不是本题允许的变量名写法。

第 4 题(单选题,2 分)

以下哪个是C++语言的关键字?()

A.
abs
B.
cin
C.
do
D.
endl

正确答案C

解析详情
答案 CC++ 关键字识别
思路与推导
  1. `do` 是 C++ 语言保留的关键字,用来构成 `do...while` 循环。`abs` 是常用函数名,`cin` 和 `endl` 是标准库中的名字,不是关键字,所以只有 C 正确。

第 5 题(单选题,2 分)

下面的框架在L1和L2标记的两行处分别填写选项中的代码,哪组不能通过编译()。

int main() {
    int i = 0;
    // L1
    break;
    // L2
    return 0;
}
A.
do {
} while (i != 0);
B.
for (; i < 10; i++) {
}
C.
if (i == 0) {
}
D.
switch (i) {
}

正确答案C

解析详情
答案 C`break` 的合法位置
思路与推导
  1. `break` 只能出现在循环或 `switch` 语句内部。A 把 `break` 放进 `do...while`,B 放进 `for`,D 放进 `switch`,都能通过编译;C 只是普通的 `if` 语句块,`break` 不在循环或 `switch` 中,因此会编译报错。

第 6 题(单选题,2 分)

下面C++语句( )执行后的输出是___0322$。

A.
printf("___ %2d%02d$", 3, 22)
B.
printf("___ %02d%2d$", 3, 22)
C.
printf("___ %02d%02d$$$", 3, 22)
D.
printf("___ %02d%02d$$$, 3, 22)

正确答案B

解析详情
答案 B`printf` 格式控制
思路与推导
  1. `%02d` 输出宽度至少为 2,不足时前面补 `0`,所以数字 3 会输出成 `03`;`%2d` 输出宽度至少为 2,数字 22 本身已有两位,仍输出 `22`。因此 `printf("___ %02d%2d", 3, 22)` 的结果正好是题目给出的 `___0322`,所以选 B。

第 7 题(单选题,2 分)

有关下列 C++ 代码的说法,错误的是()。

printf("我爱码代码!");
A.
配对双引号内的汉字改为英文 Hello, C++代码能正确执行
B.
配对双引号内的汉字改为 Hello代码!, C++代码能正确执行
C.
代码中的每个双引号,都可以改为两个单引号
D.
代码中的每个双引号,都可以改为三个双引号

正确答案C

解析详情
答案 C字符串字面量与引号
思路与推导
  1. `printf("我爱码代码!");` 中双引号括起来的是字符串字面量。把其中内容换成英文或中英混合文本,只要仍然放在一对双引号内,A 和 B 都能正常执行;把每个双引号写成三个双引号,在 C++ 中会被拆成相邻的字符串字面量,也仍可通过编译。只有把双引号改成两个单引号会变成字符常量写法,不再是合法的字符串参数,所以错误选项是 C。

第 8 题(单选题,2 分)

C++表达式 16 / 4 % 2 的值是()。

A.
8
B.
4
C.
2
D.
0

正确答案D

解析详情
答案 D整数运算顺序
思路与推导
  1. 在 C++ 里,`/` 和 `%` 优先级相同,按从左到右计算。先算 `16 / 4 = 4`,再算 `4 % 2 = 0`,所以表达式结果是 0,对应 D。

第 9 题(单选题,2 分)

N是C++的正整数,值为12,则 cout << (N % 3 + N / 5) 的输出是()。

A.
6.4
B.
2.4
C.
6
D.
2

正确答案D

解析详情
答案 D取模与整数除法
思路与推导
  1. 当 `N = 12` 时,`12 % 3 = 0`,`12 / 5 = 2`,这里是整型除法,小数部分会直接舍去。于是括号里的值是 `0 + 2 = 2`,输出结果为 2,所以选 D。

第 10 题(单选题,2 分)

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

int N = 10;
printf("%d*%d", N, N, N * N);
A.
10∗10={10∗10}10*10 = \{10*10\}
B.
100 = 10
C.
N∗N=100N*N = 100
D.
{N}∗{N}={10∗10}\{N\}*\{N\} = \{10*10\}

正确答案D

解析详情
答案 D`printf` 输出参数匹配
思路与推导
  1. 格式串里只有两个 `%d`,所以真正会输出的只有前两个参数 `N` 和 `N`,结果是 `10*10`;第三个参数 `N * N` 不会显示出来。当前 Markdown 中本题四个选项文字存在明显 OCR 损坏,只能确定正确输出应为 `10*10`,并按答案表记录为 D。

第 11 题(单选题,2 分)

执行下面的 C++ 代码,在键盘上先后输入 100 和 200,输出是()。

int first, second;
cout << "请输入第1个正整数:";
cin >> first;
cout << "请输入第2个正整数:";
cin >> second;
cout << (first / second * second) << endl;
A.
200
B.
100
C.
1
D.
0

正确答案D

解析详情
答案 D整数除法与表达式求值
思路与推导
  1. 输入后 `first = 100`,`second = 200`。表达式先算 `first / second`,由于都是整型,`100 / 200 = 0`;再算 `0 * 200 = 0`,所以最终输出 0,选 D。

第 12 题(单选题,2 分)

下面C++代码执行后,将输出能被2整除且除以7余数为2的数。下列选项不能实现的是()。

for (int i = 0; i < 100; i++)
    if _____
        cout << i << " ";
A.
((i % 2 == 0) && (i % 7 == 2))
B.
((!(i % 2)) && (i % 7 == 2))
C.
((!(i % 2)) && (!(i % 7)))
D.
((i % 2 != 1) && (i % 7 == 2))

正确答案C

解析详情
答案 C条件表达式等价转换
思路与推导
  1. 题目要求同时满足“能被 2 整除”和“除以 7 余 2”。A 直接写出了这两个条件;B 中 `!(i % 2)` 等价于 `i % 2 == 0`;D 中 `i % 2 != 1` 对偶数也成立,因此 A、B、D 都能实现。C 的后半部分 `!(i % 7)` 表示 `i % 7 == 0`,要求变成“除以 7 余 0”,不符合题意,所以不能实现。

第 13 题(单选题,2 分)

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

int tnt = 0;
for (int i = -1000; i < 1000; i++)
    tnt += i;
cout << tnt << endl;
A.
-1000
B.
0
C.
999
D.
1000

正确答案A

解析详情
答案 A循环累加与对称求和
思路与推导
  1. 循环把 `-1000` 到 `999` 全部加起来。`-999` 到 `999` 可以两两配对成 0,最后只剩下最前面的 `-1000` 没有正数与之抵消,所以总和是 `-1000`,选 A。

第 14 题(单选题,2 分)

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

int i;
for (i = 1; i < 100; i += 5)
    continue;
cout << i << endl;
A.
101
B.
100
C.
99
D.
96

正确答案A

解析详情
答案 A`for` 循环结束后的变量值
思路与推导
  1. 循环中 `i` 依次取 `1, 6, 11, ..., 96`。当 `i = 96` 时仍满足 `i < 100`,执行完本轮后再加 5,`i` 变成 101;下一次判断 `101 < 100` 为假,循环结束,因此最后输出 101,选 A。

第 15 题(单选题,2 分)

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

int tnt = 0;
for (int i = 5; i < 100; i += 5) {
    if (i % 2 == 0)
        continue;
    tnt += 1;
    if (i % 3 == 0 && i % 7 == 0)
        break;
}
cout << tnt << endl;
A.
500
B.
450
C.
10
D.
1

正确答案C

解析详情
答案 C循环控制与计数
思路与推导
  1. 循环枚举 5 到 95 的 5 的倍数。偶数倍数会被 `continue` 跳过,只统计奇数倍数,所以被计数的是 `5, 15, 25, ..., 95`,一共 10 个。`i % 3 == 0 && i % 7 == 0` 等价于能被 21 整除,而区间内既是 5 的倍数又是 21 的倍数的最小正数是 105,循环到 95 就结束了,`break` 不会触发,因此输出 10,选 C。

判断题

第 1 题(判断题,2 分)

C++、Python 都是高级编程语言,它们的每条语句最终都要通过机器指令来完成。()

正确答案正确

解析详情
答案 正确高级语言与机器指令
思路与推导
  1. C++ 和 Python 都属于高级编程语言,人写的源代码最终都不能被硬件直接执行。它们都必须经过编译或解释等过程,转化为机器能够执行的指令,所以题目说法正确。

第 2 题(判断题,2 分)

在 C++ 中表达式 N * 2 % N 中如果 N 的值为正整数,则其值为 2。()

正确答案错误

解析详情
答案 错误取模运算
思路与推导
  1. 当 `N` 为正整数时,`N * 2` 一定能被 `N` 整除,所以 `(N * 2) % N = 0`,不会等于 2。题目断言与实际运算结果不符,因此错误。

第 3 题(判断题,2 分)

执行如下 C++ 代码如果在键盘上输入 10,执行后将输出 20。()

char N;
printf("请输入正整数:");
cin >> N;
printf("%d\n", N * 2);

正确答案错误

解析详情
答案 错误字符类型输入
思路与推导
  1. 变量 `N` 的类型是 `char`,输入 `10` 时首先读入的是字符 `'1'`,不是整数 10。字符 `'1'` 的编码值乘以 2 后输出的也不是 20,所以题目断言错误。

第 4 题(判断题,2 分)

删除下面 C++ 代码中的 continue 不影响程序的执行效果。()

for (int i = 0; i < 100; i++) {
    if (i % 2 == 0) {
        printf("偶数");
        continue;
    }
    else
    printf("奇数");
}

正确答案正确

解析详情
答案 正确`continue` 的作用
思路与推导
  1. 当 `i % 2 == 0` 时,程序已经进入 `if` 分支并输出“偶数”,此时就算删掉 `continue`,也不会去执行后面的 `else` 分支,因为 `if...else` 结构本来就只会二选一。每轮循环输出结果不变,所以题目说法正确。

第 5 题(判断题,2 分)

下面C++代码执行时将报错,因为所在位置应该是变量名,而 _ 不可以做变量名。()

for (int _ = 0; _ < 100; _++)
    cout << "*" << endl;

正确答案错误

解析详情
答案 错误标识符命名规则
思路与推导
  1. 下划线 `_` 可以作为合法标识符使用,这段 `for` 循环中的变量名 `_` 在语法上没有问题。程序不会因为变量名是 `_` 而报错,所以题目说法错误。

第 6 题(判断题,2 分)

下面C++代码被执行后,将先后输出3和5。()

for (int i = 3; i < 5; i += 2)
    printf("%d ", i);

正确答案错误

解析详情
答案 错误`for` 循环执行过程
思路与推导
  1. 循环开始时 `i = 3`,满足 `i < 5`,先输出 3;随后执行 `i += 2`,`i` 变成 5。再次判断时 `5 < 5` 不成立,循环结束,因此只会输出 3,不会再输出 5,所以题目说法错误。

第 7 题(判断题,2 分)

下面的 C++ 代码执行后将先后输出 7 个 true。()

for (int i = 0; i < 10; i++)
    cout << (i * 2 < i * i) << "";

正确答案错误

解析详情
答案 错误布尔表达式输出
思路与推导
  1. 对 `i = 0` 到 `9` 而言,不等式 `i * 2 < i * i` 在 `i = 3` 到 `9` 时成立,一共成立 7 次。但 `cout` 直接输出布尔值时,默认打印的是 `1` 和 `0`,不是单词 `true` 和 `false`。所以程序会输出 7 个 `1`,题目说“输出 7 个 true”是错误的。

第 8 题(判断题,2 分)

在C++代码中,user_Name、_userName、user-Name、userName_都是合法的变量名。()

正确答案错误

解析详情
答案 错误标识符命名规则
思路与推导
  1. `user_Name`、`_userName` 和 `userName_` 都由字母与下划线组成,可以作为变量名. `user-Name` 中包含减号 `-`,减号在 C++ 中是运算符,不能出现在标识符里,所以“四个都合法”这个说法错误。

第 9 题(判断题,2 分)

C++语言中 continue 语句可以来提前结束循环。()

正确答案错误

解析详情
答案 错误`continue` 与 `break` 的区别
思路与推导
  1. `continue` 只会结束当前这一轮循环,跳到下一轮继续执行;真正提前结束整个循环的是 `break`。因此题目把 `continue` 说成“提前结束循环”是不准确的,结论应为错误。

第 10 题(判断题,2 分)

C++中定义整型变量N,执行语句 scanf("%d", &N); cout << N / 3 * 5; 时输入 3.6,则输出是6。()

正确答案错误

解析详情
答案 错误整型输入与整数运算
思路与推导
  1. `scanf("%d", &N)` 读入整型时,输入 `3.6` 会先读到整数部分 3,遇到小数点就停止。此时 `N = 3`,接着计算 `N / 3 * 5 = 3 / 3 * 5 = 1 * 5 = 5`,不是 6,所以题目说法错误。