2026年06月GESP认证C++编程一级真题试卷

一、单选题(每题 2 分,共 30 分)
第 1 题 学校组织到未来农场参观,小明听讲解员介绍,在智能温室中,湿度传感器可以连续检测土壤的湿度变化,并将检测到的湿度数据实时发送给中央控制器。中央控制器根据这些数据判断是否开启灌溉系统。请问,这里的湿度传感器所发挥的作用,类似于计算机系统中的哪一类组件?( )
第 2 题 在使用某集成开发环境(比如 Dev-C++)来编辑源代码文件时,程序员经常需要在编辑区中对代码进行各种修改。以下关于在编辑区中执行的操作描述不正确的( )。
第 3 题 有关如下 C++ 代码的说法,正确的是( )。
float a = 3 + 3.5;
cout << a;
第 4 题 下列 C++ 表达式与 - 2 * 2 % 4 的值不同的是( )。
第 5 题 执行如下 C++ 代码片段,其输出是( )。
int a = 3;
int b = a;
a = 4;
printf("%d %d", a, b);
第 6 题 如下 C++ 代码执行时输入 2026-6-27 ,下列说法正确的是( )。
int N;
cin >> N;
cout << N;
第 7 题 如下 C++ 代码执行时,其说法错误的是( )。
int N, M;
cin >> N >> M;

if (N > M)
	cout << "A " << (N - M);
else
	cout << "B " << (M - N);
第 8 题 阅读如下 C++ 代码,下列说法错误的是( )。
int cnt = 0;
for (int i = 0; i < 5; i++)
	cnt += 1;
cout << cnt;
第 9 题 如下 C++ 代码执行后输出是 1 2 3 4 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 。横线处应该先后依次填入的运算符是( )。
int num = 1;
for (int i = 0; i < 35; i++) {
	printf("%d ", num);
	if (num _______ 10)
		num _______ 2;
	else
		num _______ 1;
}
第 10 题 如下 C++ 代码可以执行,其输出是( )。
int i;
for (i = 1; i < 5; i++)
	if (i % 2 == 0) {
		continue;
		cout << i << "#";
	}
cout << i << "END#";
第 11 题 如下 C++ 代码执行时,下列说法正确的是( )。
int N, i;
cin >> N;
for (i = 2; i < N; i++)
	if (N % i == 0) {
		cout << "1#";
		break;
	} else
		cout << "0#";
第 12 题 有关如下 C++ 代码,下列说法中错误的是( )。
int i, tot;
i = 0, tot = 0;
while (0 <= i && i < 10) {
	tot += 1;
	i += 1;
} 
cout << tot;
第 13 题 以下 C++ 代码可以找出千位、百位、十位和个位满足特定条件的四位数(例如各位数字的四次方和等于原数,即“四叶玫瑰数”),横线处应该填入的是( )。
int count = 0;
for (int n = 1000; n <= 9999; n++) {
	int a = n / 1000;
	int b = (n / 100) % 10;
	_________________________ // L1
	int d = n % 10;
	if (a * a * a * a + b * b * b * b + c * c * c * c + d * d * d * d == n) { // 特定条件
		count++;
	}
}
第 14 题 下面的 C++ 代码用于计算经过 n 秒后的秒针位置(0 ~ 59),两处横线处分别应填入的代码是( )。
int start, n, pos;
cout << "当前秒数(0-59): ";
cin >> start;
cout << "经过多少秒: ";
cin >> n;

pos = ____________; // L1
if (____________) // L2
	cout << n << "秒后回到12点方向" << endl;
else
	cout << n << "秒后指向" << pos << "秒刻度" << endl;
第 15 题 如果正整数 N 只能被 1 和它本身整除,则它是一个质数(或素数)。下面的 C++ 代码用于判断正整数 N 是否为质数(素数)。若 N 是质数,输出 YES ,否则输出 NO 。横线处不应填入的代码是( )。
int N, i;
cin >> N;
if (N <= 1) {
	cout << "NO";
	return 0;
} 
for ( i = 2; ______; i++) {
	if (N % i == 0) {
		cout << "NO";
		return 0;
	}
} 
cout << "YES";
二、判断题(每题 2 分,共 20 分)
第 1 题 又到期末考试周,小明发现这次许多闭卷考试不仅禁止携带手机、平板电脑,还有最近比较时髦的各类 AI眼镜(也有叫智能眼镜)也同样不允许带入考场。这些 AI 眼镜应该也是内置了操作系统并可能支持 Wi-Fi 或蓝牙连接。
第 2 题 如果 n 为大于100 的整数,则 C++ 表达式 (n / 10) % 10 与 (n % 100) / 10 的结果相同。
第 3 题 下面 C++ 代码执行后将输出 19 。
int i;
for (i = 0; i < 20; i += 3)
	if (i % 3 != 0)
		break;
cout << i;
第 4 题 在数学中,$N!$ 称之为 $N$的阶乘,其含义是 $1$到 $N$之积,包括 $N$。如 $3!=1\times 2 \times 3 =6$。如下 C++ 代码能输出 $N!$ 的结果。
int N;
cout << "请输入正整数:";
cin >> N;
int rst = 0;
for (int i = 1; i < N + 1; i++)
	rst *= i;
