2025年12月 GESP C++ 2级
2025年12月 GESP C++ 2级认证考试真题(含编程操作题部分)
// questions
题目预览
近⽇,空中客车公司表⽰,约 600060006000 架空客 A320 系列飞机需要紧急更换一种易受太阳辐射影响的飞行控制软件。空客表⽰,在对一起飞行事故分析后的结果显⽰,强烈的太阳辐射可能会损坏飞行控制系统所需的关键数据,导致判断失误,进⽽引发飞行异常。那这里的飞行控制系统执行判断的部件最可能是下面的( )。
辐射传感器
处理器
内存单元
输出设备
小明最近为了备考 GESP,开始看 B 站上关于网络知识的视频。其中提到计算机网络系统有不同的划分标准,那他平时上学所在的教学楼内的网络是一个( )。
PAN
LAN
MAN
WAN
下面有关 C++ 变量的说法,正确的是( )。
不可以用 for 作为变量名,因为 for 是 C++ 的关键字(保留字)。
_tnt 不可以是变量名,因为变量名的第一个字符必须是英文字母。
_tnt_ 不可以是变量名,因为最后一个字符容易与减号混淆。
可以用 printf 作为变量名,因为 printf 是关键字,但这不是好习惯,因为 printf 有约定的功能与含义。
一个小数是 0.123123123…0.123123123\ldots0.123123123… 无限循环,其小数点后第 111 位是 111,第 222 位是 222,依此类推,求第 NNN 位的值。横线处应填入的代码是( )。
int N;
cin >> N;
remainder = ______________;
if (remainder == 0)
cout << 1;
else if (remainder == 1)
cout << 2;
else
cout << 3;
N % 3
(N - 1) % 3
N / 3
(N - 1) / 3
某同学执行 C++ 代码时 printf("%g\n", (3 + 3.1415926535)); 输出 6.141596.141596.14159,其原因最可能是( )。
C++ 中整数和浮点数相加时,整数会被转换为浮点数,而某些十进制小数无法精确表示为二进制小数,从而产生某些舍入误差。
C++ 的 printf 函数在输出浮点数时根据格式有默认小数点位数,因此输出了较少的位数。
3.14159265353.14159265353.1415926535 是一个无限循环小数,在计算机中无法精确表示。
由于计算机 CPU 的运算错误导致。
某单位工号的编码规则:编码总长 555 位,均为数字,前 444 位依次整除以 333 其值累加之和除以 101010 的余数为第 555 位数字。如某工号为 765877658776587,前 444 位分别整除以 333 后,商分别为 222、222、111、222,其累加之和为 777,除以 101010 的余数为 777,故第 555 位为 777。下面代码依次输入前 444 位后,两个横线处分别应填的是( )。
int rst = 0, N;
for (int i = 0; i < 4; i++){
cin >> N;
rst += ___________; // L1
}
cout << ___________; // L2
N % 3
rst / 10
N % 3
rst % 10
N / 3
rst / 10
N / 3
rst % 10
下面的 C++ 代码执行后的输出是( )。
for (int i = -2; i < 2; i++)
if (i % 2)
printf("%d#", i);
-1#1#
-1#0#1#
-2#-1#1#
-2#-1#1#2#
下面的 C++ 代码执行后其输出是( )。
int cnt = 0, N;
for (int i = 1; i < 10; i += 2)
for (int j = 0; j < i; j++)
cnt += 1;
cout << cnt;
100100100
555555
454545
252525
下面 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);
0 0
11
0
0 11
与下面 C++ 输出效果不一致的代码是( )。
int i;
for (i = 0; i < 10; i++)
cout << i;
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;
}
下面 C++ 代码执行后输出是( )。
int num = 0;
while (num <= 5){
num += 1;
if (num % 3)
continue;
printf("%d#",num);
}
if(num > 5)
printf("%d", num);
3#6#
3#6#6
1#2#3#4#5#6#
1#2#3#4#5#6#6
下面 C++ 代码执行后,其输出是( )。
int cnt = 0;
for (int i = 0; i < 5; i++)
for (int j = i; j < 4; j++)
cnt += 1;
cout << cnt;
999
101010
141414
202020
漂亮数的定义是:如果 NNN 能被 MMM 整除,或者某位是 MMM,或者 NNN 的每位数之和能被 MMM 整除,则说 NNN 是 MMM 的漂亮数。如果三个条件都满足,则是完整漂亮数。123123123 是 333 的完整漂亮数,因为 123123123 能被 333 整除,也含有 333,其每位数之和为 666 也能被 333 整除。下面的代码用于判断 NNN 是否为 MMM 的完整漂亮数并输出。相关说法正确的是( )。
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);
代码能完成题目设定目标。
在 while 循环中 NNN 最终将变成 000,因此 L1 行代码中 N % M 将总是满足条件,可以在 while 前增加一行代码 int old_num = N;,并将 L1 开始这 444 行代码中的 NNN 都改为 old_num 就可以做出正确的判定。
while 循环中 if 判断语句可以增加 else 子句,其内容为 Flag = 0。
如果先后输入 000 和 333,则肯定会输出 000 是 333 的完整漂亮数。
阅读下面的 C++ 代码。执行后如输入 555,其输出的字符图形是( )。
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;
}
*****
****
***
**
*
*
***
*****
*******
*********
*
**
***
****
*****
*
**
***
****
*****
某学校举办“十佳歌手大奖赛”,经过选拔最终参赛选手有 252525 人,评委 101010 人,最终计分规则去掉一个最高分去掉一个最低分作为该参赛选手的最终得分,并输出该得分。如果单个评委可给满分为 101010 分,则相关说法正确的是( )。
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);
}
程序总体逻辑错误。因为要去掉最高分和最低分,需要排序,而程序没有相关代码。
内层循环和外层循环之间的三行代码也就是 max_score = 0 开始的三行代码应该移动到外层循环外。
L1 和 L2 标记的两行代码可以分别改为简单的 if 语句或 ? : 语句。
total_score += now_score 不可以更改为 total_score = total_score + now_score。
鸿蒙是华为公司开发的一款操作系统,那么它能够将正确的源程序翻译成目标程序,并运行。( )
C++ 表达式 5 < 10 && 20 对应的逻辑值为 true。( )
C++ 表达式 10 / 0.333333 == 10 / (1 / 3) 的值为 true。( )
下面 C++ 代码中 NNN 是整数,执行时无论输入负整数、000 或正整数,其输出都将是 000。 ( )
cin >> N;
while (N)
N /= 10;
cout << N;
下面的 C++ 代码执行后,其输出是 444 000。( )
int a,b;
a = 4;
b = a == 5;
cout << a << ' ' << b;
C++ 代码中对表达式 ('Z' - 'A') < ('z' - 'A') 的结果输出为 000。( )
下面的 C++ 代码可以用于判断正整数 NNN 的位数(即几位数,如 123123123 是 333 位数,121212 为 222 位数)。( )
int N, N10, i;
cin >> N;
N10 = 10, i = 1;
while (1) {
if (N % N10 == N) {
printf("%d 是 %d 位数", N, i);
break;
}
i++, N10 *= 10;
}
计算交叉加减的结果,形如 1−2+3−4+5−…1-2+3-4+5-\dots1−2+3−4+5−… 。下面 C++ 代码中的变量都是整型,则将 Flag = -Flag 改为 Flag -= Flag 效果相同。( )
cin >> N;
Flag = -1;
tnt = 0;
for (i = 1; i < N + 1; i++) {
Flag = -Flag;
tnt += Flag * i;
}
cout << tnt;
下列 C++ 代码段执行后将输出 555555。( )
int cnt = 0;
for (i = 0; i < 10; i++)
for (j = i; j < 10; j++)
cnt += 1;
cout << cnt;
下面 C++ 代码执行后输出如下,因为代码 printf("\n") 没有任何可读内容,删除不影响输出效果。
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++)
printf("%3d", i * j);
printf("\n");
}
试题名称:环保能量球
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
小杨最近在玩一个环保主题的游戏。在游戏中,小杨每行走 1 公里就可以获得 1 点“环保能量”。
为了激励玩家,游戏设置了“里程奖励”:小杨每行走 xxx 公里,游戏就会额外奖励 1 点能量。
现在已知小杨总共行走了 nnn 公里,请你帮他计算,他一共能获得多少点环保能量?
输入格式
第一行包含一个正整数 ttt,代表测试数据组数。
对于每组测试数据:
- 第一行包含一个正整数 nnn,代表行走的公里数。
- 第二行包含一个正整数 xxx,代表奖励触发的间隔。
输出格式
对于每组测试数据,输出一个整数,代表小杨获得的环保能量总数。
样例输入 #1
3
5
2
10
3
2
5
样例输出 #1
7
13
2
说明/提示
样例解释
- 对于第 1 组数据,n=5,x=2n = 5, x = 2n=5,x=2:小杨行走获得 555 点能量。此外,他在第 222 公里和第 444 公里时各获得 111 点额外奖励,总共 5+2=75 + 2 = 75+2=7 点。
- 对于第 2 组数据,n=10,x=3n = 10, x = 3n=10,x=3:行走获得 101010 点。他在第 333、666、999 公里时各获得 111 点额外奖励,总共 10+3=1310 + 3 = 1310+3=13 点。
- 对于第 3 组数据,n=2,x=5n = 2, x = 5n=2,x=5:行走获得 222 点。由于行走路程不足 555 公里,没有额外奖励,总共 222 点。
数据范围
对于全部数据,保证:1≤t≤1001 \leq t \leq 1001≤t≤100,1≤n,x≤10001 \leq n, x \leq 10001≤n,x≤1000。
试题名称:黄金格
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
小杨在探险时发现了一张神奇的矩形地图,地图有 HHH 行和 WWW 列。每个格子的坐标是 (r,c)(r, c)(r,c),其中 rrr 表示行号从 111 到 HHH,ccc 表示列号 111 到 WWW。
小杨听说地图中隐藏着一些“黄金格”,这些格子满足一个神秘的数学挑战:当格子坐标 (r,c)(r, c)(r,c) 代入特定的不等式关系成立时,该格子就是黄金格。具体来说,黄金格的条件是:r2+c2≤x+r−c\sqrt{r^2 + c^2} \leq x + r - cr2+c2≤x+r−c。
例如,如果参数 x=5x = 5x=5,那么格子 (4,3)(4, 3)(4,3) 就是黄金格。因为左边坐标平方和的平方根 42+32\sqrt{4^2 + 3^2}42+32 算出来是 555,而右边 5+4−35 + 4 - 35+4−3 算出来是 666,555 小于等于 666,符合条件。
输入格式
三行,每行一个正整数,分别表示 H,W,xH,W,xH,W,x。含义如题面所示。
输出格式
一行一个整数,代表黄金格数量。
样例输入 #1
4
4
2
样例输出 #1
4
说明/提示
样例解释
:::align{center}
:::
图中标注为黄色的四个格子是黄金格,坐标分别为 (1,1)(1, 1)(1,1),(2,1)(2, 1)(2,1),(3,1)(3, 1)(3,1),(4,1)(4, 1)(4,1)。
数据范围
对于所有测试点,保证给出的正整数不超过 100010001000。