GESP 9月认证C++三级真题
GESP 9月认证C++三级真题
- 场次:2023年9月
- 满分:100 分
- 题目来源:官方直发原件
1 单选题(每题 2 分,共 30 分)
人们所使用的手机上安装的 App 通常指的是( )。
下列流程图的输出结果是?( )

原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
洛谷有题用 CDN 外链图;官方 PDF 第 1 页流程图为嵌入位图,已抽为 content/assets/gesp-cpp-l3-2023-09/fig-01.png(宽 400)替换。
已按官方原件恢复:现为原卷原文
已知大写字符 'A' 的 ASCII 编码的十六进制表示为 0x41,则字符 'L' 的 ASCII 编码的十六进制表示为( )。
以下哪个不是 C++ 语言中的运算符?( )
如果数组定义为 long long array[] = {3, 5, 7, 2};,则数组 array 占用的字节数为( )。
一个数组定义为 double array[3];,则可合理访问这个数组的元素的下标最大为( )。
以下数组定义,符合 C++ 语言语法的是( )。
下列关于进制的叙述,正确的是( )。
下列关于 C++ 语言中数组的叙述,不正确的是( )。
如果 a 是 int 类型的变量,下列哪个表达式的值一定为 true?( )
如果 a 和 b 均为 int 类型的变量,下列表达式不能正确判断“a 等于 b”的是( )。
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写标点选项 1
原卷作
((a >= b) && (a <= b)),常规写法应为(a >= b) && (a <= b)洛谷有题去掉了四个选项最外层括号;官方 PDF 第 3 页为 ((a >= b) && (a <= b)) 等,已按页面恢复。
已按官方原件恢复:现为原卷原文
如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a是大写字母”?( )
在下列代码的横线处填写( ),可以使得输出是“20 10”。

#include <iostream>
using namespace std;
int main() {
int a = 10, b = 20;
a = (a << 8) | b;
______ // 在此处填入代码
cout << a << " " << b << endl;
return 0;
}
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
官方 PDF 第 3 页该程序是嵌入位图;已抽为 fig-02.png(宽 520),并保留洛谷转写的代码围栏供阅读。
已按官方原件恢复:现为原卷原文
在下列代码的横线处填写( ),可以使得输出是“120”。

#include <iostream>
using namespace std;
int main() {
int array[5] = {1, 2, 3, 4, 5};
int res = 0;
for (int i = 0; i < 5; i++)
______; // 在此处填入代码
cout << res << endl;
return 0;
}
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
官方 PDF 第 4 页该程序是嵌入位图;已抽为 fig-03.png(宽 480),并保留洛谷转写的代码围栏供阅读。
已按官方原件恢复:现为原卷原文
在下列代码的输出是( )。

#include <iostream>
using namespace std;
int main() {
int array[10];
for (int i = 0; i < 10; i++)
array[i] = i;
for (int p = 2; p < 10; p++)
if (array[p] == p)
for (int n = p; n < 10; n += p)
array[n] = array[n] / p * (p - 1);
int res = 0;
for (int n = 1; n < 10; n++)
res += array[n];
cout << res << endl;
return 0;
}
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写措辞改写题干
原卷作
在下列代码的输出是,常规写法应为下列代码的输出是洛谷有题写成「下列代码的输出是」且代码围栏未闭合;官方 PDF 第 4 页题干为「在下列代码的输出是」,程序为嵌入位图 fig-04.png(宽 560),已按页面恢复。
已按官方原件恢复:现为原卷原文
2 判断题(每题 2 分,共 20 分)
判断题「√」表示正确,「×」表示错误
二进制数 101.101 在十进制下是 5.005。
在 C++ 语言中,位运算符也有类似“先乘除、后加减”的优先级规则。因此,使用时应注意合理使用括号。
字符常量 '3' 的值和 int 类型常量 3 的值是相同的,只是占用的字节数不同。
在 C++ 语言中,长度为 n 的数组,访问下标为 n 的元素会引起编译错误。
在 C++ 语言中,所有 int 类型的值,经过若干次左移操作(<<)后,它们的值总会变为 0。
在 C++ 语言中,数组下标的大小决定元素在逻辑上的先后顺序,与元素在内存中位置的先后顺序无关。
在 C++ 语言中,定义数组时,[] 中必须指定元素个数。
著名的哥德巴赫猜想:任一大于 2 的偶数都可写成两个素数之和。我们可以通过枚举法来证明它。
在 C++ 语言中,表达式 (0xff == 255) 的值为 true。
如果 a 为 int 类型的变量,且表达式 ((a & 1) == 0) 的值为 true,则说明 a 是偶数。
3 编程题(每题 25 分,共 50 分)
小杨的储蓄
C++时间 1 s内存 128 MB标准输入输出
小杨共有 N 个储蓄罐,编号从 0 到 N−1。从第 1 天开始,小杨每天都会往存钱罐里存钱。具体来说,第 i 天他会挑选一个存钱罐 ai,并存入 i 元钱。过了 D 天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?
输入格式
输入 2 行,第一行两个整数 N,D;第二行 D 个整数,其中第 i 个整数为 ai(保证 0≤ai≤N−1)。
每行的各个整数之间用单个空格分隔。
保证 1≤N≤1,000;1≤D≤1,000。
输出格式
输出 N 个用单个空格隔开的整数,其中第 i 个整数表示编号为 i−1 的存钱罐中有多少钱(i=1,⋯,N)。
样例
2 3 0 1 0
4 2
样例解释 1:
小杨在第 1 天、第 2 天、第 3 天分别向 0 号、 1 号、 0 号存钱罐存了 1 元钱、 2 元钱、 3 元钱,因此 0 号存钱罐有 1+3=4 元钱,而 1 号存钱罐有 2 元钱。
3 5 0 0 0 2 0
11 0 4
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
进制判断
C++时间 1 s内存 128 MB标准输入输出
N 进制数指的是逢 N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。
现在有 N 个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。
输入格式
输入的第一行为一个十进制表示的整数 N。接下来 N 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,可能以 0 开头。保证不会出现空行。
保证 1≤N≤1000,保证所有字符串长度不超过 10。
输出格式
输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。
例如,对于只可能是十六进制数的 15A6F,就需要输出 0 0 0 1;而对于四者皆有可能的 1011,则需要输出 1 1 1 1。
样例
2 15A6F 1011
0 0 0 1 1 1 1 1
4 1234567 12345678 FF GG
0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB