2026 年 3 月青少年软编等考 C 语言二级真题解析

目录

  • [一、单选题(每题 4 分,共 40 分)](#一、单选题(每题 4 分,共 40 分))
  • [二、判断题(每题 2 分,共 20 分)](#二、判断题(每题 2 分,共 20 分))
  • [三、编程题(每题 20 分,共 40 分)](#三、编程题(每题 20 分,共 40 分))

一、单选题(每题 4 分,共 40 分)

  1. C++ 中,用于从文件中读取数据的文件流对象的是?( )

    A. ofstream

    B. ifstream

    C. fstream

    D. iostream

【答案】B

【解析】ifstream(input file stream)专门用于从文件中读取数据。ofstream 用于写文件;fstream 既可读也可写;iostream 是标准输入输出流头文件。


  1. 以下关于 C++ 文件操作的说法,错误的是?( )

    A. 文件操作完成后,需要调用 close() 函数关闭文件

    B. 以 ios::out 模式打开文件时,若文件不存在会自动创建

    C. 可以用 cin 直接从文本文件中读取数据,无需定义文件流对象

    D. 以 ios::app 模式打开文件,写入的数据会追加到文件末尾

【答案】C

【解析】cin 默认从标准输入(键盘)读取数据。若要读取文件内容,需要定义文件流对象,例如 ifstream fin("data.txt");


  1. 执行以下 C++ 代码,变量 b 的最终值是?( )

    cpp 复制代码
    #include <iostream>
    int main() {
        double a = 3.99;
        int b = (int)a;
    }

    A. 3

    B. 4

    C. 3.99

    D. 0

【答案】A

【解析】强制类型转换 (int)3.99 会直接舍去小数部分,而不是四舍五入。


  1. 执行以下 C++ 代码,输入 85 后,输出结果是?( )

    cpp 复制代码
    #include <iostream>
    int main() {
        int score;
        std::cin>> score;
        if (score >= 90)
            std::cout << "A";
        else if (score >= 80)
            std::cout << "B";
        else if (score >= 60)
            std::cout << "C";
        else 
            std::cout << "D";
    }

    A. A

    B. B

    C. C

    D. D

【答案】B

【解析】输入 85 满足 score >= 80 但不满足 score >= 90,因此输出 B


  1. 以下 C++ 代码执行后,输出结果是?( )

    cpp 复制代码
    #include <iostream>
    int main() {
        int a = 10, b = 20;
        if (a > 30) {
            if (a == b)
                std::cout << "1";
            else 
                std::cout << "2";
        }
        else {
            if (a < b)
                std::cout << "3";
            else
                std::cout << "4";
        }
    }

    A. 1

    B. 2

    C. 3

    D. 4

【答案】C

【解析】因为 a = 10 a = 10 a=10,因此 a > 30 为假,进入 else 分支。又因为 10 < 20 成立,因此输出 3。


  1. 以下 C++ 代码执行后,* 一共会输出多少次?( )

    cpp 复制代码
    #include <iostream>
    int main() {
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 4; j++)
                std::cout << "*";
    }

    A. 7

    B. 12

    C. 3

    D. 4

【答案】B

【解析】外层循环执行 3 次,内层循环每轮执行 4 次,总输出次数 3 × 4 = 12 3\times4=12 3×4=12。


  1. 以下 C++ 代码执行后,输出的结果是?( )

    cpp 复制代码
    #include <iostream>
    int main() {
        int cnt = 0;
        for (int i = 1; i <= 5; i++)
            for (int j = 1; j <= i; j++)
                cnt += 1;
        std::cout << cnt;
    }

    A. 5

    B. 10

    C. 15

    D. 25

【答案】C

【解析】外层循环执行 5 次,而内层循环每轮执行 i i i 次,即依次执行 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5 次,于是输出语句执行总次数为 1 + 2 + 3 + 4 + 5 = 15 1+2+3+4+5 = 15 1+2+3+4+5=15。


  1. 以下关于 C++ 一维数组的定义,正确的是?( )

    A. int arr[];

    B. int arr[5] = {1, 2, 3};

    C. int arr(5);

    D. int n = 5; int arr[n];

【答案】B

【解析】A 缺少数组大小;C 定义的是单个变量。D 是变长数组的定义方式,虽然在 g++ 编译器中支持此写法,但是变长数组并没有被收录于任何一个版本的 C++ 标准中


  1. 执行以下代码,数组 arr 中第 3 个元素(下标为 2)的值是?( )

    cpp 复制代码
    #include <iostream>
    int main() {
        int arr[5] = {10, 20, 30, 40, 50};
        arr[2] = arr[2] + arr[4];
    }

    A. 30

    B. 50

    C. 80

    D. 90

【答案】C

【解析】原来 arr[2] = 30, arr[4] = 50,执行 arr[2] = 30 + 50 得到 80。


  1. 以下代码用于求数组中所有元素的最大值,横线处应填入的代码是?( )

    cpp 复制代码
    #include <iostream>
    int main() {
        int arr[5] = {3, 1, 4, 5, 2};
        int max_val = arr[0];
        for (int i = 1; i < 5; i++) {
            ________
        }
        std::cout << max_val;
    }

    A. if (arr[i] > max_val) max_val = arr[i];

    B. if (arr[i] < max_val) max_val = arr[i];

    C. max_val = arr[i];

    D. arr[i] = max_val;

【答案】A

【解析】打擂台法求最大值,若当前元素比擂主还大,则更新擂主(当前最大值)即可。

二、判断题(每题 2 分,共 20 分)

  1. C++ 中,使用文件流操作文件时,需要引入 <fstream> 头文件。( )

【答案】√

【解析】ifstreamofstreamfstream 都定义在 fstream 中。


  1. ios::out 模式打开已存在的文件,不会清空文件原有内容。( )

【答案】×

【解析】默认情况下 ios::out 会清空原文件内容后重新写入。若希望保留原内容,应使用 ios::app


  1. C++ 中,将浮点型赋值给整型变量时,会自动进行四舍五入。( )

【答案】×

【解析】将浮点型赋值给整型变量时会进行自动类型转换,直接截断小数部分,并不会进行四舍五入。


  1. if-else if-else 语句中,最多只会有一个分支的代码被执行。( )

【答案】√

【解析】一旦某个条件成立,其余分支将被跳过,因此最多执行一个分支。


  1. switch 语句中,每个 case 分支都必须包含 break 语句,否则会编译报错。( )

【答案】×

【解析】不写 break 不会报错。但程序会继续执行后续分支,称为 "贯穿(fall-through)"。


  1. 两层 for 循环嵌套时,外层循环每执行一次,内层循环会完整执行一遍。( )

【答案】√

【解析】标准嵌套循环结构中,外层每次迭代都会重新执行一次完整的内层循环。


  1. while 循环可以嵌套 for 循环,for 循环也可以嵌套 while 循环。( )

【答案】√

【解析】各种循环结构都可以相互嵌套使用。


  1. C++ 中,数组的下标默认从 1 开始。( )

【答案】×

【解析】C++ 数组下标从 0 开始。


  1. 一维数组在内存中是连续存储的。( )

【答案】√

【解析】数组中的元素在内存中按顺序连续存放,因此可以通过下标随机访问。


  1. 定义数组 int arr[10]; 后,可以通过 arr[10] 访问数组的最后一个元素。( )

【答案】×

【解析】数组 int arr[10]; 下标范围为 0 ∼ 9 0\sim 9 0∼9,最后一个元素应为 arr[9],访问 arr[10] 属于越界访问。

三、编程题(每题 20 分,共 40 分)

1. 数字三角阵

题目链接:SOJ D1455

给定一个正整数 n n n,输出一个数字三角阵,当 n = 4 n=4 n=4 时,输出的三角阵如下:

a 复制代码
   1
  22
 333
4444

时间限制:1 s

内存限制:256 MB

  • 输入
    单个正整数表示 n n n, 1 ≤ n ≤ 9 1\le n\le 9 1≤n≤9。

  • 输出
    一个 n n n 行 n n n 列的数字三角阵,具体格式参考题面。

  • 样例输入

    a 复制代码
    5
  • 样例输出

    a 复制代码
        1
       22
      333
     4444
    55555

思路分析

此题考查循环嵌套与图形输出,属于入门题。

观察样例可以发现,第 i i i 行需要输出数字 i i i 共 i i i 次;为了保证总宽度为 n n n 列,第 i i i 行前面需要补上 n − i n-i n−i 个空格。

cpp 复制代码
/*
 * Name: T1.cpp
 * Problem: 数字三角阵
 * Author: Teacher Gao.
 * Date&Time: 2026/05/31 14:03
 */

#include <iostream>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n - i; j++) {
            cout << ' ';
        }

        for (int j = 1; j <= i; j++) {
            cout << i;
        }

        cout << '\n';
    }

    return 0;
}

