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

解析:
答案C,传感器是向计算机发送数据,所以是输入设备
第2题

解析:
答案,内存条代表内部存储器,即RAM
第3题

解析:
答案C,a*=b 带入得 3*=3.5,结果为10.5,因a为int,所以最终结果为10
第4题

解析:
答案A,n%1000去除百位以上的数,n/100去除百位以下的数
第5题

解析:
答案D,
执行第一行,b为28
执行第二行,a、b不变
执行第三行,a变为28
最终输出28 28
第6题

解析:
答案D,起始星期是星期六,需"n+6",超过7的部分去掉,需%7,即" (n+6)%7 "
第7题

解析:
答案C,i循环为1 2 3 4 5 6 7 8 9,其中i为2时break,所以只累加了1、2,结果为3
第8题

解析:
答案C,
最后输出i*j,只需判断判断i,j最后的值,即从i=11开始,
i为11时j循环1 2 3 4 5 6 7 8 9 10,j为1时,i*j%2==1 条件满足,所以循环退出时j为1
i循环到12才退出循环,最终i*j=1*12=12
第9题

解析:
答案B,i循环为-99 ,-97,...,99,总共循环100次
第10题

解析:
答案A,i循环为1 2 3 4 5 6 7 9
i为1时,if(i%3!=0)满足,输出" A# "
i为2时,if(i%3!=0)满足,输出" A# "
i为3时,if(i%3!=0)不满足,退出循环
i为3时退出循环,if(i==10)不满足
最终结果" A#A# "
第11题

解析:
答案D,i循环为0 1 2,
i为0时,j不循环
i为1时,j循环0,即输出" 1#0- "
i为2时,j循环0 1, 即输出" 2#0- " 和 " 2#1- "
最后输出"END"
最后输出" 1#0-2#0-2#1-END "
第12题

解析:
答案D,!(i%3)不能表达"不能被3整除"
(i%3)表示"除以3有余数"为true,即"不能被3整除"
!(i%3)取反则表达"能被3整除"
第13题

解析:
答案D,n>0表示当前还有位数,n/=10表示去除当前位数
第14题

解析:
答案D,会导致无限循环
第15题

解析:
答案A,A选项移动会导致每行只输出1个数字
二、判断题
第1题

解析:
答案√,手机、电脑、手表都带有通信功能
第2题

解析:
答案√,
假设n为9,n/10结果:0,即"n/10舍去个位,若n<10,值为0" 正确
假设n为123,n/10结果:12,即"n>10,舍去个位后的数" 正确
第3题

解析:
答案×,2、3行不改变a、b的值,cout输出括号内最后一个值,即b的值20
第4题

解析:
答案√,两个数,最大、最小值相同,则证明两个数相等
第5题

解析:
答案×,a=45.6会获取整数45对应ASCII字符 '-'
第6题

解析:
答案×,if(59.99<60)满足,应输出" 不及格 "
第7题

解析:
答案×,i为10时,跳出循环,输出"END",continue不影响
第8题

解析:
答案×,i循环为0 1 2 3 4,,sum+=i为10
第9题

解析:
答案√×,
(int i=5;i>1;i--) i循环为 5 4 3 2 ,结果为5+4+3+2
(int i=1;i<5;i++) i循环为1 2 3 4,结果为1+2+3+4
第10题

解析:
答案√,
n为奇数时,(j==N/2)可判断正中间列
n为偶数时,(j==N/2)可判断左 正中间列 ,(j==(N-1)/2)可判断右正中间列
三、编程题
第1题 [GESP202506 二级] 数三角形
题目描述
直角三角形有两条直角边与一条斜边,设两条直角边的长度分别为 a,b,则直角三角形的面积为 。
请你计算当直角边长 a,b 均取不超过 n 的正整数时,有多少个不同的面积为整数的直角三角形。直角边长分别为 a,b 和 a′,b′ 的两个直角三角形相同,当且仅当 a=a′, b=b′ 或者 a=b′, b=a′。
输入格式
一行,一个整数 n,表示直角边长的最大值。
输出格式
输出一行,一个整数,表示不同的直角三角形数量。
输入输出样例
输入 #1
3
输出 #1
3
输入 #2
5
输出 #2
9
说明/提示
对于所有测试点,保证 1≤n≤1000。
答案
cpp
#include<iostream>
using namespace std;
int main(){
//1)确定最长n
int n;
cin>>n;
//2)枚举所有情况
int ans=0;
//2.1)枚举a的所有情况
for(int a=1;a<=n;a++){
//2.2)枚举b的所有情况
for(int b=a;b<=n;b++){
//3)判断面积为整数
if( a*b/2.0 == a*b/2 ){
ans++;
}
}
}
//4)输出结果
cout<<ans;
}
第2题 [GESP202506 二级] 幂和数
题目描述
对于正整数 n,如果 n 可以表为两个 2 的次幂之和,即 n=+
(x,y 均为非负整数),那么称 n为幂和数。
给定正整数 l,r,请你求出满足 l≤n≤r 的整数 n 中有多少个幂和数。
输入格式
一行,两个正整数 l,r,含义如上。
输出格式
输出一行,一个整数,表示 l,r 之间幂和数的数量。
输入输出样例
输入 #1
2 8
输出 #1
6
输入 #2
10 100
输出 #2
20
说明/提示
对于所有测试点,保证 1 ≤ l ≤ r ≤ 。
答案
cpp
#include<iostream>
#include<math.h>
using namespace std;
int main(){
//1)确定范围l r
int l,r;
cin>>l>>r;
//2)循环范围
int ans=0;
for(int n=l;n<=r;n++){
//3)判断n是否为"幂和数"
//3.1)假设不可以
bool flag=false;
//3.2)枚举所有x y情况
for(int x=0;pow(2,x)-1<=n&&!flag;x++){
for(int y=0;pow(2,y)+pow(2,x)<=n&&!flag;y++){
if(pow(2,y)+pow(2,x)==n){
flag=true;
break;
}
}
}
//3.3)根据flag判断
if(flag) ans++;
}
//4)输出结果
cout<<ans;
}