免费,C++蓝桥杯等级考试真题--第11级(含答案解析和代码)

C++蓝桥杯等级考试真题--第11级

答案:D

解析:

A. a = b; b = a; 这种方式会导致ab最终都等于b原来的值,因为a的原始值在被b覆盖前没有保存。

B. swap(ab); 如果没有自定义swap函数或者没有包含相应的库,这个选项会编译错误。

C. a,b= b,a; 这种语法在C++中是错误的,不过在Python中可以用来交换变量。

D. 正确地使用了临时变量tmp来保存b的值,然后把a的值赋予b,最后把tmp的值(原本的b)赋予a,完成了交换,故答案为D

答案:C

解析:

A. 错误,二维数组 int a[3][7] 的最后一个元素是 a[2][6],数组索引是从0开始的。

B. 错误,C++中数组的维度没有限制,不仅仅限于三维,可以通过指针或动态分配内存等方式实现更高维度的数组表示。

C. 正确,数组在内存中分配是一段连续的内存空间,无论是一维、二维(以行优先或列优先方式连续存储)还是更高维度(通过嵌套数组实现)的数组,其元素都是连续存储的。

D. 错误,二维数组 int a[3][7] 的第一个元素是 a[0][0],故答案为C。

答案:B

解析:

A. 选项在每个元素输入后都有一个 endl,这会导致不必要的换行,虽然程序依然能正确运行,但这不是输入数组的标准做法。

B. 正确遍历了数组的每一个元素,从 a[0][0] a[4][9],没有额外的 endl 输出,是最合适的输入方式。

C. 错误地使用了 i<=5 j<=10,这将访问数组的越界位置,因为数组的有效索引范围是0n-1

D. 错误地交换了循环变量ij的边界,导致尝试按照列优先的顺序访问数组,而数组定义为510列,正确的遍历应遵循行优先的原则,故答案为B。


【参考程序】

#include <iostream>
using namespace std;

int main() {
    int m, n, x, y;
    cin >> m >> n >> x >> y;
    
    // 确保x和y在有效范围内
    x--; // 将行号转换为0-based索引
    y--;

    int matrix[m][n]; // 定义一个m*n的二维数组
    
    // 输入矩阵
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }

    // 输出指定行
    for(int i = x; i <= y; i++) {
        for(int j = 0; j < n; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl; // 换行
    }

    return 0;
}

解析:首先读取矩阵的大小(行数m和列数n)、起始行号x和结束行号y,然后通过两层循环输入矩阵中的每个元素。之后,程序再次使用循环结构,仅输出从第x行到第y行的内容,每行元素之间用空格分隔,行与行之间自动换行。注意,由于题目中行号是基于1的,而在C++数组索引中我们通常从0开始,因此在读取xy后立即将它们减1,以便正确地访问数组。

【参考程序】

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int m, n;
    cin >> m >> n;
    
    vector<vector<int>> matrix(m, vector<int>(n)); // 使用vector来创建动态矩阵
    
    // 输入矩阵
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }

    // 初始化一个n大小的向量,用于存放每列的最大值
    vector<int> maxValues(n, 0);

    // 遍历矩阵找到每列的最大值
    for(int j = 0; j < n; j++) {
        for(int i = 0; i < m; i++) {
            if(matrix[i][j] > maxValues[j]) {
                maxValues[j] = matrix[i][j];
            }
        }
    }

    // 输出每列的最大值
    for(int i = 0; i < n; i++) {
        cout << maxValues[i];
        if(i < n - 1) cout << " "; // 除了最后一个数字外,每个数字后面加空格
    }
    cout << endl;

    return 0;
}

解析:首先读取矩阵的行数m和列数n,接着使用vector<vector<int>>来动态存储矩阵数据。通过两层循环读入矩阵的每个元素。然后,它初始化一个vector<int>来保存每列的最大值,并通过双重循环遍历矩阵,比较并更新每列的最大值。最后,程序输出所有列的最大值,每两个数字之间用空格隔开。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值