Logo

2025年3月 GESP C++ 2级

GESP · 2级 · 2025-03

60:00
满分 100
时长 60 分钟
27

2025年3月 GESP C++ 2级认证考试真题(含编程操作题部分)

答题卡 已答 0/27
已答 正确 错误 编程题

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

1

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

2

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

3

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

int a=3, b = 4;
a == b;
b == a;
cout << a << ' ' << b << endl;
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";
5

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

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

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

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

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

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

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

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

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

for (int i = 0; i < 100; i++)
    if _______________________
        cout << i << " ";
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 << " ";
11

在数学中 $N!$ 表示 $N$ 的阶乘,即 $1$ 到 $N$ 的乘积,如 $3! = 1 \times 2 \times 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;
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;
        }
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
14

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

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

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

判断题(共 10 题,每题 2 分)

16

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

17

在 C++ 代码中,假设 $N$ 为正整数,则 N - N / 10 * 10N % 10 都将获得 $N$ 的个位数。( )

18

C++ 语句 cout << ((10 <= N <= 12)? "true":"false") 中,假设整型变量 $N$ 为 $12$,则其输出为 true。原因是执行 10 <= N 后其值为 truetrue 与 $12$ 相比仍然是 true。( )

19

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

20

下面 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);
21

下面 C++ 代码执行后将输出 $10$。( )

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

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

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

下面的 C++ 代码执行后将输出 10 行 "OK"。( )

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

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

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

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

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

编程操作题(共 2 题,共 50 分)

26
编程操作题 25分

试题名称:等差矩阵

时间限制:1.0 s | 内存限制:512.0 MB

题目描述

小 A 想构造一个 $n$ 行 $m$ 列的矩阵,使得矩阵的每一行与每一列均是等差数列。小 A 发现,在矩阵的第 $i$ 行第 $j$ 列填入整数 $i \times j$,得到的矩阵能满足要求。你能帮小 A 输出这个矩阵吗?

输入格式

一行,两个正整数 $n, m$。

输出格式

共 $n$ 行,每行 $m$ 个由空格分割的整数,表示小 A 需要构造的矩阵。

样例输入 #1

3 4

样例输出 #1

1 2 3 4
2 4 6 8
3 6 9 12

说明/提示

对于所有测试点,保证 $1\leq n,m \leq 50$。

27
编程操作题 25分

试题名称:时间跨越

时间限制:1.0 s | 内存限制:512.0 MB

题目描述

假设现在是 $y$ 年 $m$ 月 $d$ 日 $h$ 时而 $k$ 小时后是 $y'$ 年 $m'$ 月 $d'$ 日 $h'$ 时,对于给定的 $y, m, d, h, k$,小杨想请你帮他计算出对应的 $y', m', d', h'$ 是多少。

输入格式

输入包含五行,每行一个正整数,分别代表 $y, m, d, h, k$。

输出格式

输出四个正整数,代表 $y', m', d', h'$。

样例输入 #1

2008
2
28
23
1

样例输出 #1

2008 2 29 0

说明/提示

对于全部数据,保证有 $2000 \leq y \leq 3000$,$1 \leq m \leq 12$,$1 \leq d \leq 31$,$0 \leq h \leq 23$,$1 \leq k \leq 24$。数据保证为合法时间。

闰年判断规则

  • 普通闰年:年份能被 $4$ 整除,但不能被 $100$ 整除。
  • 世纪闰年:年份能被 $400$ 整除。

满足以上任意一条规则的年份就是闰年,否则是平年。

已答 0/27