计算机程序设计 · 2021 年真题(选项拆解 + 解析)
类型:公开资料抽取 + 逐题拆解(B 级)| 满分 200 · 150 分钟 边界:回忆版 / 公开整理,非考试院原卷 PDF 镜像;个别措辞以正版真题册为准。见 00-资料来源与使用说明 本地原文件:
资料/计算机真题原卷/2021.docx/2021.txt优先对照:2024 全量详解 · 2022 · 2023
试卷结构
| 题型 | 题量 | 分值 |
|---|---|---|
| 一、单项选择 | 20 | 60 |
| 二、判断 | 10 | 20 |
| 三、填空 | 5 | 20 |
| 四、简答 | 4 | 40 |
| 五、计算/读程 | 3 | 30 |
| 六、应用编程 | 3 | 30 |
一、单项选择题(每题 3 分,共 60 分)
1. 已知整型 a=2, b=3,求 !a || b 的值( )
A. 0 B. 1 C. 2 D. 3 答案:B · 考点 1.2 数据的存储与运算解析:!a → !2 → 0(逻辑非);0 || 3 → 真 → 1(逻辑或结果为 0/1)。
2. 当 a 为奇数时为真、偶数为假,不能满足需求的是( )
A. a%2==1 B. !(a%2) C. !(a%2==0) D. (a%2)&&(a%2>0)答案:B · 考点 1.2 数据的存储与运算解析:a%2 奇=1 偶=0;!(a%2) 对奇数得 0(假),需求相反。
3. int a=1,b=4,c; c=a/b; 结束后 c 的值( )
A. 1 B. 0.25 C. 0 D. 44200 答案:C · 考点 1.2 数据的存储与运算解析:整除 1/4=0。
4. 将两个字符串链接成一个,可选用( )
A. strcat() B. strcpy() C. strlen() D. strcmp()答案:A · 考点 1.6 数组 / 串 解析:strcat 连接;strcpy 复制;strlen 长度;strcmp 比较。
5. 下列说法错误的是( )
A. 被调函数可以不用 return B. 被调函数可出现多个 return C. 有返回值就一定要有 return D. 一个 return 可返回多个值给调用函数 答案:D · 考点 1.7 函数解析:一次 return 只能返回一个值(可用指针/结构体间接带回多值)。
6. 指针变量 p 不能初始化为( )
A. 地址 B. NULL C. 0 D. 1答案:D · 考点 1.8 指针解析:1 不是合法地址/NULL 语义。
7. 下列函数声明正确的是( )
A. void f(x,y); B. f(int x, int y); C. void f(int,int); D. void f(int x, y);答案:C · 考点 1.7 函数解析:声明中形参类型不可省;可只写类型。A 缺类型;B 缺返回类型(旧式不规范);D 第二个形参缺类型。
8. 能作为输入文件名的字符串常量是( )
A. c:user\text.txt B. c\user\text.txt C. "c\user\text.txt " D. "c\\user\\text.txt"答案:D · 考点 1.10 文件操作解析:路径字符串需双引号;Windows 路径 \ 在字符串中写作 \\。
9. 两有序表 n、m 个元素(n≤m)归并,最少比较次数( )
A. n B. m C. n-1 D. m+n 答案:A · 考点 2.2 线性表 / 归并 解析:短表元素依次与长表比较插入,最少约 n 次比较。
10. 非空循环单链表 head,尾结点 p 满足( )
A. p->next==NULL B. p==NULL C. p->next==head D. p==head答案:C · 考点 2.2 线性表解析:循环链表尾后继指向头(OCR 中 pext 即 next)。
11. 叶子权 {3,7,11,8,9,12} 构造哈夫曼树,高度是( )
A. 3 B. 4 C. 1 D. 2 答案:B · 考点 2.5 树和二叉树解析:哈夫曼逐步合并,该权集高度一般为 4(回忆共识)。
12. 表 {3,12,24,46,10,20},H(k)=k%9,散列地址为 0 的元素个数(原文缺选项 A)
余数:3,3,6,1,1,2 → 地址 0 的个数为 0;若问某常见地址,按表重算。 考点 2.7 查找
13. 适用于折半查找的是( )
A. 链式无序 B. 链式有序 C. 顺序无序 D. 顺序有序 答案:D · 考点 2.7 查找
14. 串 s="software" 子串数目(含空串)( )
A. 38 B. 35 C. 36 D. 37 答案:D · 考点 2.4 串解析:长度 n=8,子串数
15. 与数据存储无关的是( )
A. 顺序表 B. 链表 C. 散列表 D. 队列 答案:D · 考点 2.1 数据结构基本概念解析:队列是逻辑结构;A/B/C 是存储结构(或具体实现)。
16. 对新算法作性能分析的主要目的是( )
A. 找合理数据结构 B. 研究输入实例 C. 分析效率以求改进 D. 考量易懂易读 答案:C · 考点 2.9 算法基本概念与分析
17. 数据结构在计算机内存中的表示是指( )
A. 数据结构 B. 逻辑结构 C. 存储结构 D. 数据元素关系 答案:C · 考点 2.1 数据结构基本概念
18. 十进制 630 的二进制是( )
A. 1001110000 B. 1001110110 C. 1010110100 D. 1010100111 答案:B · 考点 进制 解析:630=512+118;118=64+54;… 得 1001110110。
19. 单链表 a 是 b 的前驱,在 a、b 间插入 c,应执行( )
A. c->link=b->link; b->link=c; B. b->link=c; c->link=a; C. b->link=c->link; c->link=a; D. a->link=c; c->link=b;答案:D · 考点 2.2 线性表
20. 递归算法实现一般需利用( )
A. 队列 B. 栈 C. 循环链表 D. 双向链表 答案:B · 考点 2.3 栈和队列
二、判断题(每题 2 分)
| 题 | 命题 | 答案 |
|---|---|---|
| 21 | 一个 C 程序里有且仅有一个 main | √ |
| 22 | 字符串 "a" 在内存中占 1 个字符 | ×(含 \0 占 2) |
| 23 | 指针变量不可以为函数参数 | × |
| 24 | 定义函数可有 0 个或多个形参 | √ |
| 25 | 全局变量必须定义在文件开头 | × |
| 26 | 二叉树每个叶子都有 2 个叶子 | ×(表述混乱,错) |
| 27 | 冒泡排序时间复杂度是 O(n) | ×(一般 O(n²)) |
| 28 | 队列只在队首删、队尾插 | √ |
| 29 | 无向/有向图区别在于顶点对无序/有序 | √ |
| 30 | 快速排序是不稳定排序 | √ |
三、填空题
- 三种基本结构:顺序、选择、循环(重复)
b=(int)(a/9)%4,a=28→b=3(28/9=3.11…→3,3%4=3)- 打开文件用
fopen - 高度 h 的树至少有 h+1 个结点(单支)
- 入栈 6,7,8,9,10,合法出栈之一示例:6,7,8,9,10 或 10,9,8,7,6 等(题干常要求写出一种合法序列)
四、简答题要点
- 数据结构:相互之间存在一种或多种特定关系的数据元素的集合;数据类型:一组值的集合及定义在该集合上的一组操作。
- 算法特点:有穷、确定、可行、有输入、有输出;算法 vs 程序:算法强调步骤,程序是实现且可依赖具体语言/OS。
- 指针:地址;指针变量:存放地址的变量;关系:指针变量的值是指针。
- 二叉树五种形态:空;仅根;根+左;根+右;根+左右。
五、计算 / 读程
40. fun 求各位数字之和
(1) 功能:求十进制各位数字和 (2) 结果取决于输入;如输入 123 则输出 6
41. 指针 + switch 读程
int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;
for(j=4;j>0;j--) {
switch(j) {
case 1: case 2: printf("%d",*p); break;
case 3: printf("%d",*(--p));
case 4: printf("%d",*(--p));
}
}(1) 循环 4 次(j=4,3,2,1) (2) 注意 case3 贯穿 case4;逐步模拟输出(回忆版答案以本地演算为准)
42. 无向图邻接矩阵(按图作答,图见原卷)
六、应用题
43. 交换 a、b 并输出较大值
思路:指针/引用交换 + 比较输出
void swap(int *x, int *y) { int t=*x; *x=*y; *y=t; }
// main 中 scanf 后 swap(&a,&b); printf("%d", a>b?a:b);44. 剔除非数字字符输出
遍历字符串,isdigit(c) 则 putchar(c)。
45. Prim 最小生成树(以结点 1 为起点,过程见原图)
回炉
- 原卷 PDF
- 2024 · 考点拆分 · 系统笔记 1.1–2.9
返回:_索引 · 总索引