GESP 2024年12月认证 C++ 3级真题

一、单选题(每题 2 分,共 30 分)

👉 点击查看答案
题号123456789101112131415
答案BDAADBCAADDCDCA

第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 分)

👉 点击查看答案
题号12345678910
答案×××

第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的数字替换为序列最小值。

输入格式

  • 第一行:nk
  • 第二行: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;  
}