2025年6月真题
一、单选题(每题2分,共30分)
正确答案:C
考察知识点:计算机相关知识
解析:传感器是获取外界信息(如姿态、平衡相关数据 )并传递给机器人系统,这和计算机输入设备(用于向计算机输入数据和信息,比如键盘输入字符、鼠标输入操作指令 )功能类似;处理器是处理数据,存储器是存储数据,输出设备是输出数据,均不符合传感器功能,所以 C 正确。
正确答案:A
考察知识点:计算机的存储与网络
解析:计算机中用于临时存储数据和程序、可扩容以提升运行时内存容量的是随机存取存储器 RAM ;ROM 是只读存储器,内容一般固定,用于存储固件等;CACHE 是高速缓冲存储器,用于 CPU 和内存间加速数据交换,非用户扩容的常规内存;EPROM 是可擦除可编程只读存储器,也不是常规扩容的内存,所以选 A。
正确答案:C
考察知识点:基本数据类型、数据类型转换、基本运算符
解析:a*=b 等价于 a=a*b,a是int类型,b是float,两者进行运算时,全部提升为double类型,运算结果为double类型数值10.5,将其赋值给int类型变量a,复合赋值运算符组成的表达式的值为运算符左侧变量的值,因此输出a的值为10。所以选 C。
正确答案:A
考察知识点:基本运算符
解析:根据题目描述,空白处应该填写求百位上的数的代码。考察利用除和取余进行数位分离。B选项得到万位和千位上数组成的数,比如N为12345时得到12;C选项得到十万位上的数;D选项得到0;只有A选项可以得到正确答案。正确答案为A。
正确答案:D
考察知识点:基本运算
解析:(6, 28)是由逗号运算符组成的表达式,表达式的值是最后一个逗号后边式子的值,因此定义b的同时给其赋值为28,第2行不改变a、b的值,第3行将b的值赋值给a,此时a、b的值都为28。答案为D。
正确答案:D
考察知识点:基本运算
解析:求星期六后N天是星期几?星期六,1天、8天等后是星期日(0表示),2天、9天后是星期一,...;则该求解可用(N+6)%7,做取余运算求解,余数为1~6对应星期一到星期六,余数为0对应星期天。答案为D。实际上,周期性问题都可以做类似解答。
正确答案:C
考察知识点:控制语句结构-循环、break、continue关键字
解析:i为1,执行第3行,sum值为1,第4行 if 条件(1%2的结果为1,1为真)成立,执行continue,跳过其后语句,进入下一次循环;i为2,执行第3行,sum值为3,第4行 if 条件(2%2的结果为0,0为假)不成立,第5行 if 条件(2%7的结果为2,2为真)成立,执行break,跳出循环;此时sum值为3。正确答案C。
正确答案:C
考察知识点:循环嵌套
解析:当 i 和 j 都不是偶数时,第4行条件成立,跳出内层循环。当 i 为1,内层循环循环条件不成立;当 i 为2,第4行条件不可能成立,内层循环执行完毕;当 i 为3,内层循环 j 为1 时,第4行条件成立,跳出内层循环;...;当 i 为11,内层循环 j 为1 时,第4行条件成立,跳出内层循环;当 i 为12,外层循环结束。此时 i 为12,j 为1。输出 i∗ji*ji∗j 值为12,答案为C。
正确答案:B
考察知识点:控制语句结构-循环
解析:cnt记录了循环次数,循环变量 i 的初始值为-99,循环条件 i<100,i 的最大值为99,循环步长为2,循环次数为100。答案为B。
正确答案:A
考察知识点:控制语句结构-循环、break、continue关键字
解析:i 不是3的倍数(i 为 1 和 2)时,第3行条件成立,执行第4、5行,否则(i 为3)执行第8行。答案为A。
正确答案:D
考察知识点:循环嵌套
解析:i 为 0,内层循环循环条件不成立,无输出;i 为 1,内层循环 j 的取值为0,输出1#0-。只有D符合。二级类似的题很多,剩下的输出同学们可以自己推一推。
正确答案:D
考察知识点:控制语句结构-循环、基本运算、数据的真假性
解析:不能被3整除且除以5余数为2 可以表示为: i%3!=0 && i %5==2。
i%3 余数为0 等价于i%3为假,i%3 余数不为0 等价于i%3为真, 因此 i%3 等价于 i%3!=0。
i %5==2 等价于 !(i %5!=2)。只有D无法实现题目要求。
正确答案:D
考察知识点:控制语句结构-循环
解析:判断一个大于0的正整数是几位数,数位分离的思想。除以10去掉数N的最后一位,反复执行,直到N为0,循环次数即为数的位数。答案为D。
正确答案:D
考察知识点:控制语句结构-循环、数位分离
解析:自守数的定义是如果一个数的平方其尾数与该数相同,则为自守数。
信息学系列比赛中经常性出现新概念,同学们看到不要慌张,认真读题,新概念题往往只难在概念理解上,知识点考察上反而不难。
对输入数和其平方依次从个位进行数位分离,直到输入数被拆完,如果此过程中分离出来的数都相等,则其为自守数,否则不是自守数。答案为D。
正确答案:A
考察知识点:循环嵌套
解析:本题代码要实现的功能是:输出10行,第 i 行 输出 i 个数字,循环使用数字0~9
A选项,将now_number=0 放在L1和L2之间,则每行输出的开始值都为0,很显然和原来的效果不同。答案为A。
B选项,now_number+=1 等价于 now_number=1+now_number
C选项,now_number==10 和 now_number>9 在本题场景下等价
D选项,endl 和字符'\n'都表示换行。
二、判断题(每题2分,共20分)
正确答案:正确
考察知识点:考试规范
解析:闭卷考试为防作弊,禁止带具有信息存储、通信等作弊可能功能的设备,智能手表因有嵌入式系统、通信功能,会被禁止携带,该表述符合实际考试规范 。答案正确。
正确答案:正确
考察知识点:基本运算
解析:十进制数除以10得到舍弃个位数的值,如果N本身为1位数,则结果为0。答案正确。
正确答案:错误
考察知识点:基本运算
解析:(a, b) 是由逗号运算符组成的表达式,其值为最后一个逗号后边的式子的值,因此cout<<(a,b)输出的为b的值,第2、3行代码为判等的运算,不会改变a、b的值,因此输出结果为20。答案错误。
正确答案:正确
考察知识点:基本运算
解析:max和min是系统提供的函数,其作用分别是求两个数的较大值和较小值,两个数中的较大值和较小值相等,则这两个数一定相等。答案正确。
正确答案:错误
考察知识点:基本数据类型,基本运算、类型转换
解析:浮点值45.6可以赋值给字符类型变量a,这里实际进行了两次类型转换,先将45.6转成int类型45,再将45转成对应的字符(ASCII码为45的字符)。答案错误。
正确答案:错误
考察知识点:基本运算、数据类型转换
解析:score是int类型,输入59.99,实际上是将59存入score中,第4行if条件成立,输出 不及格。答案错误。
正确答案:错误
考察知识点:控制语句结构-循环、continue关键字
解析:for循环语句中,当 if 条件成立,执行 continue,continue 用于跳过本次循环,进入下次循环。当循环执行完毕,i 的值为10,第5行 if 条件成立,输出 END。答案错误。
正确答案:错误
考察知识点:控制语句结构-循环
解析:这段代码,每循环一次,将循环变量累加到Sum上边。Sum最后的值为0+1+2+3+4=10。答案错误。
正确答案:错误
考察知识点:控制语句结构-循环
解析:for(int i=5; i>1; i--) 循环变量从5开始,每循环一次减1,直到 i>1不成立,求的是5+4+3+2的和。
for(int i=1; i<5; i++) 循环变量从1开始,每循环一次加1,直到 i<5不成立,求的是1+2+3+4的和。 答案错误。
正确答案:正确
考察知识点:控制语句结构-循环、基本运算
解析:N为奇数,N/2 和 (N-1)/2 的计算结果相同,比如N为5,计算结果都为2,可以用来表示中间列。
N为偶数,N/2 和 (N-1)/2 的计算结果不同,比如N为6,N/2结果为3,(N-1)/2结果为2,可以分别用来表示中间两列。
代码符合题目要求。答案正确。
三、编程题(每题25分,共50分)
本题考察循环嵌套、算术运算符。
解析:当直角边长 a,b 均取不超过 n 的正整数时,有多少个不同的面积为整数的直角三角形。
直角三角形的面积为a*b/2。因此要保证面积为整数,则a为偶数或者b为偶数。
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, cnt=0;
cin>>n;
for(int a=1; a<=n; a++){
//直角边长分别为 a,b 和 a1,b1 的两个直角三角形相同,
//当且仅当a==a1, b==b1 或者 a==b1, b==a1,因此b要从a开始
for(int b=a; b<=n; b++){
if(a%2==0 || b%2==0) cnt++; //两条直角边 其中一个为偶数
}
}
cout<<cnt;
return 0;
}
本题考察 循环嵌套、数学函数。
方法1:幂和数:n=2x+2yn=2^x+2^yn=2x+2y(x,y 均为非负整数),找l和r之间有多少个幂和数
已知,1 ≤l ≤r ≤10^4,可推出,x、y最小值为0,最大值为17(2162^{16}216 < 10410^4104 <2172^{17}217),且为了防止重复遍历,y取值要大于等于x 。
这个方法的难点是从l,r的范围推出x,y的范围。
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int l, r, cnt=0;
cin>>l>>r;
for(int i=l; i<=r; i++){
for(int x=0; x<=17; x++){
for(int y=x; y<=17; y++){
if(pow(2, x)+pow(2, y)==i) cnt++;
}
}
}
cout<<cnt;
return 0;
}
方法2,幂和数:n=2x+2yn=2^x+2^yn=2x+2y(x,y 均为非负整数),找l和r之间有多少个幂和数。
令a表示2x2^x2x, b表示2y2^y2y,则a,b最小为1,最大不超过r ,且为了防止重复遍历,b取值要大于等于a。有以下代码:
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int l, r, a, b, cnt=0;
cin>>l>>r;
a=1; //a初始化为2的0次方,即1
while(a<=r){
b=a; //为了防止重复遍历,b取值要大于等于a
while(b<=r){
int tmp=a+b;
if(tmp>=l && tmp<=r) cnt++; //在区间内
b*=2;
}
a*=2;
}
cout<<cnt;
return 0;
}