CSP-J 初赛单选题整理(2019-2025)

整理说明:本文档收录2019-2025年CSP-J(入门级)初赛第一轮单项选择题,按考察知识点进行分类整理,便于针对性复习。

题量统计:每年15道单选题,7年共105道

使用说明:题目与答案在同一位置,点击「点击显示答案」按钮即可查看答案与解析,方便边做边对。


一、计算机基础知识

1.1 计算机历史与发展


2019-15 以下哪个奖项是计算机科学领域的最高奖?
A.图灵奖 
B.鲁班奖 
C.诺贝尔奖 
D.普利策奖

点击显示答案

答案:A
图灵奖(Turing Award)由美国计算机协会(ACM)于1966年设立,以艾伦·图灵命名,是计算机科学领域的最高荣誉,被誉为"计算机界的诺贝尔奖"。



1.2 计算机系统组成

2020-1 在内存储器中每个存储单元都被赋予一个唯一的序号,称为()。
A.地址 
B.序号 
C.下标 
D.编号

点击显示答案 答案:A

内存储器中每个存储单元都有唯一的地址编号,称为地址,CPU通过地址访问存储单元。


2020-4 现有一张分辨率为2048×1024像素的32位真彩色图像。请问要存储这张图像,需要多大的存储空间?
A.16MB 
B.4MB 
C.8MB 
D.32MB

点击显示答案 答案:C

32位真彩色图像每像素占4字节(32位÷8=4字节),存储空间 = 2048×1024×4 = 8,388,608字节 = 8MB。


2021-3 目前主流的计算机储存数据最终都是转换成()数据进行储存。
A.二进制 
B.十进制 
C.八进制 
D.十六进制

点击显示答案 答案:A

计算机内部所有数据最终都以二进制形式存储和处理,这是由计算机硬件的电子特性决定的。


2023-13 在计算机中,以下哪个选项描述的数据存储容量最小?
A.字节(byte) 
B.比特(bit) 
C.字(word) 
D.千字节(kilobyte)

点击显示答案 答案:B

存储容量从小到大:比特(bit) < 字节(byte) < 字(word) < 千字节(KB)。1字节=8比特。


2024-5 记1KB为1024字节(byte),1MB为1024KB,那么1MB是多少二进制位(bit)?
A.1000000 
B.1048576 
C.8000000 
D.8388608

点击显示答案 答案:D

1MB = 1024KB = 1024×1024B = 1,048,576B,1B = 8bit,所以1MB = 1,048,576×8 = 8,388,608 bit。


2025-1 32位无符号整数最大值约为()。
A.4×10⁹ 
B.4×10¹⁸ 
C.2×10⁹ 
D.2×10¹⁸

点击显示答案 答案:A

32位无符号整数范围是0 ~ 2³²-1 = 4,294,967,295 ≈ 4×10⁹。


1.3 操作系统

2023-15 以下哪个不是操作系统?
A.Linux 
B.Windows 
C.Android 
D.HTML

点击显示答案 答案:D

Linux、Windows、Android都是操作系统,HTML是超文本标记语言,用于网页开发。


2024-10 下面哪一个不是操作系统名字?
A.Notepad 
B.Linux 
C.Windows 
D.macOS

点击显示答案 答案:A

Notepad(记事本)是Windows自带的文本编辑应用程序,不是操作系统。Linux、Windows、macOS都是操作系统。


1.4 域名与网络

2019-1 中国的国家顶级域名是()。
A..cn 
B..ch 
C..chn 
D..china

点击显示答案 答案:A

中国的国家顶级域名是.cn,.ch是瑞士,.chn和.china不是标准域名。国家顶级域名只有两个字母。


? 连接 internet 上的每台计算机必须有 1 个( )地址,该地址共含( )字节。前面若干个字节表示( );后面若干个字节表示( )。为了避免使用数字,人们经常用字母替代,这些名字称为( )。
A. 网络、四、IP地址、网内计算机地址、域名
B. 网络、不超过十、网页、网址、网名
C. 网络、不超过十、网页、网址、网名
D. IP、四、网络地址、网内计算机地址、域名

点击显示答案 答案:D
  • IP 地址是互联网上每台计算机的唯一数字标识。
  • IPv4 地址由 4 个字节(32 位)组成,形如 a.b.c.d,每段范围 0–255。
  • IP 地址分为网络地址(标识所属网络)和主机地址(标识网络内具体计算机)两部分。
  • 域名是 IP 地址的字母化表示,方便记忆(如 www.baidu.com 对应某个 IP 地址),通过 DNS 进行解析。

? 下列 IP 地址中正确的是( )。
A. 202.300.12.4
B. 192.168.0.3
C. 100:128:35:91
D. 111-102-35-21

点击显示答案 答案:B

A选项错误:第二段300 > 255,IPv4每个字节范围是0~255。
B选项正确:格式正确,192.168.x.x是典型的C类私有地址。
C选项错误:分隔符错误,IPv4用英文点号.分隔,不用冒号:(冒号是IPv6的分隔符)。
D选项错误:分隔符错误,用了短横线-而不是点号。

IP地址合法性三要素:

  1. 用 . 分成 4 段
  2. 每段是 0–255 之间的整数
  3. 不能有多余前导零(如 01 不合法)

? 在 TCP/IP 协议中,TCP 和 IP 分别提供什么服务( )。
A. 传输层、网络层
B. 链路层、网络层
C. 传输层、会话层
D. 物理层、链路层

点击显示答案 答案:A
  • IP(Internet Protocol,网际协议)工作在网络层,负责寻址和路由,即把数据包送到正确的目标地址。
  • TCP(Transmission Control Protocol,传输控制协议)工作在传输层,提供可靠的、面向连接的数据传输服务。

