信奥刷题站
GESP 认证 2级2025-03

2025年3月 GESP C++ 2级

题量
27 题
客观题
25 题
建议时长
60 分钟
卷面总分
100 分

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

开始整卷模拟计时作答 · 交卷即时判分 · 错题自动进错题本(需登录)2 道编程大题:在线只判客观题,编程题请自行前往洛谷等 OJ 提交验证

// questions

题目预览

1
单选题2

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

A

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

B

DeepSeek 是深海钻探软件

C

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

D

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

2
单选题2

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

A

圆形框

B

椭圆形框

C

平行四边形框

D

菱形框

3
单选题2

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

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

333 444

B

333 333

C

444 444

D

444 333

4
单选题2

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

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

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

181818

B

171717

C

161616

D

141414

6
单选题2

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

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

101010

B

888

C

000

D

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

7
单选题2

下面 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
单选题2

下面 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
单选题2

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

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
单选题2

下面 C++ 代码用于求 111NNN 之间正整数中含有 333 的数的个数,比如 123123123323232 都是符合条件的数。则前后两处横线应填入代码分别是( )。

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
单选题2

在数学中 N!N!N! 表示 NNN 的阶乘,即 111NNN 的乘积,如 3!=1×2×33! = 1 \times 2 \times 33!=1×2×3,且 0!=10! = 10!=1。下面的两段 C++ 代码用于求 111NNN 的阶乘之和,如 NNN333,则结果是 9991!+2!+3!1! + 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;
A

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

B

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

C

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

D

两种实现,效率几乎一致

12
单选题2

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

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

D

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

13
单选题2

已知 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
单选题2

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

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

rand( ) % 11

B

rand( ) % 10

C

rand( ) % 10 + 1

D

rand() % 9 + 1

15
单选题2

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

A

((b-a) < 0.000001)

B

((b-a) <= 0.000001)

C

(abs(b-a) <= 0.000001)

D

(sqrt(b-a) <= 0.000001)

16
判断题2

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

17
判断题2

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

18
判断题2

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

19
判断题2

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

20
判断题2

下面 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
判断题2

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

int i;
for (i = 0; i < 10; i++)
    continue;
cout << i << endl;
22
判断题2

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

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

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

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

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

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

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

for (i = 0; i < 5; i++)
    for (i = 0; i < i; i++)
        continue;
printf("%d\n", i);
GESP 编程操作题
26
编程题25

试题名称:等差矩阵

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

题目描述

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

输入格式

一行,两个正整数 n,mn, mn,m

输出格式

nnn 行,每行 mmm 个由空格分割的整数,表示小 A 需要构造的矩阵。

样例输入 #1

3 4

样例输出 #1

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

说明/提示

对于所有测试点,保证 1≤n,m≤501\leq n,m \leq 501n,m50

本题为编程大题:请复制题面到洛谷 / GESP OJ 等平台编写并提交代码(本站不判分)
27
编程题25

试题名称:时间跨越

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

题目描述

假设现在是 yyymmmdddhhh 时而 kkk 小时后是 y′y'ym′m'md′d'dh′h'h 时,对于给定的 y,m,d,h,ky, m, d, h, ky,m,d,h,k,小杨想请你帮他计算出对应的 y′,m′,d′,h′y', m', d', h'y,m,d,h 是多少。

输入格式

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

输出格式

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

样例输入 #1

2008
2
28
23
1

样例输出 #1

2008 2 29 0

说明/提示

对于全部数据,保证有 2000≤y≤30002000 \leq y \leq 30002000y30001≤m≤121 \leq m \leq 121m121≤d≤311 \leq d \leq 311d310≤h≤230 \leq h \leq 230h231≤k≤241 \leq k \leq 241k24。数据保证为合法时间。

闰年判断规则

  • 普通闰年:年份能被 444 整除,但不能被 100100100 整除。
  • 世纪闰年:年份能被 400400400 整除。

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

本题为编程大题:请复制题面到洛谷 / GESP OJ 等平台编写并提交代码(本站不判分)