#GESP202512C2T1. 单选题(每题 2 分,共 30 分)

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

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

第 1 题 近日,空中客车公司表示,约6000架空客A320系列飞机需要紧急更换一种易受太阳辐射影响的飞行控制软件。空客表示,在对一起飞行事故分析后的结果显示,强烈的太阳辐射可能会损坏飞行控制系统所需的关键数据,导致判断失误,进而引发飞行异常。那这里的飞行控制系统执行判断的部件最可能是下面的( )。

{{ select(1) }}

  • 辐射传感器
  • 处理器
  • 内存单元
  • 输出设备

第 2 题 小明最近为了备考GESP,开始看B站上关于网络知识的视频。其中提到计算机网络系统有不同的划分标准,那他平时上学所在的教学楼内的网络是一个( )。

{{ select(2) }}

  • PAN
  • LAN
  • MAN
  • WAN

第 3 题 下面有关 C++ 变量的说法,正确的是( )。

{{ select(3) }}

  • 不可以用for作为变量名,因为for是C++的关键字(保留字)。
  • _tnt不可以是变量名,因为变量名的第一个字符必须是英文字母。
  • _tnt_不可以是变量名,因为最后一个字符容易与减号混淆。
  • 可以用printf作为变量名,因为printf是关键字,但这不是好习惯,因为printf有约定的功能与含义。

第 4 题 一个小数是0.123123123....无限循环,其小数点后1位是1,后2位是2,依此类推,求第N位的值。横线处应填入的代码是( )。

1 int N;
2 cin >> N;
3 remainder = ____________;
4
5 if (remainder == 0)
6     cout << 1;
7 else if (remainder == 1)
8     cout << 2;
9 else
10    cout << 3;

{{ select(4) }}

  • N % 3
  • (N - 1) % 3
  • N / 3
  • (N - 1) / 3

第 5 题 某同学执行 C++ 代码时 printf("%g\n", (3 + 3.1415926535)); 输出 6.14159,其原因最可能是( )。

{{ select(5) }}

  • C++中整数和浮点数相加时,整数会被转换为浮点数,而某些十进制小数无法精确表示为二进制小数,从而产生某些舍入误差。
  • C++的printf函数在输出浮点数时根据格式有默认小数点位数,因此输出了较少的位数。
  • 3.1415926535是一个无限循环小数,在计算机中无法精确表示。
  • 由于计算机CPU的运算错误导致。

第 6 题 某单位工号的编码规则:编码总长5位,均为数字,前4位依次整除以3其值累加之和除以10的余数为第5位数字。如某工号为76587,前4位分别整除以3后,商分别为2、2、1、2,其累加之和为7,除以10的余数为7,故第5位为7。下面代码依次输入前4位后,两个横线处分别应填的是( )。

int rst = 0, N;
for (int i = 0; i < 4; i++) {
    cin >> N;
    rst += ____________; // L1
}
cout << ____________; // L2

{{ select(6) }}

  • N % 3rst / 10
  • N % 3rst % 10
  • N / 3rst / 10
  • N / 3rst % 10

第 7 题 下面的 C++ 代码执行后的输出是( )。

1 for (int i = -2; i < 2; i++)
2     if (i % 2)
3         printf("%d#", i);

{{ select(7) }}

  • -1#1#
  • -1#0#1#
  • -2#-1#1#
  • -2#-1#1#2#

第 8 题 下面的 C++ 代码执行后其输出是( )。

1 int cnt = 0, N;
2 for (int i = 1; i < 10; i += 2)
3     for (int j = 0; j < i; j++)
4         cnt += 1;
5 cout << cnt;

{{ select(8) }}

  • 100
  • 55
  • 45
  • 25

第 9 题 下面 C++ 代码执行后其输出是( )。

1 int i, j;
2
3 for (i = 1; i < 12; i++) {
4     if (i % 2 == 0)
5         continue;
6
7     for (j = 0; j < i; j++)
8         if (i % j % 2 == 0)
9             break;
10    if (j >= i)
11        cout << i * j << " ";
12 }
13 if (i >= 12)
14     cout << (i * j);

{{ select(9) }}

  • 0 0
  • 11
  • 0
  • 0 11

第 10 题 与下面 C++ 输出效果不一致的代码是( )。

1 int i;
2 for (i = 0; i < 10; i++)
3     cout << i;

