欢迎光临
我们一直在努力

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

【单选题】

1、(2分)2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。

如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备?( )

A、检测重心的重力传感器    B、预装的AI算法程序    C、接收动作指令的遥控器    D、拍摄其他机器人的摄像头    

正确答案:B

试题解析:题目问哪一项不能作为输入设备,传感器、遥控器、摄像头都是设备,而算法程序属于软件,不能作为设备。

2、(2分)小明学习编程有一段时间了,他想在图形环境下把当前目录(或文件夹)下的文本文件 20260314.txt 的名字改一下。

他用鼠标左键点击选中该文件后,立即完成下面哪个操作后将处于输入新文件名的状态?( )

A、单击右键并选择弹出菜单中的“重命名”    B、双击左键    C、按功能键 F1    D、按回车键    

正确答案:A

试题解析:将文件改名,单击文件名或者右键使用菜单中的“重命名”,使文件名处于输入新文件名的状态。

3、(2分)下面C++代码可以执行,有关说法正确的是?( )

double PI = 3.1415926;

cout << (PI);

A、为了方便初学者,cout << (PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感    

B、cout << (PI) 修改为 cout << (Pi) 能正常执行    C、不能用 PI 做变量名,因为要保存圆周率这个常量    

D、将程序中全部 PI 都改写为 Pai ,将能正常执行,不会报错    

正确答案:D

试题解析:定义的PI是一个变量,C++的变量名区分大小写,选项A和B错误;

PI不是系统的保留字,可以作为变量名,选项C错误;

本题答案为选项D。

4、(2分)C++表达式 3 * 3 % 2 的值为?( )

A、81    B、27    C、4    D、1    

正确答案:D

试题解析:运算符*和%优先级相同,从左往右计算:3*3=9,9%2=1。

5、(2分)整型变量 a 、 b 的初值都是 4,则下面的C++代码执行后的输出是?( )

a, b = 3, 4;

cout << (a + 2) << (b – 2) << endl;

cout << a << b << endl;

A、61

43    

B、52

34    

C、62

44    

D、62

32    

正确答案:A

试题解析:C++赋值运算不支持多个变量同时赋值,a, b = 3, 4;相当于三条语句:a; b=3; 4;,执行了赋值的只有b=3,所以a的值还是4,b变为了3;

输出(a+2)为6,(b-2)为1,第一行输出为61;

然后输出a、b,第二行输出为:43。

6、(2分)下面C++代码的相关说法,正确的是?( )

int N = 0;

cin >> N;

cout << (N);

A、执行时如输入 10 ,则将输出 10    B、执行时如输入 3.14 ,将报错    C、执行时如输入 ABC ,将报错    

D、执行时如输入 -10 ,将报错    

正确答案:A

试题解析:变量N的类型是整数,当输入的数是一个无效的整数时,遇到无效字符会自动停止,但程序执行不会报错。

输入3.14时,N的值为3(.是无效的字符);

输入ABC时,第一个字符是无效的整数字符,N保持为0;

输出10和-10时,是有效的整数,N为10和-10。

7、(2分)下面C++代码执行时,其说法正确的是?( )

int M = 0, N = 0;

cin >> M;

cin >> N;

if (N > M)

cout << (N – M);

else

cout << (M – N);

A、如果输入一个正数和一个负数,其输出结果肯定是大于0    B、不管是负整数、正整数亦或0,其结果肯定是大于等于0    

C、如果 N 和 M 是相等的整数,将不会有输出    D、如果 N 和 M 输入带有小数点的数,将按整数部分计算    

正确答案:B

试题解析:判断条件N>M,则输出N-M,否则输出M-N,即输出两个数中较大的数减去较小的数的差。

所以结果一定是一个正数或者0(两个数有可能相同),选项B正确。

如果输入的是带有小数点的数,小数点不是有效的整数,则小数点前面的整数输入到N中,M则是无效的输入,其值保持为0,选项D错误。

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

int i, tnt = 1;

for (i = 0; i < 5; i++)

tnt *= i;

printf("%2d%2d\\n", tnt, i);

A、24 5    B、10 5    C、0 4    D、0 5    

正确答案:D

试题解析:for循环第一次,i为0,执行 tnt *= 0,所以循环执行完成后,tnt为0;

当i等于5时,不满足for循环条件,for循环结束,所以最终i为5。

9、(2分)执行下面C++代码段求序列 -1+2+3-4+5+6-7+8+9-10+11+12…… 之值。例如输入 4 ,则计算序列前4项的值,规律如序列所示,输出为 0 。下面说法中正确的是?( )

int N, tnt, i;

cout << "请输入正整数:";

cin >> N;

tnt = 0;

for (i = 1; i < N + 1; i++) // L1

if (i % 3 == 1) // L2

tnt += -i;

else

tnt += i;

cout << tnt;

A、L1行中 i < N + 1 应该修为 i < N 才会符合预期    B、L2行中 i % 3 == 1 应修改为 i % 3 == 0 才会符合预期    

C、L2行中 i % 3 == 1 修改为 i % 3 与当前程序效果相同    D、当前代码能实现题目所描述计算目标    

正确答案:D

试题解析:根据序列的规律,第1、4、7、……个数的符号为负号,其余数符号为正号。

for循环的i从1开始,判断条件 i%3==1 刚好满足题目序列的特征,可以实现题目的功能。

10、(2分)下面C++代码的相关说法,正确的是?( )

int i;

for (i = 1; i < 10; i++) {

if (i % 2 == 0) {

continue; // L1

} else

cout << i << "#";

}

cout << i << "END";

A、上述代码执行后,其输出是 1#3#5#7#9#9END    B、删除 else 后的执行效果与当前代码相同    

C、删除 else 且将 cout << i << "#" 移入L1行下面,则执行效果与当前代码相同    

D、在 cout << i << "END" 前增加判断 if(i > 10) ,其执行效果与当前代码相同    

正确答案:B

试题解析:循环中,i从1到9,当i为偶数时,跳过循环(不输出),所以输出的为:1#3#5#7#9#,循环结束后,i的值为10,输出10END,选项A错误;

删除 else 且将 cout << i << "#" 移入L1行下面,continue后面的代码不会执行,所以循环中不会输出,选项C错误;

循环结束后,i的值为10,不满足i>10的条件,加上这个条件,不会输出:10END,选项D错误;

选项B正确,删除else,不会对程序执行结果有影响。

11、(2分)一个正整数的每位都是个位数,称为数位,最高位非0。下面的C++代码用于求正整数的所有数位之和,简称数位和。

如 123 的各数位分别是1、2、3,则其数位和为 1+2+3 ,结果为6。为实现该目标,横线处应该填写的代码是?( )

int N;

cin >> N;

int tnt = 0;

while (N != 0) {

____________;

____________;

}

cout << "N的数位和为:" << tnt;

A、tnt += N / 10

N /= 10    

B、tnt += N % 10

N /= 10    

C、tnt += N / 10

N %= 10    

D、tnt = tnt + N % 10

N %= 10    

正确答案:B

试题解析:使用循环取整数的每一位,将其累加到tnt中;

while循环中,使用 N%10 取出 N 的个位,然后使用N /= 10,丢掉N的个位;

所以应填入:

tnt += N % 10

N /= 10

12、(2分)小明想要快速知道任给一个正整数中有多少个奇数位(数位值是奇数),下面的C++代码是其实现,横线处应该填入的代码是?( )

int N;

cin >> N;

int odd_count = 0; // 记录奇数的个数

int old_number = N; // 保存原数

while (N != 0) {

if (_________________)

odd_count += 1;

N = (N – N % 10) / 10;

}

cout << old_number << "中共有 " << odd_count << " 个奇数";

A、N % 10 % 2 == 0    B、N % 10 % 2 == 1    C、N / 10 / 2 == 1    D、N / 2 / 10 == 0    

正确答案:B

试题解析:while循环中使用 N % 10 取出 N 的个位,判断是奇数则将计数器+1,判断条件为:

N % 10 % 2 != 0 或者 N % 10 % 2 == 1。

13、(2分)小明和弟弟在玩一个拼数字游戏,游戏规则是:二人各写一个两位正整数 M 和 N ;然后将较大的数字放在较小的前面,拼成一个4位数;将这个4位数除以3的余数添加到4位数的后面,得到一个5位数;最后判断这个5位数能否被14整除。

下面的C++代码用于判断 M 和 N 是否符合全部要求,如果符合则输出 Y 否则输出 N 。例如输入 85 和 79 ,可以拼出 85792,恰好是14的倍数,则输出 Y 。

关于下面代码描述正确的是?( )

int M, N, Q;

cin >> M >> N;

if(M > N) // L1

Q = M*100+N;

else

Q = N*100+M;

if((Q*10+Q%3) % 14 == 0) // L2

cout << "Y";

else

cout << "N";

A、代码段不能完成正确判断    B、L1行代码中条件应该改为 M <= N    

C、L2行代码应该改为 if ((Q * 10 + Q / 3) % 14 == 0)    

D、代码段可以不使用变量 Q ,而是在区分 M 和 N 大小后分别直接用它们来判断    

正确答案:D

试题解析:M、N 取较大的数作为4位数的前两位,所以是较大数*100+较小数,L1处判断条件正确,选项B错误;

Q作为组成的4位数,再*10变成5位数,然后加上Q除以3的余数,即组成的五位数为:Q*10+Q%3,选项C错误;

程序能正确完成判断,选项A错误;

选项D正确,如果不使用变量Q,也可以在if(M>N) 和 else 中直接使用M、N组成五位数并判断输出,只是表达式会复杂一点。

14、(2分)执行下面C++代码可以判断一个6位正整数 N 的高3位和低3位的差是否是314的倍数。

例如 628314 就符合要求。横线处应该填入?( )

cin >> N;

if ( ___________________________ )

cout << N << "符合条件" << endl;

A、((N % 1000) – (N / 1000)) / 314 == 0    B、((N / 1000) – (N % 1000)) % 314 == 0    

C、((N % 1000) – (N / 1000)) / 314    D、((N / 1000) – (N % 1000)) % 314    

正确答案:B

试题解析:6位正整数 N 的高3位为:N/1000,低3位:N%1000,所以判断条件为:

(N / 1000 – N % 1000) % 314 == 0,加上小括号也没有影响,即选项B正确。

15、(2分)N 是一个正整数。如果 N 的所有奇数位的数位和等于所有偶数位的数位和,则称它是一个“双螺旋数”。

例如 12375 的所有奇数位的数位和是9,同时它的所有偶数位的数位和也是9,则 12375 就是一个双螺旋数。

下面的C++代码用于判断输入的 N 是否为双螺旋数。空白处应该填入的代码是?( )

int i, N, N1=0, N2=0, N0;

cin >> N;

N0 = N;

while (N) {

_________________________

_________________________

}

if(N1 == N2)

cout << N0 << "是双螺旋数" << endl;

A、N1 += N%10, N /= 10;

N2 += N%10, N /= 10;    

B、N1 += N/10, N /= 10;

N2 += N/10, N /= 10;    

C、N1 += N%10, N %= 10;

N2 += N%10, N %= 10;    

D、N1 += N/10, N %= 10;

N2 += N/10, N %= 10;    

正确答案:A

试题解析:程序使用N1表示奇数位的和,循环中使用:N % 10 取出 N 的个位,然后 使用 N /=10 丢掉其个位数,对应的程序为:

N1 += N%10, N /= 10;

N2 += N%10, N /= 10;

【判断题】

16、(2分)小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。( )

正确答案:正确

试题解析:说法正确,手表具有手机类似的功能,说明这个手机是一个小的计算机系统,也是内置了一个操作系统来管理手表的软硬件。

17、(2分)C++表达式 4 % 2 和 2 * 2 % 2 的结果相同。( )

正确答案:正确

试题解析:%是求余数,4 % 2的结果为0,2 % 2的结果也是0,所以描述正确。

18、(2分)下面C++代码段成功执行后将输出 0 。( )

for (i = 1; i < 10; i++)

if (i % 3 == 0)

break;

cout << i;

正确答案:错误

试题解析:循环中i从1到9,通过判断条件:i % 3 == 0,可知当 i为3时,条件成立,所以最后输出 i的值为3。

19、(2分)下面能够正常执行的C++代码段用于求1到N之和,N为正整数。因为 i < N + 1 ,所以是 1 到 N 且包含 N 之和。( )

tnt = 0;

cout << "请输入正整数:";

cin >> N;

total = 0;

for (i =1; i < N + 1; i++) ;

total += i;

cout << total;

正确答案:错误

试题解析:注意 for循环那一行最后有个分号,这会使循环体是一个空语句,而不是total += i;

所以不能正确 用于求1到N之和。

20、(2分)执行下面的C++代码段,其语句 cout << (N) 将被执行0次或无数次(即死循环)。( ).

cin >> N;

while (N)

cout << (N);

正确答案:正确

试题解析:正确,当输入的N为0时,while条件为0(false),循环执行0次;否则,循环会一直执行。

21、(2分)下面的C++代码段的变量都是整型,它能用于判断输入的正整数是否为对称数。所谓对称数是指从左到右和从右到左读该数,其值相同。

例如, 121 和 414 都是对称数,而 123 不是对称数。( )

cout << "请输入正整数:";

cin >> n;

old_number = n;

new_number = 0;

while (n != 0) {

new_number = new_number * 10 + n % 10;

n /= 10;

}

if (old_number == new_number)

cout << "对称数";

else

cout << "非对称数";

正确答案:正确

试题解析:变量new_number保存 n的逆序数,使用while循环将 n 从个位的每一位放到 new_number中。

最后判断逆序数 new_number 和输入的n的一个拷贝:old_number是否相等,完成对称数的判断。

22、(2分)执行下面的C++代码段,如果变量都为整型变量,输入为大于0的整数,则输出数值一定为 -N 的值。( )

cin >> N;

total = 0;

for (i = -N; i < N; i +=2)

total += i;

cout << total;

正确答案:正确

试题解析:for循环中,i 的取值为:-N、-N+2、……,total是i的和;

如果N为1,i取值为:-1,total结果为-1;

如果N大于2,i取值为:-2、0,total结果为-2;

以此类推,可知最终结果为:-N。

23、(2分)执行C++语句 printf("%d\\n", 3.14) 将报错。( )

正确答案:错误

试题解析:printf函数使用 %d 表示以整数输出,但是传入的参数是小数3.14,这将会导致输出结果错误,但程序本身不会报错。

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

int cnt = 0;

for (int i = 1; i < 100; i++)

cnt += i++;

cout << cnt;

正确答案:正确

试题解析:for循环中,i初值为1,第1次循环,cnt += 1,然后i++变成2,for循环本身也会有一个i++,所以第2次循环i值为3,……即i的值每次增加了2;

所以cnt结果为:1+3+5+……+99,即:1+99+3+97+……,一共25个100,结果为:2500。

25、(2分)小明在测试C++的 printf 的功能时执行了 printf("%-5d\\n", 314) ,则代码输出的结果是 -5314 。( )

正确答案:错误

试题解析:printf函数的 %5d 表示右对齐以5个宽度输出,不足5位左边补0;

而 %-5d 则表示左对齐以5个宽度输出,不足5位右边边补0;

所以输出的结果为:“314  ”(不包括引号)。

【编程题】

26、(25分)交朋友

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

【问题描述】

Alice 班上共有 4 个小朋友,身高分别为 H1、H2、H3、H4,其中 Alice 的身高为 H1。

Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?

【输入描述】

输入共 4 行,第 i 行包含一个整数 Hi,表示班上小朋友的身高。

【输出描述】

输出 1 行,包含一个整数 h,表示 Alice 想交的朋友的身高。

【样例输入】

150

165

135

133

【样例输出】

135

【样例解释】

样例中,Alice 身高为 150,第 2、3 个小朋友与 Alice 身高差距为 15,同样最接近,Alice 选较矮的一个即第 3 个身高为 135 的小朋友交朋友。

【数据范围】

保证 100 <= Hi <= 199 且 Hi 互不相同。

【参考程序】

#include <iostream>

using namespace std;

int main() {

int H1, H2, H3, H4;

cin >> H1 >> H2 >> H3 >> H4;

int ans = H2; //假设是第二个小朋友

int d = H1 – H2;

if (d < 0) d = -d;

int min = d; //最小身高差

//第三个小朋友和假设进行比较

d = H1 – H3;

if (d < 0) d = -d;

if (d < min || (d == min && H3 < ans))

ans = H3, min = d;

//第四个小朋友和假设进行比较

d = H1 – H4;

if (d < 0) d = -d;

if (d < min || (d == min && H4 < ans))

ans = H4;

cout << ans << endl;

return 0;

}

27、(25分)数字替换

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

【问题描述】

Alice 不喜欢数字 4,但觉得数字 8 寓意好,她想把数中的 4 全都替换成 8,若数中不含 4 则无需修改,你能帮帮她吗?

【输入描述】

输入一行,包含一个整数 A,表示替换前的数。

【输出描述】

输出一行,包含一个整数 B,表示替换后的数。

【样例输入1】

8459045

【样例输出1】

8859085

【样例输入2】

123

【样例输出2】

123

【样例解释】

对于样例1,输入 8459045 中有两个 4,都将其替换为了 8,得到 8859085。

对于样例2,输入 123 中不包含 4,无需修改输入数字,输出 123。

【数据范围】

0 <= A <= 10^8。

【参考程序】

#include <iostream>

using namespace std;

int main() {

int a, b = 0, t = 1;

cin >> a;

while(a != 0) {

int k = a % 10; //取出当前位

if(k == 4) //直接替换

k = 8;

b += k * t;

a /= 10;

t *= 10;

}

cout << b;

return 0;

}

赞(0)
未经允许不得转载:171主机测评 » 2026年03月 GESP等级认证C++编程(一级)试题解析
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址