外观
2023年6月 GESP C++ 三级真题解析
一、单选题(每题2分,共30分)
单选题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | D | D | A | D | C | A | B | B | C | D | C | A | B | D | B |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。
A. 编辑
B. 保存
C. 调试
D. 编译
查看解析
答案:D
考纲知识点: 程序开发流程
解析: 高级语言程序必须经过编译(compile)才能生成可执行代码,其他选项只是编辑或调试过程。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 二进制数11.01在十进制下是()。
A. 3.01
B. 3.05
C. 3.125
D. 3.25
查看解析
答案:D
考纲知识点: 进制转换
解析: 二进制11.01=1×2¹+1×2⁰+0×2⁻¹+1×2⁻²=3.25。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 已知大写字符A的ASCII编码的十六进制表示为0x41,则字符F的ASCII编码的十六进制表示为()。
A. 46
B. 47
C. 48
D. 49
查看解析
答案:A
考纲知识点: ASCII编码
解析: A→0x41,F比A大5,所以0x41+5=0x46。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 以下哪个不是C++语言中的运算符?
A. &
B. &&
C. *
D. **
查看解析
答案:D
考纲知识点: 运算符识别
解析: **不是C++的运算符,C++使用*表示乘法。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 如果字符串定义为char str[] = "Hello";,则字符数组str的长度为()。
A. 0
B. 5
C. 6
D. 7
查看解析
答案:C
考纲知识点: 字符串与字符数组
解析: "Hello"5个字符+1个结束符'\0',共6字节。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 一个数组定义为double array[3];,则这个数组占用内存的大小为()。
A. 24
B. 12
C. 6
D. 3
查看解析
答案:A
考纲知识点: 内存计算
解析: double占8字节,3个元素→3×8=24字节。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 以下数组定义,符合C++语言语法的是()。
A. int a[];
B. int b['3'];
C. int c[3.0];
D. int[3] d;
查看解析
答案:B
考纲知识点: 数组定义语法
解析: char字符'3'可隐式转换为整数3,其余写法均不合法。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下列关于进制的叙述,不正确的是()。
A. 正整数的二进制表示中只会出现0和1。
B. 10不是2的整数次幂,所以十进制数无法转换为二进制数。
C. 从二进制转换为8进制时,可以很方便地由低到高将每3位二进制位转换为对应的一位8进制位。
D. 从二进制转换为16进制时,可以很方便地由低到高将每4位二进制位转换为对应的一位16进制位。
查看解析
答案:B
考纲知识点: 进制转换概念
解析: 任何十进制数都可以转换为二进制,与10是否为2的次幂无关。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下列关于C++语言中数组的叙述,不正确的是()。
A. 数组必须先定义后使用。
B. 数组的所有元素在内存中是连续存放的。
C. 除了字符数组,在定义数组时“[]”内必须有常数。
D. 不能对数组赋值,但可以对数组的每个基础类型的元素赋值。
查看解析
答案:C
考纲知识点: 数组特性
解析: C++11起可用变量长度数组(VLA),并非必须常数,故C不正确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 一个int类型的值,做以下哪个操作,一定会变回原来的值?
A. 左移3位,再右移3位。
B. 右移3位,再左移3位。
C. 按位或7,再按位与-8。
D. 按位异或7,再按位异或7。
查看解析
答案:D
考纲知识点: 位运算性质
解析: 异或两次相同数恢复原值,其他操作可能丢失高位或低位信息。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 如果a和b均为int类型的变量,下列表达式能正确判断“a等于b”的是()。
A. ((a / b) == 1)
B. ((a & b) == a)
C. ((a ^ b) == 0)
D. ((a | b) == b)
查看解析
答案:C
考纲知识点: 位运算判等
解析: a ^ b为0当且仅当a == b。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 如果a为int类型的变量,下列哪个表达式可以正确求出满足“小于等于a且是4的倍数”的整数中最大的?
A. (a & (~3))
B. ((a << 2) >> 2)
C. (a ^ 3)
D. ((a - 1) | 3) + 1
查看解析
答案:A
考纲知识点: 位运算取整
解析: ~3即0xFFFFFFFC,与a按位与后保留低两位为0,得到不大于a的最大4倍数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 在下列代码的横线处填写(),可以使得输出是“24 12”。
cpp
#include <iostream>
using namespace std;
int main() {
int a = 24, b = 12;
________; // 请在此处填入
cout << a << " " << b;
return 0;
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. a = a ^ b
B. b = a ^ b
C. a = a + b
D. b = a + b
查看解析
答案:B
考纲知识点: 交换变量
解析: 填入b = a ^ b后,程序输出仍为24 12,因为未真正交换变量,保持原值。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 在下列代码的横线处填写(),可以使得输出是“2”。
cpp
#include <iostream>
using namespace std;
int main() {
int array[] = {5, 2, 8, 1};
int min = array[0];
for (int i = 1; i < 4; i++) {
if (________) {
min = array[i];
}
}
cout << min;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
A. min > array[i]
B. min < array[i]
C. min = array[i]
D. 以上均不对
查看解析
**答案:D`
考纲知识点: 最小值逻辑
解析: 实际最小值为1,要输出2需修改逻辑,但按原答案为D。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 在下列代码的横线处填写(),可以使得输出不是“31”。
cpp
#include <iostream>
using namespace std;
int main() {
int array[] = {1, 2, 4, 8, 16};
int res = 0;
for (int i = 0; i < 5; i++) {
________; // 请在此处填入
}
cout << res;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
A. res = res + array[i]
B. res = res & array[i]
C. res = res | array[i]
D. res = res ^ array[i]
查看解析
答案:B
考纲知识点: 位运算
解析: 按位与&会把结果清零,不会得到31。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | × | × | × | × | √ | √ | √ | × | × | √ |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 一个算法可以用不同的形式来描述,但要求描述比较规范,因此不能用自然语言描述。
查看解析
答案:×
考纲知识点: 算法描述
解析: 自然语言也是描述算法的一种规范方式。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 域名顶级域是gesp.。
查看解析
答案:×
考纲知识点: 域名结构
解析: 顶级域是.cn,不是gesp.。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 数据编码方式只有原码、反码、补码三种。
查看解析
答案:×
考纲知识点: 数据编码
解析: 编码方式还包括ASCII、Unicode、BCD等。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 长度为n的数组,下标范围0~n。
查看解析
答案:×
考纲知识点: 数组下标
解析: 正确范围是0~n-1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. '\0'与'0'不同。
查看解析
答案:√
考纲知识点: 字符常量
解析: '\0'ASCII值为0,'0'为48。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 字符可以作为数组下标。
查看解析
答案:√
考纲知识点: 数组下标类型
解析: 字符会隐式转换为整数作下标。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 数组定义时大小即确定。
查看解析
答案:√
考纲知识点: 数组大小
解析: 静态数组大小在编译时确定。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 十进制改二进制可提高运行效率。
查看解析
答案:×
考纲知识点: 编译器优化
解析: 书写形式不影响机器码效率。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. (0xf == 015)值为true。
查看解析
答案:×
考纲知识点: 进制常量
解析: 0xf=15,015=13,不相等。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. ((a | 3) == 3)为true ⇒ a∈[0,3]。
查看解析
答案:√
考纲知识点: 位运算范围判断
解析: 只有低两位全0时或运算结果为3。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题(每题25分,共50分)
1. 春游
题目描述
老师带领同学们春游。已知班上有N位同学,每位同学有从0到N−1的唯一编号。到了集合时间,老师确认是否所有同学都到达了集合地点,就让同学们报出自己的编号。到达的同学都会报出自己的编号,不会报出别人的编号,但有的同学很顽皮,会多次报出。你能帮老师找出有哪些同学没有到达吗?
输入格式
第一行包含两个整数N和M,表示班级有N位同学,共有M次报出编号。
第二行包含M个整数,分别为M次报出的编号。
输出格式
输出一行。
- 如果所有同学都到达,则输出N;
- 否则由小到大输出所有未到达的同学编号,空格分隔。
样例输入1
text
3 3
0 2 11
2
2
样例输出1
text
31
样例输入2
text
3 5
0 0 0 0 01
2
2
样例输出2
text
1 21
数据范围
2 ≤ N, M ≤ 1000
解题思路
查看解题思路
考纲知识点: 数组标记、遍历
简化题意: 已知N个同学编号0~N-1,M次报数,找出没报到的编号。
解题思路:
- 建立布尔数组
arrive[N],初值全false。 - 每读到一个编号,将对应位置置
true。 - 扫描
arrive,收集仍为false的下标并升序输出;若全部true输出N。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <iostream>
using namespace std;
bool arrive[1000];
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) arrive[i] = false;
for (int i = 0; i < m; i++) {
int code;
cin >> code;
arrive[code] = true;
}
bool all = true;
for (int i = 0; i < n; i++) {
if (!arrive[i]) {
if (all) {
cout << i;
all = false;
} else {
cout << " " << i;
}
}
}
if (all) cout << n;
cout << endl;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 密码合规检测
题目描述
网站注册需要用户名和密码,编写程序检查密码有效性。合规密码需满足:
- 只能由26个小写字母、26个大写字母、10个数字及
!@#$四个特殊字符组成; - 长度6~12个字符;
- 必须至少包含大写、小写、数字中的两种,且至少含一个特殊字符。
输入格式
一行不含空格字符串,长度≤100,用英文逗号分隔多组密码。
输出格式
每行输出一组合规的密码,顺序与输入一致。
样例输入
text
seHJ12!@,sjdkffH$123,sdf!@&12HDHa!,123&^YUhg@!1
样例输出
text
seHJ12!@
sjdkffH$1231
2
2
数据范围
每组密码长度≤100,组数不限。
解题思路
查看解题思路
考纲知识点: 字符串处理、遍历判断
简化题意: 按规则检查多组密码,输出合规者。
解题思路:
- 按逗号分割输入得到每组密码。
- 对每组密码:
- 长度6~12;
- 字符仅允许
a-z A-Z 0-9 !@#$; - 至少含两类(大写/小写/数字)且至少一个特殊字符。
- 满足条件则输出。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <iostream>
#include <cstring>
using namespace std;
char line[101];
char pwd[101];
bool check(char *str, int l) {
if (l < 6 || l > 12) return false;
bool hasC = false, hasL = false, hasD = false, hasS = false;
for (int i = 0; i < l; i++) {
char c = str[i];
if ('A' <= c && c <= 'Z') hasC = true;
else if ('a' <= c && c <= 'z') hasL = true;
else if ('0' <= c && c <= '9') hasD = true;
else if (c == '!' || c == '@' || c == '#' || c == '$') hasS = true;
else return false;
}
if (!hasS) return false;
if ((hasC + hasL + hasD) < 2) return false;
return true;
}
int main() {
cin >> line;
int len = 0;
for (int i = 0; line[i] != '\0'; i++) {
if (line[i] != ',') {
pwd[len++] = line[i];
} else {
pwd[len] = '\0';
if (check(pwd, len)) cout << pwd << endl;
len = 0;
}
}
if (len > 0) {
pwd[len] = '\0';
if (check(pwd, len)) cout << pwd << endl;
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限