GESP C++编程能力等级认证三级模拟考试(2)
考试时间:90分钟|满分:100分
1. 您的姓名:
一、单选题(每题2分,共30分)
2. 已知某个整数 X 的 8 位二进制补码表示为 1101 0101,则该数字对应的十进制真值是( )。
A. -43
B. -42
C. -85
D. -213
3. 二进制数1011.101对应的十进制数是
11.625
11.5
11.875
10.625
4. 在C++中,若想通过位运算直接将整型变量 a 的二进制表示中的**从右往左数第4位(即权值为8的位)**强行置为 1,而保持其他位完全不变,以下哪条语句可以实现( )。
A. a = a & 8;
B. a = a | 8;
C. a = a ^ 8;
D. a = a >> 3;
5. 关于计算机中的编码,下列说法中错误的是( )
A. 对于无符号数,原码就是真值
B. 正数的反码是其本身
C. 负数的反码和补码是不一样的
D. 负数的反码,在其原码的基础上,各个位取反
6. 在C++中,若执行语句int a=~0;,在32位有符号整数下,变量a的十进制值是
0
1
-1
2147483647
7. 若想将一个整数a的二进制表示中的最低位(最右侧一位)清零,而保持其他位不变,可以使用以下哪个位运算表达式
a = a - 1
a = a | 1
a = a & ~1
a = a ^ 1
8. 下列关于C++中一维数组的定义和访问,说法错误的是
int arr[5] = {1,2,3};是合法的,未显式初始化的元素将自动赋为0
int arr[] = {1,2,3,4};会自动根据初始化的元素个数确定数组长度为4
数组定义后,可以通过arr[5]安全地访问该数组的最后一个元素
一维数组的所有元素在内存中是连续存放的
9. 执行以下C++代码后,输出的结果是()
string s = "GESP2025";
s.replace(4,4,"C++");
cout << s << endl;
GESP2025C++
GESP C++
GESPC++
C++2025
10. 执行以下C++代码后,输出的结果是()
string s = "banana";
cout << s.rfind("an") << endl;
1
2
3
4
11. 在C++中,执行以下代码,输出的结果是()
int a = -1;
unsigned int b = a;
if(b > 0) {
cout << "Greater" << endl;
}
else {
cout << "Less or Equal" << endl;
}
Greater
Less or Equal
编译错误
运行时异常
12. 以下程序使用穷举法寻找1到100之间所有能被3整除且个位数字为5的整数。横线处应该填入的是()
int count = 0;
for (int i = 1; i <= 100; i++) {
if (____________________) {
count++;
}
}
cout << count << endl;
i % 3 == 0 && i / 10 == 5
i % 3 == 0 && i % 10 == 5
i / 3 == 0 && i % 10 == 5
i / 3 == 0 && i / 10 == 5
13. 以下程序模拟一个简单的数据衰减过程,每次将正整数n除以2(向下取整),直到n变为0。横线处应该填入的代码是()
int n = 25;
int steps = 0;
while (n > 0) {
________________;
steps++;
}
cout << steps << endl;
n %= 2
n /= 2
n -= 2
n = n >> 2
14. 对于C++语句char ch[] = "C++";在标准模型下变量ch在内存中实际占用的字节数是
3
4
5
8
15.
执行位运算左移表达式 int x = 7; int result = x<<2; 后,变量 result 的十进制值是( )。
A. 14
B. 28
C. 9
D. 3
16.
UTF-8 编码规则如下:
1 字节:0xxxxxxx
2 字节:110xxxxx 10xxxxxx
3 字节:1110xxxx 10xxxxxx 10xxxxxx
4 字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
以下哪个字节序列是合法的 UTF-8 编码( )
A. 0xC0 0x80
B. 0xF0 0x90 0x80 0x80
C. 0x80 0x80 0x80
D. 0xFF 0xFE 0xFD
二、判断题(每题2分,共20分)
17. 在C++中,string对象的==运算符比较的是两个字符串的内容是否相同,而非其在内存中的存储地址。
对
错
18. 算术右移表达式(x >> 1)对于任意正整数和负整数,其运算结果都严格等价于x/2。
对
错
19. 表达式(x & (x - 1)) == 0可以用来有效判断一个正整数x是否为2的整数次幂。
对
错
20. 标准内置函数 strlen() 用于计算C风格字符数组的字符串长度,其计数的返回值中包含了字符串末尾默认自带的 '\0' 空字符。( )
对
错
21. 在C++语言中,for 循环的控制条件部分(如初始化、条件判断、更新迭代)可以全部留空。例如 for ( ; ; ) 将会在逻辑上构成一个死循环。( )
对
错
22. 表达式tolower('A')的返回值类型是char,其直接返回的字符字面量值为'a'。
对
错
23. 十进制数45转换成八进制数,其结果是55.
对
错
24. 一维数组在定义时如果未进行任何显式初始化(如全局作用域外的int a[10];),其所有内部元素的初始值将是不确定的随机数。
对
错
25. 函数声明 double f(); 返回 int 时,会自动转换为 double
对
错
26. 任何一个while循环结构都可以完全等价地转换为一个for循环结构。
对
错
三、编程题(每题25分,共50分)
27.
黑洞密码
题目描述
数据在计算机内部都是以二进制的形式存储和计算的。小杨获得了一组非负整数序列 A = {a1, a2, ..., an}。他发现这些数字在二进制表示下,包含数字 1 的个数各不相同。为了解开密码,小杨需要统计每个数字在二进制下 1 的个数。如果某个数字在二进制下 1 的个数是偶数(含0个),则称该数字为“安全数”;如果是奇数,则称为“危险数”。请你编写程序,统计序列中所有数字二进制下 1 的总数量,并输出其中“安全数”的数量。
输入格式
第一行包含一个正整数 n,表示序列中数字的个数。
第二行包含 n 个非负整数 a1, a2, ..., an,两两之间以一个空格分隔。
输出格式
输出一行,包含两个整数,以一个空格分隔:
第一个整数表示序列中所有数字在二进制下 1 的总数量;
第二个整数表示序列中“安全数”的个数。
输入样例
4
2 7 3 0
输出样例
5 2
样例解释
- 数字 2 的二进制是 10,有 1 个 1(奇数,危险数);
- 数字 7 的二进制是 111,有 3 个 1(奇数,危险数);
- 数字 3 的二进制是 11,有 2 个 1(偶数,安全数);
- 数字 0 的二进制是 0,有 0 个 1(偶数,安全数)。
因此,1 的总数量为 1 + 3 + 2 + 0 = 5;安全数共有 2 个。
28.
暗号提取
小杨收到了一封密信,包含 n 行文本句子。他听说这封密信里隐藏着某种暗号,提取规则如下:依次读取每行字符串的第一个字符。如果该字符是大写英文字母,则将其转换为小写字母;如果已经是小写英文字母或数字,则保持不变;如果是其他符号(如空格、标点符号、特殊符号等),则忽略该行(即该行不贡献暗号字符)。最后将所有提取出的有效字符按照先后顺序拼接成一个新的字符串输出。请你帮小杨完成这个暗号提取程序。
输入格式
第一行包含一个正整数 n,表示句子(字符串)的个数。
接下来 n 行,每行包含一个字符串。字符串长度不超过 100,可能包含大小写字母、数字、空格及标点符号。
输出格式
输出一行一个字符串,代表最终提取并拼接出的暗号结果。如果未提取到任何有效字符,则输出一个空行。
输入样例
5
Great test for GESP.
excellent work!
2026 Year.
#Stop here.
pArty time.
输出样例
ge2p
关闭
更多问卷
复制此问卷