GESP 2024年12月认证 C++ 3级真题
一、单选题(每题 2 分,共 30 分)
👉 点击查看答案
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
答案 | B | D | A | A | D | B | C | A | A | D | D | C | D | C | A |
第1题 下列二进制表示的十进制数值分别是( )
[100000011]原-( )
[100000011]补-( )
- A. -125, -3
- B. -3, -125
- C. -3, -3
- D. -125, -125
第2题 关于计算机中的编码,下列说法中错误的是( )
- A. 对于无符号数,原码就是真值
- B. 正数的反码是其本身
- C. 负数的反码和补码是不一样的
- D. 负数的反码,在其原码的基础上,各个位取反
第3题 16进制数B2025转换成8进制数是( )
- A. 2620045
- B. 2004526
- C. 729125
- D. 2420045
第4题 625.625变成二进制是( )。
- A. 1001110001.101
- B. 101.101
- C. 101.1001110001
- D. 1001110001.1101
第5题 下面逻辑运算中,正确的是( )
- A. 5&8==0
- B. 5^3==8
- C. 5|3==11
- D. 5&3==0001
第6题 补码1111 1101进行运算1111 1101>>1以后得到的结果是( )
- A. 1111 1100
- B. -2
- C. 1111 1101
- D. 1111 1010
第7题 下列代码输出的是( )
string s = "1234@chenadai";
string str = "12345";
s.replace(1, 5, str);
cout << s << endl;
- A. 12345
- B. 23450
- C. 112345chenadai
- D. 12345chenadai
第8题 a|10(a与10都是10进制,且二进制表示最高位为1)运算的结果是( )。
- A. 使a的二进制表示从右往左的第一位为1
- B. 使a的二进制表示从右往左的第一位为0
- C. 使a的二进制表示从右往左第二位为0
- D. 使a的二进制表示最高位为0
第9题 下列程序输出的是( )
string ch = "hello";
if (ch[5] == NULL) {
cout << "right" << endl;
} else if (ch[5] == '\0') {
cout << "wrong" << endl;
} else {
cout << "hello" << endl;
}
- A. right
- B. wrong
- C. hello
- D. 不能正确执行
第10题 下列程序中,假设一个字符占用的内存空间是1,ch占用的内存空间是( )
char ch[] = "hello world";
size_t ret = strlen(ch);
cout << ret << endl;
- A. 11
- B. 10
- C. 13
- D. 12
第11题 下列程序最后输出的是( )
int a = 65;
cout << tolower(a) << endl;
- A. 65
- B. A
- C. a
- D. 97
第12题 想要计算从数字n到数字m之间(包含n和m)有多少个数字d出现,下列程序能够实现的是( )。
(选项代码略,详见原PDF内容)
第13题 百元买百只动物的正确程序是( )。
(选项代码略,详见原PDF内容)
第14题 判断素数的正确程序是( )。
(选项代码略,详见原PDF内容)
第15题 金环分割的最优方案是( )。
- A. 4段,分别是1、2、4、8
- B. 15段,每段1个
- C. 6段,分别是3、3、3、3、2、1
- D. 9段,分别是2、2、2、2、2、1、1
二、判断题(每题 2 分,共 20 分)
👉 点击查看答案
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
答案 | √ | √ | × | √ | × | √ | × | √ | √ | √ |
第1题 补码的作用是简化加减法运算,使减法可以通过加法实现。( )
第2题 使用原码计算2+(-1)的结果是-3。( )
第3题 反码计算加减法结果正确,但无法解决-0的问题。( )
第4题 十进制数63的二进制转换过程正确,结果为111111。( )
第5题 程序printf("%%a=%%b-%d", a*b);
输出的是2*3=6
。( )
第6题 变量名_
不符合C++命名规范。( )
第7题 程序cout << ch[4];
无法正确执行。( )
第8题 程序a = a + 32; cout << (int)a;
输出97。( )
第9题 自然界中最小的素数是2。( )
第10题 CCF(十六进制)等于12363(七进制)。( )
三、编程题(每题 25 分,共 50 分)
编程题1:数字替换
题目描述
将序列中大于k
的数字替换为序列最大值,小于k
的数字替换为序列最小值。
输入格式
- 第一行:
n
和k
- 第二行:
n
个数字
输出格式
替换后的序列。
样例输入
5 0
-2 -1 0 1 2
样例输出
-2 -2 0 2 2
参考程序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
int max_val = *max_element(a.begin(), a.end());
int min_val = *min_element(a.begin(), a.end());
for (int i = 0; i < n; i++) {
if (a[i] > k) a[i] = max_val;
else if (a[i] < k) a[i] = min_val;
cout << a[i] << " ";
}
return 0;
}
编程题2:打印数字
题目描述
将数字0,1,2,3
转换为5×5的网格表示形式。
输入格式
- 第一行:数字
n
输出格式
对应的网格表示形式。
样例输入
12230
样例输出
*****......
*****.*****.*****.*****
*****......***.
*****.*****.*****.*****
*****......
参考程序
#include <iostream>
#include <string>
using namespace std;
int main() {
string n;
cin >> n;
for (int row = 0; row < 5; row++) {
string line = "";
for (char digit : n) {
if (digit == '0') {
if (row == 0 || row == 4) line += "......";
else line += ".***.";
} else if (digit == '1') {
line += "****.";
} else if (digit == '2') {
if (row == 0) line += "......";
else if (row == 1) line += "****.";
else if (row == 2) line += "......";
else if (row == 3) line += ".****";
else line += "......";
} else if (digit == '3') {
if (row == 0) line += "......";
else if (row == 1) line += "****.";
else if (row == 2) line += "......";
else if (row == 3) line += "****.";
else line += "......";
}
}
cout << line << endl;
}
return 0;
}