2026年03月GESP认证C++编程二级真题试卷

一、单选题(每题 2 分,共 30 分)
第 1 题 2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )。
第 2 题 下面代码用来找出输入的N个正整数中最大的一个。如果将代码段用流程图来表示,则 L1 标记的代码行应该使用的图形是( )。
int N, max=0, val;
cin >> N;

while(N){
	cin >> val;
	if(val > max) // L1
		max = val;
	N--;
}

cout << max;
第 3 题 下面 C++ 代码可以执行,有关说法正确的是( )。
double PI = 3.1415926;
cout << (PI);
第 4 题 下面选择项中,与C++表达式!(x > 5 && y <= 10) 等价的是( )。
第 5 题 某同学执行C++代码cout << ((0.1 + 0.2) == 0.3) 时输出0 ,下面最可能的原因是( )。
第 6 题 下面的 C++ 代码段执行后其输出是( )。
tnt = 0;
for (int i = 0; i < 5; i++){
	for (int j = 0; j < i; j++)
		tnt += 1;
	cout << tnt << "#";
}
cout << tnt;
第 7 题 下面的 C++ 代码执行之后的输出是( )。
for ( int i = -2; i < 2; i++)
	if (not i % 3)
		cout << i << "#";
第 8 题 下面的 C++ 代码执行后其输出是( )。
int cnt = 0, i, j;
for (i =1; i < 5; i++){
	for (j =0; j < i; j++)
		cout << j << "#";
	break;
} 
if(i >= 5)
	cout << (i*j);
第 9 题 下面 C++ 代码执行后其输出是( )。
int count = 0;
for (int i = 1; i < 4; i++)
	for (int j = 1; j < 5; j++){
		if (j == 3)
			continue;
		if (i == 2)
			break;
		count += 1;
	}
cout << (count);
第 10 题 下面4个选项中,与下面 C++ 代码段具有相同效果的是( )。
i = 0;
while (i < 5){
	cout << i;
	i += 1;
}
第 11 题 下面 C++ 代码执行后输出是( )。
int n = 10;
while (n > 0){
	n -= 1;
	if (n % 3 == 0)
		continue;
	if (n == 5)
		break;
}
cout << n;
第 12 题 下面 C++ 代码段执行后,其输出是( )。
int i, j, cnt;
cnt = 0;
for (i = 0; i < 5; i++){
	i = -i;
	for (j = i; j < -i; j++)
		cnt += 1;
	i = -i;
}
cout << cnt;
第 13 题 某学校图书馆的借阅卡号由6位整数组成。前5位是顺序编号,第6位是校验码,用于防止输错。校验码规则如下:将前5位数字相加,然后除以10的余数,就是第6位数字。如卡号123455 的前5位之和为15 ,除以10 的余数是5,故第6位为5。下面的C++代码段用于判断卡号是否正确,横线处应填入的代码是( )。
cout << "请输入卡号:";
cin >> N;
order_num = N / 10; // 获得前5位顺序号,假设录入一定为6位正整数
check_num = N % 10; // 获得最后一位

tnt = 0; // 保存前5位之和
for (i = 0; i < 5; i++){
	________________;
	order_num /= 10;
}
if (__________________)
	cout << "符合校验规则";
else
	cout << "不符合校验规则";
注:分号表示分隔
第 14 题 下面的 C++ 代码段正常执行后其输出的数字图形是( )。
for (i = 1; i < 5; i++){
	for (j = 1; j < i+1; j++)
		cout << j;
	cout << endl;
}
第 15 题 某学校举办“校园演讲比赛”,每位选手由8位评委打分(分数为 0~10 的整数),且每位评委必须打分。计分规则:若至少有5位评委给出大于等于6分,则成绩有效,最终得分为所有8位评委的总分;如给出低于6分的评委数量超过5位,则记为0分。以下核心程序段依次输入8个分数,并计算最终得分。横线处应填入( )。
total_score = 0; // 所有分数之和
high_count = 0; // ≥6分的评委数量

for (i = 0; i < 8; i++){
	cout << "请输入评委分数: ";
	cin >> score;
	____________________;
	if (score >= 6)
		________________;
}

if (high_count >= 5)
	cout << total_score;
else
	cout << 0;
