2025年12月 GESP C++ 3级认证考试真题(含编程操作题部分)
选 单选题(共 15 题,每题 2 分)
请将二进制数 ,转换为等值的 $10$ 进制数( )
以下关于标准 C++ 一维数组的描述,哪一项是错误的?( )
下列代码段执行后,变量 sum 的值是( )
{
int sum = 0;
for (int i = 1; i <= 10; i++) {
if (i % 3 == 8>>2)
continue;
sum += i;
}
}
执行以下程序段,输出值是( )
int x = 5;
if (x == 3 >> 2) x = 8 >> 3;
cout << x << endl;
已知字符串 $s = \text{"C++ Programming"}$,下列程序运行的结果是( )
cout << (int)(s.length() | 3) << endl;
以下代码是一个程序的部分代码,能够正确执行,输出的结果是( )
int arr[5] = {1, 2, 3, 4, 5};
int p = arr[1];
cout << (p + 2) << endl;
以下关于 C++ 求最小值函数 min() 的描述,不正确的是( )
在一个特定的计算机系统中,假如 unsigned int 类型需要占用 $2$ 个字节的存储空间(每个字节有 $8$ 位),则 unsigned int 可以表示的数据范围是( )
以下代码执行后,数组 arr 的内容是( )
int arr[6] = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < 6; i += 2) {
arr[i] = arr[i] + arr[i+1];
arr[i+1] = arr[i] - arr[i+1];
arr[i] = arr[i] - arr[i+1];
}
$a & b | (c ^ d)$,其中 $a = 3$,$b = 7$,$c = 15$,$d = 4$,计算结果是( )
整型变量 $x$ 的初始值为 $10$,以下代码的输出结果是( )
int t = x--;
t -= x;
cout << t << endl;
根据下面的流程图,如果成绩 $score$ 输入 $60$,输出的结果是( )
以下代码运行后,sum 的结果是( )
int arr[5] = {2, 4, 6, 8, 10};
int sum = 0;
for (int i = 0; i < 5; i++) {
switch (arr[i] % (1|2)) {
case 0: sum += 1; break;
case 1: sum += 2; break;
case 2: sum += 3; break;
}
}
以下关于 C++ 中 abs() 函数的描述,正确的是( )
如果字符串 $s$ 的值是 GESP ,以下代码 $s$ 的最后结果是( )
for (int i = 0; i < s.length(); i++) {
s[i] = toupper(s[i] + i);
}
判 判断题(共 10 题,每题 2 分)
在 C++ 中,数组名不能改变,数组名不能被赋值。
整型变量 $a$ 的值为 $3$,浮点数变量 $b$ 的值为 $3.5$,在 C++ 编译环境下,经过 a *= b 计算后,$a$ 的值变为 $10.5$,此时如果输出 $a$,将输出 $10.5$。
strcmp(str1, str2) 返回 $0$ 表示 str1 大于 str2,返回正数表示两者相等。
以下代码输出结果为 $8$。
int a = 5, b = 3;
int c = a++ + ++b;
cout << c << endl;
位运算符 &、|、^、~ 的优先级高于算术运算符 +、-、*、/。
在 C++ 中,int a[] = {1, 2, 3, 4, 5}; 可以定义一个包含 $5$ 个元素的整型数组。
C++ 表达式 z = a > b ? x : y 等同于:
if (a > b) {
z = x;
} else {
z = y;
}
以下代码执行后,输出将会是 $2$。
int main() {
int arr[5] = {1, 2, 3, 4, 5};
cout << arr[3 > 2 ? 1 : 2] << endl;
return 0;
}
在 C++ 中,++ 和 -- 运算符只能用于整型变量,不能用于浮点数变量。
给定一个正整数 $a$,当需要计算 $-a$ 的补码时,有这样一个计算技巧:将 $a$ 的二进制形式从右往左扫描,遇到第一个 $1$ 之后,将找到的第一个 $1$ 左边的所有位都取反,能得到 $-a$ 的补码。
以下代码中,Hello 将被输出 5 次。
for (int i = 0; i < 5; i++);
{
cout << "Hello" << endl;
}
编 编程操作题(共 2 题,共 50 分)
试题名称:密码强度
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
小杨是学校网络安全小组的成员,今天他的任务是设计一个“密码强度检测器”,帮助同学们检查自己的密码是否足够安全。一个安全的密码需要满足以下条件:
- 密码至少包含 $8$ 个字符(太短的密码容易被猜出来哦!)。
- 密码至少包含一个大写字母(A、B、C、...、Z 都可以)。
- 密码至少包含一个数字(0、1、2、3、...、9 都可以)。
例如:
- 密码
PAs1s2an是安全密码(有 $8$ 位、包含大写字母P、A和数字1、2)。 - 密码
ab1da3cd不是安全密码(没有大写字母)。 - 密码
Paabdbcd不是安全密码(没有数字)。 - 密码
Pa2不是安全密码(只有 $3$ 位,太短了)。
输入格式
第一行一个正整数 $T$,代表需要安全检测的密码组数。
对于每组密码,一行包含一个字符串,代表需要安全检测的密码。
输出格式
对于每组密码,输出一行,如果满足强度要求输出 Y,否则输出 N。
样例输入 #1
6
PAs1s2an
1a2bCql3
Pa12bsna
ab1da3cd
Paabdbcd
Pa2
样例输出 #1
Y
Y
Y
N
N
N
说明/提示
样例解释
- 密码
PAs1s2an是安全密码(有 $8$ 位、包含大写字母P、A和数字1、2)。 - 密码
1a2bCq13是安全密码(有 $8$ 位、包含大写字母C和数字1、2、3)。 - 密码
Pa12bsna是安全密码(有 $8$ 位、包含大写字母P和数字1、2)。 - 密码
ab1da5cd不是安全密码(没有大写字母)。 - 密码
Paabdbcd不是安全密码(没有数字)。 - 密码
Pa2不是安全密码(只有 $3$ 位,太短了)。
数据范围
对于所有测试点,保证 $1 \leq T \leq 100$,并且每组密码长度不超过 $100$ 且至少为 $1$,每组密码仅由大小写字母和数字组成。
试题名称:小杨的智慧购物
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
小杨的班级要举办一个环保手工作品展览,老师请小杨去文具店购买 $M$ 种不同的文具(例如:铅笔、橡皮、尺子等)。
商店里共有 $N$ 件文具,每件文具都有一个种类编号(从 $1$ 到 $M$)和价格。
小杨的预算有限,他想了一个聪明的办法:对于每种文具,他只买最便宜的那一件(如果同种文具有多件价格相同且都是最便宜的,他只会购买其中的一件)。请你帮小杨计算出,买齐这 $M$ 种文具一共需要花费多少钱。
输入格式
第一行两个正整数 $M, N$,代表文具的种类数和总数。
之后 $N$ 行,每行两个正整数 $K_i$ 和 $P_i$,分别代表第 $i$ 件文具的种类编号和它的价格。数据保证每个种类至少有一件文具可供购买。
输出格式
输出一行,代表购买文具的总价。
样例输入 #1
2 5
1 1
1 2
1 1
2 3
2 10
样例输出 #1
4
说明/提示
样例解释
文具清单如下:
- 文具 1:种类 1,价格 $1$
- 文具 2:种类 1,价格 $2$
- 文具 3:种类 1,价格 $1$
- 文具 4:种类 2,价格 $3$
- 文具 5:种类 2,价格 $10$
小杨的选择过程:对于种类 1:有三件商品,价格分别为 $1, 2, 1$。其中最便宜的价格是 $1$。对于种类 2:有两件商品,价格分别为 $3, 10$。其中最便宜的价格是 $3$。
计算总价:小杨购买这两类文具的总花费为 $1 + 3 = 4$。
数据范围
对于所有测试点,保证 $1 \leq M \leq N \leq 10^5$,$1 \leq K_i \leq M$,$1 \leq P_i \leq 10^3$。