2025年6月GESP真题及题解(C++一级): 选择题和判断题(题解)

一、单选题
第1题
题目: 2025年4月19日在北京举行了一场颇为瞩目的人形机器人半程马拉松赛。比赛期间,跑动着的机器人会利用身上安装的多个传感器所反馈的数据来调整姿态、保持平衡等,那么这类传感器类似于计算机的( )。
- A. 处理器
- B. 存储器
- C. 输入设备
- D. 输出设备
答案: C
解析: 传感器负责采集机器人姿态、平衡等外部或自身状态数据,并将数据送入控制系统处理,作用类似于计算机的输入设备。
第2题
题目: 在某集成开发环境中调试下面代码段时尝试设置断点和检查局部变量,下面哪个说法是错误的( )。
cpp
int i, N = 0; // L1
cin >> N; // L2
for (i = 1; i < 9; i++)
if (N % i == 0) break; // L3
if (i < 9)
printf("N不能大于9\n"); // L4
- A. 断点不可以设在 L1 标记的代码行
- B. 执行暂停在 L2 标记的代码行时,可以检测 N 的值
- C. 执行暂停在 L3 标记的代码行时,可以修改 i 的值
- D. 执行有可能暂停在 L4 标记的代码行
答案: A
解析: L1 是变量定义并初始化语句,通常可以设置断点;B、C 是调试器常见能力;若循环中满足 N % i == 0 而提前 break,且 i < 9,则可能执行到 L4。因此 A 的说法错误。
第3题
题目: 对下列 C++ 的代码,描述准确的是( )。
cpp
int first = 10
printf("%d\n", First)
- A. 执行后输出 10
- B. 执行后输出
{First} - C. 执行后输出
"{First}" - D. 编译报错,因为
First应该是first
答案: D
解析: C++ 区分大小写,first 与 First 是两个不同的标识符。代码中定义的变量是 first,而 printf 中使用了未声明的 First,会编译报错。
第4题
题目: 在 C++ 中,下列可以做变量名的是( )。
- A.
X.cpp - B.
X-cpp - C.
X#cpp - D.
X_cpp
答案: D
解析: C++ 变量名通常由字母、数字和下划线组成,且不能以数字开头;不能包含 .、-、# 等特殊字符。因此只有 X_cpp 合法。
第5题
题目: C++ 表达式 14 - 3 * 3 / 9 的值是( )。
- A. 0
- B. 11
- C. 13
- D. -67
答案: C
解析: 先算乘除:3 * 3 / 9 = 1,再算减法:14 - 1 = 13。因此结果为 13。
第6题
题目: 下面的 C++ 代码执行后,其输出是( )。
cpp
int x = 10, y = 20;
x = x + y;
y = x - y;
x = x - y;
cout << x << ' ' << y;
- A. 10 20
- B. 20 10
- C. 10 10
- D. 20 20
答案: B
解析: 该代码利用加减运算交换 x 与 y 的值:x = 30,y = 30 - 20 = 10,x = 30 - 10 = 20。最终输出 20 10。
第7题
题目: 定义整型变量 int a = 16,则执行 ++a += 3 之后,a 的值会是( )。
- A. 3
- B. 17
- C. 19
- D. 20
答案: D
解析: ++a 先使 a 自增为 17,然后执行复合赋值 += 3,即 17 + 3 = 20。
第8题
题目: C++ 的 int 类型变量 x 的值为 8,如果执行 cout << (++x)++;,则输出和执行后 x 的值分别是( )。
- A. 8 9
- B. 9 9
- C. 9 10
- D. 编译错误,无法执行
答案: C
解析: ++x 先使 x 变为 9,表达式返回左值;随后后置 ++ 使 x 再变为 10,但表达式输出的是后置自增前的值 9。因此输出 9,执行后 x 为 10。
第9题
题目: 下面 C++ 代码执行后的输出是( )。
cpp
int a, b;
a = 3;
b = 4;
printf("a+b=%02d#a+b={a+b}", a + b, a + b);
- A.
a+b=07#a+b={a+b} - B.
a+b= 7#a+b=7 - C.
a+b=7#a+b={a+b} - D.
a+b=7#a+b=7
答案: A
解析: %02d 表示以至少两位输出整数,不足两位补 0,因此 7 输出为 07;格式串中的 {a+b} 只是普通字符,不会被替换,原样输出。
第10题
题目: 下面的 C++ 代码用于求 M 天后是星期几,两处横线处分别应填入的代码是( )。
cpp
int N, M, D;
cout << "当前星期几?"; // 星期日是0
cin >> N;
cout << "求多少天后?"; // 输入正整数
cin >> M;
D = ________;
if (________)
printf("%d天后是星期日", M);
else
printf("%d天后是星期%d", M, D);
-
A.
cpp(N + M) / 7 D == 0 -
B.
cpp(N + M) % 7 D == 0 -
C.
cpp(N + M) / 7 D <= 0 -
D.
cpp(N + M) % 7 D = 0
答案: B
解析: 星期按 7 天循环,因此 M 天后是星期 (N + M) % 7;若结果为 0,则表示星期日,应判断 D == 0。
第11题
题目: 下面 C++ 代码执行后输出是( )。
cpp
int i;
for (i = 1; i < 11; i += 3) {
continue;
if (i % 2 == 0)
break;
printf("%d#", i);
}
if (i >= 11)
printf("END");
- A.
END - B.
1# - C.
1#4#END
答案: A
解析: 循环体首先执行 continue,后续 if、break 和 printf 都不会执行。i 依次变为 1、4、7、10、13,条件 i < 11 不成立后退出,此时 i >= 11,输出 END。
第12题
题目: 下面的 C++ 代码用于求 N 的所有因数(即能将 N 整除的数),如输入 12 则输出 12,6,4,3,2,1。横线处应填入( )。
cpp
int i, N;
cin >> N;
i = N;
while (________) {
if (N % i == 0)
printf("%d,", i);
i--;
}
printf("1");
- A.
i = -1 - B.
i = -1 - C.
i > 1 - D.
i >= 1
答案: C
解析: 循环中从 N 递减到 2 输出大于 1 的因数,最后单独输出 1。因此循环条件应为 i > 1;若用 i >= 1,会重复输出 1。
第13题
题目: 下面 C++ 代码执行后输出的是( )。
cpp
int Sum = 0;
for (int i = 0; i < 10; i++) {
if (i % 2 == 0)
continue;
if (i % 5 == 0)
break;
Sum += i;
}
cout << Sum;
- A. 55
- B. 15
- C. 9
- D. 4
答案: D
解析: 偶数被 continue 跳过;奇数中 i = 1、3 会累加,i = 5 时满足 i % 5 == 0 而 break。因此 Sum = 1 + 3 = 4。
第14题
题目: 试图编译并执行下面 C++ 代码,下面描述正确的是( )。
cpp
float x;
x = 101;
x++;
cout << ++x;
- A. 输出 101
- B. 输出 102
- C. 输出 103
- D. 编译将报错,无法执行
答案: C
解析: x 先被赋值为 101,x++ 后变为 102,++x 后变为 103,并输出 103。代码可以正常编译执行。
第15题
题目: 以下 C++ 代码可以找出百位、十位和个位满足特定条件的三位数,横线处应该填入的是( )。
cpp
int count = 0;
for (int i = 100; i <= 999; i++) {
int a = i / 100;
________;
int c = i % 10;
if (a * a + b * b == c * c) {
count++;
}
}
- A.
int b = (i / 10) / 10 - B.
int b = (i / 10) % 10 - C.
int b = (i % 10) / 10 - D.
int b = (i % 10) % 10
答案: B
解析: 三位数的十位数可以用 (i / 10) % 10 取得。i / 100 得百位,i % 10 得个位。
二、判断题
第1题
题目: 人们在参加很多闭卷考试时通常都不允许带智能手机、平板电脑等,此外很多种智能手表同样因为具有嵌入操作系统及通信等功能,所以也不允许随身携带。( )
答案: √
解析: 智能手表具备操作系统、通信、存储等功能,可能用于传递或查询信息,因此许多闭卷考试同样禁止携带。
第2题
题目: 如果 N 是 C++ 的整型变量,值为 5,则表达式 (N + !N) 的值为 4。( )
答案: ×
解析: !N 对非零整数 N 取逻辑非,结果为 0。因此 N + !N = 5 + 0 = 5,不是 4。
第3题
题目: 在下面 C++ 代码中,删除 break 语句对程序执行结果没有影响。( )
cpp
int i;
for (i = 0; i < 10; i++)
continue;
cout << i << "#";
break;
if (i >= 10)
cout << "END";
答案: √
解析: 按命题意图,break 位于 continue 之后,属于不可达语句,因此删除它不会改变程序执行结果。循环正常结束后 i 为 10,会继续执行后续输出逻辑。
第4题
题目: 删除下面 C++ 代码中的 continue 后其输出是 0#2#4#6#8#。( )
cpp
int i;
for (i = 0; i < 10; i++)
if (i % 2 == 0)
cout << i << "#";
continue;
if (i >= 10)
cout << "END";
答案: ×
解析: 删除 continue 后,程序仍会输出偶数 0#2#4#6#8#,但循环结束后 i = 10,还会继续输出 END。因此完整输出应为 0#2#4#6#8#END,不是题干所述结果。
第5题
题目: 将下面 C++ 代码中的 i < 100、i = i + 1 修改为 i < 200、i += i + 1,其输出与当前代码输出相同。( )
cpp
int cnt = 0;
for (int i = 0; i < 100; i = i + 1)
cnt += 1;
cout << cnt;
答案: ×
解析: 原代码循环 100 次,输出 100。修改后 i 的序列为 0、1、3、7、15、31、63、127、255,循环只执行 8 次,输出 8,两者不同。
第6题
题目: 交换下面 C++ 代码中的 i += 2 和 cnt += 1,交换前后分别运行的两次输出相同。( )
cpp
int i, cnt = 0;
i = 0;
while (i < 10)
i += 2;
cnt += 1;
cout << cnt;
答案: ×
解析: 原代码中 while 循环只改变 i,循环结束后 cnt 只执行一次 cnt += 1,输出为 1。交换后 while 循环中只改变 cnt,而 i 不变化,会形成死循环或输出不同结果。
第7题
题目: 下面的 C++ 代码执行后将输出 45。( )
cpp
int cnt;
for (int i = 0; i < 10; i++)
cnt += 1;
cout << cnt;
答案: ×
解析: cnt 没有初始化,其初值不确定,程序结果不确定;即使假设 cnt 初值为 0,循环 10 次后输出也应为 10,而不是 45。
第8题
题目: 执行 C++ 代码 cout << (12 + 12.12) 将报错,因为 12 是 int 类型,而 12.12 是 float 类型,不同类型不能直接运算。( )
答案: ×
解析: C++ 允许不同算术类型进行混合运算,会发生隐式类型转换。12 + 12.12 可以正常计算,不会因此报错。
第9题
题目: 在 C++ 代码中,不可以将变量命名为 false,因为 false 是 C++ 语言的关键字。( )
答案: √
解析: false 是 C++ 的布尔字面量/关键字,不能作为普通变量名使用。
第10题
题目: X 是 C++ 的整型变量,则表达式 3 < x < 5 求值结果是 4。( )
答案: ×
解析: 关系运算符从左向右结合,3 < x < 5 等价于 (3 < x) < 5。3 < x 的结果是布尔值 0 或 1,再与 5 比较,整体结果仍为真值,不是 4。
各种学习资料,助力大家一站式学习和提升!!!
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"########## 一站式掌握信奥赛知识! ##########";
cout<<"############# 冲刺信奥赛拿奖! #############";
cout<<"###### 课程购买后永久学习,不受限制! ######";
return 0;
}
【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"跟着王老师一起学习信奥赛C++";
cout<<" 成就更好的自己! ";
cout<<" csp信奥赛一等奖属于你! ";
return 0;
}
