欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > CCF GESP C++编程 七级认证真题 2025年3月

CCF GESP C++编程 七级认证真题 2025年3月

2025/4/5 13:01:22 来源:https://blog.csdn.net/No0d1es/article/details/147003969  浏览:    关键词:CCF GESP C++编程 七级认证真题 2025年3月

C++ 七级 2025 年 03 月

题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
答案 B A B C B B B A D D A C B B D

一、单选题
第 1 题 下列哪个选项是C++中的关键字?
A. function
B. class
C. method
D. object


第 2 题 下面代码输出的是()
int main() {
    int a = 5, b = 2;
    cout << (a >> b) << endl;
}

A. 1
B. 2
C. 5
D. 10


第 3 题 以下代码的输出是什么?
int main() {
    int a = 10;
    int *p = &a;
    int *&q = p;
    *q = 20;
    cout << a << endl;
    return 0;
}

A. 10
B. 20
C. 地址值
D. 编译错误


第 4 题 下面代码输出的是()
int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *p = arr + 2;
    cout << *p << endl;
    return 0;
}

A. 1
B. 2
C. 3
D. 4


第 5 题 下列关于排序的说法,正确的是( )。
A. 选择排序是最快的排序算法之一。
B. 归并排序通常是稳定的。
C. 最差情况, 个元素做快速排序的时间复杂度为 。
D. 最好情况, 个元素做插入排序的时间复杂度为 。


第 6 题 下面关于C++类构造和析构函数的说法,错误的是( )。
A. 构造函数不能声明为虚函数。
B. 析构函数必须声明为虚函数。
C. 类的默认构造函数可以被声明为private。
D. 类的析构函数可以被声明为private。


第 7 题 下列关于树和图的说法,错误的是( )。
A. 树是一种有向无环图,但有向无环图不都是一棵树。
B. 如果把树看做有向图,每个节点指向其子节点,则该图是强连通图。
C. 个顶点且连通的无向图,其最小生成树一定包含 个条边。
D. 个顶点、 条边的有向图,一定不是强连通的。


第 8 题 2025是个神奇的数字,因为它是由两个数20和25拼接而成,而且2025=(20+25)2 。小杨决定写个程序找找小于N的正整数中共有多少这样神奇的数字。下面程序横线处应填入的是( )。
#include <string>
int count_miracle(int N) {
    int cnt = 0;
    for (int n = 1; n * n < N; n++) {
        int n2 = n * n;
        std::string s = std::to_string(n2);
        for (int i = 1; i < s.length(); i++)
            if (s[i] != '0') {
                std::string sl = s.substr(0, i);
                std::string sr = s.substr(i);
                int nl = std::stoi(sl);
                int nr = std::stoi(sr);
                if (_________) // 在此处填入选项
                    cnt++;
            }
    }
    return cnt;
}

A.nl + nr == n 
B.nl + nr == n2 
C.(nl + nr) * (nl + nr) == n 
D.(nl + nr) ^ 2 == n2 


第 9 题 给定一个无向图,图的节点编号从 0 到 n-1,图的边以邻接表的形式给出。下面的程序使用深度优先搜索(DFS)遍历该图,并输出遍历的节点顺序。横线处应该填入的是()
#include <iostream>
#include <vector>
#include <stack>
using namespace std;

void DFS(int start, vector<vector<int>>& graph, vector<bool>& visited) {
    stack<int> s;
    s.push(start);
    visited[start] = true;
    
    while (!s.empty()) {
        int node = s.top();
        s.pop();
        cout << node << " "; // 输出当前节点
        
        // 遍历邻接节点
        for (int neighbor : graph[node]) {
            if (!visited[neighbor]) {
                __________________
                __________________
            }
        }
}

int main() {
    int n, m;
    cin >> n >> m;

    vector<vector<int>> graph(n);
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        graph[u].push_back(v);
        graph[v].push_back(u);
    }

    vector<bool> visited(n, false);

    // 从节点 0 开始DFS遍历
    DFS(0, graph, visited);

    return 0;
}


A.visited[neighbor] = true;
s.push(neighbor-1);

B.visited[neighbor] = true;
s.push(neighbor+1);

C.visited[neighbor] = false;
s.push(neighbor);

D.visited[neighbor] = true;
s.push(neighbor);

第 10 题 给定一个整数数组 nums,找到其中最长的严格上升子序列的长度。
子序列是指从原数组中删除一些元素(或不删除)后,剩余元素保持原有顺序的序列。
下面的程序横线处应该填入的是()
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int lengthOfLIS(vector<int>& nums) {
    int n = nums.size();
    if (n == 0) return 0;
    vector<int> dp(n, 1);
    
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (nums[i] > nums[j]) {
            _________________________
            }    
        }
    }
    return *max_element(dp.begin(), dp.end());
}

int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
    cin >> nums[i];
    }

    int result = lengthOfLIS(nums);
    cout << result << endl;

    return 0;
}


A. dp[i] = max(dp[i], dp[j]);
B. dp[i] = max(dp[i+1], dp[j] + 1);
C. dp[i] = max(dp[i], dp[j] - 1);
D. dp[i] = max(dp[i], dp[j] + 1);


