CCF-GESP 等级考试 2026年3月认证C++一级真题解析
2026年3月真题一、单选题每题2分共30分正确答案B考察知识点计算机相关知识解析输入设备是从外界获取信息交付计算机进行处理重力传感器检测重心遥控器接受指令摄像头拍摄其他机器人都是从外界获取信息交付计算机都属于输入设备。B选项 预装的 AI 算法程序是软件并非硬件输入设备。答案为B。正确答案A考察知识点计算机相关知识解析修改文件的名字通过 “重命名”操作。答案为A。正确答案D考察知识点标识符的命名规则解析标识符变量的命名规则只能包含字母、数字和下划线不能以数字开头不能和关键字重名。此外C标识符区分大小写PI、pi、Pi是三个不同的标识符。变量必须先定义后使用A、B使用前pi和Pi之前没定义错误。CPI不违背标识符的命名规则可用于给变量、常量命名C错误。只有D正确答案为D。正确答案D考察知识点基本运算符解析乘(*)取余(%)优先级i相同从左往右计算。3*3%29%21。答案为D。正确答案A考察知识点基本运算符解析a、b的初始值为4。a,b3,4是三个独立的表达式表达式1a表达式2b3表达式34。从左往右执行将b值更改成3。a值为4b值为3。计算输出结果为A。正确答案A考察知识点基本数据类型解析一般来说往变量中输入数据需要数据类型匹配。但如果数据类型不匹配也不会报错只是实际存储内容和预期会有不同。答案为A。正确答案B考察知识点控制语句结构-选择解析官方给的答案是B。但分析下来本题没有正确答案。考虑N为2147483647M为-1输出-2147483648排除A、B选项。 当N和M是相等的整数输出为0排除C选项。 当输入的第一个数为带小数点的数会发现第二个数根本输入不进去此时M第一个数的整数部分N为0输出第一个数的整数部分。排除D选项。因此本题没有正确答案。正确答案D考察知识点控制语句结构-循环解析初始值tnt 1i 0循环执行过程i0tnt * 0 → tnt 1 * 0 0i1tnt * 1 → tnt 0 * 1 0i2tnt * 2 → tnt 0 * 2 0i3tnt * 3 → tnt 0 * 3 0i4tnt * 4 → tnt 0 * 4 0循环结束后i自增为5不满足i 5的条件退出循环最终printf输出tnt0和i5格式为%2d%2d即 0 5因此输出为 0 5。答案为D。正确答案D考察知识点控制语句结构-循环解析序列-1 2 3 - 4 5 6 - 7 8 9 - 10…符号规律第 1、4、7、10… 项为负其余为正。即项数 i 满足 i % 3 1 时为负否则为正。A错误。i N 1 是正确写法改为 i N 会少算第 N 项。B错误。改为 i % 3 0 会让第 3、6、9… 项取负与原序列规律不符。C错误。i % 3 等价于 i % 3 ! 0会让第 3、6、9… 项取正其余取负效果不同。D正确。当前代码完全符合题目序列规律和计算目标。答案为D。正确答案B考察知识点控制语句结构-循环、continue关键字解析循环范围i从 1 遍历到 9判断逻辑若i为偶数i%20执行continue跳过输出若i为奇数执行else分支输出i “#”遍历结果输出的i为 1、3、5、7、9对应字符串为1#3#5#7#9#循环结束i自增至 10执行cout i “END”输出10END最终输出1#3#5#7#9#10END。A错误。与上述执行结果不同B正确。删除else后偶数执行continue跳过后续代码不输出奇数执行cout输出和原有逻辑相同。C错误。将cout移入L1continue行下偶数会执行cout输出与原代码 “偶数不输出” 的效果矛盾D错误。新增if(i10)但循环结束后i的值为10条件不成立没有输出。答案为B。正确答案B考察知识点流程控制语句-循环、数位分离解析数位分离是编程中常见的基础操作核心思路是通过取余%获取当前数的最后一位通过整除/去掉最后一位循环执行直到数变为 0。在每轮循环中将获取的最后一位累加起来。答案为B。正确答案B考察知识点流程控制语句-循环、数位分离解析数位分离是编程中常见的基础操作核心思路是通过取余%获取当前数的最后一位通过整除/去掉最后一位循环执行直到数变为 0。在每轮循环中对获取的最后一位进行判断若为奇数计数器odd_count进行自增1操作。第11行代码N(N-N%10)/10 等价与 N/10。答案为B。正确答案D考察知识点基本运算符、数位分离解析拼接四位数若 M N则四位数 Q M100 N如 M85, N79 → Q8579若 M ≤ N则四位数 Q N100 M如 M79, N85 → Q8579。代码 L1 行 if(M N) 逻辑正确。生成五位数五位数 Q * 10 (Q % 3)如 Q85798579%32 → 五位数 857910285792。代码 L2 行 (Q10Q%3) % 14 0 完全符合 “判断五位数能否被 14 整除” 的要求。A、B、C都错误。可以不使用Q在区分大小写之后分别用相应的公式代替现有代码中的Q既可D正确答案为D。正确答案B考察知识点基本运算符、数位分离解析N作为一个6位数N/1000可以得到其高3位N%1000可以得到其低3位。接下来可用(N/1000-N%1000)%3140描述题目的要求一个6位正整数 N 的高3位和低3位的差是否是314的倍数。答案为B。正确答案A考察知识点流程控制语句-循环、数位分离解析N1和N2分别储存奇数位的数位和偶数位的数位和因此一次循环要进行两次数位分离分别存入N1和N2。答案为A。二、判断题每题2分共20分正确答案正确考察知识点计算机基础知识解析电话手表要运行第三方应用必须搭载操作系统比如常见的儿童手表系统或基于 Android 定制的穿戴设备系统否则只能执行预设功能无法安装新应用。 表述正确。正确答案正确考察知识点基本运算符解析4%2结果为02*2%2先算乘后算取余结果也为0。表述正确。正确答案错误考察知识点流程控制语句-循环、break解析for循环循环变量i初始化为1当i10时执行循环体i每次循环自增1。循环体如果i%30满足执行break。则循环执行到i3时触发break提前终止循环循环结束时i的值为3输出3。表述错误。正确答案错误考察知识点流程控制语句-循环解析代码第 5 行末尾多了一个分号;导致for循环的循环体为空total i;只在循环结束后执行一次无法实现求和。表述错误。正确答案正确考察知识点流程控制语句-循环解析若输入0则while循环的循环条件 为假0为假一次循环不执行。若输入非0则while循环的循环条件 为真非0为假循环体只输出N而不改变N的值则循环条件永远为真执行无数次。表述正确。正确答案正确考察知识点流程控制语句-循环、数位分离解析利用数位分离实现数字反转进行回文数判断。数位分离是编程中常见的基础操作核心思路是通过取余%获取当前数的最后一位通过整除/去掉最后一位循环执行直到数变为 0。第7行代码反转数拼接的关键公式反转数 反转数 * 10 分离出的个位数字表述正确。正确答案正确考察知识点控制语句结构-循环解析total中累加上的数依次为-N-(N-2)-(N-4)…(N-4)(N-2)。可见只有-N没有被抵消掉最后total的值为-N。表述正确。正确答案错误考察知识点标准化输入输出基本数据类型解析%d int类型占位符给后边的int类型数据占位。当之后数据不是int类型也不会报错输出结果为数据可转成的整数数据3.14可装成的整数为3输出为3。表述错误。正确答案正确考察知识点控制语句结构-循环解析循环中 i 从 1 开始每次循环执行 cnt i这会让 i 在一次循环中自增两次先把当前 i 加到 cnt然后 i 自增 1循环末尾 i 再让 i 自增 1。所以实际参与累加的 i 取值为1, 3, 5, …, 99所有 1~99 的奇数。利用等差数列求和公式可求出结果为2500表述正确。正确答案错误考察知识点标准化输入输出解析%-5dint类型占位符要求之后数据按照占5位左对齐进行输出不足5位补空格输出结果为314 表述错误。三、编程题每题25分共50分本题考察分支结构。版本1只使用分支语句代码如下#includebits/stdc.husingnamespacestd;intmain(){inth1,h2,h3,h4,cha,minn,ans;//minn存最小差值ans存结果cinh1h2h3h4;//计算h1和h2的身高差存储到cha中if(h1h2)chah2-h1;elsechah1-h2;//假定h2是Alice的朋友minncha;ansh2;//计算h1和h3的身高差存储到cha中if(h1h3)chah3-h1;elsechah1-h3;if(chaminn||chaminnh3ans){//差值更小或者差值一样但更矮minncha;ansh3;}//计算h1和h4的身高差存储到cha中if(h1h4)chah4-h1;elsechah1-h4;if(chaminn||chaminnh4ans){minncha;ansh4;}coutans;return0;}版本2使用for循环代码如下#includebits/stdc.husingnamespacestd;intmain(){inth1,h,minn200,ans199;cinh1;for(inti1;i3;i){//循环3次输入3个人的身高cinh;//计算和h1的身高差intchah1-h;if(cha0)cha-cha;//cha abs(h1-h); //也可用abs函数求解绝对值//如果身高差更小或者身高差一样但更矮更新if(chaminn||chaminnhans){minncha;ansh;}}coutans;return0;}本题考察 循环结构。版本1利用数位分离位权概念重新组合数。数位分离是编程中常见的基础操作核心思路是通过取余%获取当前数的最后一位通过整除/去掉最后一位循环执行直到数变为 0。代码如下#includebits/stdc.husingnamespacestd;intmain(){intn,s0,w1;//w表示位权cinn;while(n){inttmpn%10;if(tmp4)tmp8;//取出数位上的数若为4更换成8stmp*w;//位权*数位累加w*10;//更新位权n/10;}couts;return0;}版本2不把输入看作是一个整数而是一个一个字符则本题为不限字符输入用一个比较少用的知识点将输入作为while循环的条件。代码如下#includebits/stdc.husingnamespacestd;intmain(){charch;while(cinch){//输入次数未知可用if(ch4)cout8;elsecoutch;}return0;}版本3如果已经学过数组和字符串下面提供两个分别用到数组和字符串的代码。版本3.1使用数组存储数位分离出的每一位上的数如果是4更改为8。先存储的是先分离出的个位最后存储的是最后分离出的高位。因此输出要从后往前输出。需要注意的是如果输入的是0数组里一个数也没有会产生错误因此0要提前特殊处理。代码如下#includebits/stdc.husingnamespacestd;intmain(){intn,arr[10],cnt0;cinn;if(n0){coutn;return0;}while(n){inttmpn%10;if(tmp4)tmp8;arr[cnt]tmp;n/10;}for(inticnt-1;i0;i--)coutarr[i];return0;}版本3.2使用字符串将整数直接当作一个字符串处理这里用字符数组或者string来存储字符串都可。代码如下#includebits/stdc.husingnamespacestd;intmain(){string n;cinn;for(inti0;in.size();i){if(n[i]4)n[i]8;}coutn;return0;}写在最后本次一级的题目可谓是历史最难的一级的题目甚至比同期的二级题目还要难如果你才学完循环那没做出来真的不是你的错如果你已经学完了数组和字符串但考场没往这方面想那你需要注意在日常的训练里对于同一道题多尝试从不同角度去思考解题思路注意知识点的灵活应用融会贯通。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425747.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!