【补充练习】 IP 地址是每台上网的计算机所必需的,下列 IP 地址中可以作为合法主机地址的是( )。
A. 225.225.225.225
B. 200.256.192.8
C. 192.168.1.12
D. 0.0.0.0

点击显示答案 答案:C

A选项错误:225.x.x.x属于D类地址(组播地址,范围224.0.0.0~239.255.255.255),不能作为主机地址。
B选项错误:256 > 255,每段最大值为255。
C选项正确:合法的C类私有地址(192.168.x.x),可以作为主机地址。
D选项错误:0.0.0.0是特殊地址,表示"所有网络"或"未指定地址",不能分配给主机。

IP地址分类速记:

  • A类:1.0.0.0 ~ 126.255.255.255,第一个字节为网络号
  • B类:128.0.0.0 ~ 191.255.255.255,前两个字节为网络号
  • C类:192.0.0.0 ~ 223.255.255.255,前三个字节为网络号
  • D类(组播):224.0.0.0 ~ 239.255.255.255,不能分配给主机
  • E类(保留):240.0.0.0 ~ 255.255.255.255

二、数据表示与进制转换

2.1 进制转换

2019-2 二进制数11 1011 1001 0111和01 0110 1110 1011进行逻辑与运算的结果是()。
A.01 0010 1000 1011 
B.01 0010 1001 0011 
C.01 0010 1000 0001 
D.01 0010 1000 0011

点击显示答案 答案:D

按位与运算规则:两位都为1结果才为1。

  11 1011 1001 0111
& 01 0110 1110 1011
-------------------
  01 0010 1000 0011

2020-9 二进制数1011转换成十进制数是()。
A.11 
B.10 
C.13 
D.12

点击显示答案 答案:A

1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8+0+2+1 = 11。


2021-7 二进制数101.11对应的十进制数是()。
A.6.5 
B.5.5 
C.5.75 
D.5.25

点击显示答案 答案:C

101.11₂ = 1×2² + 0×2¹ + 1×2⁰ + 1×2⁻¹ + 1×2⁻² = 4+0+1+0.5+0.25 = 5.75。


2022-2 八进制数12345670(8)和07654321(8)的和为()。
A.22222221(8) 
B.21111111(8) 
C.22111111(8) 
D.22222211(8)

点击显示答案 答案:D

八进制加法,从右到左逐位相加,满8进1。

  12345670
+ 07654321
----------
  22222211

注意最后一位:0+1=1,7+2=11(八进制)=9(十进制),写1进1。


2022-13 八进制数32.1对应的十进制数是()。
A.24.125 
B.24.250 
C.26.125 
D.26.250

点击显示答案 答案:C

32.1₈ = 3×8¹ + 2×8⁰ + 1×8⁻¹ = 24+2+0.125 = 26.125。


2023-9 数101010(2)和166(8)的和为()。
A.10110000(2) 
B.236(8) 
C.158(10) 
D.A0(16)

点击显示答案 答案:D

101010₂ = 42₁₀,166₈ = 1×64+6×8+6 = 118₁₀,和 = 160₁₀ = A0₁₆。


2024-2 计算(14₈−1010₂)×D₁₆−1101₂的结果,并选择答案的十进制值()。
A.13 
B.14 
C.15 
D.16

点击显示答案 答案:A

14₈ = 12₁₀,1010₂ = 10₁₀,D₁₆ = 13₁₀,1101₂ = 13₁₀。
(12-10)×13-13 = 2×13-13 = 13。


2025-2 二进制按位与运算:已知x=255,x&(x-1)=()。
A.253 
B.254 
C.255 
D.0

点击显示答案 答案:B

255 = 11111111₂,254 = 11111110₂,255&254 = 11111110₂ = 254。
技巧:x&(x-1)的作用是消除x最低位的1。


2025-13 进制转换问题(八进制与十六进制混合运算)。
A.388₁₆ 
B.3A0₁₆ 
C.3B0₁₆ 
D.390₁₆

点击显示答案 答案:A

720₁₀+184₁₀ = 904₁₀ = 388₁₆(904÷16=56余8,56÷16=3余8,3÷16=0余3)。


2.2 数据类型与存储

2019-3 一个32位整型变量占用()个字节。
A.32 
B.128 
C.4 
D.8

点击显示答案 答案:C

1字节 = 8位,32位 = 32÷8 = 4字节。


2024-1 32位int类型的存储范围是()。
A.-2147483647~+2147483647
B.-2147483647~+2147483648
C.-2147483648~+2147483647
D.-2147483648~+2147483648

点击显示答案 答案:C

32位有符号int使用补码表示,范围是-2³¹ ~ 2³¹-1,即-2147483648 ~ 2147483647。


2.3 格雷码

2024-4 以下哪个序列对应数字0至7的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

格雷码的核心性质是:相邻两个编码只有一位不同。验证D选项:
0000→0001(第0位变)→0011(第1位变)→0010(第0位变)→0110(第2位变)→0111(第0位变)→0101(第1位变)→0100(第0位变),每次只变1位,正确。
其他选项均出现"一次变2位"的情况。


三、C++语言基础

3.1 基本数据类型与关键字

2021-1 以下不属于面向对象程序设计语言的是()。
A.C++ 
B.Python 
C.Java 
D.C

点击显示答案 答案:D

C语言是面向过程的语言,不支持面向对象特性(类、继承、多态等)。C++、Python、Java都支持面向对象。


2023-1 在C++中,下面哪个关键字用于声明一个变量,其值不能被修改?
A.unsigned 
B.const 
C.static 
D.mutable

点击显示答案 答案:B

const关键字声明常量,值不能被修改。unsigned是无符号修饰符,static是静态修饰符,mutable用于类成员表示可修改。


2024-6 以下哪个不是C++中的基本数据类型?
A.int 
B.float 
C.struct 
D.char

点击显示答案 答案:C