{{ select(10) }}

  • int i = 0;
    while (i < 10) {
        cout << i;
        i += 1;
    }
    
  • int i = 0;
    while (i < 10) {
        i += 1;
        cout << i;
    }
    
  • int i = 0;
    while (true) {
        cout << i;
        i += 1;
        if (i >= 10)
            break;
    }
    
  • int i = 0;
    while (true) {
        if (i >= 10)
            break;
        cout << i;
        i += 1;
    }
    

第 11 题 下面 C++ 代码执行后输出是( )。

1 int num = 0;
2 while (num <= 5) {
3     num += 1;
4     if (num % 3)
5         continue;
6     printf("%d#", num);
7 }
8 if (num > 5)
9     printf("%d", num);

{{ select(11) }}

  • 3#6#
  • 3#6#6
  • 1#2#3#4#5#6#
  • 1#2#3#4#5#6#6

第 12 题 下面 C++ 代码执行后,其输出是( )。

1 int cnt = 0;
2 for (int i = 0; i < 5; i++)
3     for (int j = i; j < 4; j++)
4         cnt += 1;
5 cout << cnt;

{{ select(12) }}

  • 9
  • 10
  • 14
  • 20

第 13 题 漂亮数的定义是:如果N能被M整除,或者某位是M,或者N的每位数之和能被M整除,则说N是M的漂亮数。如果三个条件都满足,则是完整漂亮数。123是3的完整漂亮数,因为123能被3整除,也含有3,其每位数之和为6也能被3整除。下面的代码用于判断N是否为M的完整漂亮数并输出。相关说法正确的是( )。

int N, M, Flag, Sum, num;
cout << "请输入N,不等于0的正整数:";
cin >> N;
cout << "请输入M:M必须大于1小于9:";
cin >> M;
Sum = 0; // 记录各位数之和
Flag = 0; // 假设记录N不含有M
while (N != 0) {
    num = N % 10;
    Sum += num;
    if (num == M)
        Flag = 1;
    N /= 10;
}
if ((N % M == 0) && (Flag == 1) && (Sum % M == 0)) // L1
    printf("%d是%d的完整漂亮数", N, M);
else
    printf("%d不是%d的完整漂亮数", N, M);

{{ select(13) }}

  • 代码能完成题目设定目标。
  • 在while循环中N最终将变成0,因此L1行代码中N%M将总是满足条件,可以在while前增加一行代码int old_num = N;,并将L1开始这4行代码中的N都改为old_num就可以做出正确的判定。
  • while循环中if判断语句可以增加else子句,其内容为Flag = 0
  • 如果先后输入0和3,则肯定会输出0是3的完整漂亮数。

第 14 题 阅读下面的 C++ 代码。执行后如输入5,其输出的字符图形是( )。

int n, i, j, k;
cin >> n;
for (i = 0; i < n; i++) {
    for (j = 0; j < n - i - 1; j++)
        cout << " ";
    for (k = 0; k < 2 * i + 1; k++)
        cout << "*";
    cout << endl;
}

{{ select(14) }}

  • *****
     ****
      ***
       **
        *
    
  •     *
       ***
      *****
     *******
    *********
    
  • *
    **
    ***
    ****
    *****
    
    
  •     *
       **
      ***
     ****
    *****
    

第 15 题 某学校举办“十佳歌手大奖赛”,经过选拔最终参赛选手有25人,评委10人,最终计分规则去掉一个最高分去掉一个最低分作为该参赛选手的最终得分,并输出该得分。如果单个评委可给满分为10分,则相关说法正确的是( )。

float total_score, max_score, min_score, now_score;
for (int i = 0; i < 25; i++) {
    max_score = 0;   // 记录最高分
    min_score = 10;  // 记录最低分
    total_score = 0; // 记录总分
    for (int j = 0; j < 10; j++) {
        cin >> now_score; // 录入评委打分
        max_score = max(max_score, now_score); // L1
        min_score = min(min_score, now_score); // L2
        total_score += now_score;
    }
    cout << (total_score - max_score - min_score);
}

{{ select(15) }}

  • 程序总体逻辑错误。因为要去掉最高分和最低分,需要排序,而程序没有相关代码。
  • 内层循环和外层循环之间的三行代码也就是 max_score = 0 开始的三行代码应该移动到外层循环外。
  • L1和L2标记的两行代码可以分别改为简单的 if 语句或 ? : 语句。
  • total_score += now_score 不可以更改为 total_score = total_score + now_score。