注:分号表示分隔
二、判断题(每题 2 分,共 20 分)
第 1 题 小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。( )
第 2 题 C++ 语句cout << ('4' % '2' == '2' * '2' % 2); 执行后的输出是1。( )
第 3 题 下面的 C++ 代码段执行时将报错,因为10是整数类型, a 是布尔类型。由于类型不同,不能进行加法运算。( )
bool a = true;
cout << (10 + a);
第 4 题 下面C++代码段执行后将输出0-3-6-9- 。 ( )
for (int i = 0; i < 10; i++){
	if (i % 3)
		continue;
	cout << i << "-";
}
第 5 题 执行下面的 C++ 代码段,如果N是基本数据类型,则语句cout << (N); 将被执行 0 次或无数次(即死循环)。( )
cin >> N;
while (N)
	cout << (N);
第 6 题 下面的 C++ 代码段可正常执行,删除continue 不影响执行效果。( )
for (i = 0; i < 10; i++){
	i += 1;
	continue;
}
cout << (i);
第 7 题 下面的 C++ 代码段用于计算1到N之间且包含N的所有数字中含有的3的个数,如1到40含有14个3, 而1到20则只含有2个3。如果将while (i != 0) 改为while (abs(i)) ,则执行结果相同。( )
cout << "请输入正整数N:";
cin >> N;
cnt = 0; // 保存3的个数
for (k = 1; k < N + 1; k++){
	i = k;
	while (i != 0){
		if (i % 10 == 3)
			cnt += 1;
		i /= 10;
	}
}
cout << cnt;
第 8 题 下面的 C++ 代码段执行将不会有输出,因为内层循环 j 总是 0 开始, i * j % 10 == 0 将会被满足,执行 break ,故而 i 小于 10 ,不会满足 if 判断条件。( )
for (i = 1; i < 10; i++)
	for (j = 0; j < i; j++)
		if (i * j % 10 == 0)
			break;
if(i >= 10)
	cout << (i*j);
第 9 题 下列 C++ 代码执行后将输出1#4#9#16#16 。( )
cnt = 0;
for (i = 1; i < 5; i++){
	for (j = 1; j < i + 1; j++)
		if (i * j % 10 == 0)
			break;
	if (j >= i + 1)
		cout << (i * j) << "#";
} 
if(i>= 5)
	cout << (i * j);
第 10 题 下面 C++ 代码执行后输出如左图所示,将" %d" 修改为"%3d" 即可实现右图输出。( )
/*
// 左图 						// 右图
1 2 3 4 5 6 7 8 9	                 1   2   3   4   5   6   7   8   9
2 4 6 8 10 12 14 16 18	     2   4   6   8 10 12 14 16 18
3 6 9 12 15 18 21 24 27	     3   6   9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36	 4   8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45	 5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54	 6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63	 7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72	 8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81	 9 18 27 36 45 54 63 72 81
*/
for (i = 1; i < 10; i++){
	for (j = 1; j < 10; j++)
		printf(" %d", i*j);
	printf("\n");
}
三、编程题(每题 25 分,共 50 分)
第 1 题 数数

题面描述

对于正整数 $n$,如果 $n$ 的所有数位中包含恰好 $3$个$2$ ,Alice 会认为这个正整数是美丽的。例如,正整数 $24122$ 中包含 $3$个 $2$,所以$24122$ 是美丽的;正整数 $132$ 中包含$1$个$2$,所以 $132$不是美丽的;正整数$212322$ 中包含 $4$个$2$ ,所以 $212322$不是美丽的。

Alice 想知道正整数 $L$ 到正整数 $R$ (包括 $L$ 和 $R$)中有多少美丽的正整数,你能帮她数一数吗?

输入格式

输入共$2$ 行,第一行为正整数 $L$,第二行为正整数 $R$。

输出格式

输出一行,包含一个整数 $C$,表示 $L$ 到 $R$ 中 $C$ 美丽数的数量。

输入数据#1 复制
2221
2223
输出数据#1 复制
2

数据要求

【样例解释】

$2221$到 $2223$ 中 , $2221$与$2223$ 是美丽的,$2222$ 不是美丽的。

【数据范围】

保证 $1 \le L \le R \le 10^6$。

第 2 题 画画

题面描述

输入一个正整数 $n$,你需要绘制一个 $n$行 $n$列的正方形,绘制规则如下:

- 正方形的四个顶点使用 + 绘制;

- 除顶点外,第 $1$行与第 $n$行使用 - 绘制;

- 除顶点外,第 $1$列与第 $n$列使用 | 绘制;

- 正方形内部使用 * 绘制。

输入格式

一行,一个正整数 $n$。

输出格式

输出共 $n$ 行,表示对应的正方形。

输入数据#1 复制
5
输出数据#1 复制
+---+
|***|
|***|
|***|
+---+

数据要求

保证 $3 \le n \le 100$ 。