C++基本数据类型包括int、float、double、char、bool等。struct是结构体,属于复合/派生数据类型。


2025-9 C++ string类特性问题,以下正确的是()。
A.string长度不可修改
B.string对象可与char类型直接用+连接
C.length()和size()返回不同结果
D.string内部需手动添加'\0'

点击显示答案 答案:B

A错误,string长度可修改;B正确,string支持+运算符连接char类型字符;C错误,length()和size()功能完全等价,返回相同结果;D错误,string内部自动管理终止符'\0',无需手动添加。


3.2 循环语句

2024-7 以下哪个不是C++中的循环语句?
A.for 
B.while 
C.do-while 
D.repeat-until

点击显示答案 答案:D

C++有三种循环语句:for、while、do-while。repeat-until是Pascal和Lua等语言的循环语法,C++中不存在。


3.3 编译原理

2020-2 编译器的主要功能是()。
A.将源程序翻译成机器指令代码
B.将源程序重新组合
C.将低级语言翻译成高级语言
D.将一种高级语言翻译成另一种高级语言

点击显示答案 答案:A

编译器的功能是将高级语言源程序翻译成机器指令代码(目标程序/可执行文件)。解释器是逐行翻译执行。


2024-15 编译器的主要功能是()。
A.将源程序翻译成机器指令代码
B.将源程序重新组合
C.将低级语言翻译成高级语言
D.将一种高级语言翻译成另一种高级语言

点击显示答案 答案:A

编译器的功能是将高级语言源程序翻译成机器指令代码。这道题与2020年第2题完全相同。


3.4 运算符与表达式

2020-3 设x=true,y=true,z=false,以下逻辑运算表达式值为真的是()。
A.(y∨z)∧x∧z
B.x∧(z∨y)∧z
C.(x∧y)∧z
D.(x∧y)∨(z∨x)

点击显示答案 答案:D

x=true,y=true,z=false,逐个计算:

  • A: (T∨F)∧T∧F = T∧T∧F = F
  • B: T∧(F∨T)∧F = T∧T∧F = F
  • C: (T∧T)∧F = T∧F = F
  • D: (T∧T)∨(F∨T) = T∨T = T ✓

2021-9 表达式a(b+c)d的后缀表达式为()。
A. **a+bcd
B. abc+*d* 
C. abc+d** 
D. *a*+bcd

点击显示答案 答案:B

后缀表达式(逆波兰式)运算符放在操作数后面。a(b+c)d的运算顺序:先算b+c得abc+,再乘a得abc+*,最后乘d得abc+*d*。


2022-6 对表达式a+(b-c)*d的前缀表达式为()。
A.*+a-bcd 
B.+a*-bcd 
C.abc-d*+ 
D.abc-+d*

点击显示答案 答案:B

前缀表达式(波兰式)运算符放在操作数前面。a+(b-c)*d:先算b-c得-bc,再乘d得*-bcd,最后加a得+a*-bcd。


2023-8 后缀表达式"623+-382/+*2^3+"对应的中缀表达式是()。
A.((6-(2+3))*(3+8/2))^2+3
B.6-2+3*3+8/2^2+3
C.(6-(2+3))*((3+8/2)^2)+3
D.6-((2+3)*(3+8/2))^2+3

点击显示答案 答案:A

后缀表达式用栈求值:623+- → 6-(2+3);382/+ → 3+8/2;两者相乘再2次方最后+3,即((6-(2+3))*(3+8/2))^2+3。


2024-8 在C/C++中,(char)('a'+13)与下面的哪一个值相等()。
A.'m' 
B.'n' 
C.'z' 
D.'3'

点击显示答案 答案:B

'a'的ASCII码是97,97+13=110,对应字符'n'(a=97,b=98,...,n=110)。


2025-7 布尔表达式化简问题,(a && b) || (!c && a)不等价于()。
A.a && (b || !c)
B.(a || !c) && (b || !c) && a
C.a && (!b || c)
D.!(!a || !b) || (a && !c)

点击显示答案 答案:C

原式(a&&b)||(!c&&a) = a&&(b||!c)。

  • A: a&&(b||!c) 等价 ✓
  • B: 展开后 = a&&(b||!c) 等价 ✓
  • C: a&&(!b||c),当a=1,b=1,c=0时原式=1,C=0,不等价 ✗
  • D: 展开后 = a&&(b||!c) 等价 ✓

3.5 指针与引用

2022-3 运行代码:int x=101; int y=201; int *p=&x; int *q=&y; p=q; 结果是()。
A.将x的值赋为201
B.将y的值赋为101
C.将q指向x的地址
D.将p指向y的地址

点击显示答案 答案:D

p=q是指针赋值,将q的值(y的地址)赋给p,使p指向y。x和y的值不变,q本身也不变。


2023-3 阅读代码,修改data的value成员以存储3.14,正确的方式是()。

union Data{
  int num; 
  float value; 
  char symbol;
}; 
union Data data;

A.data.value=3.14
B.value.data=3.14
C.data->value=3.14
D.value->data=3.14

点击显示答案 答案:A

联合体变量访问成员使用点号(.),指针访问成员使用箭头(->)。data是普通变量不是指针,所以用data.value=3.14。


2023-4 假设有一个链表的节点定义如下:

struct Node{
    int data;
    Node* next;
};

现在有一个指向链表头部的指针: Node* head,如果想要在链表中插入一个新节点,其成员 data 的值为
42 ,并使新节点成为链表的第一个节点,下面哪个操作是正确的? ( )。

A.Node* newNode=new Node; newNode->data=42; newNode->next=head; head=newNode;
B.Node* newNode=new Node; head->data=42; newNode->next=head; head=newNode;
C.Node* newNode=new Node; newNode->data=42; head->next=newNode;
D.Node* newNode=new Node; newNode->data=42; newNode->next=head;

点击显示答案 答案:A

