GESP认证C++编程真题解析 | 202603 一级
欢迎大家订阅我的专栏算法题解C与Python实现本专栏旨在帮助大家从基础到进阶 逐步提升编程能力助力信息学竞赛备战专栏特色1.经典算法练习根据信息学竞赛大纲精心挑选经典算法题目提供清晰的代码实现与详细指导帮助您夯实算法基础。2.系统化学习路径按照算法类别和难度分级从基础到进阶循序渐进帮助您全面提升编程能力与算法思维。适合人群准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生希望系统学习C/Python编程的初学者想要提升算法与编程能力的编程爱好者附上汇总帖GESP认证C编程真题解析 | 汇总单选题第1题2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻它们落地可能会有微微踉跄但都会迅速调整姿态站稳并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统那么在该计算机系统中下面哪一项不能作为输入设备 。A. 检测重心的重力传感器B. 预装的AI算法程序C. 接收动作指令的遥控器D. 拍摄其他机器人的摄像头【答案】B【解析】预装的AI算法程序属于软件系统不属于硬件中的输入设备。传感器、遥控器和摄像头均用于采集外部信息并输入到系统中属于输入设备。第2题小明学习编程有一段时间了他想在图形环境下把当前目录或文件夹下的文本文件20260314.txt的名字改一下。他用鼠标左键点击选中该文件后立即完成下面哪个操作后将处于输入新文件名的状态 A. 单击右键并选择弹出菜单中的“重命名”B. 双击左键C. 按功能键F1D. 按回车键【答案】A【解析】在常见的图形操作系统中选中文件后单击右键并选择重命名可以更改文件名。第3题下面C代码可以执行有关说法正确的是 。doublePI3.141596;cout(PI);A. 为了方便初学者cout (PI)和cout (pi)效果相同即变量的大小写不敏感B.cout (PI)修改为cout (Pi)能正常执行C. 不能用PI做变量名因为要保存圆周率这个常量D. 将程序中全部PI都改写为Pai将能正常执行不会报错【答案】D【解析】C对大小写是严格敏感的因此A和B错误。PI只是一个普通的标识符可以作为变量名使用C错误。只要变量声明和调用的名字保持一致改为 Pai 是完全合法的。第4题C表达式3 * 3 % 2的值为 。A. 81B. 27C. 4D. 1【答案】D【解析】乘法 * 和取余 % 优先级相同从左到右结合。先计算3 ∗ 3 3*33∗3得到 9再计算 9%2 得到 1。第5题整型变量a、b的初值都是 4则下面的C代码执行后的输出是 。a,b3,4;cout(a2)(b-2)endl;coutabendl;A.61 43B.52 34C.62 44D.62 32【答案】A【解析】整型变量a、b的初值都是4C中逗号的优先级低所以a, b3, 4应该理解为一个逗号表达式三个子表达式分别为ab34也就是说b变为3a依然为4第2行输出(42)和(3-2)即6和1。第6题下面C代码的相关说法正确的是 。intN0;cinN;cout(N);A. 执行时如输入10则将输出10B. 执行时如输入3.14将报错C. 执行时如输入ABC将报错D. 执行时如输入-10将报错【答案】A【解析】N是整型输入整数10会正常读取并输出10。如果输入浮点数或字符C的标准输入流只会截断或停止读取并不会直接报错导致程序崩溃。第7题下面C代码执行时其说法正确的是 。intM0,N0;cinM;cinN;if(NM)cout(N-M);elsecout(M-N);A. 如果输入一个正数和一个负数其输出结果肯定是大于 0B. 不管是负整数、正整数亦或0其结果肯定是大于等于 0C. 如果N和M是相等的整数将不会有输出D. 如果N和M输入带有小数点的数将按整数部分计算【答案】B【解析】这段代码的作用是求出M和N之差的绝对值即大数减去小数。因此无论输入什么整数结果一定大于或等于0。第8题下面C代码执行后的输出是 。inti,tnt1;for(i0;i5;i)tnt*i;printf(%2d%2d\n,tnt,i);A.24 5B.10 5C.0 4D.0 5【答案】D【解析】循环从 i0 开始tnt 第一次乘积累积就是 1 * 0 0。之后无论 i 是多少tnt 始终为 0。循环结束时 i 为 5因此输出为 0 5。第9题执行下面C代码段求序列-123-456-789-101112......之值。例如输入4则计算序列前 4 项的值规律如序列所示输出为0。下面说法中正确的是 。intN,tnt,i;cout请输入正整数;cinN;tnt0;for(i1;iN1;i)// L1if(i%31)// L2tnt-i;elsetnti;couttnt;A. L1行中i N 1应该修为i N才会符合预期B. L2行中i % 3 1应修改为i % 3 0才会符合预期C. L2行中i % 3 1修改为i % 3与当前程序效果相同D. 当前代码能实现题目所描述计算目标【答案】D【解析】序列的规律是遇到模3余1的位置147…变为负数。代码中 i 12…N模3余1时执行 tnt-i; 能实现所描述的特定目标。第10题下面C代码的相关说法正确的是 。inti;for(i1;i10;i){if(i%20){continue;// L1}elsecouti#;}coutiEND;A. 上述代码执行后其输出是1#3#5#7#9#9ENDB. 删除else后的执行效果与当前代码相同C. 删除else且将cout i #移入L1行下面则执行效果与当前代码相同D. 在cout i END前增加判断if(i 10)其执行效果与当前代码相同【答案】B【解析】A错误。for 循环结束的条件是 i10 为假这意味着跳出循环时 i 的值必定是10而不是9。所以最后输出的应该是 10END。B正确。如果 if 条件成立触发了 continue那么后面的 cout 语句无论有没有被 else 包裹都会被直接跳过。只有当if条件不成立没有触发continue时程序才会按顺序向下执行到 cout。C错误。如果把输出语句移入 if 分支内部代码会变成当 i 是偶数时输出并 continue。这样输出的内容就完全反过来了变成了输出偶数。D错误。前面分析过循环结束后 i 的值等于 10。如果加上 if (i 10) 这个判断条件那么最后的 10END 就不会被打印出来了执行效果发生了改变。第11题一个正整数的每位都是个位数称为数位最高位非0。下面的C代码用于求正整数的所有数位之和简称数位和。如 123 的各数位分别是1、2、3则其数位和为 123 结果为6。为实现该目标横线处应该填写的 代码是 。intN;cinN;inttnt0;while(N!0){____________;____________;}coutN的数位和为tnt;A.tntN/10N/10B.tntN%10N/10C.tntN/10N%10D.tnttntN%10N%10【答案】B【解析】求数位和的常用逻辑是每次取出个位累加到 tnt 中tntN%10然后去掉个位N/10。第12题小明想要快速知道任给一个正整数中有多少个奇数位数位值是奇数下面的C代码是其实现横线处应该填入的代码是 。intN;cinN;intodd_count0;// 记录奇数的个数intold_numberN;// 保存原数while(N!0){if(_________________)odd_count1;N(N-N%10)/10;}coutold_number中共有 odd_count 个奇数;A.N % 10 % 2 0B.N % 10 % 2 1C.N / 10 / 2 1D.N / 2 / 10 0【答案】B【解析】判断个位是否为奇数应提取个位数N%10并判断其除以 2 的余数是否为 1。因此填入 N % 10 % 2 1。第13题小明和弟弟在玩一个拼数字游戏游戏规则是二人各写一个两位正整数M和N然后将较大的数字放在较小的前面拼成一个4位数将这个4位数除以3的余数添加到4位数的后面得到一个5位数最后判断这个5位数能否被14整除。下面的C代码用于判断M和N是否符合全部要求如果符合则输出Y否则输出N。例如输入85和79可以拼出85792恰好是14的倍数则输出Y。关于下面代码描述正确的是 。intM,N,Q;cinMN;if(MN)// L1QM*100N;elseQN*100M;if((Q*10Q%3)%140)coutY;elsecoutN;A. 代码段不能完成正确判断B. L1行代码中条件应该改为M NC. L2行代码应该改为if ((Q*10Q/3) % 14 0)D. 代码段可以不使用变量Q而是在区分M和N大小后分别直接用它们来判断【答案】B【解析】不借助变量Q直接在比较 M 和 N 大小时将相应的 M * 100 N 或 N * 100 M 代入 Q 的位置判断即可。第14题执行下面C代码可以判断一个6位正整数N的高3位和低3位的差是否是314的倍数。例如628314就符合要求。横线处应该填入 。cinN;if(___________________________)coutN符合条件endl;A.((N % 1000) - (N / 1000)) / 314 0B.((N / 1000) - (N % 1000)) % 314 0C.((N % 1000) - (N / 1000)) / 314D.((N / 1000) - (N % 1000)) % 314【答案】B【解析】高 3 位是 N/1000低 3 位是 N%1000。两者的差为 (N/1000)-(N%1000)判断其是否为 314 的倍数使用模运算 % 314 0 即可。第15题N是一个正整数。如果N的所有奇数位的数位和等于所有偶数位的数位和则称它是一个“双螺旋数”。例如12375的所有奇数位的数位和是9同时它的所有偶数位的数位和也是9则12375就是一个双螺旋数。下面的C代码用于判断输入的N是否为双螺旋数。空白处应该填入的代码是 。inti,N,N10,N20,N0;cinN;N0N;while(N){_________________________ _________________________}if(N1N2)coutN0是双螺旋数endl;A.N1N%10,N/10;N2N%10,N/10;B.N1N/10,N/10;N2N/10,N/10;C.N1N%10,N%10;N2N%10,N%10;D.N1N/10,N%10;N2N/10,N%10;【答案】A【解析】要在一次循环中交替处理奇数位和偶数位可取两次个位第一次将个位加给 N1 并 N 除以10紧接着将新的个位加给 N2 并 N 除以 10。对应的操作为 N1 N % 10; N / 10; N2 N % 10; N / 10;。判断题第1题小明的妈妈最近刚刚给他买了一块电话手表除了可以看时间小明也可以用它和妈妈打电话、收发信息那么可以推测这块手表中装有一款特定操作系统。A. 正确B. 错误【答案】A【解析】现代智能电话手表包含硬件调度及通讯功能需要专属的嵌入式操作系统。第2题C表达式4 % 2和2 * 2 % 2的结果相同。A. 正确B. 错误【答案】A【解析】4 % 2 02 * 2 % 2 也是 4 % 2 0。两者结果完全相同。第3题下面C代码段成功执行后将输出0。for(i1;i10;i)if(i%30)break;couti;A. 正确B. 错误【答案】B【解析】当 i 3 时触发 break 跳出循环循环外部的 cout i 会输出 3。第4题下面能够正常执行的C代码段用于求1到N之和N为正整数。因为i N 1所以是1到N且包含N之和。tnt0;cout请输入正整数;cinN;total0;for(i1;iN1;i);totali;couttotal;A. 正确B. 错误【答案】B【解析】for循环末尾有一个分号导致它变成了一个空循环。随后执行 total i; 时只是将最后退出循环时的 i 加上无法求 1~N 的和。第5题执行下面的C代码段其语句cout (N)将被执行0次或无数次即死循环。cinN;while(N)cout(N);A. 正确B. 错误【答案】A【解析】如果在 while(N) 循环内部不对变量 N 进行任何修改当初始 N 为 0 时执行 0 次非 0 时陷入死循环。第6题下面的C代码段的变量都是整型它能用于判断输入的正整数是否为对称数。所谓对称数是指从左到右和从右到左读该数其值相同。例如121和414都是对称数而123不是对称数。 cout请输入正整数:;cinn;old_numbern;new_number0;while(n!0){new_numbernew_number*10n%10;n/10;}if(old_numbernew_number)cout对称数;elsecout非对称数;A. 正确B. 错误【答案】A【解析】该代码求出了 n 的逆序数 new_number与 old_number 对比若相等则 n 是对称数。第7题执行下面的C代码段如果变量都为整型变量输入为大于0的整数则输出数值一定为-N的值。cinN;total0;for(i-N;iN;i2)totali;couttotal;A. 正确B. 错误【答案】A【解析】变量 i 的初始值是 -N每次步长为 2并且循环结束的条件是 i N。这意味着数列的最后一项必定是 N-2因为如果再加上2就会变成N不满足 N 的条件。所以这个循环产生的 i 的序列是-N, -N2, -N4, …, N-4, N-2第8题执行C语句printf(%d\n, 3.14)将报错。A. 正确B. 错误【答案】B【解析】3.14是 double 类型的数据使用 %d 会输出无意义的整数值可能是0或其他值但不会编译报错或程序崩溃。第9题执行下面的C代码后将输出2500。intcnt0;for(inti1;i100;i)cnti;coutcnt;A. 正确B. 错误【答案】B【解析】循环体内 i 加上 for 头部的 i 导致每次增加2即求奇数项 135…99 的和 2500。第10题小明在测试C的printf的功能时执行了printf(%-5d\n, 314)则代码输出的结果是-5314。A. 正确B. 错误【答案】B【解析】%-5d 表示左对齐占据至少 5 个字符宽度。输出结果应为 314 后跟两个空格并不是 -5314。编程题题解洛谷 B4495 [GESP202603 一级] 交朋友题解洛谷 B4496 [GESP202603 一级] 数字替换