关注

2026 年 3 月青少年软编等考 C/C++ 二级测试题解析

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

  1. 以下代码的输出是?( )

    int x[4] = {5, 10, 15, 20};
    for (int i = 3; i >= 0; i--)
        cout << x[i] << " ";
    

    A. 20 15 10 5
    B. 5 10 15 20
    C. 0 0 0 0
    D. 无输出

【答案】A
【解析】循环从 i = 3 递减到 0,因此会逆序输出数组元素。注意 0 是合法的数组下标。


  1. 以下代码的输出是?( )

    int y = 2;
    switch (y) {
        case 1: cout << "1";
        case 2: cout << "2";
        case 3: cout << "3"; break;
        default: cout << "4";
    }
    

    A. 2
    B. 23
    C. 234
    D. 4

【答案】B
【解析】由于 y = 2,进入 switch 语句之后会匹配到 case 2,然后执行 cout << "2"; 输出 2,由于没有 break,于是继续执行 cout << "3"; 输出 3,因此最终输出 23。


  1. 以下代码的输出是?( )

    int a = 7;
    int b = 3;
    if (a % b == 0)
        cout << "Divisible";
    else
        cout << "Not divisible";
    

    A. Divisible
    B. Not divisible
    C. 编译错误
    D. 无输出

【答案】B
【解析】 7 % 3 = 1 7 \% 3 = 1 7%3=1,因此 a % b == 0 的条件不成立,于是执行 else 分支,输出 Not divisible


  1. 以下代码的输出是?( )

    int a = 10;
    int b = 5;
    int c = 15;
    if (a >= b && a >= c)
        cout << "A is largest";
    else if (b >= c)
        cout << "B is largest";
    else
        cout << "C is largest";
    

    A. A is largest
    B. B is largest
    C. C is largest
    D. 编译错误

【答案】C
【解析】该代码段的功能是判断三个数的最大者,由于 c = 15 最大,因此前两个条件都不成立,最终执行 else,输出 C is largest


  1. 以下代码的输出是?( )

    for (int i = 3; i > 0; i--) {
        cout << i << " ";
    }
    

    A. 3 2 1
    B. 1 2 3
    C. 3 2 1 0
    D. 无输出

【答案】A
【解析】循环从 3 开始递减,当 i == 0 时立即终止循环,不再进行输出,因此输出 3 2 1


  1. 以下代码的输出是?( )

    int i = 10;
    while (i > 0) {
        if (i == 5)
            break;
        cout << i << " ";
        i--;
    }
    

    A. 10 9 8 7 6
    B. 10 9 8 7 6 5
    C. 10 9 8 7 6 5 4
    D. 无输出

【答案】A
【解析】当 i == 5 时执行 break 跳出循环,因此 5 不会输出。


  1. do-while 循环至少执行几次?( )

    A. 0
    B. 1
    C. 2
    D. 不确定

【答案】B
【解析】do-while 先执行循环体,再判断条件,因此至少执行一次。


  1. 以下代码的输出是?( )

    for (int i = 1; i <= 2; i++) {
        for (int j = 1; j <= 3; j++) {
            cout << i << "," << j << " ";
        }
        cout << endl;
    }
    

    A.

    1,1 1,2 1,3
    2,1 2,2 2,3
    

    B.

    1,1 2,1 3,1
    2,2 1,3 2,3
    

    C.

    1,1 1,2 2,1 2,2
    

    D. 无输出

【答案】A
【解析】外层循环控制行数,内层循环控制列数,因此依次输出两行坐标。


  1. 以下定义数组的方式不正确的是?( )

    A. int arr[] = {1, 2, 3};
    B. int arr[3] = {};
    C. int arr[3] = {1, 2, 3, 4};
    D. int arr[3] = {1, 2};

【答案】C
【解析】数组长度为 3,却初始化了 4 个元素,会导致编译错误。


  1. 以下代码的输出是?( )

    int a[3] = {10, 20, 30};
    cout << a[2 - 1];
    

    A. 10
    B. 20
    C. 30
    D. 地址值

【答案】B
【解析】 2 − 1 = 1 2-1=1 21=1,因此输出 a[1],值为 20

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

  1. if 语句必须要有 else 语句。( )

【答案】×
【解析】if 语句可以单独使用,不一定需要 else


  1. switch 语句的条件表达式可以是浮点型。( )

【答案】×
【解析】switch 的条件表达式必须是整型、字符型等离散类型,不能是浮点型。


  1. for 循环的初始化部分可以不定义新变量。( )

【答案】√
【解析】初始化部分可以为空,也可以使用已定义变量。


  1. for 循环的步进表达式可以不赋值。( )