链表头插法标准四步:①创建新节点 ②设置data=42 ③新节点next指向原头节点head ④头指针head指向新节点。A选项完整包含这四步。


2025-10 引用与值传递:函数solve(int &a, int b),调用solve(x,y)时x=5,y=10,函数内执行a=a+b; b=a-b; a=a-b; 最终x,y值为()。
A.x=15,y=5 
B.x=5,y=10 
C.x=10,y=10 
D.x=10,y=5

点击显示答案 答案:C

a是引用(绑定到x),b是值传递(拷贝y的值,不影响原变量)。

  • 执行a=a+b=5+10=15 → x变为15
  • 执行b=a-b=15-10=5 → 仅局部变量b变,y仍为10
  • 执行a=a-b=15-5=10 → x变为10
    最终x=10, y=10。

3.6 字符串处理

2023-7 以下关于高精度运算的说法错误的是()。
A.高精度计算主要处理大整数或多位小数
B.大整数除以小整数从左到右逐位试商
C.高精度乘法运算时间只与较长者位数有关
D.高精度加法关键在于逐位相加处理进位

点击显示答案 答案:C

高精度乘法需要两个数的每一位都相乘,时间复杂度是O(nm),与两个数的位数乘积有关,不是只与较长者位数有关。


四、数据结构

4.1 数组与链表

2019-6 链表不具有的特点是()。
A.插入删除不需要移动元素
B.不必事先估计存储空间
C.所需空间与线性表长度成正比
D.可随机访问任一元素

点击显示答案 答案:D

链表不能随机访问元素,必须从头节点开始逐个遍历。数组可以通过下标随机访问任一元素,这是数组和链表最重要的区别之一。


2020-7 链表不具有的特点是()。
A.插入删除不需要移动元素
B.不必事先估计存储空间
C.所需空间与线性表长度成正比
D.可随机访问任一元素

点击显示答案 答案:D

这道题与2019年第6题完全相同。链表不能随机访问元素,必须从头节点逐个遍历。


2022-4 链表和数组的区别包括()。
A.数组不能排序,链表可以
B.链表比数组能存储更多信息
C.数组大小固定,链表大小可动态调整
D.以上均正确

点击显示答案 答案:C

A错误,数组和链表都能排序;B错误,链表和数组存储的信息量取决于元素数量,不是由数据结构本身决定;C正确,数组大小固定,链表可动态增减节点。


2022-11 在双向循环链表结点p之后插入结点s的正确操作是()。
A.p->next->prev=s; s->prev=p; p->next=s; s->next=p->next;
B.p->next->prev=s; p->next=s; s->prev=p; s->next=p->next;
C.s->prev=p; s->next=p->next; p->next=s; p->next->prev=s;
D.s->next=p->next; p->next->prev=s; s->prev=p; p->next=s;

点击显示答案 答案:D

双向链表插入顺序很重要,必须先修改新节点的指针,再修改原链表节点的指针:
① s->next = p->next(新节点的后继指向p的原后继)
② p->next->prev = s(p原后继的前驱指向新节点)
③ s->prev = p(新节点的前驱指向p)
④ p->next = s(p的后继指向新节点)
D选项顺序正确。


4.2 栈与队列

2020-11 图中所示数据结构是()。(图示:先进后出)
A.栈 
B.队列 
C.二叉树 
D.哈希表

点击显示答案 答案:A

图示为先进后出(LIFO,Last In First Out)特征,这是栈的本质特征。队列是先进先出(FIFO)。


2021-5 对于入栈顺序为a,b,c,d,e的序列,下列()不是合法的出栈序列。
A.a,b,c,d,e 
B.e,d,c,b,a 
C.b,a,c,d,e 
D.c,d,a,e,b

点击显示答案 答案:D

模拟出栈过程,D选项c,d,a,e,b不可能:c先出栈说明a,b已入栈,d出栈说明d已入栈,此时栈中从底到顶是a,b,栈顶是b不是a,a不可能在b之前出栈。


2022-5 栈S和队列Q初始为空,e1~e6按进栈S、出栈S、进队列Q、出队列Q操作,栈S依次进e1~e6,队列Q依次出e2,e4,e3,e6,e5,e1,则栈S容量至少是()。
A.2 
B.3 
C.4 
D.6

点击显示答案 答案:B

模拟整个操作过程,栈中最多同时存在3个元素,因此栈S容量至少为3。


2022-10 以下对数据结构的表述不恰当的是()。
A.图的深度优先遍历常用栈
B.栈后进先出,队列先进先出
C.队列常用于广度优先搜索
D.栈与队列存在本质不同,无法用栈实现队列

点击显示答案 答案:D

栈可以用两个队列实现,队列也可以用两个栈实现,D说法错误。A正确,DFS利用递归栈实现;B是栈和队列的定义;C正确,BFS需要队列实现层次遍历。


2024-13 给定一个空栈,入栈顺序1,2,3,4,5,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

D选项1,3,5,2,4,6不可能:1出栈后栈空,3出栈说明2已入栈且在栈中,5出栈说明4已入栈,此时栈中从底到顶是2,4,栈顶是4不是2,2无法在4之前出栈。


2025-15 栈与队列操作问题:队列A=[7,5,8,3,1,4,2],奇数进栈,偶数弹出栈顶到队列P,最终P为()。
A.[5,1,3] 
B.[5,3,1] 
C.[7,5,3] 
D.[5,1,7]

点击显示答案 答案:A

逐个处理队列A的元素:

  • 7(奇数)→入栈,栈:[7]
  • 5(奇数)→入栈,栈:[7,5]
  • 8(偶数)→弹出栈顶5到P,P=[5],栈:[7]
  • 3(奇数)→入栈,栈:[7,3]
  • 1(奇数)→入栈,栈:[7,3,1]
  • 4(偶数)→弹出栈顶1到P,P=[5,1],栈:[7,3]
  • 2(偶数)→弹出栈顶3到P,P=[5,1,3],栈:[7]
    最终P=[5,1,3]。

