CCF GESP 2025年12月认证 C++ 2级

单选题
共 15 道 每题 2 分 共计 30 分
第 1 题

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

A

辐射传感器

B

处理器

C

内存单元

D

输出设备

第 2 题

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

A

PAN

B

LAN

C

MAN

D

WAN

第 3 题

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

A

不可以用 for 作为变量名,因为 for 是 C++ 的关键字(保留字)。

B

_tnt 不可以是变量名,因为变量名的第一个字符必须是英文字母。

C

_tnt_ 不可以是变量名,因为最后一个字符容易与减号混淆。

D

可以用 printf 作为变量名,因为 printf 是关键字,但这不是好习惯,因为 printf 有约定的功能与含义。

第 4 题

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

int N;
cin >> N;
remainder = ______________;
if (remainder == 0)
    cout << 1;
else if (remainder == 1)
    cout << 2;
else
    cout << 3;
A

N % 3

B

(N - 1) % 3

C

N / 3

D

(N - 1) / 3

第 5 题

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

A

C++ 中整数和浮点数相加时,整数会被转换为浮点数,而某些十进制小数无法精确表示为二进制小数,从而产生某些舍入误差。

B

C++ 的 printf 函数在输出浮点数时根据格式有默认小数点位数,因此输出了较少的位数。

C

3.1415926535 是一个无限循环小数,在计算机中无法精确表示。

D

由于计算机 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
A
N % 3
rst / 10
B
N % 3
rst % 10
C
N / 3
rst / 10
D
N / 3
rst % 10
第 7 题

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

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

-1#1#

B

-1#0#1#

C

-2#-1#1#

D

-2#-1#1#2#

第 8 题

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

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

100

B

55

C

45

D

25

第 9 题

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

int i,j;

for (i = 1; i < 12; i++){
    if (i % 2 == 0)
        continue;

    for (j = 0; j < i; j++)
        if (i * j % 2 == 0)
            break;
    if(j >= i)
        cout << i * j << " ";
}
if(i >= 12)
    cout << (i * j);
A

0 0

B

11

C

0

D

0 11

第 10 题

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

int i;
for (i = 0; i < 10; i++)
    cout << i;
A
int i = 0;
while (i < 10){
    cout << i;
    i += 1;
}
B
int i = 0;
while (i < 10){
    i += 1;
    cout << i;
}
C
int i = 0;
while (true){
    cout << i;
    i += 1;
    if (i >= 10)
        break;
}
D
int i = 0;
while (true){
    if (i >= 10)
        break;
    cout << i;
    i += 1;
}
第 11 题

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

int num = 0;
while (num <= 5){
    num += 1;
    if (num % 3)
        continue;
    printf("%d#",num);
}
if(num > 5)
    printf("%d", num);
A

3#6#

B

3#6#6

C

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

D

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

第 12 题

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

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

9

B

10

C

14

D

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);
A

代码能完成题目设定目标。

B

while 循环中 N 最终将变成 0,因此 L1 行代码中N % M将总是满足条件,可以在 while 前增加一行代码 int old_num = N;并将 L1 开始这 4 行代码中的 N 都改为 old_num 就可以做出正确的判定。

C

while 循环中 if 判断语句可以增加 else 子句,其内容为 Flag = 0 。

D

如果先后输入 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;
}
A
*****
 ****
  ***
   **
    *
B
    *
   ***
  *****
 *******
*********
C
*
**
***
****
*****
D
    *
   **
  ***
 ****
*****
第 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);
}
A

程序总体逻辑错误。因为要去掉最高分和最低分,需要排序,而程序没有相关代码。

B

内层循环和外层循环之间的三行代码也就是 max_score = 0 开始的三行代码应该移动到外层循环外。

C

L1 和 L2 标记的两行代码可以分别改为简单的 if 语句或 ? : 语句。

D

total_score += now_score 不可以更改为 total_score = total_score + now_score

单选题部分已到底了。