news 2026/6/7 1:37:48

2025年09月 GESP等级认证C++编程(一级)试题解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2025年09月 GESP等级认证C++编程(一级)试题解析

【单选题】

1、(2分)人工智能现在非常火,小杨就想多了解一下,其中就经常听人提到“大模型”。那么请问这里说的“大模型”最贴切是指?( )

A、大电脑模型 B、大规模智能 C、智能的单位 D、大语言模型

正确答案:D

试题解析:大电脑模型,一般没有此说法;

大规模智能,范围太宽泛,表述模糊;

智能的单位,和题意不符;

目前提到的“大模型”就是指 大语言模型,比如 GPT 系列、ChatGPT 等。

因此最贴切的答案是D:大语言模型。

2、(2分)小杨这学期刚开学就选修了一门编程课,然后就想编写程序来计算1到10001之间的所有偶数的和。

他希望程序采用简单累加整数的方法,同时希望源程序尽可能清晰、简洁,则下面关于实现累加时采用的主要控制结构的哪个说法最不合适?( )

A、使用循环结构 B、使用循环和分支的组合 C、仅使用顺序结构 D、不使用分支结构

正确答案:C

试题解析:循环从 1 到 10001,判断每个数是否为偶数,然后累加。选项A、B均可以实现。

不使用分支结构也可以做到,比如循环步长为 2,选项D可以实现。

顺序结构没有循环和分支,如果不用循环,逐个累加10000次,这显然不现实。

3、(2分)下面的C++代码用于输入姓名,然后输出姓名,正确的说法是?( )

string XingMing; cout << "请输入您的姓名:"; cin >> XingMing; cout << XingMing;

A、XingMing 是汉语拼音,不能作为变量名称 B、可以将 XingMing 改为 Xing Ming

C、可以将 XingMing 改为 xingming D、可以将 XingMing 改为 Xing-Ming

正确答案:C

试题解析:变量名只能包括英文半角字母和数字,并且不能以数字开头;

XingMing是符合变量的定义规则,选项A错误;

变量名不能包括空格,选项B错误;

变量名中不能包括-符号,选项D错误;

本题答案为选项C。

4、(2分)下列C++ 代码中a和b都是整型变量,执行后,其结果是?( )

a = 13; b = 5; cout << a / b << a % // b << a % b; a * b;

A、2 3 B、23 C、20 D、以上都不准确

正确答案:C

试题解析:C++中,一行中//后面的部分为注释内容,可以忽略,因此输出语句相当于:

cout << a / b << a % a * b;

计算 a / b是整数除法,结果舍弃小数为整数2;

先计算a % a结果为0,再计算,0*b=0,因此输出0;

故执行结果为:20。

5、(2分)C++表达式 3 * 4 % 5 / 6 的值是?( )

A、10 B、5 C、2 D、0

正确答案:D

试题解析:根据优先级,先计算3*4=12,再计算12%5=2,最后计算:2/6,整数除法,结果为0。

6、(2分)下面的C++代码中变量 N 和 M 都是整型,则执行时如果先输入 10 并输入一个制表符后输入 20 并回车,其输出的数值是?( )

scanf("%d", &N); scanf("%d", &M); printf("{%d}",N+M);

A、{30} B、1020 C、{N+M} D、不输出,继续等待输入

正确答案:A

试题解析:scanf() 读取整数,遇到空白字符(包括空格、制表符、回车),会停止读取;

所以scanf("%d", &N);读取整数10,遇到制表符,读取N的值为10;

scanf("%d", &M);读取整数20,遇到回车,读取M的值为20;

所以N+M的值为30,按照printf()输出格式为:{30}。

7、(2分)当前是9月,编写C++代码求 N 个月后的月份。横线处应填入的代码是?( )

int N, M; cin >> N; M = _____________; if (M == 0) printf("%d个月后12月", N); else printf("%d个月后是%d月", N, M);

A、N % 12 B、9 + N % 12 C、(9 + N) / 12 D、(9 + N) % 12

正确答案:D

试题解析:当前是 9 月,经过 N 个月后,月份应该是 (9 + N) % 12,结果范围是0-11,但月份是 1~12,所以这里的0代表12月。

本题答案为选项D。

8、(2分)下面C++代码执行后的输出是?( )

int n = 0; for (int i = 0; i < 100; i++) n += i % 2; cout << n;

A、5050 B、4950 C、50 D、49

正确答案:C

试题解析:循环i的值为0到99,如果i为偶数,i%2为0,n += i%2 相当于没加;