4.3 二叉树

2019-8 二叉树顺序存储(根下标1,左孩子2i,右孩子2i+1),数组最大下标至少为()。
A.6 
B.10 
C.15 
D.12

点击显示答案 答案:C

完全二叉树顺序存储时,高度为h的满二叉树最大下标为2h-1。若树高为4,最大下标为24-1=15。


2019-14 后序遍历DGJHEBIFCA,中序遍历DBGEHJACIF,前序遍历为()。
A.ABCDEFGHIJ 
B.ABDEGHJCFI 
C.ABDEGJHCFI 
D.ABDEGHJFIC

点击显示答案 答案:B

后序遍历最后一个节点是根A,中序遍历中A左边的DBGEHJ是左子树,右边CIF是右子树。递归构建左右子树,最终前序遍历为ABDEGHJCFI。


2020-12 独根树高度为1,61个结点的完全二叉树高度为()。
A.7 
B.8 
C.5 
D.6

点击显示答案 答案:D

完全二叉树高度 = ⌊log₂n⌋+1 = ⌊log₂61⌋+1 = 5+1 = 6。


2021-8 只有根结点高度为1,高度为5的完全二叉树有()种不同形态。
A.16 
B.15 
C.17 
D.32

点击显示答案 答案:A

高度为5的完全二叉树,前4层是满的(15个节点),第5层节点数可以是1~16,共16种形态。


2022-8 n个结点完全二叉树数组存储,第9个位置结点有兄弟和两个子结点,兄弟和右子结点位置是()。
A.8,18 
B.10,18 
C.8,19 
D.10,19

点击显示答案 答案:C

位置i的父节点是⌊i/2⌋,左孩子是2i,右孩子是2i+1。位置9是奇数,说明是右孩子,左兄弟是位置8。位置9的左孩子是18,右孩子是19。所以兄弟是8,右子结点是19。


2023-5 根节点高度为1,2023个节点的三叉树高度至少为()。
A.6 
B.7 
C.8 
D.9

点击显示答案 答案:C

三叉树每层最多3(k-1)个节点。高度h的满三叉树最多(3h-1)/2个节点。(37-1)/2=1093<2023,(38-1)/2=3280>2023,所以至少8层。


2023-11 前序遍历ABDECFG,中序遍历DEBACFG,后序遍历结果是()。
A.EDBGFCA 
B.EDGBFCA 
C.DEBGFCA 
D.DBEGFCA

点击显示答案 答案:A

前序第一个A是根,中序中A左边DEB是左子树,右边CFG是右子树。递归构建得后序遍历为EDBGFCA。


2024-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

前序A是根,中序DBE在A左侧(左子树),FCG在A右侧(右子树)。

  • 左子树前序BDE,中序DBE → B是根,D是左孩子,E是右孩子
  • 右子树前序CFG,中序FCG → C是根,F是左孩子,G是右孩子
    后序遍历顺序:左子树→右子树→根,即D,E,B,F,G,C,A。

2025-14 完全二叉树叶子节点数问题:1000个节点的完全二叉树,叶子节点数为()。
A.250 
B.501 
C.500 
D.499

点击显示答案 答案:C

完全二叉树叶子节点数 = ⌈n/2⌉ = ⌈1000/2⌉ = 500。


4.4 图论基础

2020-8 10个顶点的无向图至少应有()条边才能确保是连通图。
A.9 
B.10 
C.11 
D.12

点击显示答案 答案:A

n个顶点的连通图至少需要n-1条边(形成一棵树)。10个顶点至少需要9条边。


2021-6 n个顶点、m条边的无向连通图(m>n),需删掉()条边才能成为树。
A.n-1 
B.m-n 
C.m-n-1 
D.m-n+1

点击显示答案 答案:D

树有n-1条边,现有m条边,需要删掉 m-(n-1) = m-n+1 条边,就能得到一棵树。


2021-14 以a为起点深度优先遍历,b,c,d,e中可能作为最后一个遍历到的点个数()。
A.1 
B.2 
C.3 
D.4

点击显示答案 答案:B

DFS最后一个访问的点取决于图的连接关系和遍历顺序,通过分析图结构,b,c,d,e中只有2个点可能作为最后一个。


2022-9 N个顶点的有向连通图,邻接矩阵至少存在()个非零元素。
A.N-1 
B.N 
C.N+1 
D.N²

点击显示答案 答案:B

有向强连通图至少需要N条边(形成一个有向环:1→2→3→...→N→1),邻接矩阵至少N个非零元素。


2023-12 有向无环图含4条边:(1,2),(1,3),(2,4),(3,4),有效拓扑排序是()。
A.4,2,3,1 
B.1,2,3,4 
C.1,2,4,3 
D.2,1,3,4

点击显示答案 答案:B

拓扑排序要求对每条边(u,v),u必须排在v前面。1在2和3前面,2和3在4前面,因此1,2,3,4是合法的拓扑排序。


2024-11 无向图中,所有顶点的度数之和等于()。
A.图的边数 
B.图的边数的两倍 
C.图的顶点数 
D.图的顶点数的两倍

点击显示答案 答案:B

无向图每条边连接两个顶点,为每个顶点贡献1度,所以所有顶点度数之和 = 2×边数。这是图论中的"握手定理"。


2025-5 有向图入度与出度关系问题:以下正确的是()。
A.入度之和=出度之和=顶点数
B.入度之和=出度之和=边数
C.入度之和≠出度之和
D.入度之和=顶点数-1

点击显示答案 答案:B

有向图每条边贡献一个入度和一个出度,所以所有顶点入度之和 = 出度之和 = 边数。


