外观
2024年9月 GESP C++ 三级真题解析
一、单选题(每题2分,共30分)
选择题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | B | C | A | D | C | B | C | C | A | D | D | C | D | C | B |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 下列代码中,输出结果是()
cpp
#include<iostream>
using namespace std;
int main(){
double a = 0.9;
double b = 1.0;
if((b - a) == 0.1){
cout<<"Equal"<<endl;
}else{
cout<<"Not equal"<<endl;
}
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
A. Equal
B. Not equal
C. 程序不能正确执行
D. 没有输出
查看解析
答案:B
考纲知识点: 浮点数精度
解析: 浮点数运算存在精度误差,1.0 - 0.9 不精确等于 0.1,输出 Not equal。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 关于计算机中的编码,下列说法中正确的是()
A. 机器数的形式值和真值是一致的
B. 原码就是符号位加上真值
C. 机器数是带符号的
D. [-1] = [10000001]原 = [11111111]反
查看解析
答案:C
考纲知识点: 编码基础
解析: 机器数默认带符号位,选项C正确;D项反码应为11111110。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 8进制数3703转换成16进制数是()
A. 7C3
B. 7A3
C. 7B3
D. 7D3
查看解析
答案:A
考纲知识点: 进制转换
解析: 3703(8) → 11111100011(2) → 7C3(16)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 0.8125变成二进制是()
A. 0.1110
B. 0.1111110111101
C. 0.1111110111100
D. 0.1101
查看解析
答案:D
考纲知识点: 小数二进制转换
解析: 0.8125×2取整得0.1101。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 下面说法正确的是()
A. (22801) == (22881) 成立
B. (23|11)==30
C. (23|10)==31
D. (23|01)==31
查看解析
答案:C
考纲知识点: 位运算
解析: 23|10 = 31 成立,其他选项均不成立。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下列说法正确的是()
A. 2>>1 和 1>>1 的值是一样的
B. (2>>2 和 1>>1) 的值是一样的
C. (11 && 00) 和 (1 && 0) 的值是一样的
D. (~0 的输出值是1)
查看解析
答案:B
考纲知识点: 位运算与逻辑运算
解析: 2>>2=0 与 1>>1=0 相等,选项B正确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下列代码实现的是()
cpp
void Swap(int &a, int &b){
if(a != b){
a ^= b;
b ^= a;
a ^= b;
}
}1
2
3
4
5
6
7
2
3
4
5
6
7
A. a和b的异或
B. a和b的同或
C. a和b的值交换
D. a和b的高低位互换
查看解析
答案:C
考纲知识点: 位运算交换变量
解析: 三次异或完成变量交换,实现值交换。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. a&~1运算实现的是()
A. 使a的最低位为1
B. 使a的最高位为1
C. 使a的最低位为0
D. 使a的最高位为0
查看解析
答案:C
考纲知识点: 位运算
解析: ~1 = ...1110,与操作将最低位置0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. a=10101110, a<<2,下面关于这个说法正确的是()
A. a的值变为10111000
B. a的值变为10111010
C. a的值变为01011101
D. a的值变为01011100
查看解析
答案:A
考纲知识点: 位运算左移
解析:10101110 << 2 得到 10111000(高位补0)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下列程序中,result和result2输出分别是()
cpp
long a = 123;
int b = 1;
long result = a & b;
cout << result << endl;
long a2 = -123;
unsigned int b2 = -1;
long result2 = a2 & b2;
cout << result2 << endl;1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. 123 -1
B. 123 -123
C. 1 -1
D. 1 -123
查看解析
答案:D
考纲知识点: 位运算与符号扩展
解析: a & b = 1;a2 & b2 保留原码为 -123。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 陈A歹种植一批农作物,第一天浇水1次,随后2天每天2次,再随后3天每天3次,... 第100天总共浇水次数为()
A. 994
B. 996
C. 995
D. 945
查看解析
答案:D
考纲知识点: 数列求和
解析: 1+2+3+...+13=91,剩余9天×14=126,总和945。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 关于一维数组,下列程序能够正确执行的是()
A. 越界访问
B. 正确遍历
C. 正确初始化
D. 正确求和
查看解析
答案:C
考纲知识点: 数组操作
解析: 选项C正确初始化并遍历数组,无越界。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 下面的程序中,会输出()
cpp
int a[10]={1,2,3,4,5,6,7,8,9,10};
cout<<a[10]<<endl;1
2
2
A. 1
B. 0
C. 10
D. 不确定的值
查看解析
答案:D
考纲知识点: 数组越界
解析: 访问 a[10] 越界,输出不确定值。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 有ABCD四人,其中一个是小偷,只有小偷说假话:
- A:不是我
- B:是C
- C:是D
- D:C瞎说
谁是小偷?
A. A
B. B
C. C
D. D
查看解析
答案:C
考纲知识点: 逻辑推理
解析: 假设C是小偷,则C说假话,D说真话,符合“只有小偷说假话”。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 下列程序输出的是()
cpp
string str = "Hello,陈A歹";
cout << str.find("A") << '\n';1
2
2
A. 9
B. 8
C. 7
D. 6
查看解析
答案:B
考纲知识点: 字符串查找
解析: "A" 位于索引8(0-based),输出8。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | √ | √ | √ | × | √ | × | √ | √ | × |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. +1 和 -1 的原码进行 1 + (-1) 计算的结果是 -2。()
查看解析
答案:√
考纲知识点: 原码运算
解析: 原码运算符号位不处理,结果为-2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. ~1 的输出值是 -2。()
查看解析
答案:√
考纲知识点: 位运算
解析: ~1 得到 -2(补码)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. ~1 = 11111110。()
查看解析
答案:√
考纲知识点: 位运算
解析: ~1 二进制为11111110。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 取x的低四位,可以用 Y = 00001111,用X&Y获取x的低四位。()
查看解析
答案:√
考纲知识点: 位运算
解析: 与运算保留低四位,答案为√。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 下列程序输出的是A。()
cpp
char x = 65;
x++;
cout << x++ << endl;1
2
3
2
3
(源文本中答案为×,解析如下)
查看解析
答案:×
考纲知识点: 字符运算与后置自增
解析:x=65 对应字符 'A';x++ 后变为 66(字符 'B')。cout << x++ 先输出 66('B'),再自增,所以实际输出为 B,而非 A。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下列程序输出的是3。()
cpp
string str = "陈ADai";
size_t pos = str.find('D');
cout << pos << endl;1
2
3
2
3
查看解析
答案:√
考纲知识点: string::find
解析:
字符 'D' 位于索引 3(0-based),输出 3,与源文本答案一致。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下列程序将输出1。()
cpp
int a[10] = {1};
cout << a[1] << endl;1
2
2
查看解析
答案:×
考纲知识点: 数组越界
解析: 数组只初始化 a[0]=1,其余元素为 0;a[1] 值为 0,不会输出 1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下列程序将输出A。()
cpp
int a = 65;
cout << (char)a << endl;1
2
2
查看解析
答案:√
考纲知识点: 类型转换
解析: 65 的 ASCII 码对应字符 'A',强制转换后输出 A。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 16进制数AB,表示成二进制数是10101011。()
查看解析
答案:√
考纲知识点: 进制转换
解析: A→1010,B→1011,组合得10101011。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. def(十六进制) = 103231(五进制)。()
查看解析
答案:×
考纲知识点: 进制验证
解析: def(16)=3567(10)=103231(5) 不成立,答案为×。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题(每题25分,共50分)
1. 平衡序列
题目描述
小杨有一个包含 n 个正整数的序列 a,他认为序列“平衡”当且仅当存在一个正整数 i(1 ≤ i < n)使得序列第 1 个到第 i 个数字的总和等于第 i+1 个到第 n 个数字的总和。
请你判断序列 a 是否平衡。
输入格式
- 第一行:测试组数 t
- 每组:
- 第一行:序列长度 n
- 第二行:n 个正整数 a₁ … aₙ
输出格式
每组一行:Yes 或 No
数据范围
1 ≤ t ≤ 100,1 ≤ n, aᵢ ≤ 10000
样例输入
text
3
3
1 2 3
4
2 3 1 4
5
1 2 3 4 51
2
3
4
5
6
7
2
3
4
5
6
7
样例输出
text
Yes
Yes
No1
2
3
2
3
解题思路
查看解题思路
- 先把整个数组全部加起来得到“总和”。
- 再从左往右一边加一边检查:
- 如果当前累加值 × 2 正好等于总和,说明找到了“平衡点”,立刻输出
Yes。
- 如果当前累加值 × 2 正好等于总和,说明找到了“平衡点”,立刻输出
- 遍历完没找到就输出
No。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
cpp
#include<bits/stdc++.h>
using namespace std;
int a[10010];
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int sum=0;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
int tot=0,fl=0;
for(int i=1;i<n;i++){
tot+=a[i];
if(tot*2==sum){
fl=1;
break;
}
}
if(fl)cout<<"Yes\n";
else cout<<"No\n";
}
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
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
2. 回文拼接
题面目描述
一个字符串是回文串 ⇔ 正读反读相同。
给定若干仅含小写字母的字符串,判断每个字符串是否能被拆成 两个长度均≥2 的回文串前后拼接而成。
输入格式
- 第一行:字符串数量 n
- 随后 n 行,每行一个仅含小写字母的字符串(长度≤100)
输出格式
每行输出 Yes 或 No
数据范围
1 ≤ n ≤ 10,字符串长度 ≤ 100
样例输入
text
4
abcd
aabbb
aaac
abcdd1
2
3
4
5
2
3
4
5
样例输出
text
No
Yes
No
No1
2
3
4
2
3
4
解题思路
查看解题思路
- 枚举切开点:从位置 2 到 len-2 尝试把字符串切成两段。
- 两段都要回文:分别检查前后两段是否都是回文且长度≥2。
- 找到就停:一旦有合法切法就输出
Yes,否则No。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
cpp
#include<bits/stdc++.h>
using namespace std;
bool isPal(const string &s){
int l = 0, r = s.size() - 1;
while(l < r){
if(s[l] != s[r]) return false;
++l; --r;
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
for(int i = 1; i <= n; ++i){
string s;
cin >> s;
int m = s.size();
bool fl = false;
for(int j = 2; j <= m - 2; ++j){
string s1 = s.substr(0, j);
string s2 = s.substr(j);
if(isPal(s1) && isPal(s2)){
fl = true;
break;
}
}
cout << (fl ? "Yes" : "No") << '\n';
}
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
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
