视频讲解:GESP2025年12月一级C++真题讲解
一、单选题
第1题

解析:
答案B,"飞行控制系统执行判断"就是处理器
第2题

解析:
答案A,BCD都不会导致编译错误
第3题

解析:
答案A,for是关键字
第4题

解析:
答案C,逗号表达式,每个语句都执行,输出最后一个语句
第5题

解析:
答案B,
2+3*4%5
=2+12%5
=2+2
=4
第6题

解析:
答案A,
b=a=4;
=符号,从右往左执行
先执行a=4,返回4
b=返回结果4
所以a=4 b=4
第7题

解析:
答案C,
cpp
printf("%%(N+M)=%d" , N+M , int(N+M));
%%表示输出'%'
%d占位符只能接收 N+M
第8题

解析:
答案A,
cpp
周期为4:1232 1232 1232....
数字:1 2 3 2
位数:1 2 3 4
最后一位是2,其他与位数对应
第9题

解析:
答案D,i循环100次,i为100才跳出循环
第10题

解析:
答案B,
i原本循环为:1 3 5 7 9 ,11退出循环
改为i=0,循环为:0 2 4 6 8 ,10退出循环
第11题

解析:
答案C,
cpp
i循环为:10 20 30 40 50 60 70 80 90 ,100退出循环
if(i%10==0)表示被10整除,跳过本次循环
if(i>=100) 满足,输出"100 END"
第12题

解析:
答案A,实现大减小
N>M时,N-M
否则,M>N,即M-N
第13题

解析:
答案D,
cpp
N%10取出当前个位
N%10%3==0判断当前个位是否能被3整除
第14题

解析:
答案C,(N%i==0)表达 N的因数,(i%2)表达奇数
第15题

解析:
答案C,
cpp
a = (tmp = i)/1000; //取出千位
______________; //需将tmp的千位去除
bc = tmp/10; //去除个位,且千位也去除了
d = tmp - bc*10// 获取个位
二、判断题
第1题

解析:
答案×,操作系统不可以翻译"源程序",编译器才可以,例如DevC++
第2题

解析:
答案×,10*4%6=4 10*2%3=2
第3题

解析:
答案×,i循环为0 1 2 3 4 5 6 7 8 9,10退出。
i为1时,(i%3==0)不满足,执行else的break
所以i为1时 退出循环
第4题

解析:
答案×,
cpp
(i=0;i>-10;i--)循环为:0 -1 -2 -3 -4 -5 -6 -7 -8 -9,-10退出
if(i<0) i=-i; //将负数改为正数,导致乱序
第5题

解析:
答案×,i循环为:0 1 2 3 4 5 6 7 ...99 ,100退出
总共循环100次
第6题

解析:
答案×,n在数位拆分时,变为0,无法正确判断
第7题

解析:
答案√×,i循环为:-100 -99 -98 ... 0 1 2 3 4 .. 99,100退出循环
-99 和 99抵消,-98 和 98抵消,但是-100没有抵消
第8题

解析:
答案×,默认保留5位小数
第9题

解析:
答案×,不会报错,三目运算符,会将x强制转换位bool,true返回1227 ,false返回12.27
第10题

