#G1183. 客观题

客观题

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

  1. 20252025 年春节有两件轰动全球的事件,一个是 DeepSeek 横空出世,另一个是贺岁片《哪吒 2》票房惊人,入了全球票房榜。下面关于 DeepSeek 与《哪吒 2》的描述成立的是( )。

{{ select(1) }}

  • 《哪吒 2》是一款新型操作系统
  • DeepSeek 是深海钻探软件
  • 《哪吒 2》可以生成新的软件
  • DeepSeek 可以根据《哪吒 2》的场景生成剧情脚本
  1. 对整型变量 NN,如果它能够同时被 3355 整除,则输出 N 是含有至少两个质因数。如果用流程图来描述处理过程,则输出语句应该在哪种图形框中?( )

{{ select(2) }}

  • 圆形框
  • 椭圆形框
  • 平行四边形框
  • 菱形框
  1. 下面 C++ 代码执行,其输出是( )。

    int a = 3, b = 4;
    a == b;
    b == a;
    cout << a << ' ' << b << endl;
    

{{ select(3) }}

  • 3 4
  • 3 3
  • 4 4
  • 4 3
  1. 求三色彩球的颜色。有数量无限的红(Red)绿(Green)蓝(Blue)三种彩球排成一行,每组先为 55 个红色球,随后 33 个绿色,最后为 22 个蓝色。每个球都有编号,从左到右依次为 1,2,3...1,2,3...。输入整数代表编号,求该编号球的颜色。下面是 C++ 代码是实现,正确说法是( )。

    int N, remainder;
    cin >> N;
    remainder = N % 10; // remainder变量保存余数
    
    if ((1 <= remainder) && (remainder<= 5))
        cout << "Red";
    else if ((6 <= remainder) && (remainder <= 8))
        cout << "Green";
    else if ((remainder == 9) || (remainder == 0))
        cout << "Blue";
    

{{ select(4) }}

  • else if ((remainder == 9) || (remainder == 0)) 修改为 else 效果相同
  • ((1 <= remainder) && (remainder<= 5)) 修改为 (remainder <= 5) 效果相同
  • else if ((6 <= remainder) && (remainder <= 8)) 写法错误,应修改为 else if (6 <= remainder <= 8)
  • 根据题意 remainder = N % 10 应修改为 remainder = N / 10
  1. 下面 C++ 代码执行后其输出是( )。

    int tnt = 0;
    for (int i = 0; i < 10; i++)
    if (i % 3)
        tnt += 1;
    else
        tnt += 2;
    cout << tnt;
    

{{ select(5) }}

  • 1818
  • 1717
  • 1616
  • 1414
  1. 下面 C++ 代码执行后输出是( )。

    int i;
    for (i = 10; i > 0; i -= 2)
        break;
    cout << i;
    

{{ select(6) }}

  • 1010
  • 88
  • 00
  • 因为循环执行时会执行 break 语句而终止循环,所以 i 的值不确定
  1. 下面 C++ 代码执行后输出是( )。

    int i;
    for (i = 0; i < 10; i++) {
        if (i % 3 == 0)
            continue;
        cout << "0" << "#";
    }
    if (i >= 10)
        cout << "1" << "#";
    

{{ select(7) }}

  • 0#0#0#0#0#0#
  • 0#0#0#0#0#0#0#1#
  • 0#0#0#0#1#
  • 0#0#0#0#0#0#1#
  1. 下面 C++ 代码执行后的输出是( )。

    int i,j;
    for (i = 0; i < 5; i++)
        for (j = i; j > 0; j -= 1)
            printf("%d-", j);
    

{{ select(8) }}

  • 1-2-1-3-2-1-4-3-2-1-
  • 1-2-1-3-2-1-4-3-2-1
  • 0-0-1-0-1-2-0-1-2-3-
  • 0-0-1-0-1-2-0-1-2-3
  1. 下面 C++ 代码执行后,将输出能被 22 整除且除以 77 余数为 22 的数。下列选项不能实现的是( )。

    for (int i = 0; i < 100; i++)
        if _______________________
            cout << i << " ";
    

{{ select(9) }}

  • ((i % 2 == 0) && (i % 7 == 2))
  • ((!(i % 2)) && (i % 7 == 2))
  • ((!(i % 2)) && (!(i % 7)))
  • ((i % 2 != 1) && (i % 7 == 2))
  1. 下面 C++ 代码用于求 11NN 之间正整数中含有 33 的数的个数,比如 1231233232 都是符合条件的数。则前后两处横线应填入代码分别是( )。

    int i, j;
    int cnt = 0, N;
    cout << "请输入正整数N:";
    cin >> N;
    for (i = 1; (j=i) < N; i++)
        while (j != 0)
            if (j % 10 == 3){
                cnt +=1;
                __________;
            }
            else
                __________;
    cout << cnt << " ";
    

{{ select(10) }}

  • continue
    j /= 10
    
  • break
    j /= 10
    
  • continue
    j %= 10
    
  • break
    j %= 10
    
  1. 在数学中 N!N! 表示 NN 的阶乘,即 11NN 的乘积,如 3!=1×2×33!=1\times 2\times 3,且 0!=10! = 1。下面的两段 C++ 代码用于求 11NN 的阶乘之和,如 NN33,则结果是 991!+2!+3!1!+2!+3! 的值)。选项中的说法正确的是( )。

    // 实现1
    int i, N;
    cin >> N;
    int tnt = 0, last = 1;
    for (i = 1; i < N + 1; i++) {
        last *= i;
        tnt += last;
    }
    cout << tnt << endl;
    
    // 实现2
    int i, N;
    cin >> N;
    int tnt = 0, tmp;
    for (i = 1; i < N + 1; i++) {
        tmp = 1;
        for (int j = 1; j < i + 1; j++)
            tmp *= j;
        tnt += tmp;
    }
    cout << tnt << endl;
    