2. 奇偶求和

题目链接:SOJ D1456

给定一个正整数 n n n,以及 n n n 个整数,请完成以下两个计算:

  1. 找出这 n n n 个整数中最大的偶数:若不存在偶数,则该值为 0;
  2. 计算这 n n n 个整数中所有奇数的和:若不存在奇数,则该值为 0。

时间限制:1 s

内存限制:256 MB

  • 输入
    第一行输入一个正整数 n n n,表示整数的个数, 1 ≤ n ≤ 100 1\le n\le 100 1≤n≤100;
    第二行输入 n n n 个整数 a i a_i ai, − 1000 ≤ a i ≤ 1000 -1000\le a_i\le 1000 −1000≤ai≤1000。

  • 输出
    输出两行,第一行输出最大的偶数,若无偶数则输出 0;第二行输出所有奇数的和,若无奇数则输出 0。

  • 样例输入 1

    a 复制代码
    5
    1 3 5 8 19
  • 样例输出 1

    a 复制代码
    8
    28
  • 样例输入 2

    a 复制代码
    3
    7 11 15
  • 样例输出 2

    a 复制代码
    0
    33
  • 样例输入 3

    a 复制代码
    4
    -2 6 -8 4
  • 样例输出 3

    a 复制代码
    6
    0

思路分析