【答案】√
【解析】步进表达式(即第 3 条语句)可以为空,例如在循环体中修改变量。


  1. 当条件表达式为假时,程序会进入对应的 while 循环。( )

【答案】×
【解析】while 循环只有在条件为真时才会进入。


  1. while 循环的循环体至少执行一次。( )

【答案】×
【解析】while 语句先判断条件,条件为真时才执行循环体,如果条件一开始就是假,则一次也不会执行。


  1. 在嵌套循环中,break 可以跳出多层循环。( )

【答案】×
【解析】break 只能跳出当前所在的一层循环。如果要跳出多层循环,可以使用 goto 语句,或者使用标记变量配合 break 语句。


  1. do-while 循环的条件表达式外不需要圆括号。( )

【答案】×
【解析】do-while 语句后面的条件必须使用圆括号括起来。


  1. 数组名可以是关键字。( )

【答案】×
【解析】变量名、数组名、函数名等标识符都不能使用关键字。


  1. 小写字母的 ASCII 码比大写字母的大。( )

【答案】√
【解析】ASCII 码中 'a' ~ 'z' 的编码大于 'A' ~ 'Z',同一个字母的小写比大写的 ASCII 码多 32。

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

1. 闯关得分

题目链接:SOJ D1419

每一名选手有三次挑战机会,每次挑战会获得一个得分。最终得分规则为:取三次挑战中得分最高的两次,将这两次的得分相加,作为该选手的最终得分。

现给定该选手三次挑战的得分,请计算并输出其最终得分。

时间限制:1 s
内存限制:256 MB

  • 输入
    一行包含三个整数,分别表示三次挑战的得分,整数之间用空格分隔。每次挑战的得分均为 0 0 0 100 100 100 之间的整数(包含 0 0 0 100 100 100)。
  • 输出
    一个整数,表示选手的最终得分。
  • 样例输入 1
    80 90 70
    
  • 样例输出 1
    170
    
  • 样例输入 2
    100 50 100
    
  • 样例输出 2
    200
    

思路分析

此题考查分支结构的应用,属于基础题。

只需要找出其中的最小值,把另外两个数值相加即为答案。利用打擂台思想,先假设 a a a 是最小值,如果 b < a b < a b<a 就交换 a , b a,b a,b 的值,同理,在 c < a c < a c<a 的情况下交换 a , c a,c a,c 的值。最终 a a a 就是三个数值中的最小值,而 b + c b+c b+c 就是答案。

/*
 * Name: T1.cpp
 * Problem: 闯关得分
 * Author: Teacher Gao.
 * Date&Time: 2026/05/16 15:20
 */

#include <iostream>
using namespace std;

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

    int a, b, c;
    cin >> a >> b >> c;

    if (b < a) swap(a, b);
    if (c < a) swap(a, c);

    cout << b + c << endl;

    return 0;
}

2. 计算天数

题目链接:SOJ Y555

年-月-日 的形式给定一个日期,计算给定的日期是当年第几天。注意闰年二月有 29 29 29 天。

时间限制:1 s
内存限制:256 MB

  • 输入
    输入格式为 yyyy-mm-dd,其中
    • yyyy 表示给定的年份,mm 表示给定的月份,dd 表示给定的日期。
    • 如果这些数字不足四位或二位,以 0 补足。
    • 保证月份与日期都是合理的。
  • 输出
    单个整数:表示输入的日期是当年的第几天。
  • 样例输入 1
    2021-12-31
    
  • 样例输出 1
    365
    
  • 样例输入 2
    2022-01-01
    
  • 样例输出 2
    1
    

思路分析

此题考查数组的基本运用,属于基础题。

先定义数组保存每个月的天数,接下来判断当前年份是否为闰年,如果是闰年,则将二月天数改为 29。然后从 1 月开始累加到 m − 1 m-1 m1 月,再加上当前日期 d d d,即可得到答案。

/*
 * Name: T2.cpp
 * Problem: 计算天数
 * Author: Teacher Gao.
 * Date&Time: 2026/05/16 15:23
 */

#include <iostream>
using namespace std;

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

    int y, m, d;
    char ch;

    cin >> y >> ch >> m >> ch >> d;

    int days[13] = {0, 
                    31, 28, 31, 30, 31, 30,
                    31, 31, 30, 31, 30, 31};

    bool leap = false;
    if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
        leap = true;

    if (leap)
        days[2] = 29;

    int ans = d;
    for (int i = 1; i < m; i++)
        ans += days[i];

    cout << ans << endl;

    return 0;
}

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_39710484/article/details/160903859

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--