{{ select(11) }}

  • 虽然实现 11 的代码短小,但效率并不高
  • 实现 22 的代码效率更高,且更易于理解
  • 实现 11 因为应用了前项计算结果,计算量更小,因此效率高
  • 两种实现,效率几乎一致
  1. 哥德巴赫猜想是指大于 22 的偶数都可以分解为两个质数之和,下面的代码用于验证 410004\sim 1000 之内的偶数能否分解为两个质数之和。下面 C++ 代码中假设 isPrime() 是已经定义好用于判断正整数 NN 是否为质数,返回 bool 值。对该段代码,错误的说法是( )。

    for (i = 4; i < 1000; i += 2)
        for (j = 2; j < i; j++)
            if (isPrime(j) && isPrime(i-j)) {
                printf("%d=%d+%d\n", i, j, i-j);
                break;
            }
    

{{ select(12) }}

  • 将代码 isPrime(j) && isPrime(i-j) 修改为 isPrime(j) == true && isPrime(i-j) == true 效果相同
  • 代码执行后,输出的一对质数,一定是小的数在前
  • 即便将外层循环中 ii 的上界 10001000 修改为很大的整数,也不能说从数学上证明了哥德巴赫猜想
  • 根据题意,break 语句应该移到 if 语句块之外
  1. 已知 C++ 代码和执行后的期望输出如下,相关说法正确的是( )。

    int i, j;
    int last, N;
    cout << "请输入层数N:";
    cin >> N;
    last = 1;
    for (i = 1; i < N; i++) {
        for (j = 1; j < i + 1; j++) { // L1
            if (last > 9)
                last = 1;
            cout << last << " ";
            last += 1;
        }
        printf("\n");
    }
    
    请输入层数N:10
    1
    2 3
    4 5 6
    7 8 9 1
    2 3 4 5 6
    7 8 9 1 2 3
    4 5 6 7 8 9 1
    2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    

{{ select(13) }}

  • 倒数第二行的 printf("\n") 有错,应该修改为 cout << endl;printf() 函数不能输出换行
  • last += 1 修改为 last = last + 1 执行效果相同
  • 代码中 L1L1 标记行中的 j < i + 1 应修改为 j < i
  • 外层 for 循环前的 last = 1 修改为 last = 0 执行效果相同
  1. 在 C++ 中,( )最适合填入横线处连续 55 次正确生成 111010 之间的随机整数?

    for (int i = 0; i < 5; i++)
        __________________;
    

{{ select(14) }}

  • rand() % 11
  • rand() % 10
  • rand() % 10 + 1
  • rand() % 9 + 1
  1. 在 C++ 中,如果 aabb 均为 float 类型的变量,那么二者如果相差足够小(比如 0.0000010.000001),就可以视作相等。比如 2.23456762.23456762.23456772.2345677 就可以视作相等。下列哪个表达式能用来正确判断 “a等于b”( )。

{{ select(15) }}

  • ((b-a) < 0.000001)
  • ((b-a) <= 0.000001)
  • (abs(b-a) <= 0.000001)
  • (sqrt(b-a) <= 0.000001)

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

  1. C++、Python 都是高级编程语言,它们的每条语句最终都要通过机器指令来完成。( )

{{ select(16) }}

  • 正确
  • 错误
  1. 在 C++ 代码中,假设 NN 为正整数,则 N - N / 10 * 10N % 10 都将获得 NN 的个位数。( )

{{ select(17) }}

  • 正确
  • 错误
  1. C++ 语句 cout << ((10 <= N <= 12)? "true":"false") 中,假设整型变量 NN1212,则其输出为 true。原因是执行 10 <= N 后其值为 truetrue1212 相比仍然是 true。( )

{{ select(18) }}

  • 正确
  • 错误
  1. C++ 表达式 (sqrt(N) * sqrt(N)) == N 中的 NN 如果为正整数,则表达式的值为 true,相当于开平方后平方是本身。( )

{{ select(19) }}

  • 正确
  • 错误
  1. 下面 C++ 执行后将输出 3*2=6。( )

    int a = 2, b = 3;
    a = a - b;
    b = a + b;
    a = b - a;
    printf("%d*%d=%d\n", a, b, a*b);
    

{{ select(20) }}

  • 正确
  • 错误
  1. 下面 C++ 代码执行后将输出 1010。( )

    int i;
    for (i = 0; i < 10; i++)
        continue;
    cout << i << endl;
    

{{ select(21) }}

  • 正确
  • 错误
  1. 下面 C++ 代码执行后将输出 11。( )

    int i;
    for (i = 1; i < 10; i++) {
        break;
        continue;
    }
    cout << i << endl;
    

{{ select(22) }}

  • 正确
  • 错误
  1. 下面的 C++ 代码执行后将输出 1010OK。( )

    for (int i = 0; i < 5; i++)
        for(int j = 0; j < i; j++)
            printf("OK\n");
    

{{ select(23) }}

  • 正确
  • 错误
  1. 将下面 C++ 代码中的 for 循环中的 i = 1 调整为 i = 0 的输出结果相同。( )

    int tnt = 0;
    for (int i = 1; i < 5; i++) // i = 0
        tnt += i;
    cout << tnt;
    

{{ select(24) }}

  • 正确
  • 错误
  1. 下面 C++ 代码执行后将输出 0123。( )

    for (i = 0; i < 5; i++)
        for (i = 0; i < i; i++)
            continue;
    printf("%d\n", i);
    

{{ select(25) }}

  • 正确
  • 错误