跳到主要内容 CCF GESP C++2 级编程能力认证试题 | 极客日志
C++ 算法
CCF GESP C++2 级编程能力认证试题 CCF GESP C++2 级认证考试包含单选、判断及编程题。内容涵盖变量命名、循环逻辑、浮点数精度、工号编码规则、条件判断及图形输出等知识点。编程题涉及环保能量计算与黄金格判定算法。试题旨在考察基础语法掌握及逻辑思维能力。
技术博主 发布于 2026/3/14 更新于 2026/4/18 2 浏览CCF GESP C++2 级编程能力认证试题
单选题(每题 2 分,共 30 分)
1、近日,空中客车公司表示,约 6000 架空客 A320 系列飞机需要紧急更换一种易受太阳辐射影响的飞行控制软件。空客表示,在对一起飞行事故分析后的结果显示,强烈的太阳辐射可能会损坏飞行控制系统所需的关键数据,导致判断失误,进而引发飞行异常。那这里的飞行控制系统执行判断的部件最可能是下面的 ( )。
A.辐射传感器 B.处理器 C.内存单元 D.输出设备
正确答案:B
2、小明最近为了备考 GESP,开始看 B 站上关于网络知识的视频。其中提到计算机网络系统有不同的划分标准,那他平时上学所在的教学楼内的网络是一个( )。
A.PAN B.LAN C.MAN D.WAN
正确答案:B
3、下面有关 C++ 变量的说法,正确的是 ( )。
A.不可以用 for 作为变量名,因为 for 是 C++ 的关键字(保留字)。 B._tnt 不可以是变量名,因为变量名的第一个字符必须是英文字母。 C._tnt_ 不可以是变量名,因为最后一个字符容易与减号混淆。 D.可以用 printf 作为变量名,因为 printf 是关键字,但这不是好习惯,因为 printf 有约定的功能与含义。
正确答案:A
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
正确答案:B
5、某同学执行 C++ 代码时 printf("%g\n", (3 + 3.1415926535)); 输出 6.14159,其原因最可能是 ( )。
A.C++中整数和浮点数相加时,整数会被转换为浮点数,而某些十进制小数无法精确表示为二进制小数,从而产生某些舍入误差。 B.C++的 printf 函数在输出浮点数时根据格式有默认小数点位数,因此输出了较少的位数。 C.3 .1415926535 是一个无限循环小数,在计算机中无法精确表示。 D.由于计算机 CPU 的运算错误导致。
正确答案:B
6、某单位工号的编码规则:编码总长 5 位,均为数字,前 4 位依次整除以 3 其值累加之和除以 10 的余数为第 5 位数字。如某工号为 76587,前 4 位分别整除以 3 后,商分别为 2、2、1、2,其累加之和为 7,除以 10 的余数为 7,故第 5 位为 7。下面代码依次输入前 4 位后,两个横线处分别应填的是 ( )。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
int rst = 0 , N;
for (int i = 0 ; i < 4 ; i++){
cin >> N;
rst += ______________;
}
cout << ______________;
A.N %3 , rst /10 B.N %3 , rst %10 C.N /3 , rst /10 D.N /3 , rst %10
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 #
int cnt = 0 , N;
for (int i = 1 ; i < 10 ; i += 2 )
for (int j = 0 ; j < i; j++)
cnt += 1 ;
cout << cnt;
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);
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 ;}
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
int cnt = 0 ;
for (int i = 0 ; i < 5 ; i++)
for (int j = i; j < 4 ; j++)
cnt += 1 ;
cout << cnt;
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 ;
while (N != 0 ){
num = N % 10 ;
Sum += num;
if (num == M) Flag = 1 ;
N /= 10 ;
}
if ((N % M == 0 )&&(Flag == 1 )&&(Sum % M == 0 ))
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);
min_score = min (min_score, now_score);
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。
判断题(每题 2 分,共 20 分) 1、鸿蒙是华为公司开发的一款操作系统,那么它能够将正确的源程序翻译成目标程序,并运行。( )
2、C++表达式 5 < 10 && 20 对应的逻辑值为 true。( )
3、C++表达式 10 / 0.333333 == 10 / (1 / 3) 的值为 true。( )
4、下面 C++ 代码中 N 是整数,执行时无论输入负整数、0 或正整数,其输出都将是 0。( )
cin >> N;
while (N) N /= 10 ;
cout << N;
5、下面的 C++ 代码执行后,其输出是 4 0。( )
int a,b; a = 4 ; b = a == 5 ;
cout << a << ' ' << b;
6、C++ 代码中对表达式 ('Z'-'A') < ('z'-'A') 的结果输出为 0。( )
7、下面的 C++ 代码可以用于判断正整数 N 的位数(即几位数,如 123 是 3 位数,12 为 2 位数)。( )
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 ;
}
8、计算交叉加减的结果,形如 1-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;
9、下列 C++ 代码段执行后将输出 55。( )
int cnt = 0 ;
for (i = 0 ; i < 10 ; i++)
for (j = i; j < 10 ; j++) cnt += 1 ;
cout << cnt;
10、下面 C++ 代码执行后输出如下,因为代码 printf("\n") 没有任何可读内容,删除不影响输出效果。( )
1234567892468101214161836912151821242748121620242832365101520253035404561218243036424854714212835424956638162432404856647291827364554637281
for (int i = 1 ; i < 10 ; i++){
for (int j = 1 ; j < 10 ; j++) printf ("%3d" , i * j);
printf ("\n" );
}
编程题 (每题 25 分,共 50 分)
环保能量球 【问题描述】
小杨最近在玩一个环保主题的游戏。在游戏中,小杨每行走 1 公里就可以获得 1 点'环保能量'。
为了激励玩家,游戏设置了'里程奖励':小杨每行走 x 公里,游戏就会额外奖励 1 点能量。
现在已知小杨总共行走了 n 公里,请你帮他计算,他一共能获得多少点环保能量?
【输入格式】
第一行包含一个正整数 t,代表测试数据组数。
对于每组测试数据:
第一行包含一个正整数 n,代表行走的公里数。
第二行包含一个正整数 x,代表奖励触发的间隔。
【输出格式】
对于每组测试数据,输出一个整数,代表小杨获得的环保能量总数。
【样例解释】
对于第 1 组数据:小杨行走获得 5 点能量。此外,他在第 2 公里和第 4 公里时各获得 1 点额外奖励,总共 7 点。
对于第 2 组数据:行走获得 10 点。他在第 3、6、9 公里时各获得 1 点额外奖励,总共 13 点。
对于第 3 组数据:行走获得 2 点。由于行走路程不足 5 公里,没有额外奖励,总共 2 点。
【数据范围】
对于全部数据,保证:1 ≤ t ≤ 100,1 ≤ n ≤ 1000,1 ≤ x ≤ 1000。
黄金格 【问题描述】
小杨在探险时发现了一张神奇的矩形地图,地图有 H 行和 W 列。每个格子的坐标是 (r,c),其中 r 表示行号从 1 到 H,c 表示列号 1 到 W。
小杨听说地图中隐藏着一些'黄金格',这些格子满足一个神秘的数学挑战:当格子坐标 (r,c) 代入特定的不等式关系成立时,该格子就是黄金格。具体来说,黄金格的条件是:sqrt(r² + c²) ≤ x + rc。
例如,如果参数 x=2,那么格子 (1,1) 就是黄金格。因为左边坐标平方和的平方根算出来是 sqrt(2)≈1.414,而右边算出来是 2+1 1=3,1.414 小于等于 3,符合条件。
【输入格式】
三行,每行一个正整数,分别表示 H、W、x。含义如题面所示。
【样例解释】
图中标注为黄色的 1 个格子是黄金格,坐标为 (1,1)。
【数据范围】
对于所有测试点,保证给出的正整数不超过 100。