此题考查循环结构,属于基础题。

读入每个整数后,如果是偶数,则尝试更新当前最大的偶数;如果是奇数,则累加到奇数和中。注意到存在负数,因此存储偶数最大值的变量 maxEven 可以初始化为 INT_MIN,最后根据 maxEven 是否为 INT_MIN 来确定是否存在偶数。

cpp 复制代码
/*
 * Name: T2.cpp
 * Problem: 奇偶求和
 * Author: Teacher Gao.
 * Date&Time: 2026/05/31 14:05
 */

#include <bits/stdc++.h>

using namespace std;

int main() {
    ios::sync_with_stdio(false), cin.tie(0);

    int n, x;
    cin >> n;

    int maxEven = INT_MIN;
    long long oddSum = 0;
    for (int i = 0; i < n; i++) {
        cin >> x;

        if (x % 2) {
            oddSum += x;
        } 
        else if (x > maxEven) {
            maxEven = x;
        }
    }

    if (maxEven != INT_MIN) {
        cout << maxEven << '\n';
    } else {
        cout << 0 << '\n';
    }
    cout << oddSum << '\n';

    return 0;
}
相关推荐
万法若空1 小时前
Libevent C语言开发完全教程:从入门到实战
c语言·网络
Upsy-Daisy1 小时前
IOTA 学习笔记(四):当前 IOTA 架构总览
笔记·学习·架构
晚风予卿云月2 小时前
【前缀和】一维前缀和 & 二维前缀和
数据结构·c++·算法
Old Uncle Tom2 小时前
Harness Engineering 综述
java·开发语言·数据库
星原望野2 小时前
JAVA:策略模式的实战使用
java·开发语言·策略模式
码界筑梦坊2 小时前
282-基于Python的豆瓣音乐可视化分析推荐系统
开发语言·python·信息可视化·数据分析·flask·vue
LJianK12 小时前
java多态
java·开发语言·python
_Evan_Yao2 小时前
栈与队列:后进先出与先进先出的智慧
开发语言·python
小拉达不是臭老鼠2 小时前
Unity中的UI系统之UGUI
学习·ui·unity