4.5 哈夫曼树/编码

2021-11 哈夫曼编码本质上是一种()策略。
A.枚举 
B.贪心 
C.递归 
D.动态规划

点击显示答案 答案:B

哈夫曼编码每次选取两个权值最小的节点合并,是典型的贪心策略。贪心算法的特点是每一步都做局部最优选择,最终得到全局最优解。


2022-7 字母{a,b,c,d,e}频率10%,15%,30%,16%,29%,哈夫曼编码中d的编码长度为()位。
A.1 
B.2 
C.2或3 
D.3

点击显示答案 答案:B

构造哈夫曼树:10+15=25, 16+25=41, 29+30=59, 41+59=100。d(16%)在第二层,编码长度为2位。


2023-10 字符{a,b,c,d,e,f}频率5%,9%,12%,13%,16%,45%,哈夫曼编码是()。
A.1111,1110,101,100,110,0
B.1010,1001,1000,011,010,00
C.000,001,010,011,10,11
D.1010,1011,110,111,00,01

点击显示答案 答案:A

频率越高编码越短:f(45%)编码最短为0(1位),e(16%)编码110(3位),d(13%)编码100(3位),c(12%)编码101(3位),b(9%)编码1110(4位),a(5%)编码1111(4位)。


2025-4 哈夫曼树带权路径长度问题:叶子节点权值10,12,15,20,25,WPL为()。
A.180 
B.186 
C.192 
D.200

点击显示答案 答案:B

构造哈夫曼树过程:10+12=22, 15+20=35, 22+25=47, 35+47=82。
WPL = 10×3 + 12×3 + 15×2 + 20×2 + 25×2 = 30+36+30+40+50 = 186。


五、算法基础

5.1 排序算法

2020-5 冒泡排序算法,n个数最少需要比较多少次?
A.n² 
B.n-2 
C.n-1 
D.n

点击显示答案 答案:C

冒泡排序最好情况(数组已经有序)只需进行1轮,比较n-1次,发现无交换后提前结束。


2022-12 以下排序算法说法错误的是()。
A.冒泡排序稳定 
B.简单选择排序稳定 
C.简单插入排序稳定 
D.归并排序稳定

点击显示答案 答案:B

简单选择排序不稳定。例如序列[5,5,2],第一轮选最小元素2与第一个5交换,两个5的相对顺序就被改变了。冒泡、插入、归并排序都是稳定的。


2025-12 冒泡排序交换次数问题:对数组[6,1,5,2,4]进行冒泡排序,总交换次数为()。
A.4 
B.6 
C.8 
D.10

点击显示答案 答案:B

模拟冒泡排序过程:

  • 第1轮:6分别与1、5、2、4交换4次 → [1,5,2,4,6]
  • 第2轮:5分别与2、4交换2次 → [1,2,4,5,6]
  • 第3、4轮:已有序,无交换
    总交换次数 = 4+2 = 6次。

5.2 查找算法

2019-5 100个已排好序数据,折半查找最大比较次数为()。
A.7 
B.10 
C.6 
D.8

点击显示答案 答案:A

二分查找最大比较次数 = ⌈log₂(n+1)⌉ = ⌈log₂101⌉ = 7(因为2^7=128>100)。


2024-9 有序表1000个元素,二分法查找最多需要比较()次。
A.25 
B.10 
C.7 
D.1

点击显示答案 答案:B

⌈log₂1001⌉ = 10(因为2^10=1024>1000),最多比较10次。


5.3 递归算法

2020-6 递归算法XYZ(), 输出是()。

XYZ(A[1..n]):
  if n=1 return A[1]; 
  else temp=XYZ(A[1..n-1]); 
  if temp<A[n] return temp;
  else return A[n];

A.平均值 
B.最小值 
C.中值 
D.最大值

点击显示答案 答案:B

递归过程:每次将前n-1个的结果与A[n]比较,返回较小值。最终返回整个数组的最小值。


2021-4 以比较为基本运算,N个数中找最大数,最坏情况最少比较次数()。
A.N² 
B.N 
C.N-1 
D.N+1

点击显示答案 答案:C

N个数找最大值,每个数(除第一个外)至少需要比较一次才能确定不是最大值,共N-1次比较。


2021-13 递归算法,solve(7)=()。

solve(n):
  if n<=1 return 1; 
  else if n>=5 return n*solve(n-2); 
  else return n*solve(n-1);

A.105 
B.840 
C.210 
D.420

点击显示答案 答案:C

solve(7) = 7×solve(5)
solve(5) = 5×solve(3)
solve(3) = 3×solve(2)
solve(2) = 2×solve(1) = 2×1 = 2
回代:solve(3)=3×2=6, solve(5)=5×6=30, solve(7)=7×30=210。


2022-15 以下对递归方法描述正确的是()。
A.递归是允许使用多组参数调用函数
B.递归是通过调用自身来求解问题
C.递归是面向对象编程模型
D.递归是将高级语言转换为机器代码

点击显示答案 答案:B

递归的核心特征是函数在定义中调用自身,将大问题分解为规模更小的同类子问题来求解。


2025-3 递归函数,calc(5)=()。

calc(n):
  n≤1返回1;
  偶数返回 calc(n/2)+1;
  奇数返回 calc(n-1)+calc(n-2)。

A.5 
B.6 
C.7 
D.8

点击显示答案 答案:B

从底向上计算:

  • calc(1)=1
  • calc(2)=calc(1)+1=2
  • calc(3)=calc(2)+calc(1)=2+1=3
  • calc(4)=calc(2)+1=2+1=3
  • calc(5)=calc(4)+calc(3)=3+3=6

2025-8 递推序列周期问题:f[0]=1,f[1]=1,f[n]=(f[n-1]+f[n-2])%7,f[2025]=()。
A.1 
B.2 
C.5 
D.6