如果i为奇数,i%2为1,n的值加1,0到99有50个奇数,所以n最终为50。

9、(2分)下面的C++代码执行后输出是?( )

int N = 0, i; for (i = -100; i < 100; i++) N += i % 10; cout << N;

A、900 B、100 C、0 D、-100

正确答案:C

试题解析:循环中i从-100到99,其中i是10的倍数时候,i%10为0,不会改变 N 的值;

所以N 的值为:-9、-8、……、-1,……,1、2、……、9,这些数相加,所有正数和负数刚好抵消,结果为0。

10、(2分)下面C++代码执行后输出是?( )

int i; for(i = 1; i < 5; i++) { if(i % 3 == 0) break; printf("%d#", i); } if(i > 5) printf("END\n");

A、1#2# B、1#2#END C、1#2 D、1#2#3#4#END

正确答案:A

试题解析:循环中,i从1开始,当i为1、2时候输出1#2#,当i为3时候,满足i%3==0的条件,循环终止,所以i最终为3,不满足i>5的条件,不会输出:END。

11、(2分)下面的C++代码用于求 N 的镜面数(N 的个位到最高位的各位数字依次反过来出现在数字中,但高位 0 将被忽略,不输出),如输入1234,则将输出 4321 ,又如输入120,则将输出 21 ,错误的选项是?( )

cout << "请输入个位数不为0的正整数:"; cin >> N; rst = 0; // 保存逆序结果 while (______________) { rst = rst * 10 + N % 10; N = N / 10; } cout << rst << endl;

A、N != 0 B、not (N == 0) C、N = 0 D、N > 0

正确答案:C

试题解析:程序是求 N 的逆序数,循环需要取出N的各位数字。

选项 A和B,都是 N 不为 0,选项D,N 〉0,循环条件都可以逐位取出;

选项C是赋值语句,循环条件始终为假,循环不执行,故C错误。

12、(2分)下面C++代码用于交换两个正整数 a 和 b 的值,不能实现交换的代码是?( )

A、

cout << "输入第一个正整数: "; cin >> a; cout <<"输入第二个正整数: "; cin >> b; temp = a; a = b; b = temp; cout << "a=" << a << " b=" << b << endl;

B、

cout << "输入第一个正整数: "; cin >> a; cout <<"输入第二个正整数: "; cin >> b; b = a - b; a = a - b; b = a + b; cout << "a=" << a << " b=" << b << endl;


C、

cout << "输入第一个正整数: "; cin >> a; cout <<"输入第二个正整数: "; cin >> b; a = a + b; b = a - b; a = a - b; cout << "a=" << a << " b=" << b << endl;

D、

cout << "输入第一个正整数: "; cin >> a; cout <<"输入第二个正整数: "; cin >> b; a, b = b, a; cout << "a=" << a << " b=" << b << endl;

正确答案:D

试题解析:C++不支持使用a, b = b, a;的形式进行交换,实际上 a, b = b, a 被解析为三条语句:

(a), (b = b), (a),即a、b值无变化。

本题答案为选项D。

13、(2分)下面C++代码用于获得正整数 N 的第 M 位数,约定个位数为第1位,如 N 等于1234,M 等于2,则输出3。

假设 M 的值是大于等于1且小于等于 N 的位数。横线处应填入的代码是?( )

int N, M, div=1; cout << "请输入一个正整数:"; cin >> N; cout <<"请输入从右到左取第几位数:"; cin >> M; for (int i =0; i < (M - 1); i++) div *= 10; cout << (______________);

A、N % div / 10 B、N / div / 10 C、N % div % 10 D、N / div % 10

正确答案:D

试题解析:要获取 N 的第 M 位(从右到左),先将 N 除以 (M-1)次 10,去掉右边的 M-1位,再对 10 取余,得到当前的最后一位,即第 M 位。

程序先计算div为 M - 1 个10相乘,所以横线处应为:N / div % 10。

14、(2分)下面C++代码执行后输出是?( )

num = 0; while (num <= 5) { num += 1; if (num == 3) continue; printf("%d#", num); }

A、1#2#4#5#6# B、1#2#4#5#6 C、1#2#3#4#5#6# D、1#2#3#4#5#6

正确答案:A

试题解析:第1次循环,num加1后为1,输出1#;

第2次循环,num加1后为2,输出2#;

第3次循环,num加1后为3,执行continue;

第4次循环,num加1后为4,输出4#;

第5次循环,num加1后为5,输出5#;

第6次循环,num加1后为6,输出6#;

此时不满足num<=5条件,循环结束。

