GESP认证C++编程考情分析及题解 | 202606 一级
考情分析
一、单项选择题(共15题)
| 题号 | 考察知识点 |
|---|---|
| 1 | 计算机基础— 输入设备辨析:湿度传感器采集数据送入系统,属于输入设备 |
| 2 | 计算机操作— IDE编辑区功能:支持查找替换、多步撤销、缩进调整;注释可混用中英文 |
| 3 | C++语法— 类型转换:int与double混合运算时自动提升为浮点型,3+3.5=6.5 |
| 4 | 运算符优先级— 一元负号-优先级高于*和%;*与%同优先级左结合;-2*(2%4)=-4与原式0不同 |
| 5 | 变量赋值— 值传递:b=a后修改a不影响b,输出4 3 |
| 6 | 输入输出—cin读取int时遇非数字字符停止,2026-6-27读取到2026 |
| 7 | 条件分支—else包含N==M情况,输入3 3输出B 0 |
| 8 | 运算符辨析—+=、=+区别:cnt=+1等价于cnt=(+1)即赋值为1 |
| 9 | 循环逻辑— 观察输出序列找规律:num到11后/=2得5,其余+=1 |
| 10 | 循环控制—continue跳过其后所有语句,cout << i << "#"永不执行 |
| 11 | 循环与条件— 从i=2开始试探因子,15输出0#1# |
| 12 | 循环执行— 原代码tot累加10次得10;修改条件后循环次数变少 |
| 13 | 数位提取— 十位数字:(n/10)%10,先去掉个位再取余 |
| 14 | 取模运算— 秒针循环位置:(start+n)%60;回到12点方向即pos==0 |
| 15 | 质数判定—i<=N会导致N%N==0恒成立,所有数被判为非质数 |
二、判断题(共10题)
| 题号 | 考察知识点 | 答案 |
|---|---|---|
| 1 | AI眼镜内置操作系统并支持无线连接 | A |
| 2 | (n/10)%10与(n%100)/10都取十位数字 | A |
| 3 | i从0开始每次加3,i%3恒为0,break永不执行,输出21 | B |
| 4 | rst初始化为0,累乘结果恒为0 | B |
| 5 | N%10取个位,N/=10去个位,可逐位输出 | A |
| 6 | printf("\n")与printf("%c",'\n')都输出换行符 | A |
| 7 | %操作数需为整型,2.5%2编译报错 | B |
| 8 | total未初始化,值为随机数,结果不可预测 | B |
| 9 | true转整型为1,1+2=3非4 | B |
| 10 | 删除continue后x==2时也会输出,输出变为1,2,3,4 | B |
三、编程题(共2题)
| 题号 | 题目名称 | 难度 | 考察算法 | 一句话思路总结 |
|---|---|---|---|---|
| A | 去旅行 | ⭐ | 直接模拟 | 读入四个价格,计算三种方案总价(直飞a aa、高铁+飞机b + c b+cb+c、高铁+高铁b + d b+db+d),用min({a, b+c, b+d})取最小值输出,时间复杂度O ( 1 ) O(1)O(1),空间复杂度O ( 1 ) O(1)O(1) |
| B | 交税 | ⭐ | 直接模拟 / 分段函数 | 循环 12 个月,每月若报酬x > 800 x > 800x>800则累加( x − 800 ) × 0.2 (x-800) \times 0.2(x−800)×0.2,最后printf("%.2lf", ans)保留两位小数输出,时间复杂度O ( 1 ) O(1)O(1),空间复杂度O ( 1 ) O(1)O(1) |
单选题
第1题
学校组织到未来农场参观,小明听讲解员介绍,在智能温室中,湿度传感器可以连续检测土壤的湿度变化,并将检测到的湿度数据实时发送给中央控制器。中央控制器根据这些数据判断是否开启灌溉系统。请问,这里的湿度传感器所发挥的作用,类似于计算机系统中的哪一类组件?( )
A. 处理器
B. 存储器
C. 输入设备
D. 输出设备
【答案】:C
【解析】
湿度传感器的作用是采集外界环境数据(土壤湿度)并将数据传送给中央控制器,这与计算机中"输入设备"的功能完全一致——输入设备负责将外部信息转换为计算机可识别的数据送入系统。处理器负责运算和控制,存储器负责保存数据,输出设备负责将计算机处理结果向外呈现,均不符合传感器“采集并送入数据“的特征。故选C。
第2题
在使用某集成开发环境(比如 Dev-C++)来编辑源代码文件时,程序员经常需要在编辑区中对代码进行各种修改。以下关于在编辑区中执行的操作描述不正确的( )。
A. 可以将变量名count统一修改为number
B. 可以连续撤销最近2 22次输入的内容
C. 可以调整代码行的缩进(如按 Tab 键)
D. 在注释文本中间不能混用中英文
【答案】:D
【解析】
集成开发环境的编辑区支持查找替换功能,可以批量将变量名 count 改为number,A正确。编辑器支持多步撤销,可以连续撤销最近的多次操作,B正确。按Tab键可以调整缩进,C正确。注释文本只是被编译器忽略的文字,其中完全可以混用中文和英文,没有任何限制,D的说法不正确。故选D。
第3题
有关如下 C++ 代码的说法,正确的是( )。
floata=3+3.5;cout<<a;A. 代码执行将报错。如果将a = 3 + 3.5改为a = 3 + 3 + 1/2将能正常执行。
B. 代码执行将报错。如果将a = 3 + 3.5改为a = 3.0 + 3.5将能正常执行。
C. 代码能正常执行,将输出6。
D. 代码能正常执行,将输出6.5。
【答案】:D
【解析】
表达式式 3+3.5 中,3是int 类型,3.5是double 类型。C++在混合运算时会将整型自动提升为浮点型,因此3+3.5=6.5,赋值给 float 类型的 a 后值为6.5,输出6.5,代码不会报错。A选项和B选项都认为代码会报错,不正确;且A选项中的1/2是整数除法结果为0,并非等价写法。C选项输出值应为6.5而非6。故选D。
第4题
下列 C++ 表达式与- 2 * 2 % 4的值不同的是( )。
A.- (2 * 2) % 4
B.(- 2 * 2) % 4
C.- 2 * (2 % 4)
D.(2 * 2) % - 4
【答案】:C
【解析】
一元负号 - 的优先级高于 * 和 % ,且 * 和 % 同优先级从左到右结合。原式 -2 * 2 % 4 中一元负号先作用于2得到-2,然后 -2 * 2 = -4,最后 -4 % 4 = 0。A选项-(2*2)%4 = -(4)%4 = -4%4 = 0,相同。B选项(-2*2)%4 = -(4)%4 = 0,相同。C选项-2*(2%4) = -2*2 = -4,结果为-4,与原式0不同。D选项(2*2)%-4 = 4%-4 = 0,相同。故选C。
第5题
执行如下 C++ 代码片段,其输出是( )。
inta=3;intb=a;a=4;printf("%d %d",a,b);A.3 3
B.4 3
C.4 4
D.3 4
【答案】:B
【解析】
执行 int a = 3 后 a 为3,int b = a 将 a 的当前值3赋给b,此时b为3。随后a=4讲a修改为4,但b中保存的是之前拷贝的值3,不受影响。因此输出 4 3。故选B。
第6题
如下 C++ 代码执行时输入2026-6-27,下列说法正确的是( )。
intN;cin>>N;cout<<N;A. 输入失败,不允许输入减号,没有输出
B. 允许输入,输出1993
C. 允许输入并原样输出2026-6-27
D. 允许输入并输出2026
【答案】:D
【解析】
cin >> N 中N是int 类型,cin 在读取整数时会逐字符解析,遇到非数字字符(减号 - 不是负号开头位置)即停止读取。输入 2026-6-27 时,cin 读取到 2026 后遇到减号 - 停止,N的值为2026,缓冲区中剩余 -6-27 未被读取。因此输出2026。故选D。
第7题
如下 C++ 代码执行时,其说法错误的是( )。
intN,M;cin>>N>>M;if(N>M)cout<<"A "<<(N-M);elsecout<<"B "<<(M-N);A. 如果输入4 3,将输出A 1
B. 如果输入3 4,将输出B 1
C. 如果输入3 3,将输出A 0
D. 如果输入4 4,将输出B 0
【答案】:C
【解析】
代码逻辑为:当 N>M 时输出 A 和 N-M,否则(包括N == M的情况)输出 B 和 M-N。输入 4 3 时,4>3成立,输出 A 1,A正确。输入 3 4 时,3>4不成立,走else分支,输出 B 1,B正确。输入 3 3 时,3>3不成立,走else分支,输出 B 0 而非 A 0,C说法错误。输入 4 4 时,4>4不成立,走else 分支,输出 B 0,D正确。故选C。
第8题
阅读如下 C++ 代码,下列说法错误的是( )。
intcnt=0;for(inti=0;i<5;i++)cnt+=1;cout<<cnt;A. 将cnt += 1修改为cnt = cnt + 1,执行效果相同
B. 将cnt += 1修改为cnt = 1 + cnt,执行效果相同
C. 将cnt += 1修改为cnt =+ 1,执行效果相同
D. 将cnt += 1修改为cnt = + 1 + cnt,执行效果相同
【答案】:C
【解析】
cnt += 1等价于cnt= cnt +1,A正确。cnt = 1 + cnt 与cnt=cnt + 1结果相同,B正确。。cnt =+ 1实际上被编译器解析为cnt=(+1),即把cnt赋值为正整数1,而非在原值上加1,执行效果完全不同,C错误。cnt =+1+cnt 解析为cnt =(+1)+cnt ,即cnt=1+cnt ,效果相同,D正确。故选C。
第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。横线处应该先后依次填入的运算符是( )。
intnum=1;for(inti=0;i<35;i++){printf("%d ",num);if(num _______10)num _______2;elsenum _______1;}A.> /= +=
B.>= %= +=
C.> %= +=
D.> /= =+
【答案】:A
【解析】
观察输出序列:1到11递增,到11后回到5,再递增到11,如此循环。这说明num到11后执行了除以2的操作(11/2=5),其余时候每次加1。因此第一个空填>(大于10时触发除法),第二个空填 /=(除以2),第三个空填 += (加1)。A选项 > /= += 完全匹配。B选项用 %= 会让num对2取余,11%2=1,不符合输出。D选项 =+ 会被解析为 = + (赋正值),num会变为1而非加1。故选A。
第10题
如下 C++ 代码可以执行,其输出是( )。
inti;for(i=1;i<5;i++)if(i%2==0){continue;cout<<i<<"#";}cout<<i<<"END#";A.5END#
B.5#END
C.1#3#4#END
D.1#3#4 END#
【答案】:A
【解析】
循环中当 i % 2 == 0(即i为偶数)时执行 continue,跳过后面的 cout 语句直接进入下一次循环。continue 之后的 cout << i << “#” 永远不会执行。循环正常结束后 i 的值为5(i 从 1 到 4 循环,退出时 i 自增为5)。因此输出 5END#。故选A。
第11题
如下 C++ 代码执行时,下列说法正确的是( )。
intN,i;cin>>N;for(i=2;i<N;i++)if(N%i==0){cout<<"1#";break;}elsecout<<"0#";A. 如果输入2,将输出1#。
B. 如果输入15,将输出0#1#。
C. 如果输入1,将输出0#。
D. 如果输入3,将输出1#。
【答案】:B
【解析】
代码从 i=2 开始试探 N 是否能被 i 整除,若能整除则输出 1# 并跳出,否则输出 0# 继续循环。输入 2 时,循环条件 i<N 即 2<2 为假,循环不执行,无输出,A错误。输入15时,i=2时 15%2≠0 输出 0#,i=3 时 15%3 == 0 输出 1# 并 break,最终输出 0#1#,B正确。输入1时,2<1为假,循环不执行,无输出,C错误。输入3时,i=2时3%2≠0输出 0#,循环结束(i=3不满足i<3),输出 0# 而非 1#,D错误。故选B。
第12题
有关如下 C++ 代码,下列说法中错误的是( )。
inti,tot;i=0,tot=0;while(0<=i&&i<10){tot+=1;i+=1;}cout<<tot;A. 如果调整0 <= i && i < 10为1 <= i && i < 10,输出同样为45,因为加上0不影响结果。
B. 如果将i = 0和tot = 0合并为i = tot = 0,执行结果与修改前相同。
C. 将tot += 1与i += 1交换顺序,执行结果与修改前相同。
D. 将i = 0与tot = 0交换顺序,执行结果与修改前相同。
【答案】:A
【解析】
原代码中 i 从0到9共循环10次,tot 最终为10,并非45。A选项声称输出为45且修改条件后结果不变,这个说法本身就是错误的——实际输出为10。B选项i = tot = 0从右向左赋值,i和tot都被赋为0,与原代码效果相同,B正确。C选项交换tot +=1和i +=1的顺序不影响结果,因为两者之间无依赖关系,循环仍执行10次,tot为10,C正确。D选项交换i=0和tot=0的顺序,两个独立赋值交换不影响结果,D正确。故选A。
第13题
以下 C++ 代码可以找出千位、百位、十位和个位满足特定条件的四位数(例如各位数字的四次方和等于原 数,即“四叶玫瑰数”),横线处应该填入的是( )。
intcount=0;for(intn=1000;n<=9999;n++){inta=n/1000;intb=(n/100)%10;_________________________// L1intd=n%10;if(a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d==n){// 特定条件count++;}}A.int c = (n / 10) / 10;
B.int c = (n / 10) % 10;
C.int c = (n % 10) / 10;
D.int c = (n % 10) % 10;
【答案】:B
【解析】
代码中a取千位(n/1000),b取百位((n/100)%10)、d取个位(n%10),缺少的是十位c的取法。取十位数字的方法是先将n除以10去掉个位,再对10取余得到十位数字,即(n/10)%10。A选项(n/10)/10得到的是n/100,会包含百位和千位,不是单个数字。C选项(n%10)/10中n%10是个位数字(0-9),再除以10结果恒为0。D选项(n%10)%10等于n%10是个位数字而非十位。故选B。
第14题
下面的 C++ 代码用于计算经过n秒后的秒针位置(0 ∼ 59 0\sim 590∼59),两处横线处分别应填入的代码是( )。
intstart,n,pos;cout<<"当前秒数(0-59): ";cin>>start;cout<<"经过多少秒: ";cin>>n;pos=____________;// L1if(____________)// L2cout<<n<<"秒后回到12点方向"<<endl;elsecout<<n<<"秒后指向"<<pos<<"秒刻度"<<endl;A.(start + n) / 60和pos == 0
B.(start + n) % 60和pos == 0
C.(start + n) / 60和pos <= 0
D.(start + n) % 60 和pos = 0
【答案】:B
【解析】
秒针在0-59秒之间循环,经过n秒后的位置应该用取模运算(start +n) % 60来计算,排除A和C。当秒针回到12点方向时pos为0,判断条件应为pos == 0(相等比较)。D选项中pos = 0是赋值语句而非比较,会在条件中把 pos 赋为0且条件恒为真,逻辑错误。故选B。
第15题
如果正整数 N 只能被 1 和它本身整除,则它是一个质数(或素数)。下面的 C++ 代码用于判断正整数 N 是否为质数(素数)。若 N 是质数,输出 YES ,否则输出 NO 。横线处不应填入的代码是( )。
intN,i;cin>>N;if(N<=1){cout<<"NO";return0;}for(i=2;______;i++){if(N%i==0){cout<<"NO";return0;}}cout<<"YES";A.i < N
B.i <= N
C.i <= N / 2
D.i * i <= N
【答案】:B
【解析】
判断质数需要在2到N-1范围内试探是否有因子。A选项i<N是标准写法,正确。C选项 i<=N/2也是可行的,因为N的最小因子不超过N/2(除了N本身),正确。D选项 i * i <= N 利用了因子成对出现的性质,只需试到 √N 即可,是优化写法,正确。B选项 i <= N 会让循环执行到 i=N,此时N %N == 0必然成立,导致所有正整数都被判为非质数(包括真正的质数),因此B是不应填入的代码。故选B。
判断题
第1题
又到期末考试周,小明发现这次许多闭卷考试不仅禁止携带手机、平板电脑,还有最近比较时髦的各类 AI 眼镜(也有叫智能眼镜)也同样不允许带入考场。这些 AI 眼镜应该也是内置了操作系统并可能支持 Wi-Fi 或蓝牙连接。
A. 正确
B. 错误
【答案】:A
【解析】
AI眼镜(智能眼镜)是一种可穿戴计算设备,内部集成了处理器、存储器等硬件组件,运行嵌入式操作系统,并通常支持Wi-Fi或蓝牙等无线连接方式,可以独立进行计算和通信。因此将其视为带有操作系统和网络连接能力的设备是正确的,考场禁止携带也正是因为其具备信息获取和通信能力。
第2题
如果n为大于 的整数,则 C++ 表达式(n / 10) % 10与(n % 100) / 10的结果相同。
A. 正确
B. 错误
【答案】:A
【解析】
两个表达式都是取十位数字。(n/10)%10先去掉个位再取余得到十位。(n%100)/10先取后两位(十位和个位),再除以10去掉个位得到十位。对于任意正整数n,两种写法的结果都是n的十位数字,结果相同。
第3题
下面 C++ 代码执行后将输出19。
inti;for(i=0;i<20;i+=3)if(i%3!=0)break;cout<<i;A. 正确
B. 错误
【答案】:B
【解析】
i 从0开始,每次加3,因此的 i 值依次为0、3、6、9、12、15、18。每次循环中i%3的结果都是0,条件 i%3!=0 恒为假,break 永远不会执行。循环正常结束时i=21(i=18时满足条件,加3后i=21不满足i<20退出),输出21而非19。
第4题
在数学中,N ! N!N!称之为N NN的阶乘,其含义是1 11到N NN之积,包括N NN。如3 ! = 1 × 2 × 3 = 6 3!=1\times 2\times 3 = 63!=1×2×3=6。如下 C++ 代码能输出N ! N!N!的结果。
intN;cout<<"请输入正整数:";cin>>N;intrst=0;for(inti=1;i<N+1;i++)rst*=i;cout<<rst;A. 正确
B. 错误
【答案】:B
【解析】
阶乘是从1乘到n的累乘,初始值应为1。但代码中rst 初始化为0,rst *= i即rst = rst * i,0乘以任何数都是0,因此无论输入什么N,输出始终为0,无法正确计算阶乘。应将int rst=0改为int rst =1才能正确计算。
第5题
如下 C++ 代码能实现输出正整数N NN的各位数字。
intN;cin>>N;while(N>0){cout<<(N%10)<<endl;N=N/10;}A. 正确
B. 错误
【答案】:A
【解析】
代码通过N%10取个位数字,N/10去掉个位,循环执行可以逐位输出N的各个数字。虽然输出顺序是从低位到高位(先个位、再十位、再百位……),但题目表述为"输出正整数N的各位数字",并未限定必须按从高位到低位的顺序。因此该代码能够实现逐位输出N的各位数字,判断正确。若题目要求按原数顺序输出,则需要先将各位数字保存下来再逆序输出。
第6题
将如下 C++ 代码中的printf("\n")更换为printf("%c", '\n'),输出效果相同。
for(inti=0;i<100;i++){if(i%5==0)printf("\n");printf("%2d ",i);}A. 正确
B. 错误
【答案】:A
【解析】
printf(“\n”)直接输出换行符字符串。printf(“%c”, ‘\n’)通过格式符%c 输出字符’\n’(换行符)。两者都是向输出流写入一个换行字符,效果完全相同。'\n’是转义字符表示换行,与字符串“\n"中包含的换行符一致。
第7题
C++ 代码cout << (2.5 % 2)能够生成可执行代码,但执行时将报错,因为%只能适用于正整数。
A. 正确
B. 错误
【答案】:B
【解析】
取模运算符%的操作数必须是整型,2.5是浮点数(double 类型)因此2.5%2在编译阶段就会报错(“invalid operands of types ‘double’ and ‘int’ to binary 'operator%”),无法生成可执行代码。题目说"能够生成可执行代码"是错误的,实际上编译就不会通过。此外%适用于所有整型(包括负整数),并非只能用于正整数。
第8题
下面的 C++ 代码执行后将输出24。
inttotal;for(intn=1;n<=4;n++){total*=n;}cout<<total;A. 正确
B. 错误
【答案】:B
【解析】
代码中 total 声明后未初始化,其值是未定义的(在C++中局部变量未初始化时为随机值)。total *= n在未初始化的随机值基础上累乘,结果不可预测。即使假设 total 恰好为1,4的阶乘确实是24,但由于未初始化,结果并非确定的24。因此"将输出24"的说法不正确。
第9题
如果a是 C++ 的整型变量,值为4,则表达式(a % 2 == 0) + (a / 2)的值为4。
A. 正确
B. 错误
【答案】:B
【解析】
a 为4时,a% 2 == 0 即 4%2 == 0 为 true,在C++中 true 转换为整型值为1。a/2 即 4/2 为2。因此 (a % 2 == 0)+ (a / 2) = 1 + 2 = 3。编译验证结果为3,而非4。题目说值为4是错误的。
第10题
删除下面 C++ 代码中的continue后,其输出与原来相同。
intx=0;while(x<4){x++;if(x==2)continue;cout<<x<<",";}A. 正确
B. 错误
【答案】:B
【解析】
原始代码中,当 x == 2 时执行 continue 跳过 cout 语句,不输出2,输出为1,3,4。删除 continue 后,if (x == 2) 的条件判断为空语句(或条件成立后继续执行cout),x为2时也会输出,输出变为1,2,3,4。两者输出不同,因此判断为错误。
编程题
题解:洛谷 B4551 去旅行
题解:洛谷 B4552 交税