点击显示答案 答案:D

先写出前若干项找周期:
f[0]=1, f[1]=1, f[2]=2, f[3]=3, f[4]=5, f[5]=1, f[6]=6, f[7]=0,
f[8]=6, f[9]=6, f[10]=5, f[11]=4, f[12]=2, f[13]=6, f[14]=1, f[15]=0,
f[16]=1, f[17]=1...
可以看到从f[0]开始周期为16。
2025 ÷ 16 = 126余9,f[9]=6。


5.4 程序段功能分析

2019-4 程序段:s=a; for(b=1;b<=c;b++) s=s-1; 等价的赋值语句是()。
A.s=a-c 
B.s=a-b 
C.s=s-c 
D.s=b-c

点击显示答案 答案:A

循环执行c次,每次s减1,总共减c,等价于s=a-c。


六、数学知识

6.1 组合与排列

2019-7 8个同样的球放在5个同样的袋子里,允许空袋,多少种分法?
A.22 
B.24 
C.18 
D.20

点击显示答案 答案:C

整数分拆问题:将8拆分成最多5个非负整数之和(不计顺序)。枚举所有分法,共18种。


2019-13 5位数字车牌,倒过来仍是原车牌,最多多少个?(0,1,8颠倒不变,6↔9)
A.60 
B.125 
C.75 
D.100

点击显示答案 答案:C

5位车牌关于中心对称,形式为xyzyx:

  • 中间z可以是0,1,8 → 3种选择
  • 第二位y可以是0,1,8,6,9 → 5种选择
  • 第一位x可以是0,1,8,6,9 → 5种选择
    共 3×5×5 = 75种。

2020-10 5个小朋友排队,2个双胞胎必须相邻,多少种排列?
A.48 
B.36 
C.24 
D.72

点击显示答案 答案:A

捆绑法:双胞胎视为1个人,共4个"单位"排列,有4!=24种;双胞胎内部有2!=2种排列。共24×2=48种。


2020-14 10个三好学生名额分配到7个班级,每班至少1个,多少种方案?
A.84 
B.72 
C.56 
D.504

点击显示答案 答案:A

插板法:10个名额之间有9个空隙,插6块板分成7份,C(9,6)=C(9,3)=84种。


2020-15 5副不同颜色手套(10只),取6只恰好配成2副,多少种取法?
A.120 
B.180 
C.150 
D.30

点击显示答案 答案:A
  • 先选2副完整配对:C(5,2)=10种
  • 再从剩下3副中选2只不同副(不能配成第三副):C(3,2)×2×2=12种
    共10×12=120种。

2021-10 6个人两人一队组成三队,不区分队伍编号,多少种组队?
A.10 
B.15 
C.30 
D.20

点击显示答案 答案:B

6人分3队每队2人:C(6,2)×C(4,2)×C(2,2) = 15×6×1 = 90,因为队伍无编号,除以3!=6,90÷6=15种。


2021-12 由1,1,2,2,3组成不同三位数有()种。
A.18 
B.15 
C.12 
D.24

点击显示答案 答案:A

分类讨论:

  • 三个数字全不同(1,2,3):3!=6种
  • 有两个1:C(3,2)×2=6种(选2个位置放1,剩下位置放2或3)
  • 有两个2:C(3,2)×2=6种
    共6+6+6=18种。

2021-15 4人过河,船最多坐2人,过河时间1,2,4,8,两人时间为较大者,最短时间()。
A.14 
B.15 
C.16 
D.17

点击显示答案 答案:B

经典过河问题,最优策略(最快的人来回送):
1和2过河(2分钟),1回来(1分钟),4和8过河(8分钟),2回来(2分钟),1和2过河(2分钟)。
总时间:2+1+8+2+2=15分钟。


2022-14 字符串abcab有多少个内容互不相同的子串?
A.12 
B.13 
C.14 
D.15

点击显示答案 答案:B

枚举所有子串:长度1有a,b,c(去重3个);长度2有ab,bc,ca(3个);长度3有abc,bca,cab(3个);长度4有abca,bcab(2个);长度5有abcab(1个);还有单个字符a,b,c,去重后共13个不同子串。


2023-6 7个空闲时间段,选至少一个练习唱歌,任意两个练习时间段间至少休息2个,多少种方案?
A.31 
B.18 
C.21 
D.33

点击显示答案 答案:B

设选k个时间段,需要2(k-1)个休息间隔,总占用k+2(k-1)=3k-2≤7,所以k≤3。

  • k=1:C(7,1)=7种
  • k=2:插空法,C(5,2)=10种
  • k=3:C(3,3)=1种
    共7+10+1=18种。

2023-14 班级10男12女,选3人小组至少1女,多少种组合?
A.1420 
B.1770 
C.1540 
D.2200

点击显示答案 答案:A

总选法C(22,3)=1540种,全男C(10,3)=120种,至少1女 = 1540-120=1420种。


2024-3 公司10名员工分3部门(4,3,3),选4人组成工作组每部门至少1人,多少种方式?
A.120 
B.126 
C.132 
D.238

点击显示答案 答案:B

分类讨论:

  • A部门2人,B、C各1人:C(4,2)×C(3,1)×C(3,1)=54
  • B部门2人,A、C各1人:C(4,1)×C(3,2)×C(3,1)=36
  • C部门2人,A、B各1人:C(4,1)×C(3,1)×C(3,2)=36
    共54+36+36=126种。

2024-14 5男3女生站一排,3女生必须相邻,多少种排列?
A.4320 
B.5040 
C.3600 
D.2880

点击显示答案 答案:A

捆绑法:3女生视为1人,共6个单位排列,6!=720;女生内部3!=6种排列。共720×6=4320种。


2025-6 组合数计算:9人(5男4女)选4人,至少1男1女,多少种选法?
A.120 
B.125 
C.120 
D.126

