2024 CSP-J入门级(第一轮)C++真题
考试时间:60分钟 总分:100 及格分:60
一、单选题 (共15题,每题2分)
1、32 位 int 类型的存储范围是( )
A:-2147483647 ~ +2147483647
B:-2147483647 ~ +2147483648
C:-2147483648 ~ +2147483647
D:-2147483648 ~ +2147483648
【正确答案】
C
【试题解析】
int是32位有符号整型,
当机器数为0111 1111 1111 1111 1111 1111 1111 1111时,表示的数值最大,为231−1
当机器数为1000 0000 0000 0000 0000 0000 0000 0000时,表示的数值最小,为−231
因此int可以表示的数值范围为−231 ∼ 231−1,算出来的结果是− 2147483648 ∼ 2147483647 选C。
2、计算(148 − 10102) ∗ D16 − 11012的结果,并选择答案的十进制值:( )
A:13
B:14
C:15
D:16
【正确答案】
A
【试题解析】
将数字都转为二进制。每位8进制数字转为3位二进制数字,每位16进制数字转为4位二进制数字。
148=11002,D16 = 11012所以原式为( 1100−1010 )∗1101−1101=( 1100−1010−1 )∗1101 = ( 10 − 1 ) ∗ 1101=1101
11012=23+22+20=8+4+1=13,选A。
3、某公司有 10 名员工,分为 3 个部门:A 部门有 4 名员工,B 部门有 3 名员工、C 部门有 3 名员工。现需要从这 10 名员工中选出 4 名组成一个工作组,且每个部门至少要有 1 人。问有多少种选择方式?( )
A:120
B:126
C:132
D:238
【正确答案】
B
【试题解析】
先分类,再分步。
A部门出2人,B部门出1人,C部门出1人,情况数为:C(4,2)C(3,1)C(3,1)=6∗3∗3=54
A部门出1人,B部门出2人,C部门出1人,情况数为:C(4,1)C(3,2)C(3,1)=4∗3∗3=36
A部门出1人,B部门出1人,C部门出2人,情况数为:C(4,1)C(3,1)C(3,2)=4∗3∗3=36
共有54+36+36=126种情况
4、以下哪个序列对应数组 0 至 8 的 4 位二进制格雷码(Gray code)?
A:0000,0001,0011,0010,0110,0111,0101,1000
B:0000,0001,0011,0010,0110,0111,0100,0101
C:0000,0001,0011,0010,0100,0101,0111,0110
D:0000,0001,0011,0010,0110,0111,0101,0100
【正确答案】
D
【试题解析】
5、记 1KB 为 1024 字节(byte),1MB 为 1024KB,那么 1MB 是多少二进制位(bit)?
A:1000000
B:1048576
C:8000000
D:8388608
【正确答案】
D
【试题解析】
1字节占用8二进制位,也就是1B=8b,1MB=1024KB=1024∗1024B=8∗1024∗1024b=8388608b,选D。
6、以下哪个不是 C++中的基本数据类型?
A:int
B:float
C:struct
D:char
【正确答案】
C
【试题解析】
struct 不是基本数据类型,struct定义出的结构体(或者叫类)是复合数据类型。其余的int, float, char都是C++的基本数据类型。
7、以下哪个不是 C++中的循环语句?
A:for
B:while
C:do-while
D:repeat-untill
【正确答案】
D
【试题解析】
C++中有for、while和do...while循环。
Repeat-untill 是 Pascal、lua 等语言中的直到循环语句,C++并不支持。
8、在 C/C++中,(char)('a'+13)与下面的哪一个值相等( )
A:'m'
B:'n'
C:'z'
D:'3'
【正确答案】
B
【试题解析】
第1个字母'a'的ASCII码为97,也就是'a'+0
第2个字母'b'的ASCII码为98,也就是'a'+1
...
第i个字母的ASCII码为'a'+i-1
'a'+13为第14个字母的ASCII码,第14个字母为'n',选B。
9、假设有序表中有 1000 个元素,则用二分法查找元素 x 最多需要比较( )次
A:25
B:10
C:7
D:1
【正确答案】
B
【试题解析】
10、下面哪一个不是操作系统名字( )
A:Notepad
B:Linux
C:Windows
D:macOS
【正确答案】
A
【试题解析】
Notepad是Windows自带的记事本程序,是应用程序。
Linux是开源的类Unix操作系统
Windows是微软开发的操作系统
maxOS是苹果开发的类Unix操作系统
11、在无向图中,所有顶点的度数之和等于( )
A:图的边数
B:图的边数的两倍
C:图的定点数
D:图的定点数的两倍
【正确答案】
B
【试题解析】
图中一条边贡献两个度,因此所有顶点度数之和等于边数的两倍
12、已知二叉树的前序遍历为A,B,D,E,C,F,G,中序遍历为D,B,E,A,F,C,G,求二叉树的后序遍历的结果是( )
A:D,E,B,F,G,C,A
B:D,E,B,F,G,A,C
C:D,B,E,F,G,C,A
D:D,E,B,F,G,A,C
【正确答案】
A
【试题解析】
13、给定一个空栈,支持入栈和出栈操作。若入栈操作的元素依次是 1 2 3 4 5 6,其中 1 最先入栈,6 最后入栈,下面哪种出栈顺序是不可能的( )
A:6 5 4 3 2 1
B:1 6 5 4 3 2
C:2 4 6 5 3 1
D:1 3 5 2 4 6
【正确答案】
D
【试题解析】
入栈顺序是1,2,3,4,5,6,
如果1 2 3 4 5 6都先按顺序入栈,而后不断出栈直到栈空,出栈顺序就是6 5 4 3 2 1,A选项是可行的。
这类问题的思考方式为:如果x出栈,那么在x前入栈的元素除了已出栈的元素都在栈内。
对于B选项,1 6出栈后,栈内从栈底到栈顶分别是2 3 4 5,依次出栈得到5 4 3 2,B选项是可行的。
对于C选项,1入栈,2入栈并出栈,3入栈,4入栈并出栈,5入栈,6入栈并出栈,此时栈内从栈底到栈顶是1 3 5,依次出栈得到5 3 1,是可行的。
对于D选项,1入栈后出栈,2入栈,3入栈后出栈,4入栈,5入栈后出栈,此时栈内从栈底到栈顶是2 4,栈顶是4,2不可能先于4出栈,所以D选项是不可行的。
14、有 5 个男生和 3 个女生站成一排,规定 3 个女生必须相邻,问有多少种不同的排列方式?
A:4320种
B:5040种
C:3600种
D:2880种
【正确答案】
A
【试题解析】
第一步,将三个女生站在一起作为一个整体(捆绑法),该整体的情况数为三个女生的全排列,为P(3,3)
而后第二步5个男生与女生整体一共6个元素,进行全排列,方案数为P(6,6)
总排列方案数为P(3,3)∗P(6,6)=3∗2∗1∗6∗5∗4∗3∗2∗1=4320,选A。
15、编译器的主要作用是什么( )?
A:直接执行源代码
B:将源代码转换为机器代码
C:进行代码调试
D:管理程序运行时的内存
【正确答案】
B
【试题解析】
源代码不能直接执行,A错误。
进行代码调试的工具是调试器,比如GDB。
程序内可以通过代码管理程序运行时的内存,操作系统也可以管理各个进程的内存使用。
编译器的作用是对于编译型语言可以将源代码(比如C++代码)编译成为机器可以直接运行的机器代码,也就是CPU指令,选B。
二、单选题(完善程序) (共17题,每题2分)
1、完善程序(1)
第1-5题,组合题
(判断平方数) 问题:给定一个正整数 n,判断这个数 是不是完全平方数,即存在一个正整数 x 使得 x 的平方等于 n。试补全程序。
1、①处应填( )
A:1
B:2
C:3
D:4
2、②处应填( )
A:(int) floor(sqrt(num)-1)
B:(int)floor(sqrt(num))
C:floor(sqrt(num/2))-1
D:floor(sqrt(num/2))
3、③处应填( )
A:num=2*i
B:num== 2*i
C:num=i*i
D:num==i*i
4、④处应填( )
A:num= 2*i
B:num==2*i
C:true
D:false
5、⑤处应填( )
A:num= i*i
B:num!=2*I
C:true
D:false
2、完善程序(2)
第6-10题,组合题
(汉诺塔问题)给定三根柱子,分别标记为 A、B 和 C。初始状态下,柱子A上有若干个圆盘,这些圆盘从上到下按从小到大的顺序排列。任务是将这些圆盘全部移到柱子c上,且必须保持原有顺序不变。在移动过程中,需要遵守以不规则:
1.只能从一根柱子的顶部取出圆盘,并将其放入另一根柱子的顶部。
2.每次只能移动一个圆盘
3.小圆盘必须始终在大圆盘之上。
试补全程序
1、①处应填( )
A:0
B:1
C:2
D:3
2、②处应填( )
A:src,tmp
B:src,tgt
C:src,tgt
D:tgt,tmp
3、③处应填( )
A:src, tmp, tgt
B:src, tgt, tmp
C:tgt, tmp, src
D:tgt, src, tmp
4、④处应填( )
A:src, tmp, tgt
B:tmp, src, tgt
C:src, tgt, tmp
D:tgt, src, tmp
5、⑤处应填( )
A:0
B:1
C:i-1
D:i
三、组合题(阅读程序) (共10题,每题3分)
1、阅读程序(1)
第1-5题,组合题
1、当输入为"10"时,程序的第一个输出为"4",第二个输出为"17"。( )
A:正确
B:错误
2、若将 isPrime(i)函数种的条件改为 i<=n/2,输入"20"时,countPrimes(20)的输出将变为"6"。( )
A:正确
B:错误
3、sumPrimes 函数计算的是从 2 到 n 之间的所有素数之和。( )
A:正确
B:错误
4、当输入为"50"时,sumPrimes(50)的输出为( )
A:1060
B:328
C:381
D:275
5、如果将 for(int i=2;i*i<=n;i++)改为 for(int i=2;i<=n;i++),输入"10"时,程序的输出( )
A:将不能正确计算 10 以内素数个数及其和
B:仍然输出4和17
C:输出3和 10
D:输出结果不变,但运行时间更短
2、阅读程序(2)
第6-11题,组合题
1、当输入的 cost 数组为{10,15,20}时,程序的输出为 15( )
A:正确
B:错误
2、如果将 dpi-1改为 dpi-3,程序可能会产生编译错误( )
A:正确
B:错误
3、程序总是输出 cost 数组种的最小的元素( )
A:正确
B:错误
4、当输入的 cost 数组为{1,100,1,1,1,100,1,1,100,1}时,程序的输出为( )。
A:"6"
B:"7"
C:"8"
D:"9"
5、如果输入的 cost 数组为{10,15,30,5,5,10,20},程序的输出为( )
A:"25"
B:"30"
C:"35"
D:"40"
6、若将代码中的 min(dpi-1,dpi-2)+costi-1修改为 dpi-1+costi-2,输入 cost 数组为{5,10,15}时,程序的输出为( )
A:"10"
B:"15"
C:"20"
D:"25"
3、阅读程序(3)
第12-17题,组合题
1、当输入为"2 3"时,customFunction(2,3)的返回值为"64"。( )
A:正确
B:错误
2、当 b 为负数时,customFunction(a,b)会陷入无限递归。( )
A:正确
B:错误
3、当 b 的值越大,程序的运行时间越长。( )
A:正确
B:错误
4、当输入为"5 4"时,customFunction(5,4)的返回值为( )。
A:5
B:25
C:250
D:625
5、如果输入 x = 3 和 y = 3,则程序的最终输出为( )
A:"27"
B:"81"
C:"144"
D:"256"
6、若将customFunction 函数改为"return a + customFunction(a-1,b-1);并输入"3 3",则程序的最终输出为( )
A:9
B:16
C:25
D:36