解析:
答案×,keyword不是关键字
三、编程题
第1题 [GESP202512 一级] 小杨的爱心快递
题目描述
小杨是"爱心社区"的小志愿者,每周他都会帮助邻居们寄送捐赠给山区小学的文具和书籍。快递公司为了支持公益行动,制定了特殊的运费规则,鼓励大家合理包装:
假设快递的体积为 V,重量为 G。
- 按体积计算:运费按体积计算,公式是 0.5×V 元。
- 按重量计算:为了鼓励减轻包裹重量,规则是:当重量小于 300 克,即 G<300 时,运费为 M元;当重量达到或超过 300 克,即 G≥300 时,运费为 N 元。
快递公司的叔叔说:"我们应该选择最公平合理的计费方式。"
所以,最终的运费会取按体积计算和按重量计算这两种方式中价格较低的那一个,这样对寄件人最公道。
输入格式
四行,每行一个一位小数的浮点数,分别代表,快递的体积 V,快递的重量 G,第一档重量运费 M,第二档重量运费 N。
输出格式
一行一个一位小数,代表实际快递运费。
输入输出样例
输入 #1
100.4
300.2
60.6
70.5
输出 #1
50.2
输入 #2
99.8
200.9
60.2
70.1
输出 #2
49.9
说明/提示
样例解释
-
对于样例 1:快递体积 V 为 100.4,重量 G 为 300.2,第一档重量运费 M 为 60.6,第二档重量运费 N 为 70.5。
- 若按体积收费,费用为 0.5×100.4=50.2;
- 若按重量收费,由于重量 G=300.2 超过 300,费用为 70.5。
输出价格较低的 50.2。
-
对于样例 2:快递体积 V 为 99.8,重量 G 为 200.9,第一档重量运费 M 为 60.2,第二档重量运费 N 为 70.1。
- 若按体积收费,费用为 0.5×99.8=49.9;
- 若按重量收费,由于重量 G=200.9 小于 300,费用为 60.2。
输出价格较低的 49.9。
数据范围
对于所有测试点,保证给出的浮点数均为正数,且不超过 1000。
答案
cpp
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
//1)确定 V体积,G重量,运费M,运费N
double v,g,m,n;
cin>>v>>g>>m>>n;
//2)计算体积价格:p1=V*0.5
double p1=v*0.5;
//3)计算重量价格 p2= G<300 用M, 否则用N
double p2;
if(g<300) p2=m;
else p2=n;
//4)比较价格输出
if(p1<p2) cout<<fixed<<setprecision(1)<<p1;
else cout<<fixed<<setprecision(1)<<p2;
}
第2题 [GESP202512 一级] 手机电量显示
题目描述
小杨的手机就像一个聪明的小助手,当电量变化时,它会用不同的方式来提醒我们,假设当前的电量百分比为 P:
- 当电量非常低(不超过 10,即 P≤10),它会显示一个大写字母 R,就像在说:"快给我充电吧!(Red 警告色)"
- 当电量有点低(超过 10 但不超过 20,即 10<P≤20),它会显示一个大写字母 L,意思是"电量有点 Low 啦!"
- 当电量比较充足(超过 20,即 P>20),它就会直接显示具体的数字,比如直接显示 50,表示还有 50 的电量。
输入格式
第一行一个正整数 T,代表数据组数。
对于每组数据,一行包含一个正整数 P,代表手机电量百分比。
输出格式
对于每组数据,输出一行,代表当前手机显示的电量信息。
输入输出样例
输入 #1
5
10
1
20
99
19
输出 #1
R
R
L
99
L
说明/提示
样例解释
输入样例 1 共有五组数据:
- 第一组数据手机电量 P=10,满足 P≤10,电量非常低,显示 R。
- 第二组数据手机电量 P=1,满足 P≤10,电量非常低,显示 R。
- 第三组数据手机电量 P=20,满足 10<P≤20,电量有点低,显示 L。
- 第四组数据手机电量 P=99,满足 P>20,电量比较充足,直接显示具体的数字 99。
- 第五组数据手机电量 P=19,满足 10<P≤20,电量有点低,显示 L。
数据范围
对于所有测试点,保证 1≤T≤20,1≤P≤100。
答案
cpp
#include<iostream>
using namespace std;
int main(){
//cin cout优化
ios::sync_with_stdio(0);
cin.tie(0);
//1)确定数量t
int t;
cin>>t;
//2)循环填充t组数据
for(int i=1;i<=t;i++){
int p;
cin>>p;
//3)判断电量
//3.1) p<=10 R
if(p<=10) cout<<"R"<<"\n";
//3.2) 10< p<=20 L
else if(p<=20) cout<<"L"<<"\n";
//3.3) 否则 输出p
else cout<<p<<"\n";
}
}