点击显示答案 答案:C(即120)

总选法C(9,4)=126种,全男C(5,4)=5种,全女C(4,4)=1种,至少1男1女 = 126-5-1=120种。


2025-11 路径组合数:从(1,1)到(4,5),只能向右或向下,多少条路径?
A.30 
B.35 
C.40 
D.42

点击显示答案 答案:B

从(1,1)到(4,5)需要向右走3步,向下走4步,共7步,选3步向右(其余向下):C(7,3)=35条路径。


6.2 抽屉原理(鸽巢原理)

2019-12 52张牌(4花色各13张),随机抽13张,至少()张花色一致。
A.4 
B.2 
C.3 
D.5

点击显示答案 答案:A

抽屉原理:13张牌分到4种花色,⌈13/4⌉=4,至少4张牌花色相同。


6.3 素数与最大公约数

2019-9 100以内最大的素数是()。
A.89 
B.97 
C.91 
D.93

点击显示答案 答案:B

100以内的素数中最大的是97。注意91=7×13,93=3×31,都不是素数。


2019-10 319和377的最大公约数是()。
A.27 
B.33 
C.29 
D.31

点击显示答案 答案:C

辗转相除法:377÷319=1余58,319÷58=5余29,58÷29=2余0。GCD=29。


6.4 逻辑运算

2020-3(重复) 设x=true,y=true,z=false,以下逻辑运算表达式值为真的是()。
A.(y∨z)∧x∧z 
B.x∧(z∨y)∧z 
C.(x∧y)∧z 
D.(x∧y)∨(z∨x)

点击显示答案 答案:D

参见3.4节2020-3题解析。这道题在多个知识点下出现,说明逻辑运算既是语言基础也是数学基础。


6.5 数论与递推

2020-13 干支纪年法,1949年的天干地支是()。
A.己酉 B.己亥 C.己丑 D.己卯

点击显示答案 答案:C

1949年天干:1949÷10=194余9,第9位天干为"己";
1949年地支:1949÷12=162余5,第5位地支为"丑"。
所以1949年是己丑年。


七、优化与策略问题

2019-11 小胖减肥:方案一3公里300千卡(半小时),方案二5公里600千卡(1小时)。周一到周四半小时,周五到周日1小时。每周最多21公里。每周最多消耗多少千卡?
A.3000 
B.2500 
C.2400 
D.2520

点击显示答案 答案:C

设方案一做x次(每次0.5小时、3公里、300千卡),方案二做y次(每次1小时、5公里、600千卡)。
约束条件:0.5x≤4(周一到四共4个半小时时间段),y≤3(周五到日共3个1小时时间段),3x+5y≤21(总路程不超过21公里)。
目标最大化 300x+600y。
枚举y=3时,3x≤6→x≤2,消耗300×2+600×3=600+1800=2400千卡。
y=2时,3x≤11→x≤3,消耗300×3+600×2=900+1200=2100千卡。
最优解为2400千卡。


知识点分布统计(2019-2025)


高频考点TOP10

  1. 组合排列(出现14次)— 捆绑法、插空法、分类讨论、正难则反
  2. 进制转换与位运算(出现9次)— 二、八、十六进制互转,与或非异或
  3. 二叉树遍历与性质(出现9次)— 前序、中序、后序互推,完全二叉树性质
  4. C++语法基础(出现8次)— 数据类型、关键字、循环语句、指针引用
  5. 栈与队列(出现7次)— 出栈序列合法性、栈容量计算
  6. 图论基础(出现7次)— 连通图边数、度数之和、拓扑排序
  7. 递归与递推(出现6次)— 递归函数分析、递推周期
  8. IP地址与网络基础(出现4次)— IP地址合法性、TCP/IP分层、域名(新增热点)
  9. 哈夫曼编码(出现4次)— 构造方法、WPL计算
  10. 排序算法(出现3次)— 稳定性、比较次数、交换次数

IP地址考点速记卡

IPv4地址核心知识点

格式要求:

  • 由4个十进制数字组成,用英文点号 . 分隔
  • 每段数字范围是 0~255(一个字节,8位)
  • 例如:192.168.1.1 是合法地址

地址分类:

  • A类:1.0.0.0 ~ 126.255.255.255(第一个字节为网络号)
  • B类:128.0.0.0 ~ 191.255.255.255(前两个字节为网络号)
  • C类:192.0.0.0 ~ 223.255.255.255(前三个字节为网络号)
  • D类:224.0.0.0 ~ 239.255.255.255(组播地址,不能分配给主机)
  • E类:240.0.0.0 ~ 255.255.255.255(保留实验用)

特殊地址(不能分配给主机):

  • 0.0.0.0:表示"所有网络"或"未指定地址"
  • 127.0.0.1:回环地址,用于本机测试
  • 255.255.255.255:广播地址
  • 私有地址:10.x.x.x、172.16-31.x.x、192.168.x.x

TCP/IP协议分层:

  • 网络层:IP协议(负责寻址和路由)
  • 传输层:TCP(可靠连接)、UDP(不可靠但快速)
  • 应用层:HTTP、FTP、DNS等

备考建议

按优先级复习

第一梯队(必考,每年出现):

  • 二叉树遍历与性质(前中后序互推、完全二叉树)
  • 进制转换与位运算
  • 栈与队列操作(出栈序列)
  • 组合排列计算

第二梯队(高频,隔年出现):

  • C++语法基础(数据类型、指针引用、运算符)
  • 图论基础概念(连通性、度数、拓扑排序)
  • IP地址与网络基础(近年新热点,务必掌握)

第三梯队(中频,需掌握):

  • 排序算法稳定性
  • 递归函数分析
  • 哈夫曼编码
  • 二分查找比较次数
posted @ 2026-09-18 14:54  费先生  阅读(74)  评论(0)    收藏  举报