本题答案为选项A。

15、(2分)下面C++代码用于记录多个输入数中的最大数和最小数(输入 -999 则输入结束),相关说法【错误】的是?( )

cin >> now_num; min_num = max_num = now_num; while (now_num != -999) { if (max_num < now_num) max_num = now_num; if (min_num > now_num) min_num = now_num; cin >> now_num; } cout << min_num << ' ' << max_num;

A、程序运行时如果第一个数输入 -999 ,则输出将是 -999 -999

B、程序输入过程中,如果输入的第一个数不是 -999 ,则如果待输入的数据中没有 -999 ,则程序能求出已输入整数中的最大数和最小数

C、如果用于输入考试成绩,即成绩中不可能有 -999 ,则程序能求出已输入成绩中的最高成绩和最低成绩

D、可以将第一个 cin >> now_num; 移动到 while (now_num != -999) { 下面,结果不变

正确答案:D

试题解析:选项A,若第一个数输入 -999,循环不执行,直接输出:-999 -999,正确;

选项

B,若第一个数不是 -999,如果输入中无 -999,程序循环不会结束,可以计算已输入数的最大最小数,正确;

选项C,考试成绩无-999,程序能正常读取所有成绩并求最值,正确;

选项D,若将第一个 cin >〉 now_num; 移到循环内,进入循环前 now_num 值不确定,可能导致错误。

【判断题】

16、(2分)在集成开发环境里调试程序时,要注意不能修改源程序,因为如果修改,就要终止调试、关闭该文件并重新打开,才能再次开始调试。( )

正确答案:错误

试题解析:多数集成开发环境如 VS 等,调试时修改源程序,无需关闭文件,保存后重新编译即可继续调试。

17、(2分)执行C++表达式 10 % 0.5 将报错,因为 0.5 所在位置只能是整数。( )

正确答案:正确

试题解析:C++ 中 % 运算符要求操作数必须是整数,0.5 是浮点数,使用 10 % 0.5 会报错。

18、(2分)下面C++代码执行后将输出 9 。( )

for (i = 0; i < 10; i++) break; cout << i;

正确答案:错误

试题解析:循环中 i 初始为 0,第一次进入循环就执行 break,循环结束,此时输出 i 的值为 0 而非 9。

19、(2分)下面C++代码执行后将输出 55 。( )

n = 0; for (int i = 0; i > -10; i--) n = n + i * -1; cout << n;

正确答案:错误

试题解析:i的初始为0,循环执行的条件是 i>-10,i值每次减少1,所以i的值为:0、-1、-2、……、-9;

循环体内把i的值乘以-1后累计到n中,即累计:0、1、2、……、9,结果为45。

20、(2分)将下面C++代码中的 L1 行的 i = 0 修改为 i = 1 , 其输出与当前代码输出相同。( )

cnt = 0; for (int i = 0; i < 100; i++) // L1 cnt += i; cout << cnt

正确答案:正确

试题解析:程序是求1到100的和,修改为 i = 1,少累加一个0,结果不变。

21、(2分)将下面C++代码中的 i < 10 修改为 i <= 10 ,其执行后输出相同。( )

int n, i; n = i = 0; while (i < 10) { n += i; i += 1; } cout << n;

正确答案:错误

试题解析:while循环中i每次加1,修改为i<=10后,循环将多执行一次,会多累加一次i,执行结果会改变。

22、(2分)下面的C++代码执行后将输出 45 。( )

int n, i; n = i = 0; while (i < 10){ i += 1; n += i; } cout << n;

正确答案:错误

试题解析:n和i初值为0,循环条件是i<10;

循环中,每次i的值先加1,然后累加到n中,最后一次循环,i为9(满足i<10),i加1后为10,然后将10累计到n,所以n的值是:1+2+……+10,结果应该是55。

23、(2分)执行C++代码 cout << (12 + 12.12) 将报错,因为 12 是 int 类型,而 12.12 是 float 类型,不同类型不能直接运算。( )

正确答案:错误

试题解析:在 C++ 中,当 int 类型和 double 类型进行算术运算时,会进行隐式类型转换(整型提升为浮点型),然后进行计算,结果类型为 double,cout << (12 + 12.12) 会输出 24.12,不会报错。

24、(2分)下面C++代码执行时将导致无限循环(也称死循环)。( )

while (count < 5) { count += 1; if (count == 3) continue; cout << count << ' '; }

正确答案:错误

试题解析:while的循环条件是count<5,循环体内count值每次加1,虽然count的初值没有给出,但无论count是<5或者>=5,始终会达到<5的条件不成立的时候,此时循环会结束,不会形成死循环。

25、(2分)下列C++代码用于求斐波那契数列,即第1个数为0,第2个数为1,从第三个数开始,依次是其前两个数之和。如果输入的值为大于 1 的正整数,该代码能实现所求。( )

cin >> n; a = 0, b = 1; for (int j = 0; j < n; j++) { cout << a << " "; b = b + a; a = b - a; }

正确答案:正确

试题解析:代码中 a 初始为 0(第 1 个数) ,b 为 1(第 2 个数)。

循环 n 次,每次输出 a 后,通过计算更新 a 和 b,依次得到 0、1、1、2、3… 符合斐波那契数列规律,输入大于 1 的正整数时可正确输出。

【编程题】

26、(25分)商店折扣

时间限制:1 s,内存限制:512 MB

【问题描述】

商店正在开展促销活动,给出了两种方案的折扣优惠。第一种方案是购物满 x 元减 y 元;第二种方案是直接打 n 折,也就是说价格变为原先的 n / 10。这里的 x、y、n 均是正整数,并且 1 <= y < x,1<= n <10 。

需要注意的是,第一种方案中满减优惠只能使用一次。例如购物满 10 元减 3 元时,若挑选了价格总和为 33 元的物品,只能减免 3 元,需要支付 30 元。

小明在商店挑选了价格总和为 p 元的物品,结账时只能使用一种优惠方案。小明最少需要支付多少钱呢?

【输入描述】

四行,四个正整数 x、y、n、p,含义见题目描述。

【输出描述】

一行,一个小数,表示小明最少需要支付多少钱,保留两位小数。

【样例输入1】

8

7

9

10

【样例输出1】

3.00

【样例输入2】

8

7

2

11

【样例输出2】

2.20

【数据范围】

对于所有测试点,保证 1 <= y < x,1<= n <10,1 <= p < 100。

【参考程序】

#include <iostream> using namespace std; int x, y, n, p; float a1, a2; int main() { cin >> x >> y >> n >> p; a1 = p; if (a1 >= x) a1 -= y; a2 = p * n / 10.0; printf("%.2f\n", min(a1, a2)); return 0; }

27、(25分)金字塔

时间限制:1 s,内存限制:512 MB

金字塔由 n 层石块垒成。从塔底向上,每层依次需要 n×n、(n-1)× (n-1)、……、2× 2、1× 1 块石块。请问搭建金字塔总共需要多少块石块?

【输入描述】

一行,一个正整数 n,表示金字塔的层数。

【输出描述】

一行,一个正整数,表示搭建金字塔所需的石块数量。

【样例输入1】

2

【样例输出1】

5

【样例输入2】

5

【样例输出2】

55

【数据范围】

对于所有测试点,保证 1 <= n <= 50 。

【参考程序】

#include <iostream> using namespace std; int n, ans; int main() { cin >> n; for (int i = 1; i <= n; i++) ans += i * i; cout << ans << endl; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 1:35:56

【稀缺首发】SaaS企业AI营销选型红宝书(CSDN版):覆盖11类细分赛道验证结论,仅开放72小时免费领取完整评估模板

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;SaaS 企业适合用 CSDN AI 数字营销吗&#xff1f; CSDN AI 数字营销平台聚焦于开发者社区场景&#xff0c;其核心能力围绕技术内容分发、开发者画像建模与智能线索培育展开。对 SaaS 企业而言&#xff0c;是否…

作者头像 李华
网站建设 2026/6/7 1:31:28

从DAVIS346到YOLOv5:一个事件相机小白的实战踩坑与数据转换全记录

从DAVIS346到YOLOv5&#xff1a;事件相机数据处理与目标检测实战指南第一次接触DAVIS346事件相机时&#xff0c;那种既兴奋又困惑的感觉至今记忆犹新。与传统相机不同&#xff0c;这个小小的设备输出的不是整齐的帧序列&#xff0c;而是一串串看似杂乱无章的"事件"数…

作者头像 李华
网站建设 2026/6/7 1:30:30

adlfs:给 Azure 存储加一层 Pythonic 文件系统接口

文章目录adlfs&#xff1a;给 Azure 存储加一层 Pythonic 文件系统接口1、这项目干什么的2、安装3、基本用法4、认证方式5、Blob 类型与限制6、适合谁用adlfs&#xff1a;给 Azure 存储加一层 Pythonic 文件系统接口 adlfs 拿到 209 Star&#xff0c;属于 fsspec 生态的一员。…

作者头像 李华