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

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

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

A

《哪吒2》是一款新型操作系统

B

DeepSeek 是深海钻探软件

C

《哪吒2》可以生成新的软件

D

DeepSeek 可以根据《哪吒2》的场景生成剧情脚本

第 2 题

对整型变量 N,如果它能够同时被 3 和 5 整除,则输出 N 是含有至少两个质因数。如果用流程图来描述处理过程,则输出语句应该在哪种图形框中( )。

A

圆形框

B

椭圆形框

C

平行四边形框

D

菱形框

第 3 题

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

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

3 4

B

3 3

C

4 4

D

4 3

第 4 题

求三色彩球的颜色。有数量无限的红(Red)绿(Green)蓝(Blue)三种彩球排成一行,每组先为 5 个红色球,随后 3 个绿色,最后为 2 个蓝色。每个球都有编号,从左到右依次为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";
A

else if ((remainder == 9) || (remainder == 0)) 修改为 else 效果相同

B

((1 <= remainder) && (remainder<= 5)) 修改为 (remainder <= 5) 效果相同

C

else if ((6 <= remainder) && (remainder <= 8)) 写法错误,应修改为 else if (6 <= remainder <= 8)

D

根据题意 remainder = N % 10 应修改为 remainder = N / 10

第 5 题

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

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

18

B

17

C

16

D

14

第 6 题

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

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

10

B

8

C

0

D

因为循环执行时会执行 break 语句而终止循环,所以 i 的值不确定

第 7 题

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

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

0#0#0#0#0#0#

B

0#0#0#0#0#0#0#1#

C

0#0#0#0#1#

D

0#0#0#0#0#0#1#

第 8 题

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

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

1-2-1-3-2-1-4-3-2-1-

B

1-2-1-3-2-1-4-3-2-1

C

0-0-1-0-1-2-0-1-2-3-

D

0-0-1-0-1-2-0-1-2-3

第 9 题

下面 C++ 代码执行后,将输出能被 2 整除且除以 7 余数为 2 的数。下列选项不能实现的是( )。

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

((i % 2 == 0) && (i % 7 == 2))

B

((!(i % 2)) && (i % 7 == 2))

C

((!(i % 2)) && (!(i % 7)))

D

((i % 2 != 1) && (i % 7 == 2))

第 10 题

下面 C++ 代码用于求 1 到 N 之间正整数中含有 3 的数的个数,比如 123 和 32 都是符合条件的数。则前后两处横线应填入代码分别是( )。

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 << "  ";
A
continue
j /= 10
B
break
j /= 10
C
continue
j %= 10
D
break
j %= 10
第 11 题

在数学中 N! 表示 N 的阶乘,即 1 到 N 的乘积,如 3!=1*2*3,且 0! = 1。下面的两段 C++ 代码用于求 1 到 N 的阶乘之和,如 N 为3,则结果是 9(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;
A

虽然实现 1 的代码短小,但效率并不高

B

实现 2 的代码效率更高,且更易于理解

C

实现 1 因为应用了前项计算结果,计算量更小,因此效率高

D

两种实现,效率几乎一致

第 12 题

哥德巴赫猜想是指大于 2 的偶数都可以分解为两个质数之和,下面的代码用于验证 4-1000之内的偶数能否分解为两个质数之和。下面 C++ 代码中假设 isPrime() 是已经定义好用于判断正整数 N 是否为质数,返回 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;
        }
A

将代码 isPrime(j) && isPrime(i-j) 修改为 isPrime(j) == true && isPrime(i-j) == true 效果相同

B

代码执行后,输出的一对质数,一定是小的数在前

C

即便将外层循环中 i 的上界 1000 修改为很大的整数,也不能说从数学上证明了哥德巴赫猜想

D

根据题意,break 语句应该移到 if 语句块之外

第 13 题

已知 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
A

倒数第二行的 printf("\n") 有错,应该修改为 cout << endl;printf( ) 函数不能输出换行

B

last += 1 修改为 last = last + 1 执行效果相同

C

代码中 L1 标记行中的 j < i + 1 应修改为 j < i

D

外层 for 循环前的 last = 1 修改为 last = 0 执行效果相同

第 14 题

在 C++ 中,( )最适合填入横线处连续 5 次正确生成 1 到 10 之间的随机整数?

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

rand( ) % 11

B

rand( ) % 10

C

rand( ) % 10 + 1

D

rand() % 9 + 1

第 15 题

在 C++ 中,如果 a 和 b 均为 float 类型的变量,那么二者如果相差足够小(比如0.000001),就可以视作相等。比如 2.2345676 和 2.2345677 就可以视作相等。下列哪个表达式能用来正确判断“a等于b”( )。

A

( (b-a) < 0.000001 )

B

( (b-a) <= 0.000001 )

C

( abs(b-a) <= 0.000001 )

D

( sqrt(b-a) <= 0.000001 )

单选题部分已到底了。