第 11 题 给定一个整数数组 nums,找到其中最长的严格上升子序列的长度。
子序列是指从原数组中删除一些元素(或不删除)后,剩余元素保持原有顺序的序列。
该程序的时间复杂度为()
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int lengthOfLIS(vector<int>& nums) {
    int n = nums.size();
    if (n == 0) return 0;
    vector<int> dp(n, 1);
    
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (nums[i] > nums[j]) {
                _________________________
            }
        }
    }
    return *max_element(dp.begin(), dp.end());
}

int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }

    int result = lengthOfLIS(nums);
    cout << result << endl;
    
    return 0;
}


A.
B.
C.
D.


第 12 题 给定两个无向图G1和 G2 ,判断它们是否同构。图的同构是指两个图的节点可以通过某种重新编号的方式完全匹配,且边的连接关系一致。
为了简化问题,假设图的节点编号从 0 到 n-1,并且图的边以邻接表的形式给出。下面程序中横线处应该给出的是()
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

string graphHash(vector<vector<int>>& graph) {
    vector<string> nodeHashes(graph.size());
    for (int i = 0; i < graph.size(); i++) {
        vector<int> neighbors = graph[i];
        sort(neighbors.begin(), neighbors.end());
        string hash;
        for (int neighbor : neighbors) {
            ——————————————————————————
        }
        nodeHashes[i] = hash;
    }
    sort(nodeHashes.begin(), nodeHashes.end());
    string finalHash;
    for (string h : nodeHashes) {
        finalHash += h + ";";
    }
    return finalHash;
}
int main() {
    int n;
    cin >> n;

    vector<vector<int>> G1(n);
    for (int i = 0; i < n; i++) {
        int k;
        while (cin >> k) {
            G1[i].push_back(k);
            if (cin.get() == '\n') break;
        }
    }

    vector<vector<int>> G2(n);
    for (int i = 0; i < n; i++) {
        int k;
        while (cin >> k) {
            G2[i].push_back(k);
            if (cin.get() == '\n') break;
        }
    }

    string hash1 = graphHash(G1);
    string hash2 = graphHash(G2);

    if (hash1 == hash2) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
    
    return 0;
}


A. hash += to_string(neighbor);
B. hash += to_string(neighbors);
C. hash += to_string(neighbor) + ",";
D. hash -= to_string(neighbors);


第 13 题 给定一个 m×n的二维网格 grid,每个格子中有一个非负整数。请找出一条从左上角 (0, 0) 到右下角 (m-1, n-1) 的路径,使得路径上的数字总和最小。每次只能向右或向下移动。横线处应该填入的是()
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int minPathSum(vector<vector<int>>& grid) {
    int m = grid.size();
    int n = grid[0].size();

    vector<vector<int>> dp(m, vector<int>(n, 0));
    dp[0][0] = grid[0][0];
    for (int j = 1; j < n; j++) {
        dp[0][j] = dp[0][j - 1] + grid[0][j];
    }
    for (int i = 1; i < m; i++) {
        dp[i][0] = dp[i - 1][0] + grid[i][0];
    }
    for (int i = 1; i < m; i++) {
        for (int j = 1; j < n; j++) {
        ————————————————————————————————
        }
    }
    return dp[m - 1][n - 1];
}

int main() {
    int m, n;
    cin >> m >> n;
    vector<vector<int>> grid(m, vector<int>(n));
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cin >> grid[i][j];
        }
    }
    int result = minPathSum(grid);
    cout << result << endl;
    
    return 0;
}


A. dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][1];
B. dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
C. dp[i][j] = min(dp[i - 1][j], dp[i][j]) + grid[i][j];
D. dp[i][j] = min(dp[i][j], dp[i][j - 1]) + grid[i][j];


第 14 题 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。下面横线处应该填入的是()
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int maxSubArray(vector<int>& nums) {
    int n = nums.size();
    if (n == 0) return 0;

    vector<int> dp(n, 0);
    dp[0] = nums[0];
    int maxSum = dp[0];

    for (int i = 1; i < n; i++) {
        _____________________________________
        maxSum = max(maxSum, dp[i]);
    }

    return maxSum;
}

int main() {
    int n;
    cin >> n;

    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }

    int result = maxSubArray(nums);
    cout << result << endl;

    return 0;
}
A. dp[i] = max(nums[i+1], dp[i - 1] + nums[i]);
B. dp[i] = max(nums[i], dp[i - 1] + nums[i]);
C. dp[i] = max(nums[i], dp[i + 1] + nums[i]);
D. dp[i] = max(nums[i], dp[i - 1] + nums[i+1]);


第 15 题 在哈希表的实现中,冲突解决是一个重要的问题。以下哪种方法 不是 常见的哈希表冲突解决策略?
A. 链地址法(Chaining)
B. 开放地址法(Open Addressing)
C. 二次哈希法(Double Hashing)
D. 二分查找法(Binary Search)

================================================

答案和更多内容请查看网站:【试卷中心 -----> CCF GESP  ---->  C/C++ ----> 七级】

网站链接 

青少年软件编程历年真题模拟题实时更新

================================================

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词