cout << rst;
第 5 题 如下 C++ 代码能实现输出正整数 N 的各位数字。
int N;
cin >> N;
while (N > 0) {
	cout << (N % 10) << endl;
	N = N / 10;
}
第 6 题 将如下 C++ 代码中的 printf("\n") 更换为 printf("%c", '\n') ,输出效果相同。
for (int i = 0; i < 100; i++) {
	if (i % 5 == 0)
		printf("\n");
	printf("%2d ", i);
}
第 7 题 C++ 代码 cout << (2.5 % 2) 能够生成可执行代码,但执行时将报错,因为 % 只能适用于正整数。
第 8 题 下面的 C++ 代码执行后将输出 24 。
int total;
for (int n = 1; n <= 4; n++) {
	total *= n;
} 
cout << total;
第 9 题 如果 a 是 C++ 的整型变量,值为 4 ,则表达式 (a % 2 == 0) + (a / 2) 的值为 4 。
第 10 题 删除下面 C++ 代码中的 continue 后,其输出与原来相同。
int x = 0;
while (x < 4) {
	x++;
	if (x == 2) continue;
	cout << x << ",";
}
三、编程题(每题 25 分,共 50 分)
第 1 题 去旅行

题面描述

快暑假了,小杨同学正在计划出去旅行,前往目的地的方案多种多样,小杨同学想知道如何前往目的地最便宜。

小杨同学住在 A 市,旅行目的地是 B 市,小杨同学前往目的地有三种方案:

1. 从 A 市直飞 B 市;

2. 从 A 市坐高铁到 C 市,然后坐飞机到 B 市;

3. 从 A 市坐高铁到 C 市,然后坐高铁到 B 市。

请帮小杨同学求出最便宜的出行方案的价格。

输入格式

输入包含 行,每行一个正整数:

第 $1$ 行的正整数表示「从 A 市直飞 B 市」的价格;

第 $2$ 行的正整数表示「从 A 市坐高铁到 C 市」的价格;

第 $3$ 行的正整数表示「从 C 市坐飞机到 B 市」的价格;

第 $4$ 行的正整数表示「从 C 市坐高铁到 B 市」的价格。

输出格式

输出一个正整数,表示 3 种方式中,最便宜的出行方案的价格。

输入数据#1 复制
999
105
699
588
输出数据#1 复制
693
输入数据#2 复制
9
3
8
7
输出数据#2 复制
9

数据要求

【样例1解释】

方案 1. 直飞价格为 $999$;

方案 2. 高铁转飞机价格为 $105+699=804$;

方案 3. 高铁的价格为 $105+588=693$;

因此最便宜的价格是 $693$。

【样例2解释】

方案 1. 直飞价格为 $9$;

方案 2. 高铁转飞机价格为 $3+8=11$;

方案 3. 高铁的价格为 $3+7=10$;

因此最便宜的价格是 $9$。

【数据范围】

所有输入均为正整数,且不超过 $10000$。

第 2 题 交税

题面描述

根据国家税收相关规定,劳务报酬需要按月预交个税,预交税率如下:

1. 劳务报酬不超过 $800$ 的,不需要预交个税;

2. 劳务报酬超过 $800$ 的,仅超过 $800$ 的部分按照 $20\%$(即 $0.2$)税率预交个税(不超过 $800$ 的部分不需要预交个税);

例如,月劳务报酬为 $1000.0$,则按照规则 2 需要预交个税 $(1000.0-800.0)\times 20\% =40.00$。

现在给定小杨同学 $12$ 个月的月度劳务报酬,请帮小杨同学计算他这 $12$ 个月应预交个税的总和。

输入格式

输入 $12$ 行,每行一个浮点数,表示小杨同学 $12$ 个月中每个月的劳务报酬。

每个浮点数恰好有一位小数。

输出格式

输出 $1$ 行,一个浮点数,保留两位小数,表示小杨同学 $12$ 个月应预交个税的总和。

输入数据#1 复制
932.0
1634.3
1790.4
2172.9
378.1
283.4
2761.9
3583.5
10.1
2324.9
1111.6
3812.3
输出数据#1 复制
2584.76

数据要求

【样例解释】

1. $932.0$符合规则 2,超过 $800$ 的部分为 $132.0$,按照 $20\%$ 预交为 $132.0 \times 20\%=26.40$;

2. $1634.3$符合规则 2,超过 $800$ 的部分为 $834.3$ ,按照 $20\%$预交为 $834.3\times 20\%=166.86$;

3. $1790.4$符合规则 2,超过 $800$ 的部分为 $990.4$ ,按照 $20\%$预交为 $9910.4\times 20\%=198.08$;

4. $2172.9$符合规则 2,超过 $800$ 的部分为 $1372.9$ ,按照 $20\%$预交为 $1372.9 \times 20\% = 274.58$;

5. $378.1$符合规则 1,不需要预交个税;

6. $283.4$符合规则 1,不需要预交个税;

7. $2761.9$符合规则 2,超过 $800$ 的部分为 $1961.9$ ,按照 $20\%$预交为 $1961.9 \times 20\% =392.38$;

8. $3583.5$符合规则 2,超过 $800$ 的部分为 $2783.5$ ,按照 预交为 $2783.5 \times 20\% =556.70$;

9. $10.1$符合规则 1,不需要预交个税;

10. $2324.9$符合规则 2,超过 $800$ 的部分为 $1524.9$,按照 $20\%$预交为 $1524.9 \times 20\% =304.98$;

11. $1111.6$符合规则 2,超过 $800$ 的部分为 $311.6$,按照$20\%$ 预交为 $311.6 \times 20\%=62.32$;

12. $3812.3$符合规则 2,超过 $800$ 的部分为 $3012.3$,按照 $20\%$预交为 $3012.3 \times 20\% = 602.46$;

总和为 $2584.76$。

【数据范围】

小杨同学每月劳务报酬收入均为正,且恰好有一位小数,且不超过 $4000.0$。